// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: cmvr/api/geometry.proto

package cmvr.api;

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

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  public interface Vec2OrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.api.Vec2)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>double x = 1;</code>
     * @return The x.
     */
    double getX();

    /**
     * <code>double y = 2;</code>
     * @return The y.
     */
    double getY();
  }
  /**
   * Protobuf type {@code cmvr.api.Vec2}
   */
  public static final class Vec2 extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.api.Vec2)
      Vec2OrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Vec2.newBuilder() to construct.
    private Vec2(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Vec2() {
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.api.Geometry.internal_static_cmvr_api_Vec2_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.api.Geometry.internal_static_cmvr_api_Vec2_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.api.Geometry.Vec2.class, cmvr.api.Geometry.Vec2.Builder.class);
    }

    public static final int X_FIELD_NUMBER = 1;
    private double x_;
    /**
     * <code>double x = 1;</code>
     * @return The x.
     */
    @java.lang.Override
    public double getX() {
      return x_;
    }

    public static final int Y_FIELD_NUMBER = 2;
    private double y_;
    /**
     * <code>double y = 2;</code>
     * @return The y.
     */
    @java.lang.Override
    public double getY() {
      return y_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (java.lang.Double.doubleToRawLongBits(x_) != 0) {
        output.writeDouble(1, x_);
      }
      if (java.lang.Double.doubleToRawLongBits(y_) != 0) {
        output.writeDouble(2, y_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (java.lang.Double.doubleToRawLongBits(x_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(1, x_);
      }
      if (java.lang.Double.doubleToRawLongBits(y_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(2, y_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.api.Geometry.Vec2)) {
        return super.equals(obj);
      }
      cmvr.api.Geometry.Vec2 other = (cmvr.api.Geometry.Vec2) obj;

      if (java.lang.Double.doubleToLongBits(getX())
          != java.lang.Double.doubleToLongBits(
              other.getX())) return false;
      if (java.lang.Double.doubleToLongBits(getY())
          != java.lang.Double.doubleToLongBits(
              other.getY())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + X_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getX()));
      hash = (37 * hash) + Y_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getY()));
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.api.Geometry.Vec2 parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.Vec2 parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.Vec2 parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.Vec2 parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.Vec2 parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.Vec2 parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.Vec2 parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.Vec2 parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.api.Geometry.Vec2 parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.Vec2 parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.api.Geometry.Vec2 parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.Vec2 parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.api.Geometry.Vec2 prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code cmvr.api.Vec2}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.api.Vec2)
        cmvr.api.Geometry.Vec2OrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.api.Geometry.internal_static_cmvr_api_Vec2_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.api.Geometry.internal_static_cmvr_api_Vec2_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.api.Geometry.Vec2.class, cmvr.api.Geometry.Vec2.Builder.class);
      }

      // Construct using cmvr.api.Geometry.Vec2.newBuilder()
      private Builder() {

      }

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

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        x_ = 0D;

        y_ = 0D;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.api.Geometry.internal_static_cmvr_api_Vec2_descriptor;
      }

      @java.lang.Override
      public cmvr.api.Geometry.Vec2 getDefaultInstanceForType() {
        return cmvr.api.Geometry.Vec2.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.api.Geometry.Vec2 build() {
        cmvr.api.Geometry.Vec2 result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.api.Geometry.Vec2 buildPartial() {
        cmvr.api.Geometry.Vec2 result = new cmvr.api.Geometry.Vec2(this);
        result.x_ = x_;
        result.y_ = y_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(cmvr.api.Geometry.Vec2 other) {
        if (other == cmvr.api.Geometry.Vec2.getDefaultInstance()) return this;
        if (other.getX() != 0D) {
          setX(other.getX());
        }
        if (other.getY() != 0D) {
          setY(other.getY());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 9: {
                x_ = input.readDouble();

                break;
              } // case 9
              case 17: {
                y_ = input.readDouble();

                break;
              } // case 17
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private double x_ ;
      /**
       * <code>double x = 1;</code>
       * @return The x.
       */
      @java.lang.Override
      public double getX() {
        return x_;
      }
      /**
       * <code>double x = 1;</code>
       * @param value The x to set.
       * @return This builder for chaining.
       */
      public Builder setX(double value) {
        
        x_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double x = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearX() {
        
        x_ = 0D;
        onChanged();
        return this;
      }

      private double y_ ;
      /**
       * <code>double y = 2;</code>
       * @return The y.
       */
      @java.lang.Override
      public double getY() {
        return y_;
      }
      /**
       * <code>double y = 2;</code>
       * @param value The y to set.
       * @return This builder for chaining.
       */
      public Builder setY(double value) {
        
        y_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double y = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearY() {
        
        y_ = 0D;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:cmvr.api.Vec2)
    }

    // @@protoc_insertion_point(class_scope:cmvr.api.Vec2)
    private static final cmvr.api.Geometry.Vec2 DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.api.Geometry.Vec2();
    }

    public static cmvr.api.Geometry.Vec2 getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public cmvr.api.Geometry.Vec2 getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface Vec3OrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.api.Vec3)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>double x = 1;</code>
     * @return The x.
     */
    double getX();

    /**
     * <code>double y = 2;</code>
     * @return The y.
     */
    double getY();

    /**
     * <code>double z = 3;</code>
     * @return The z.
     */
    double getZ();
  }
  /**
   * Protobuf type {@code cmvr.api.Vec3}
   */
  public static final class Vec3 extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.api.Vec3)
      Vec3OrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Vec3.newBuilder() to construct.
    private Vec3(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Vec3() {
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.api.Geometry.internal_static_cmvr_api_Vec3_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.api.Geometry.internal_static_cmvr_api_Vec3_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.api.Geometry.Vec3.class, cmvr.api.Geometry.Vec3.Builder.class);
    }

    public static final int X_FIELD_NUMBER = 1;
    private double x_;
    /**
     * <code>double x = 1;</code>
     * @return The x.
     */
    @java.lang.Override
    public double getX() {
      return x_;
    }

    public static final int Y_FIELD_NUMBER = 2;
    private double y_;
    /**
     * <code>double y = 2;</code>
     * @return The y.
     */
    @java.lang.Override
    public double getY() {
      return y_;
    }

    public static final int Z_FIELD_NUMBER = 3;
    private double z_;
    /**
     * <code>double z = 3;</code>
     * @return The z.
     */
    @java.lang.Override
    public double getZ() {
      return z_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (java.lang.Double.doubleToRawLongBits(x_) != 0) {
        output.writeDouble(1, x_);
      }
      if (java.lang.Double.doubleToRawLongBits(y_) != 0) {
        output.writeDouble(2, y_);
      }
      if (java.lang.Double.doubleToRawLongBits(z_) != 0) {
        output.writeDouble(3, z_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (java.lang.Double.doubleToRawLongBits(x_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(1, x_);
      }
      if (java.lang.Double.doubleToRawLongBits(y_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(2, y_);
      }
      if (java.lang.Double.doubleToRawLongBits(z_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, z_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.api.Geometry.Vec3)) {
        return super.equals(obj);
      }
      cmvr.api.Geometry.Vec3 other = (cmvr.api.Geometry.Vec3) obj;

      if (java.lang.Double.doubleToLongBits(getX())
          != java.lang.Double.doubleToLongBits(
              other.getX())) return false;
      if (java.lang.Double.doubleToLongBits(getY())
          != java.lang.Double.doubleToLongBits(
              other.getY())) return false;
      if (java.lang.Double.doubleToLongBits(getZ())
          != java.lang.Double.doubleToLongBits(
              other.getZ())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + X_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getX()));
      hash = (37 * hash) + Y_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getY()));
      hash = (37 * hash) + Z_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getZ()));
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.api.Geometry.Vec3 parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.Vec3 parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.Vec3 parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.Vec3 parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.Vec3 parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.Vec3 parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.Vec3 parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.Vec3 parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.api.Geometry.Vec3 parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.Vec3 parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.api.Geometry.Vec3 parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.Vec3 parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.api.Geometry.Vec3 prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code cmvr.api.Vec3}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.api.Vec3)
        cmvr.api.Geometry.Vec3OrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.api.Geometry.internal_static_cmvr_api_Vec3_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.api.Geometry.internal_static_cmvr_api_Vec3_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.api.Geometry.Vec3.class, cmvr.api.Geometry.Vec3.Builder.class);
      }

      // Construct using cmvr.api.Geometry.Vec3.newBuilder()
      private Builder() {

      }

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

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        x_ = 0D;

        y_ = 0D;

        z_ = 0D;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.api.Geometry.internal_static_cmvr_api_Vec3_descriptor;
      }

      @java.lang.Override
      public cmvr.api.Geometry.Vec3 getDefaultInstanceForType() {
        return cmvr.api.Geometry.Vec3.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.api.Geometry.Vec3 build() {
        cmvr.api.Geometry.Vec3 result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.api.Geometry.Vec3 buildPartial() {
        cmvr.api.Geometry.Vec3 result = new cmvr.api.Geometry.Vec3(this);
        result.x_ = x_;
        result.y_ = y_;
        result.z_ = z_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(cmvr.api.Geometry.Vec3 other) {
        if (other == cmvr.api.Geometry.Vec3.getDefaultInstance()) return this;
        if (other.getX() != 0D) {
          setX(other.getX());
        }
        if (other.getY() != 0D) {
          setY(other.getY());
        }
        if (other.getZ() != 0D) {
          setZ(other.getZ());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 9: {
                x_ = input.readDouble();

                break;
              } // case 9
              case 17: {
                y_ = input.readDouble();

                break;
              } // case 17
              case 25: {
                z_ = input.readDouble();

                break;
              } // case 25
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private double x_ ;
      /**
       * <code>double x = 1;</code>
       * @return The x.
       */
      @java.lang.Override
      public double getX() {
        return x_;
      }
      /**
       * <code>double x = 1;</code>
       * @param value The x to set.
       * @return This builder for chaining.
       */
      public Builder setX(double value) {
        
        x_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double x = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearX() {
        
        x_ = 0D;
        onChanged();
        return this;
      }

      private double y_ ;
      /**
       * <code>double y = 2;</code>
       * @return The y.
       */
      @java.lang.Override
      public double getY() {
        return y_;
      }
      /**
       * <code>double y = 2;</code>
       * @param value The y to set.
       * @return This builder for chaining.
       */
      public Builder setY(double value) {
        
        y_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double y = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearY() {
        
        y_ = 0D;
        onChanged();
        return this;
      }

      private double z_ ;
      /**
       * <code>double z = 3;</code>
       * @return The z.
       */
      @java.lang.Override
      public double getZ() {
        return z_;
      }
      /**
       * <code>double z = 3;</code>
       * @param value The z to set.
       * @return This builder for chaining.
       */
      public Builder setZ(double value) {
        
        z_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double z = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearZ() {
        
        z_ = 0D;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:cmvr.api.Vec3)
    }

    // @@protoc_insertion_point(class_scope:cmvr.api.Vec3)
    private static final cmvr.api.Geometry.Vec3 DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.api.Geometry.Vec3();
    }

    public static cmvr.api.Geometry.Vec3 getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public cmvr.api.Geometry.Vec3 getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SE2PoseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.api.SE2Pose)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * (m)
     * </pre>
     *
     * <code>.cmvr.api.Vec2 position = 1;</code>
     * @return Whether the position field is set.
     */
    boolean hasPosition();
    /**
     * <pre>
     * (m)
     * </pre>
     *
     * <code>.cmvr.api.Vec2 position = 1;</code>
     * @return The position.
     */
    cmvr.api.Geometry.Vec2 getPosition();
    /**
     * <pre>
     * (m)
     * </pre>
     *
     * <code>.cmvr.api.Vec2 position = 1;</code>
     */
    cmvr.api.Geometry.Vec2OrBuilder getPositionOrBuilder();

    /**
     * <pre>
     * (rad)
     * </pre>
     *
     * <code>double angle = 2;</code>
     * @return The angle.
     */
    double getAngle();
  }
  /**
   * Protobuf type {@code cmvr.api.SE2Pose}
   */
  public static final class SE2Pose extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.api.SE2Pose)
      SE2PoseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SE2Pose.newBuilder() to construct.
    private SE2Pose(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SE2Pose() {
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.api.Geometry.internal_static_cmvr_api_SE2Pose_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.api.Geometry.internal_static_cmvr_api_SE2Pose_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.api.Geometry.SE2Pose.class, cmvr.api.Geometry.SE2Pose.Builder.class);
    }

    public static final int POSITION_FIELD_NUMBER = 1;
    private cmvr.api.Geometry.Vec2 position_;
    /**
     * <pre>
     * (m)
     * </pre>
     *
     * <code>.cmvr.api.Vec2 position = 1;</code>
     * @return Whether the position field is set.
     */
    @java.lang.Override
    public boolean hasPosition() {
      return position_ != null;
    }
    /**
     * <pre>
     * (m)
     * </pre>
     *
     * <code>.cmvr.api.Vec2 position = 1;</code>
     * @return The position.
     */
    @java.lang.Override
    public cmvr.api.Geometry.Vec2 getPosition() {
      return position_ == null ? cmvr.api.Geometry.Vec2.getDefaultInstance() : position_;
    }
    /**
     * <pre>
     * (m)
     * </pre>
     *
     * <code>.cmvr.api.Vec2 position = 1;</code>
     */
    @java.lang.Override
    public cmvr.api.Geometry.Vec2OrBuilder getPositionOrBuilder() {
      return getPosition();
    }

    public static final int ANGLE_FIELD_NUMBER = 2;
    private double angle_;
    /**
     * <pre>
     * (rad)
     * </pre>
     *
     * <code>double angle = 2;</code>
     * @return The angle.
     */
    @java.lang.Override
    public double getAngle() {
      return angle_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (position_ != null) {
        output.writeMessage(1, getPosition());
      }
      if (java.lang.Double.doubleToRawLongBits(angle_) != 0) {
        output.writeDouble(2, angle_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (position_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getPosition());
      }
      if (java.lang.Double.doubleToRawLongBits(angle_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(2, angle_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.api.Geometry.SE2Pose)) {
        return super.equals(obj);
      }
      cmvr.api.Geometry.SE2Pose other = (cmvr.api.Geometry.SE2Pose) obj;

      if (hasPosition() != other.hasPosition()) return false;
      if (hasPosition()) {
        if (!getPosition()
            .equals(other.getPosition())) return false;
      }
      if (java.lang.Double.doubleToLongBits(getAngle())
          != java.lang.Double.doubleToLongBits(
              other.getAngle())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasPosition()) {
        hash = (37 * hash) + POSITION_FIELD_NUMBER;
        hash = (53 * hash) + getPosition().hashCode();
      }
      hash = (37 * hash) + ANGLE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAngle()));
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.api.Geometry.SE2Pose parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.SE2Pose parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.SE2Pose parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.SE2Pose parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.SE2Pose parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.SE2Pose parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.SE2Pose parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.SE2Pose parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.api.Geometry.SE2Pose parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.SE2Pose parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.api.Geometry.SE2Pose parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.SE2Pose parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.api.Geometry.SE2Pose prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code cmvr.api.SE2Pose}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.api.SE2Pose)
        cmvr.api.Geometry.SE2PoseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.api.Geometry.internal_static_cmvr_api_SE2Pose_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.api.Geometry.internal_static_cmvr_api_SE2Pose_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.api.Geometry.SE2Pose.class, cmvr.api.Geometry.SE2Pose.Builder.class);
      }

      // Construct using cmvr.api.Geometry.SE2Pose.newBuilder()
      private Builder() {

      }

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

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (positionBuilder_ == null) {
          position_ = null;
        } else {
          position_ = null;
          positionBuilder_ = null;
        }
        angle_ = 0D;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.api.Geometry.internal_static_cmvr_api_SE2Pose_descriptor;
      }

      @java.lang.Override
      public cmvr.api.Geometry.SE2Pose getDefaultInstanceForType() {
        return cmvr.api.Geometry.SE2Pose.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.api.Geometry.SE2Pose build() {
        cmvr.api.Geometry.SE2Pose result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.api.Geometry.SE2Pose buildPartial() {
        cmvr.api.Geometry.SE2Pose result = new cmvr.api.Geometry.SE2Pose(this);
        if (positionBuilder_ == null) {
          result.position_ = position_;
        } else {
          result.position_ = positionBuilder_.build();
        }
        result.angle_ = angle_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(cmvr.api.Geometry.SE2Pose other) {
        if (other == cmvr.api.Geometry.SE2Pose.getDefaultInstance()) return this;
        if (other.hasPosition()) {
          mergePosition(other.getPosition());
        }
        if (other.getAngle() != 0D) {
          setAngle(other.getAngle());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                input.readMessage(
                    getPositionFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 10
              case 17: {
                angle_ = input.readDouble();

                break;
              } // case 17
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private cmvr.api.Geometry.Vec2 position_;
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.api.Geometry.Vec2, cmvr.api.Geometry.Vec2.Builder, cmvr.api.Geometry.Vec2OrBuilder> positionBuilder_;
      /**
       * <pre>
       * (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec2 position = 1;</code>
       * @return Whether the position field is set.
       */
      public boolean hasPosition() {
        return positionBuilder_ != null || position_ != null;
      }
      /**
       * <pre>
       * (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec2 position = 1;</code>
       * @return The position.
       */
      public cmvr.api.Geometry.Vec2 getPosition() {
        if (positionBuilder_ == null) {
          return position_ == null ? cmvr.api.Geometry.Vec2.getDefaultInstance() : position_;
        } else {
          return positionBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec2 position = 1;</code>
       */
      public Builder setPosition(cmvr.api.Geometry.Vec2 value) {
        if (positionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          position_ = value;
          onChanged();
        } else {
          positionBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec2 position = 1;</code>
       */
      public Builder setPosition(
          cmvr.api.Geometry.Vec2.Builder builderForValue) {
        if (positionBuilder_ == null) {
          position_ = builderForValue.build();
          onChanged();
        } else {
          positionBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec2 position = 1;</code>
       */
      public Builder mergePosition(cmvr.api.Geometry.Vec2 value) {
        if (positionBuilder_ == null) {
          if (position_ != null) {
            position_ =
              cmvr.api.Geometry.Vec2.newBuilder(position_).mergeFrom(value).buildPartial();
          } else {
            position_ = value;
          }
          onChanged();
        } else {
          positionBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec2 position = 1;</code>
       */
      public Builder clearPosition() {
        if (positionBuilder_ == null) {
          position_ = null;
          onChanged();
        } else {
          position_ = null;
          positionBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec2 position = 1;</code>
       */
      public cmvr.api.Geometry.Vec2.Builder getPositionBuilder() {
        
        onChanged();
        return getPositionFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec2 position = 1;</code>
       */
      public cmvr.api.Geometry.Vec2OrBuilder getPositionOrBuilder() {
        if (positionBuilder_ != null) {
          return positionBuilder_.getMessageOrBuilder();
        } else {
          return position_ == null ?
              cmvr.api.Geometry.Vec2.getDefaultInstance() : position_;
        }
      }
      /**
       * <pre>
       * (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec2 position = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.api.Geometry.Vec2, cmvr.api.Geometry.Vec2.Builder, cmvr.api.Geometry.Vec2OrBuilder> 
          getPositionFieldBuilder() {
        if (positionBuilder_ == null) {
          positionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              cmvr.api.Geometry.Vec2, cmvr.api.Geometry.Vec2.Builder, cmvr.api.Geometry.Vec2OrBuilder>(
                  getPosition(),
                  getParentForChildren(),
                  isClean());
          position_ = null;
        }
        return positionBuilder_;
      }

      private double angle_ ;
      /**
       * <pre>
       * (rad)
       * </pre>
       *
       * <code>double angle = 2;</code>
       * @return The angle.
       */
      @java.lang.Override
      public double getAngle() {
        return angle_;
      }
      /**
       * <pre>
       * (rad)
       * </pre>
       *
       * <code>double angle = 2;</code>
       * @param value The angle to set.
       * @return This builder for chaining.
       */
      public Builder setAngle(double value) {
        
        angle_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * (rad)
       * </pre>
       *
       * <code>double angle = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearAngle() {
        
        angle_ = 0D;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:cmvr.api.SE2Pose)
    }

    // @@protoc_insertion_point(class_scope:cmvr.api.SE2Pose)
    private static final cmvr.api.Geometry.SE2Pose DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.api.Geometry.SE2Pose();
    }

    public static cmvr.api.Geometry.SE2Pose getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public cmvr.api.Geometry.SE2Pose getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SE2VelocityOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.api.SE2Velocity)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * (m/s)
     * </pre>
     *
     * <code>.cmvr.api.Vec2 linear = 1;</code>
     * @return Whether the linear field is set.
     */
    boolean hasLinear();
    /**
     * <pre>
     * (m/s)
     * </pre>
     *
     * <code>.cmvr.api.Vec2 linear = 1;</code>
     * @return The linear.
     */
    cmvr.api.Geometry.Vec2 getLinear();
    /**
     * <pre>
     * (m/s)
     * </pre>
     *
     * <code>.cmvr.api.Vec2 linear = 1;</code>
     */
    cmvr.api.Geometry.Vec2OrBuilder getLinearOrBuilder();

    /**
     * <pre>
     * (rad/s)
     * </pre>
     *
     * <code>double angular = 2;</code>
     * @return The angular.
     */
    double getAngular();
  }
  /**
   * Protobuf type {@code cmvr.api.SE2Velocity}
   */
  public static final class SE2Velocity extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.api.SE2Velocity)
      SE2VelocityOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SE2Velocity.newBuilder() to construct.
    private SE2Velocity(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SE2Velocity() {
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.api.Geometry.internal_static_cmvr_api_SE2Velocity_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.api.Geometry.internal_static_cmvr_api_SE2Velocity_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.api.Geometry.SE2Velocity.class, cmvr.api.Geometry.SE2Velocity.Builder.class);
    }

    public static final int LINEAR_FIELD_NUMBER = 1;
    private cmvr.api.Geometry.Vec2 linear_;
    /**
     * <pre>
     * (m/s)
     * </pre>
     *
     * <code>.cmvr.api.Vec2 linear = 1;</code>
     * @return Whether the linear field is set.
     */
    @java.lang.Override
    public boolean hasLinear() {
      return linear_ != null;
    }
    /**
     * <pre>
     * (m/s)
     * </pre>
     *
     * <code>.cmvr.api.Vec2 linear = 1;</code>
     * @return The linear.
     */
    @java.lang.Override
    public cmvr.api.Geometry.Vec2 getLinear() {
      return linear_ == null ? cmvr.api.Geometry.Vec2.getDefaultInstance() : linear_;
    }
    /**
     * <pre>
     * (m/s)
     * </pre>
     *
     * <code>.cmvr.api.Vec2 linear = 1;</code>
     */
    @java.lang.Override
    public cmvr.api.Geometry.Vec2OrBuilder getLinearOrBuilder() {
      return getLinear();
    }

    public static final int ANGULAR_FIELD_NUMBER = 2;
    private double angular_;
    /**
     * <pre>
     * (rad/s)
     * </pre>
     *
     * <code>double angular = 2;</code>
     * @return The angular.
     */
    @java.lang.Override
    public double getAngular() {
      return angular_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (linear_ != null) {
        output.writeMessage(1, getLinear());
      }
      if (java.lang.Double.doubleToRawLongBits(angular_) != 0) {
        output.writeDouble(2, angular_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (linear_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getLinear());
      }
      if (java.lang.Double.doubleToRawLongBits(angular_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(2, angular_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.api.Geometry.SE2Velocity)) {
        return super.equals(obj);
      }
      cmvr.api.Geometry.SE2Velocity other = (cmvr.api.Geometry.SE2Velocity) obj;

      if (hasLinear() != other.hasLinear()) return false;
      if (hasLinear()) {
        if (!getLinear()
            .equals(other.getLinear())) return false;
      }
      if (java.lang.Double.doubleToLongBits(getAngular())
          != java.lang.Double.doubleToLongBits(
              other.getAngular())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasLinear()) {
        hash = (37 * hash) + LINEAR_FIELD_NUMBER;
        hash = (53 * hash) + getLinear().hashCode();
      }
      hash = (37 * hash) + ANGULAR_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAngular()));
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.api.Geometry.SE2Velocity parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.SE2Velocity parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.SE2Velocity parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.SE2Velocity parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.SE2Velocity parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.SE2Velocity parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.SE2Velocity parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.SE2Velocity parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.api.Geometry.SE2Velocity parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.SE2Velocity parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.api.Geometry.SE2Velocity parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.SE2Velocity parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.api.Geometry.SE2Velocity prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code cmvr.api.SE2Velocity}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.api.SE2Velocity)
        cmvr.api.Geometry.SE2VelocityOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.api.Geometry.internal_static_cmvr_api_SE2Velocity_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.api.Geometry.internal_static_cmvr_api_SE2Velocity_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.api.Geometry.SE2Velocity.class, cmvr.api.Geometry.SE2Velocity.Builder.class);
      }

      // Construct using cmvr.api.Geometry.SE2Velocity.newBuilder()
      private Builder() {

      }

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

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (linearBuilder_ == null) {
          linear_ = null;
        } else {
          linear_ = null;
          linearBuilder_ = null;
        }
        angular_ = 0D;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.api.Geometry.internal_static_cmvr_api_SE2Velocity_descriptor;
      }

      @java.lang.Override
      public cmvr.api.Geometry.SE2Velocity getDefaultInstanceForType() {
        return cmvr.api.Geometry.SE2Velocity.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.api.Geometry.SE2Velocity build() {
        cmvr.api.Geometry.SE2Velocity result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.api.Geometry.SE2Velocity buildPartial() {
        cmvr.api.Geometry.SE2Velocity result = new cmvr.api.Geometry.SE2Velocity(this);
        if (linearBuilder_ == null) {
          result.linear_ = linear_;
        } else {
          result.linear_ = linearBuilder_.build();
        }
        result.angular_ = angular_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(cmvr.api.Geometry.SE2Velocity other) {
        if (other == cmvr.api.Geometry.SE2Velocity.getDefaultInstance()) return this;
        if (other.hasLinear()) {
          mergeLinear(other.getLinear());
        }
        if (other.getAngular() != 0D) {
          setAngular(other.getAngular());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                input.readMessage(
                    getLinearFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 10
              case 17: {
                angular_ = input.readDouble();

                break;
              } // case 17
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private cmvr.api.Geometry.Vec2 linear_;
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.api.Geometry.Vec2, cmvr.api.Geometry.Vec2.Builder, cmvr.api.Geometry.Vec2OrBuilder> linearBuilder_;
      /**
       * <pre>
       * (m/s)
       * </pre>
       *
       * <code>.cmvr.api.Vec2 linear = 1;</code>
       * @return Whether the linear field is set.
       */
      public boolean hasLinear() {
        return linearBuilder_ != null || linear_ != null;
      }
      /**
       * <pre>
       * (m/s)
       * </pre>
       *
       * <code>.cmvr.api.Vec2 linear = 1;</code>
       * @return The linear.
       */
      public cmvr.api.Geometry.Vec2 getLinear() {
        if (linearBuilder_ == null) {
          return linear_ == null ? cmvr.api.Geometry.Vec2.getDefaultInstance() : linear_;
        } else {
          return linearBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * (m/s)
       * </pre>
       *
       * <code>.cmvr.api.Vec2 linear = 1;</code>
       */
      public Builder setLinear(cmvr.api.Geometry.Vec2 value) {
        if (linearBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          linear_ = value;
          onChanged();
        } else {
          linearBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * (m/s)
       * </pre>
       *
       * <code>.cmvr.api.Vec2 linear = 1;</code>
       */
      public Builder setLinear(
          cmvr.api.Geometry.Vec2.Builder builderForValue) {
        if (linearBuilder_ == null) {
          linear_ = builderForValue.build();
          onChanged();
        } else {
          linearBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * (m/s)
       * </pre>
       *
       * <code>.cmvr.api.Vec2 linear = 1;</code>
       */
      public Builder mergeLinear(cmvr.api.Geometry.Vec2 value) {
        if (linearBuilder_ == null) {
          if (linear_ != null) {
            linear_ =
              cmvr.api.Geometry.Vec2.newBuilder(linear_).mergeFrom(value).buildPartial();
          } else {
            linear_ = value;
          }
          onChanged();
        } else {
          linearBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * (m/s)
       * </pre>
       *
       * <code>.cmvr.api.Vec2 linear = 1;</code>
       */
      public Builder clearLinear() {
        if (linearBuilder_ == null) {
          linear_ = null;
          onChanged();
        } else {
          linear_ = null;
          linearBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * (m/s)
       * </pre>
       *
       * <code>.cmvr.api.Vec2 linear = 1;</code>
       */
      public cmvr.api.Geometry.Vec2.Builder getLinearBuilder() {
        
        onChanged();
        return getLinearFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * (m/s)
       * </pre>
       *
       * <code>.cmvr.api.Vec2 linear = 1;</code>
       */
      public cmvr.api.Geometry.Vec2OrBuilder getLinearOrBuilder() {
        if (linearBuilder_ != null) {
          return linearBuilder_.getMessageOrBuilder();
        } else {
          return linear_ == null ?
              cmvr.api.Geometry.Vec2.getDefaultInstance() : linear_;
        }
      }
      /**
       * <pre>
       * (m/s)
       * </pre>
       *
       * <code>.cmvr.api.Vec2 linear = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.api.Geometry.Vec2, cmvr.api.Geometry.Vec2.Builder, cmvr.api.Geometry.Vec2OrBuilder> 
          getLinearFieldBuilder() {
        if (linearBuilder_ == null) {
          linearBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              cmvr.api.Geometry.Vec2, cmvr.api.Geometry.Vec2.Builder, cmvr.api.Geometry.Vec2OrBuilder>(
                  getLinear(),
                  getParentForChildren(),
                  isClean());
          linear_ = null;
        }
        return linearBuilder_;
      }

      private double angular_ ;
      /**
       * <pre>
       * (rad/s)
       * </pre>
       *
       * <code>double angular = 2;</code>
       * @return The angular.
       */
      @java.lang.Override
      public double getAngular() {
        return angular_;
      }
      /**
       * <pre>
       * (rad/s)
       * </pre>
       *
       * <code>double angular = 2;</code>
       * @param value The angular to set.
       * @return This builder for chaining.
       */
      public Builder setAngular(double value) {
        
        angular_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * (rad/s)
       * </pre>
       *
       * <code>double angular = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearAngular() {
        
        angular_ = 0D;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:cmvr.api.SE2Velocity)
    }

    // @@protoc_insertion_point(class_scope:cmvr.api.SE2Velocity)
    private static final cmvr.api.Geometry.SE2Velocity DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.api.Geometry.SE2Velocity();
    }

    public static cmvr.api.Geometry.SE2Velocity getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public cmvr.api.Geometry.SE2Velocity getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface QuaternionOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.api.Quaternion)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>double x = 1;</code>
     * @return The x.
     */
    double getX();

    /**
     * <code>double y = 2;</code>
     * @return The y.
     */
    double getY();

    /**
     * <code>double z = 3;</code>
     * @return The z.
     */
    double getZ();

    /**
     * <code>double w = 4;</code>
     * @return The w.
     */
    double getW();
  }
  /**
   * Protobuf type {@code cmvr.api.Quaternion}
   */
  public static final class Quaternion extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.api.Quaternion)
      QuaternionOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Quaternion.newBuilder() to construct.
    private Quaternion(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Quaternion() {
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.api.Geometry.internal_static_cmvr_api_Quaternion_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.api.Geometry.internal_static_cmvr_api_Quaternion_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.api.Geometry.Quaternion.class, cmvr.api.Geometry.Quaternion.Builder.class);
    }

    public static final int X_FIELD_NUMBER = 1;
    private double x_;
    /**
     * <code>double x = 1;</code>
     * @return The x.
     */
    @java.lang.Override
    public double getX() {
      return x_;
    }

    public static final int Y_FIELD_NUMBER = 2;
    private double y_;
    /**
     * <code>double y = 2;</code>
     * @return The y.
     */
    @java.lang.Override
    public double getY() {
      return y_;
    }

    public static final int Z_FIELD_NUMBER = 3;
    private double z_;
    /**
     * <code>double z = 3;</code>
     * @return The z.
     */
    @java.lang.Override
    public double getZ() {
      return z_;
    }

    public static final int W_FIELD_NUMBER = 4;
    private double w_;
    /**
     * <code>double w = 4;</code>
     * @return The w.
     */
    @java.lang.Override
    public double getW() {
      return w_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (java.lang.Double.doubleToRawLongBits(x_) != 0) {
        output.writeDouble(1, x_);
      }
      if (java.lang.Double.doubleToRawLongBits(y_) != 0) {
        output.writeDouble(2, y_);
      }
      if (java.lang.Double.doubleToRawLongBits(z_) != 0) {
        output.writeDouble(3, z_);
      }
      if (java.lang.Double.doubleToRawLongBits(w_) != 0) {
        output.writeDouble(4, w_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (java.lang.Double.doubleToRawLongBits(x_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(1, x_);
      }
      if (java.lang.Double.doubleToRawLongBits(y_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(2, y_);
      }
      if (java.lang.Double.doubleToRawLongBits(z_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, z_);
      }
      if (java.lang.Double.doubleToRawLongBits(w_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(4, w_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.api.Geometry.Quaternion)) {
        return super.equals(obj);
      }
      cmvr.api.Geometry.Quaternion other = (cmvr.api.Geometry.Quaternion) obj;

      if (java.lang.Double.doubleToLongBits(getX())
          != java.lang.Double.doubleToLongBits(
              other.getX())) return false;
      if (java.lang.Double.doubleToLongBits(getY())
          != java.lang.Double.doubleToLongBits(
              other.getY())) return false;
      if (java.lang.Double.doubleToLongBits(getZ())
          != java.lang.Double.doubleToLongBits(
              other.getZ())) return false;
      if (java.lang.Double.doubleToLongBits(getW())
          != java.lang.Double.doubleToLongBits(
              other.getW())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + X_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getX()));
      hash = (37 * hash) + Y_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getY()));
      hash = (37 * hash) + Z_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getZ()));
      hash = (37 * hash) + W_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getW()));
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.api.Geometry.Quaternion parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.Quaternion parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.Quaternion parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.Quaternion parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.Quaternion parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.Quaternion parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.Quaternion parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.Quaternion parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.api.Geometry.Quaternion parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.Quaternion parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.api.Geometry.Quaternion parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.Quaternion parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.api.Geometry.Quaternion prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code cmvr.api.Quaternion}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.api.Quaternion)
        cmvr.api.Geometry.QuaternionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.api.Geometry.internal_static_cmvr_api_Quaternion_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.api.Geometry.internal_static_cmvr_api_Quaternion_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.api.Geometry.Quaternion.class, cmvr.api.Geometry.Quaternion.Builder.class);
      }

      // Construct using cmvr.api.Geometry.Quaternion.newBuilder()
      private Builder() {

      }

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

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        x_ = 0D;

        y_ = 0D;

        z_ = 0D;

        w_ = 0D;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.api.Geometry.internal_static_cmvr_api_Quaternion_descriptor;
      }

      @java.lang.Override
      public cmvr.api.Geometry.Quaternion getDefaultInstanceForType() {
        return cmvr.api.Geometry.Quaternion.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.api.Geometry.Quaternion build() {
        cmvr.api.Geometry.Quaternion result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.api.Geometry.Quaternion buildPartial() {
        cmvr.api.Geometry.Quaternion result = new cmvr.api.Geometry.Quaternion(this);
        result.x_ = x_;
        result.y_ = y_;
        result.z_ = z_;
        result.w_ = w_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(cmvr.api.Geometry.Quaternion other) {
        if (other == cmvr.api.Geometry.Quaternion.getDefaultInstance()) return this;
        if (other.getX() != 0D) {
          setX(other.getX());
        }
        if (other.getY() != 0D) {
          setY(other.getY());
        }
        if (other.getZ() != 0D) {
          setZ(other.getZ());
        }
        if (other.getW() != 0D) {
          setW(other.getW());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 9: {
                x_ = input.readDouble();

                break;
              } // case 9
              case 17: {
                y_ = input.readDouble();

                break;
              } // case 17
              case 25: {
                z_ = input.readDouble();

                break;
              } // case 25
              case 33: {
                w_ = input.readDouble();

                break;
              } // case 33
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private double x_ ;
      /**
       * <code>double x = 1;</code>
       * @return The x.
       */
      @java.lang.Override
      public double getX() {
        return x_;
      }
      /**
       * <code>double x = 1;</code>
       * @param value The x to set.
       * @return This builder for chaining.
       */
      public Builder setX(double value) {
        
        x_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double x = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearX() {
        
        x_ = 0D;
        onChanged();
        return this;
      }

      private double y_ ;
      /**
       * <code>double y = 2;</code>
       * @return The y.
       */
      @java.lang.Override
      public double getY() {
        return y_;
      }
      /**
       * <code>double y = 2;</code>
       * @param value The y to set.
       * @return This builder for chaining.
       */
      public Builder setY(double value) {
        
        y_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double y = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearY() {
        
        y_ = 0D;
        onChanged();
        return this;
      }

      private double z_ ;
      /**
       * <code>double z = 3;</code>
       * @return The z.
       */
      @java.lang.Override
      public double getZ() {
        return z_;
      }
      /**
       * <code>double z = 3;</code>
       * @param value The z to set.
       * @return This builder for chaining.
       */
      public Builder setZ(double value) {
        
        z_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double z = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearZ() {
        
        z_ = 0D;
        onChanged();
        return this;
      }

      private double w_ ;
      /**
       * <code>double w = 4;</code>
       * @return The w.
       */
      @java.lang.Override
      public double getW() {
        return w_;
      }
      /**
       * <code>double w = 4;</code>
       * @param value The w to set.
       * @return This builder for chaining.
       */
      public Builder setW(double value) {
        
        w_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double w = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearW() {
        
        w_ = 0D;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:cmvr.api.Quaternion)
    }

    // @@protoc_insertion_point(class_scope:cmvr.api.Quaternion)
    private static final cmvr.api.Geometry.Quaternion DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.api.Geometry.Quaternion();
    }

    public static cmvr.api.Geometry.Quaternion getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public cmvr.api.Geometry.Quaternion getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface EulerAngleZYXOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.api.EulerAngleZYX)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>double z = 1;</code>
     * @return The z.
     */
    double getZ();

    /**
     * <code>double y = 2;</code>
     * @return The y.
     */
    double getY();

    /**
     * <code>double x = 3;</code>
     * @return The x.
     */
    double getX();
  }
  /**
   * Protobuf type {@code cmvr.api.EulerAngleZYX}
   */
  public static final class EulerAngleZYX extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.api.EulerAngleZYX)
      EulerAngleZYXOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use EulerAngleZYX.newBuilder() to construct.
    private EulerAngleZYX(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private EulerAngleZYX() {
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.api.Geometry.internal_static_cmvr_api_EulerAngleZYX_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.api.Geometry.internal_static_cmvr_api_EulerAngleZYX_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.api.Geometry.EulerAngleZYX.class, cmvr.api.Geometry.EulerAngleZYX.Builder.class);
    }

    public static final int Z_FIELD_NUMBER = 1;
    private double z_;
    /**
     * <code>double z = 1;</code>
     * @return The z.
     */
    @java.lang.Override
    public double getZ() {
      return z_;
    }

    public static final int Y_FIELD_NUMBER = 2;
    private double y_;
    /**
     * <code>double y = 2;</code>
     * @return The y.
     */
    @java.lang.Override
    public double getY() {
      return y_;
    }

    public static final int X_FIELD_NUMBER = 3;
    private double x_;
    /**
     * <code>double x = 3;</code>
     * @return The x.
     */
    @java.lang.Override
    public double getX() {
      return x_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (java.lang.Double.doubleToRawLongBits(z_) != 0) {
        output.writeDouble(1, z_);
      }
      if (java.lang.Double.doubleToRawLongBits(y_) != 0) {
        output.writeDouble(2, y_);
      }
      if (java.lang.Double.doubleToRawLongBits(x_) != 0) {
        output.writeDouble(3, x_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (java.lang.Double.doubleToRawLongBits(z_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(1, z_);
      }
      if (java.lang.Double.doubleToRawLongBits(y_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(2, y_);
      }
      if (java.lang.Double.doubleToRawLongBits(x_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, x_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.api.Geometry.EulerAngleZYX)) {
        return super.equals(obj);
      }
      cmvr.api.Geometry.EulerAngleZYX other = (cmvr.api.Geometry.EulerAngleZYX) obj;

      if (java.lang.Double.doubleToLongBits(getZ())
          != java.lang.Double.doubleToLongBits(
              other.getZ())) return false;
      if (java.lang.Double.doubleToLongBits(getY())
          != java.lang.Double.doubleToLongBits(
              other.getY())) return false;
      if (java.lang.Double.doubleToLongBits(getX())
          != java.lang.Double.doubleToLongBits(
              other.getX())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + Z_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getZ()));
      hash = (37 * hash) + Y_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getY()));
      hash = (37 * hash) + X_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getX()));
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.api.Geometry.EulerAngleZYX parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.EulerAngleZYX parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.EulerAngleZYX parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.EulerAngleZYX parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.EulerAngleZYX parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.EulerAngleZYX parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.EulerAngleZYX parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.EulerAngleZYX parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.api.Geometry.EulerAngleZYX parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.EulerAngleZYX parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.api.Geometry.EulerAngleZYX parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.EulerAngleZYX parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.api.Geometry.EulerAngleZYX prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code cmvr.api.EulerAngleZYX}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.api.EulerAngleZYX)
        cmvr.api.Geometry.EulerAngleZYXOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.api.Geometry.internal_static_cmvr_api_EulerAngleZYX_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.api.Geometry.internal_static_cmvr_api_EulerAngleZYX_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.api.Geometry.EulerAngleZYX.class, cmvr.api.Geometry.EulerAngleZYX.Builder.class);
      }

      // Construct using cmvr.api.Geometry.EulerAngleZYX.newBuilder()
      private Builder() {

      }

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

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        z_ = 0D;

        y_ = 0D;

        x_ = 0D;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.api.Geometry.internal_static_cmvr_api_EulerAngleZYX_descriptor;
      }

      @java.lang.Override
      public cmvr.api.Geometry.EulerAngleZYX getDefaultInstanceForType() {
        return cmvr.api.Geometry.EulerAngleZYX.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.api.Geometry.EulerAngleZYX build() {
        cmvr.api.Geometry.EulerAngleZYX result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.api.Geometry.EulerAngleZYX buildPartial() {
        cmvr.api.Geometry.EulerAngleZYX result = new cmvr.api.Geometry.EulerAngleZYX(this);
        result.z_ = z_;
        result.y_ = y_;
        result.x_ = x_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(cmvr.api.Geometry.EulerAngleZYX other) {
        if (other == cmvr.api.Geometry.EulerAngleZYX.getDefaultInstance()) return this;
        if (other.getZ() != 0D) {
          setZ(other.getZ());
        }
        if (other.getY() != 0D) {
          setY(other.getY());
        }
        if (other.getX() != 0D) {
          setX(other.getX());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 9: {
                z_ = input.readDouble();

                break;
              } // case 9
              case 17: {
                y_ = input.readDouble();

                break;
              } // case 17
              case 25: {
                x_ = input.readDouble();

                break;
              } // case 25
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private double z_ ;
      /**
       * <code>double z = 1;</code>
       * @return The z.
       */
      @java.lang.Override
      public double getZ() {
        return z_;
      }
      /**
       * <code>double z = 1;</code>
       * @param value The z to set.
       * @return This builder for chaining.
       */
      public Builder setZ(double value) {
        
        z_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double z = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearZ() {
        
        z_ = 0D;
        onChanged();
        return this;
      }

      private double y_ ;
      /**
       * <code>double y = 2;</code>
       * @return The y.
       */
      @java.lang.Override
      public double getY() {
        return y_;
      }
      /**
       * <code>double y = 2;</code>
       * @param value The y to set.
       * @return This builder for chaining.
       */
      public Builder setY(double value) {
        
        y_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double y = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearY() {
        
        y_ = 0D;
        onChanged();
        return this;
      }

      private double x_ ;
      /**
       * <code>double x = 3;</code>
       * @return The x.
       */
      @java.lang.Override
      public double getX() {
        return x_;
      }
      /**
       * <code>double x = 3;</code>
       * @param value The x to set.
       * @return This builder for chaining.
       */
      public Builder setX(double value) {
        
        x_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double x = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearX() {
        
        x_ = 0D;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:cmvr.api.EulerAngleZYX)
    }

    // @@protoc_insertion_point(class_scope:cmvr.api.EulerAngleZYX)
    private static final cmvr.api.Geometry.EulerAngleZYX DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.api.Geometry.EulerAngleZYX();
    }

    public static cmvr.api.Geometry.EulerAngleZYX getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public cmvr.api.Geometry.EulerAngleZYX getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SE3PoseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.api.SE3Pose)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * (m)
     * </pre>
     *
     * <code>.cmvr.api.Vec3 position = 1;</code>
     * @return Whether the position field is set.
     */
    boolean hasPosition();
    /**
     * <pre>
     * (m)
     * </pre>
     *
     * <code>.cmvr.api.Vec3 position = 1;</code>
     * @return The position.
     */
    cmvr.api.Geometry.Vec3 getPosition();
    /**
     * <pre>
     * (m)
     * </pre>
     *
     * <code>.cmvr.api.Vec3 position = 1;</code>
     */
    cmvr.api.Geometry.Vec3OrBuilder getPositionOrBuilder();

    /**
     * <code>.cmvr.api.Quaternion quaternion = 2;</code>
     * @return Whether the quaternion field is set.
     */
    boolean hasQuaternion();
    /**
     * <code>.cmvr.api.Quaternion quaternion = 2;</code>
     * @return The quaternion.
     */
    cmvr.api.Geometry.Quaternion getQuaternion();
    /**
     * <code>.cmvr.api.Quaternion quaternion = 2;</code>
     */
    cmvr.api.Geometry.QuaternionOrBuilder getQuaternionOrBuilder();

    /**
     * <code>.cmvr.api.EulerAngleZYX euler = 3;</code>
     * @return Whether the euler field is set.
     */
    boolean hasEuler();
    /**
     * <code>.cmvr.api.EulerAngleZYX euler = 3;</code>
     * @return The euler.
     */
    cmvr.api.Geometry.EulerAngleZYX getEuler();
    /**
     * <code>.cmvr.api.EulerAngleZYX euler = 3;</code>
     */
    cmvr.api.Geometry.EulerAngleZYXOrBuilder getEulerOrBuilder();

    public cmvr.api.Geometry.SE3Pose.RotationCase getRotationCase();
  }
  /**
   * Protobuf type {@code cmvr.api.SE3Pose}
   */
  public static final class SE3Pose extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.api.SE3Pose)
      SE3PoseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SE3Pose.newBuilder() to construct.
    private SE3Pose(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SE3Pose() {
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.api.Geometry.internal_static_cmvr_api_SE3Pose_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.api.Geometry.internal_static_cmvr_api_SE3Pose_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.api.Geometry.SE3Pose.class, cmvr.api.Geometry.SE3Pose.Builder.class);
    }

    private int rotationCase_ = 0;
    private java.lang.Object rotation_;
    public enum RotationCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      QUATERNION(2),
      EULER(3),
      ROTATION_NOT_SET(0);
      private final int value;
      private RotationCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static RotationCase valueOf(int value) {
        return forNumber(value);
      }

      public static RotationCase forNumber(int value) {
        switch (value) {
          case 2: return QUATERNION;
          case 3: return EULER;
          case 0: return ROTATION_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public RotationCase
    getRotationCase() {
      return RotationCase.forNumber(
          rotationCase_);
    }

    public static final int POSITION_FIELD_NUMBER = 1;
    private cmvr.api.Geometry.Vec3 position_;
    /**
     * <pre>
     * (m)
     * </pre>
     *
     * <code>.cmvr.api.Vec3 position = 1;</code>
     * @return Whether the position field is set.
     */
    @java.lang.Override
    public boolean hasPosition() {
      return position_ != null;
    }
    /**
     * <pre>
     * (m)
     * </pre>
     *
     * <code>.cmvr.api.Vec3 position = 1;</code>
     * @return The position.
     */
    @java.lang.Override
    public cmvr.api.Geometry.Vec3 getPosition() {
      return position_ == null ? cmvr.api.Geometry.Vec3.getDefaultInstance() : position_;
    }
    /**
     * <pre>
     * (m)
     * </pre>
     *
     * <code>.cmvr.api.Vec3 position = 1;</code>
     */
    @java.lang.Override
    public cmvr.api.Geometry.Vec3OrBuilder getPositionOrBuilder() {
      return getPosition();
    }

    public static final int QUATERNION_FIELD_NUMBER = 2;
    /**
     * <code>.cmvr.api.Quaternion quaternion = 2;</code>
     * @return Whether the quaternion field is set.
     */
    @java.lang.Override
    public boolean hasQuaternion() {
      return rotationCase_ == 2;
    }
    /**
     * <code>.cmvr.api.Quaternion quaternion = 2;</code>
     * @return The quaternion.
     */
    @java.lang.Override
    public cmvr.api.Geometry.Quaternion getQuaternion() {
      if (rotationCase_ == 2) {
         return (cmvr.api.Geometry.Quaternion) rotation_;
      }
      return cmvr.api.Geometry.Quaternion.getDefaultInstance();
    }
    /**
     * <code>.cmvr.api.Quaternion quaternion = 2;</code>
     */
    @java.lang.Override
    public cmvr.api.Geometry.QuaternionOrBuilder getQuaternionOrBuilder() {
      if (rotationCase_ == 2) {
         return (cmvr.api.Geometry.Quaternion) rotation_;
      }
      return cmvr.api.Geometry.Quaternion.getDefaultInstance();
    }

    public static final int EULER_FIELD_NUMBER = 3;
    /**
     * <code>.cmvr.api.EulerAngleZYX euler = 3;</code>
     * @return Whether the euler field is set.
     */
    @java.lang.Override
    public boolean hasEuler() {
      return rotationCase_ == 3;
    }
    /**
     * <code>.cmvr.api.EulerAngleZYX euler = 3;</code>
     * @return The euler.
     */
    @java.lang.Override
    public cmvr.api.Geometry.EulerAngleZYX getEuler() {
      if (rotationCase_ == 3) {
         return (cmvr.api.Geometry.EulerAngleZYX) rotation_;
      }
      return cmvr.api.Geometry.EulerAngleZYX.getDefaultInstance();
    }
    /**
     * <code>.cmvr.api.EulerAngleZYX euler = 3;</code>
     */
    @java.lang.Override
    public cmvr.api.Geometry.EulerAngleZYXOrBuilder getEulerOrBuilder() {
      if (rotationCase_ == 3) {
         return (cmvr.api.Geometry.EulerAngleZYX) rotation_;
      }
      return cmvr.api.Geometry.EulerAngleZYX.getDefaultInstance();
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (position_ != null) {
        output.writeMessage(1, getPosition());
      }
      if (rotationCase_ == 2) {
        output.writeMessage(2, (cmvr.api.Geometry.Quaternion) rotation_);
      }
      if (rotationCase_ == 3) {
        output.writeMessage(3, (cmvr.api.Geometry.EulerAngleZYX) rotation_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (position_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getPosition());
      }
      if (rotationCase_ == 2) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, (cmvr.api.Geometry.Quaternion) rotation_);
      }
      if (rotationCase_ == 3) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, (cmvr.api.Geometry.EulerAngleZYX) rotation_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.api.Geometry.SE3Pose)) {
        return super.equals(obj);
      }
      cmvr.api.Geometry.SE3Pose other = (cmvr.api.Geometry.SE3Pose) obj;

      if (hasPosition() != other.hasPosition()) return false;
      if (hasPosition()) {
        if (!getPosition()
            .equals(other.getPosition())) return false;
      }
      if (!getRotationCase().equals(other.getRotationCase())) return false;
      switch (rotationCase_) {
        case 2:
          if (!getQuaternion()
              .equals(other.getQuaternion())) return false;
          break;
        case 3:
          if (!getEuler()
              .equals(other.getEuler())) return false;
          break;
        case 0:
        default:
      }
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasPosition()) {
        hash = (37 * hash) + POSITION_FIELD_NUMBER;
        hash = (53 * hash) + getPosition().hashCode();
      }
      switch (rotationCase_) {
        case 2:
          hash = (37 * hash) + QUATERNION_FIELD_NUMBER;
          hash = (53 * hash) + getQuaternion().hashCode();
          break;
        case 3:
          hash = (37 * hash) + EULER_FIELD_NUMBER;
          hash = (53 * hash) + getEuler().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.api.Geometry.SE3Pose parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.SE3Pose parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.SE3Pose parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.SE3Pose parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.SE3Pose parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.SE3Pose parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.SE3Pose parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.SE3Pose parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.api.Geometry.SE3Pose parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.SE3Pose parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.api.Geometry.SE3Pose parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.SE3Pose parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.api.Geometry.SE3Pose prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code cmvr.api.SE3Pose}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.api.SE3Pose)
        cmvr.api.Geometry.SE3PoseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.api.Geometry.internal_static_cmvr_api_SE3Pose_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.api.Geometry.internal_static_cmvr_api_SE3Pose_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.api.Geometry.SE3Pose.class, cmvr.api.Geometry.SE3Pose.Builder.class);
      }

      // Construct using cmvr.api.Geometry.SE3Pose.newBuilder()
      private Builder() {

      }

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

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (positionBuilder_ == null) {
          position_ = null;
        } else {
          position_ = null;
          positionBuilder_ = null;
        }
        if (quaternionBuilder_ != null) {
          quaternionBuilder_.clear();
        }
        if (eulerBuilder_ != null) {
          eulerBuilder_.clear();
        }
        rotationCase_ = 0;
        rotation_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.api.Geometry.internal_static_cmvr_api_SE3Pose_descriptor;
      }

      @java.lang.Override
      public cmvr.api.Geometry.SE3Pose getDefaultInstanceForType() {
        return cmvr.api.Geometry.SE3Pose.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.api.Geometry.SE3Pose build() {
        cmvr.api.Geometry.SE3Pose result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.api.Geometry.SE3Pose buildPartial() {
        cmvr.api.Geometry.SE3Pose result = new cmvr.api.Geometry.SE3Pose(this);
        if (positionBuilder_ == null) {
          result.position_ = position_;
        } else {
          result.position_ = positionBuilder_.build();
        }
        if (rotationCase_ == 2) {
          if (quaternionBuilder_ == null) {
            result.rotation_ = rotation_;
          } else {
            result.rotation_ = quaternionBuilder_.build();
          }
        }
        if (rotationCase_ == 3) {
          if (eulerBuilder_ == null) {
            result.rotation_ = rotation_;
          } else {
            result.rotation_ = eulerBuilder_.build();
          }
        }
        result.rotationCase_ = rotationCase_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(cmvr.api.Geometry.SE3Pose other) {
        if (other == cmvr.api.Geometry.SE3Pose.getDefaultInstance()) return this;
        if (other.hasPosition()) {
          mergePosition(other.getPosition());
        }
        switch (other.getRotationCase()) {
          case QUATERNION: {
            mergeQuaternion(other.getQuaternion());
            break;
          }
          case EULER: {
            mergeEuler(other.getEuler());
            break;
          }
          case ROTATION_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                input.readMessage(
                    getPositionFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 10
              case 18: {
                input.readMessage(
                    getQuaternionFieldBuilder().getBuilder(),
                    extensionRegistry);
                rotationCase_ = 2;
                break;
              } // case 18
              case 26: {
                input.readMessage(
                    getEulerFieldBuilder().getBuilder(),
                    extensionRegistry);
                rotationCase_ = 3;
                break;
              } // case 26
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int rotationCase_ = 0;
      private java.lang.Object rotation_;
      public RotationCase
          getRotationCase() {
        return RotationCase.forNumber(
            rotationCase_);
      }

      public Builder clearRotation() {
        rotationCase_ = 0;
        rotation_ = null;
        onChanged();
        return this;
      }


      private cmvr.api.Geometry.Vec3 position_;
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.api.Geometry.Vec3, cmvr.api.Geometry.Vec3.Builder, cmvr.api.Geometry.Vec3OrBuilder> positionBuilder_;
      /**
       * <pre>
       * (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec3 position = 1;</code>
       * @return Whether the position field is set.
       */
      public boolean hasPosition() {
        return positionBuilder_ != null || position_ != null;
      }
      /**
       * <pre>
       * (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec3 position = 1;</code>
       * @return The position.
       */
      public cmvr.api.Geometry.Vec3 getPosition() {
        if (positionBuilder_ == null) {
          return position_ == null ? cmvr.api.Geometry.Vec3.getDefaultInstance() : position_;
        } else {
          return positionBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec3 position = 1;</code>
       */
      public Builder setPosition(cmvr.api.Geometry.Vec3 value) {
        if (positionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          position_ = value;
          onChanged();
        } else {
          positionBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec3 position = 1;</code>
       */
      public Builder setPosition(
          cmvr.api.Geometry.Vec3.Builder builderForValue) {
        if (positionBuilder_ == null) {
          position_ = builderForValue.build();
          onChanged();
        } else {
          positionBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec3 position = 1;</code>
       */
      public Builder mergePosition(cmvr.api.Geometry.Vec3 value) {
        if (positionBuilder_ == null) {
          if (position_ != null) {
            position_ =
              cmvr.api.Geometry.Vec3.newBuilder(position_).mergeFrom(value).buildPartial();
          } else {
            position_ = value;
          }
          onChanged();
        } else {
          positionBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec3 position = 1;</code>
       */
      public Builder clearPosition() {
        if (positionBuilder_ == null) {
          position_ = null;
          onChanged();
        } else {
          position_ = null;
          positionBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec3 position = 1;</code>
       */
      public cmvr.api.Geometry.Vec3.Builder getPositionBuilder() {
        
        onChanged();
        return getPositionFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec3 position = 1;</code>
       */
      public cmvr.api.Geometry.Vec3OrBuilder getPositionOrBuilder() {
        if (positionBuilder_ != null) {
          return positionBuilder_.getMessageOrBuilder();
        } else {
          return position_ == null ?
              cmvr.api.Geometry.Vec3.getDefaultInstance() : position_;
        }
      }
      /**
       * <pre>
       * (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec3 position = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.api.Geometry.Vec3, cmvr.api.Geometry.Vec3.Builder, cmvr.api.Geometry.Vec3OrBuilder> 
          getPositionFieldBuilder() {
        if (positionBuilder_ == null) {
          positionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              cmvr.api.Geometry.Vec3, cmvr.api.Geometry.Vec3.Builder, cmvr.api.Geometry.Vec3OrBuilder>(
                  getPosition(),
                  getParentForChildren(),
                  isClean());
          position_ = null;
        }
        return positionBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.api.Geometry.Quaternion, cmvr.api.Geometry.Quaternion.Builder, cmvr.api.Geometry.QuaternionOrBuilder> quaternionBuilder_;
      /**
       * <code>.cmvr.api.Quaternion quaternion = 2;</code>
       * @return Whether the quaternion field is set.
       */
      @java.lang.Override
      public boolean hasQuaternion() {
        return rotationCase_ == 2;
      }
      /**
       * <code>.cmvr.api.Quaternion quaternion = 2;</code>
       * @return The quaternion.
       */
      @java.lang.Override
      public cmvr.api.Geometry.Quaternion getQuaternion() {
        if (quaternionBuilder_ == null) {
          if (rotationCase_ == 2) {
            return (cmvr.api.Geometry.Quaternion) rotation_;
          }
          return cmvr.api.Geometry.Quaternion.getDefaultInstance();
        } else {
          if (rotationCase_ == 2) {
            return quaternionBuilder_.getMessage();
          }
          return cmvr.api.Geometry.Quaternion.getDefaultInstance();
        }
      }
      /**
       * <code>.cmvr.api.Quaternion quaternion = 2;</code>
       */
      public Builder setQuaternion(cmvr.api.Geometry.Quaternion value) {
        if (quaternionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          rotation_ = value;
          onChanged();
        } else {
          quaternionBuilder_.setMessage(value);
        }
        rotationCase_ = 2;
        return this;
      }
      /**
       * <code>.cmvr.api.Quaternion quaternion = 2;</code>
       */
      public Builder setQuaternion(
          cmvr.api.Geometry.Quaternion.Builder builderForValue) {
        if (quaternionBuilder_ == null) {
          rotation_ = builderForValue.build();
          onChanged();
        } else {
          quaternionBuilder_.setMessage(builderForValue.build());
        }
        rotationCase_ = 2;
        return this;
      }
      /**
       * <code>.cmvr.api.Quaternion quaternion = 2;</code>
       */
      public Builder mergeQuaternion(cmvr.api.Geometry.Quaternion value) {
        if (quaternionBuilder_ == null) {
          if (rotationCase_ == 2 &&
              rotation_ != cmvr.api.Geometry.Quaternion.getDefaultInstance()) {
            rotation_ = cmvr.api.Geometry.Quaternion.newBuilder((cmvr.api.Geometry.Quaternion) rotation_)
                .mergeFrom(value).buildPartial();
          } else {
            rotation_ = value;
          }
          onChanged();
        } else {
          if (rotationCase_ == 2) {
            quaternionBuilder_.mergeFrom(value);
          } else {
            quaternionBuilder_.setMessage(value);
          }
        }
        rotationCase_ = 2;
        return this;
      }
      /**
       * <code>.cmvr.api.Quaternion quaternion = 2;</code>
       */
      public Builder clearQuaternion() {
        if (quaternionBuilder_ == null) {
          if (rotationCase_ == 2) {
            rotationCase_ = 0;
            rotation_ = null;
            onChanged();
          }
        } else {
          if (rotationCase_ == 2) {
            rotationCase_ = 0;
            rotation_ = null;
          }
          quaternionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.cmvr.api.Quaternion quaternion = 2;</code>
       */
      public cmvr.api.Geometry.Quaternion.Builder getQuaternionBuilder() {
        return getQuaternionFieldBuilder().getBuilder();
      }
      /**
       * <code>.cmvr.api.Quaternion quaternion = 2;</code>
       */
      @java.lang.Override
      public cmvr.api.Geometry.QuaternionOrBuilder getQuaternionOrBuilder() {
        if ((rotationCase_ == 2) && (quaternionBuilder_ != null)) {
          return quaternionBuilder_.getMessageOrBuilder();
        } else {
          if (rotationCase_ == 2) {
            return (cmvr.api.Geometry.Quaternion) rotation_;
          }
          return cmvr.api.Geometry.Quaternion.getDefaultInstance();
        }
      }
      /**
       * <code>.cmvr.api.Quaternion quaternion = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.api.Geometry.Quaternion, cmvr.api.Geometry.Quaternion.Builder, cmvr.api.Geometry.QuaternionOrBuilder> 
          getQuaternionFieldBuilder() {
        if (quaternionBuilder_ == null) {
          if (!(rotationCase_ == 2)) {
            rotation_ = cmvr.api.Geometry.Quaternion.getDefaultInstance();
          }
          quaternionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              cmvr.api.Geometry.Quaternion, cmvr.api.Geometry.Quaternion.Builder, cmvr.api.Geometry.QuaternionOrBuilder>(
                  (cmvr.api.Geometry.Quaternion) rotation_,
                  getParentForChildren(),
                  isClean());
          rotation_ = null;
        }
        rotationCase_ = 2;
        onChanged();;
        return quaternionBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.api.Geometry.EulerAngleZYX, cmvr.api.Geometry.EulerAngleZYX.Builder, cmvr.api.Geometry.EulerAngleZYXOrBuilder> eulerBuilder_;
      /**
       * <code>.cmvr.api.EulerAngleZYX euler = 3;</code>
       * @return Whether the euler field is set.
       */
      @java.lang.Override
      public boolean hasEuler() {
        return rotationCase_ == 3;
      }
      /**
       * <code>.cmvr.api.EulerAngleZYX euler = 3;</code>
       * @return The euler.
       */
      @java.lang.Override
      public cmvr.api.Geometry.EulerAngleZYX getEuler() {
        if (eulerBuilder_ == null) {
          if (rotationCase_ == 3) {
            return (cmvr.api.Geometry.EulerAngleZYX) rotation_;
          }
          return cmvr.api.Geometry.EulerAngleZYX.getDefaultInstance();
        } else {
          if (rotationCase_ == 3) {
            return eulerBuilder_.getMessage();
          }
          return cmvr.api.Geometry.EulerAngleZYX.getDefaultInstance();
        }
      }
      /**
       * <code>.cmvr.api.EulerAngleZYX euler = 3;</code>
       */
      public Builder setEuler(cmvr.api.Geometry.EulerAngleZYX value) {
        if (eulerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          rotation_ = value;
          onChanged();
        } else {
          eulerBuilder_.setMessage(value);
        }
        rotationCase_ = 3;
        return this;
      }
      /**
       * <code>.cmvr.api.EulerAngleZYX euler = 3;</code>
       */
      public Builder setEuler(
          cmvr.api.Geometry.EulerAngleZYX.Builder builderForValue) {
        if (eulerBuilder_ == null) {
          rotation_ = builderForValue.build();
          onChanged();
        } else {
          eulerBuilder_.setMessage(builderForValue.build());
        }
        rotationCase_ = 3;
        return this;
      }
      /**
       * <code>.cmvr.api.EulerAngleZYX euler = 3;</code>
       */
      public Builder mergeEuler(cmvr.api.Geometry.EulerAngleZYX value) {
        if (eulerBuilder_ == null) {
          if (rotationCase_ == 3 &&
              rotation_ != cmvr.api.Geometry.EulerAngleZYX.getDefaultInstance()) {
            rotation_ = cmvr.api.Geometry.EulerAngleZYX.newBuilder((cmvr.api.Geometry.EulerAngleZYX) rotation_)
                .mergeFrom(value).buildPartial();
          } else {
            rotation_ = value;
          }
          onChanged();
        } else {
          if (rotationCase_ == 3) {
            eulerBuilder_.mergeFrom(value);
          } else {
            eulerBuilder_.setMessage(value);
          }
        }
        rotationCase_ = 3;
        return this;
      }
      /**
       * <code>.cmvr.api.EulerAngleZYX euler = 3;</code>
       */
      public Builder clearEuler() {
        if (eulerBuilder_ == null) {
          if (rotationCase_ == 3) {
            rotationCase_ = 0;
            rotation_ = null;
            onChanged();
          }
        } else {
          if (rotationCase_ == 3) {
            rotationCase_ = 0;
            rotation_ = null;
          }
          eulerBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.cmvr.api.EulerAngleZYX euler = 3;</code>
       */
      public cmvr.api.Geometry.EulerAngleZYX.Builder getEulerBuilder() {
        return getEulerFieldBuilder().getBuilder();
      }
      /**
       * <code>.cmvr.api.EulerAngleZYX euler = 3;</code>
       */
      @java.lang.Override
      public cmvr.api.Geometry.EulerAngleZYXOrBuilder getEulerOrBuilder() {
        if ((rotationCase_ == 3) && (eulerBuilder_ != null)) {
          return eulerBuilder_.getMessageOrBuilder();
        } else {
          if (rotationCase_ == 3) {
            return (cmvr.api.Geometry.EulerAngleZYX) rotation_;
          }
          return cmvr.api.Geometry.EulerAngleZYX.getDefaultInstance();
        }
      }
      /**
       * <code>.cmvr.api.EulerAngleZYX euler = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.api.Geometry.EulerAngleZYX, cmvr.api.Geometry.EulerAngleZYX.Builder, cmvr.api.Geometry.EulerAngleZYXOrBuilder> 
          getEulerFieldBuilder() {
        if (eulerBuilder_ == null) {
          if (!(rotationCase_ == 3)) {
            rotation_ = cmvr.api.Geometry.EulerAngleZYX.getDefaultInstance();
          }
          eulerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              cmvr.api.Geometry.EulerAngleZYX, cmvr.api.Geometry.EulerAngleZYX.Builder, cmvr.api.Geometry.EulerAngleZYXOrBuilder>(
                  (cmvr.api.Geometry.EulerAngleZYX) rotation_,
                  getParentForChildren(),
                  isClean());
          rotation_ = null;
        }
        rotationCase_ = 3;
        onChanged();;
        return eulerBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:cmvr.api.SE3Pose)
    }

    // @@protoc_insertion_point(class_scope:cmvr.api.SE3Pose)
    private static final cmvr.api.Geometry.SE3Pose DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.api.Geometry.SE3Pose();
    }

    public static cmvr.api.Geometry.SE3Pose getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public cmvr.api.Geometry.SE3Pose getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface InertialOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.api.Inertial)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Mass (kg)
     * </pre>
     *
     * <code>double mass = 1;</code>
     * @return The mass.
     */
    double getMass();

    /**
     * <pre>
     * Center of mass (m)
     * </pre>
     *
     * <code>.cmvr.api.Vec3 center_of_mass = 2;</code>
     * @return Whether the centerOfMass field is set.
     */
    boolean hasCenterOfMass();
    /**
     * <pre>
     * Center of mass (m)
     * </pre>
     *
     * <code>.cmvr.api.Vec3 center_of_mass = 2;</code>
     * @return The centerOfMass.
     */
    cmvr.api.Geometry.Vec3 getCenterOfMass();
    /**
     * <pre>
     * Center of mass (m)
     * </pre>
     *
     * <code>.cmvr.api.Vec3 center_of_mass = 2;</code>
     */
    cmvr.api.Geometry.Vec3OrBuilder getCenterOfMassOrBuilder();

    /**
     * <pre>
     * Inertia tensor
     * </pre>
     *
     * <code>.cmvr.api.Inertia inertia = 3;</code>
     * @return Whether the inertia field is set.
     */
    boolean hasInertia();
    /**
     * <pre>
     * Inertia tensor
     * </pre>
     *
     * <code>.cmvr.api.Inertia inertia = 3;</code>
     * @return The inertia.
     */
    cmvr.api.Geometry.Inertia getInertia();
    /**
     * <pre>
     * Inertia tensor
     * </pre>
     *
     * <code>.cmvr.api.Inertia inertia = 3;</code>
     */
    cmvr.api.Geometry.InertiaOrBuilder getInertiaOrBuilder();
  }
  /**
   * Protobuf type {@code cmvr.api.Inertial}
   */
  public static final class Inertial extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.api.Inertial)
      InertialOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Inertial.newBuilder() to construct.
    private Inertial(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Inertial() {
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.api.Geometry.internal_static_cmvr_api_Inertial_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.api.Geometry.internal_static_cmvr_api_Inertial_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.api.Geometry.Inertial.class, cmvr.api.Geometry.Inertial.Builder.class);
    }

    public static final int MASS_FIELD_NUMBER = 1;
    private double mass_;
    /**
     * <pre>
     * Mass (kg)
     * </pre>
     *
     * <code>double mass = 1;</code>
     * @return The mass.
     */
    @java.lang.Override
    public double getMass() {
      return mass_;
    }

    public static final int CENTER_OF_MASS_FIELD_NUMBER = 2;
    private cmvr.api.Geometry.Vec3 centerOfMass_;
    /**
     * <pre>
     * Center of mass (m)
     * </pre>
     *
     * <code>.cmvr.api.Vec3 center_of_mass = 2;</code>
     * @return Whether the centerOfMass field is set.
     */
    @java.lang.Override
    public boolean hasCenterOfMass() {
      return centerOfMass_ != null;
    }
    /**
     * <pre>
     * Center of mass (m)
     * </pre>
     *
     * <code>.cmvr.api.Vec3 center_of_mass = 2;</code>
     * @return The centerOfMass.
     */
    @java.lang.Override
    public cmvr.api.Geometry.Vec3 getCenterOfMass() {
      return centerOfMass_ == null ? cmvr.api.Geometry.Vec3.getDefaultInstance() : centerOfMass_;
    }
    /**
     * <pre>
     * Center of mass (m)
     * </pre>
     *
     * <code>.cmvr.api.Vec3 center_of_mass = 2;</code>
     */
    @java.lang.Override
    public cmvr.api.Geometry.Vec3OrBuilder getCenterOfMassOrBuilder() {
      return getCenterOfMass();
    }

    public static final int INERTIA_FIELD_NUMBER = 3;
    private cmvr.api.Geometry.Inertia inertia_;
    /**
     * <pre>
     * Inertia tensor
     * </pre>
     *
     * <code>.cmvr.api.Inertia inertia = 3;</code>
     * @return Whether the inertia field is set.
     */
    @java.lang.Override
    public boolean hasInertia() {
      return inertia_ != null;
    }
    /**
     * <pre>
     * Inertia tensor
     * </pre>
     *
     * <code>.cmvr.api.Inertia inertia = 3;</code>
     * @return The inertia.
     */
    @java.lang.Override
    public cmvr.api.Geometry.Inertia getInertia() {
      return inertia_ == null ? cmvr.api.Geometry.Inertia.getDefaultInstance() : inertia_;
    }
    /**
     * <pre>
     * Inertia tensor
     * </pre>
     *
     * <code>.cmvr.api.Inertia inertia = 3;</code>
     */
    @java.lang.Override
    public cmvr.api.Geometry.InertiaOrBuilder getInertiaOrBuilder() {
      return getInertia();
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (java.lang.Double.doubleToRawLongBits(mass_) != 0) {
        output.writeDouble(1, mass_);
      }
      if (centerOfMass_ != null) {
        output.writeMessage(2, getCenterOfMass());
      }
      if (inertia_ != null) {
        output.writeMessage(3, getInertia());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (java.lang.Double.doubleToRawLongBits(mass_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(1, mass_);
      }
      if (centerOfMass_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getCenterOfMass());
      }
      if (inertia_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getInertia());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.api.Geometry.Inertial)) {
        return super.equals(obj);
      }
      cmvr.api.Geometry.Inertial other = (cmvr.api.Geometry.Inertial) obj;

      if (java.lang.Double.doubleToLongBits(getMass())
          != java.lang.Double.doubleToLongBits(
              other.getMass())) return false;
      if (hasCenterOfMass() != other.hasCenterOfMass()) return false;
      if (hasCenterOfMass()) {
        if (!getCenterOfMass()
            .equals(other.getCenterOfMass())) return false;
      }
      if (hasInertia() != other.hasInertia()) return false;
      if (hasInertia()) {
        if (!getInertia()
            .equals(other.getInertia())) return false;
      }
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + MASS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getMass()));
      if (hasCenterOfMass()) {
        hash = (37 * hash) + CENTER_OF_MASS_FIELD_NUMBER;
        hash = (53 * hash) + getCenterOfMass().hashCode();
      }
      if (hasInertia()) {
        hash = (37 * hash) + INERTIA_FIELD_NUMBER;
        hash = (53 * hash) + getInertia().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.api.Geometry.Inertial parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.Inertial parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.Inertial parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.Inertial parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.Inertial parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.Inertial parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.Inertial parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.Inertial parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.api.Geometry.Inertial parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.Inertial parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.api.Geometry.Inertial parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.Inertial parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.api.Geometry.Inertial prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code cmvr.api.Inertial}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.api.Inertial)
        cmvr.api.Geometry.InertialOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.api.Geometry.internal_static_cmvr_api_Inertial_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.api.Geometry.internal_static_cmvr_api_Inertial_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.api.Geometry.Inertial.class, cmvr.api.Geometry.Inertial.Builder.class);
      }

      // Construct using cmvr.api.Geometry.Inertial.newBuilder()
      private Builder() {

      }

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

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        mass_ = 0D;

        if (centerOfMassBuilder_ == null) {
          centerOfMass_ = null;
        } else {
          centerOfMass_ = null;
          centerOfMassBuilder_ = null;
        }
        if (inertiaBuilder_ == null) {
          inertia_ = null;
        } else {
          inertia_ = null;
          inertiaBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.api.Geometry.internal_static_cmvr_api_Inertial_descriptor;
      }

      @java.lang.Override
      public cmvr.api.Geometry.Inertial getDefaultInstanceForType() {
        return cmvr.api.Geometry.Inertial.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.api.Geometry.Inertial build() {
        cmvr.api.Geometry.Inertial result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.api.Geometry.Inertial buildPartial() {
        cmvr.api.Geometry.Inertial result = new cmvr.api.Geometry.Inertial(this);
        result.mass_ = mass_;
        if (centerOfMassBuilder_ == null) {
          result.centerOfMass_ = centerOfMass_;
        } else {
          result.centerOfMass_ = centerOfMassBuilder_.build();
        }
        if (inertiaBuilder_ == null) {
          result.inertia_ = inertia_;
        } else {
          result.inertia_ = inertiaBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(cmvr.api.Geometry.Inertial other) {
        if (other == cmvr.api.Geometry.Inertial.getDefaultInstance()) return this;
        if (other.getMass() != 0D) {
          setMass(other.getMass());
        }
        if (other.hasCenterOfMass()) {
          mergeCenterOfMass(other.getCenterOfMass());
        }
        if (other.hasInertia()) {
          mergeInertia(other.getInertia());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 9: {
                mass_ = input.readDouble();

                break;
              } // case 9
              case 18: {
                input.readMessage(
                    getCenterOfMassFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 18
              case 26: {
                input.readMessage(
                    getInertiaFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 26
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private double mass_ ;
      /**
       * <pre>
       * Mass (kg)
       * </pre>
       *
       * <code>double mass = 1;</code>
       * @return The mass.
       */
      @java.lang.Override
      public double getMass() {
        return mass_;
      }
      /**
       * <pre>
       * Mass (kg)
       * </pre>
       *
       * <code>double mass = 1;</code>
       * @param value The mass to set.
       * @return This builder for chaining.
       */
      public Builder setMass(double value) {
        
        mass_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Mass (kg)
       * </pre>
       *
       * <code>double mass = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearMass() {
        
        mass_ = 0D;
        onChanged();
        return this;
      }

      private cmvr.api.Geometry.Vec3 centerOfMass_;
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.api.Geometry.Vec3, cmvr.api.Geometry.Vec3.Builder, cmvr.api.Geometry.Vec3OrBuilder> centerOfMassBuilder_;
      /**
       * <pre>
       * Center of mass (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec3 center_of_mass = 2;</code>
       * @return Whether the centerOfMass field is set.
       */
      public boolean hasCenterOfMass() {
        return centerOfMassBuilder_ != null || centerOfMass_ != null;
      }
      /**
       * <pre>
       * Center of mass (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec3 center_of_mass = 2;</code>
       * @return The centerOfMass.
       */
      public cmvr.api.Geometry.Vec3 getCenterOfMass() {
        if (centerOfMassBuilder_ == null) {
          return centerOfMass_ == null ? cmvr.api.Geometry.Vec3.getDefaultInstance() : centerOfMass_;
        } else {
          return centerOfMassBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Center of mass (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec3 center_of_mass = 2;</code>
       */
      public Builder setCenterOfMass(cmvr.api.Geometry.Vec3 value) {
        if (centerOfMassBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          centerOfMass_ = value;
          onChanged();
        } else {
          centerOfMassBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * Center of mass (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec3 center_of_mass = 2;</code>
       */
      public Builder setCenterOfMass(
          cmvr.api.Geometry.Vec3.Builder builderForValue) {
        if (centerOfMassBuilder_ == null) {
          centerOfMass_ = builderForValue.build();
          onChanged();
        } else {
          centerOfMassBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * Center of mass (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec3 center_of_mass = 2;</code>
       */
      public Builder mergeCenterOfMass(cmvr.api.Geometry.Vec3 value) {
        if (centerOfMassBuilder_ == null) {
          if (centerOfMass_ != null) {
            centerOfMass_ =
              cmvr.api.Geometry.Vec3.newBuilder(centerOfMass_).mergeFrom(value).buildPartial();
          } else {
            centerOfMass_ = value;
          }
          onChanged();
        } else {
          centerOfMassBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * Center of mass (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec3 center_of_mass = 2;</code>
       */
      public Builder clearCenterOfMass() {
        if (centerOfMassBuilder_ == null) {
          centerOfMass_ = null;
          onChanged();
        } else {
          centerOfMass_ = null;
          centerOfMassBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * Center of mass (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec3 center_of_mass = 2;</code>
       */
      public cmvr.api.Geometry.Vec3.Builder getCenterOfMassBuilder() {
        
        onChanged();
        return getCenterOfMassFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Center of mass (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec3 center_of_mass = 2;</code>
       */
      public cmvr.api.Geometry.Vec3OrBuilder getCenterOfMassOrBuilder() {
        if (centerOfMassBuilder_ != null) {
          return centerOfMassBuilder_.getMessageOrBuilder();
        } else {
          return centerOfMass_ == null ?
              cmvr.api.Geometry.Vec3.getDefaultInstance() : centerOfMass_;
        }
      }
      /**
       * <pre>
       * Center of mass (m)
       * </pre>
       *
       * <code>.cmvr.api.Vec3 center_of_mass = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.api.Geometry.Vec3, cmvr.api.Geometry.Vec3.Builder, cmvr.api.Geometry.Vec3OrBuilder> 
          getCenterOfMassFieldBuilder() {
        if (centerOfMassBuilder_ == null) {
          centerOfMassBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              cmvr.api.Geometry.Vec3, cmvr.api.Geometry.Vec3.Builder, cmvr.api.Geometry.Vec3OrBuilder>(
                  getCenterOfMass(),
                  getParentForChildren(),
                  isClean());
          centerOfMass_ = null;
        }
        return centerOfMassBuilder_;
      }

      private cmvr.api.Geometry.Inertia inertia_;
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.api.Geometry.Inertia, cmvr.api.Geometry.Inertia.Builder, cmvr.api.Geometry.InertiaOrBuilder> inertiaBuilder_;
      /**
       * <pre>
       * Inertia tensor
       * </pre>
       *
       * <code>.cmvr.api.Inertia inertia = 3;</code>
       * @return Whether the inertia field is set.
       */
      public boolean hasInertia() {
        return inertiaBuilder_ != null || inertia_ != null;
      }
      /**
       * <pre>
       * Inertia tensor
       * </pre>
       *
       * <code>.cmvr.api.Inertia inertia = 3;</code>
       * @return The inertia.
       */
      public cmvr.api.Geometry.Inertia getInertia() {
        if (inertiaBuilder_ == null) {
          return inertia_ == null ? cmvr.api.Geometry.Inertia.getDefaultInstance() : inertia_;
        } else {
          return inertiaBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Inertia tensor
       * </pre>
       *
       * <code>.cmvr.api.Inertia inertia = 3;</code>
       */
      public Builder setInertia(cmvr.api.Geometry.Inertia value) {
        if (inertiaBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          inertia_ = value;
          onChanged();
        } else {
          inertiaBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * Inertia tensor
       * </pre>
       *
       * <code>.cmvr.api.Inertia inertia = 3;</code>
       */
      public Builder setInertia(
          cmvr.api.Geometry.Inertia.Builder builderForValue) {
        if (inertiaBuilder_ == null) {
          inertia_ = builderForValue.build();
          onChanged();
        } else {
          inertiaBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * Inertia tensor
       * </pre>
       *
       * <code>.cmvr.api.Inertia inertia = 3;</code>
       */
      public Builder mergeInertia(cmvr.api.Geometry.Inertia value) {
        if (inertiaBuilder_ == null) {
          if (inertia_ != null) {
            inertia_ =
              cmvr.api.Geometry.Inertia.newBuilder(inertia_).mergeFrom(value).buildPartial();
          } else {
            inertia_ = value;
          }
          onChanged();
        } else {
          inertiaBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * Inertia tensor
       * </pre>
       *
       * <code>.cmvr.api.Inertia inertia = 3;</code>
       */
      public Builder clearInertia() {
        if (inertiaBuilder_ == null) {
          inertia_ = null;
          onChanged();
        } else {
          inertia_ = null;
          inertiaBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * Inertia tensor
       * </pre>
       *
       * <code>.cmvr.api.Inertia inertia = 3;</code>
       */
      public cmvr.api.Geometry.Inertia.Builder getInertiaBuilder() {
        
        onChanged();
        return getInertiaFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Inertia tensor
       * </pre>
       *
       * <code>.cmvr.api.Inertia inertia = 3;</code>
       */
      public cmvr.api.Geometry.InertiaOrBuilder getInertiaOrBuilder() {
        if (inertiaBuilder_ != null) {
          return inertiaBuilder_.getMessageOrBuilder();
        } else {
          return inertia_ == null ?
              cmvr.api.Geometry.Inertia.getDefaultInstance() : inertia_;
        }
      }
      /**
       * <pre>
       * Inertia tensor
       * </pre>
       *
       * <code>.cmvr.api.Inertia inertia = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.api.Geometry.Inertia, cmvr.api.Geometry.Inertia.Builder, cmvr.api.Geometry.InertiaOrBuilder> 
          getInertiaFieldBuilder() {
        if (inertiaBuilder_ == null) {
          inertiaBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              cmvr.api.Geometry.Inertia, cmvr.api.Geometry.Inertia.Builder, cmvr.api.Geometry.InertiaOrBuilder>(
                  getInertia(),
                  getParentForChildren(),
                  isClean());
          inertia_ = null;
        }
        return inertiaBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:cmvr.api.Inertial)
    }

    // @@protoc_insertion_point(class_scope:cmvr.api.Inertial)
    private static final cmvr.api.Geometry.Inertial DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.api.Geometry.Inertial();
    }

    public static cmvr.api.Geometry.Inertial getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public cmvr.api.Geometry.Inertial getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface InertiaOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.api.Inertia)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>double ixx = 1;</code>
     * @return The ixx.
     */
    double getIxx();

    /**
     * <code>double iyy = 2;</code>
     * @return The iyy.
     */
    double getIyy();

    /**
     * <code>double izz = 3;</code>
     * @return The izz.
     */
    double getIzz();

    /**
     * <code>double ixy = 4;</code>
     * @return The ixy.
     */
    double getIxy();

    /**
     * <code>double ixz = 5;</code>
     * @return The ixz.
     */
    double getIxz();

    /**
     * <code>double iyz = 6;</code>
     * @return The iyz.
     */
    double getIyz();
  }
  /**
   * <pre>
   * Inertia tensor components (kg*m^2)
   * </pre>
   *
   * Protobuf type {@code cmvr.api.Inertia}
   */
  public static final class Inertia extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.api.Inertia)
      InertiaOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Inertia.newBuilder() to construct.
    private Inertia(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Inertia() {
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.api.Geometry.internal_static_cmvr_api_Inertia_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.api.Geometry.internal_static_cmvr_api_Inertia_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.api.Geometry.Inertia.class, cmvr.api.Geometry.Inertia.Builder.class);
    }

    public static final int IXX_FIELD_NUMBER = 1;
    private double ixx_;
    /**
     * <code>double ixx = 1;</code>
     * @return The ixx.
     */
    @java.lang.Override
    public double getIxx() {
      return ixx_;
    }

    public static final int IYY_FIELD_NUMBER = 2;
    private double iyy_;
    /**
     * <code>double iyy = 2;</code>
     * @return The iyy.
     */
    @java.lang.Override
    public double getIyy() {
      return iyy_;
    }

    public static final int IZZ_FIELD_NUMBER = 3;
    private double izz_;
    /**
     * <code>double izz = 3;</code>
     * @return The izz.
     */
    @java.lang.Override
    public double getIzz() {
      return izz_;
    }

    public static final int IXY_FIELD_NUMBER = 4;
    private double ixy_;
    /**
     * <code>double ixy = 4;</code>
     * @return The ixy.
     */
    @java.lang.Override
    public double getIxy() {
      return ixy_;
    }

    public static final int IXZ_FIELD_NUMBER = 5;
    private double ixz_;
    /**
     * <code>double ixz = 5;</code>
     * @return The ixz.
     */
    @java.lang.Override
    public double getIxz() {
      return ixz_;
    }

    public static final int IYZ_FIELD_NUMBER = 6;
    private double iyz_;
    /**
     * <code>double iyz = 6;</code>
     * @return The iyz.
     */
    @java.lang.Override
    public double getIyz() {
      return iyz_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (java.lang.Double.doubleToRawLongBits(ixx_) != 0) {
        output.writeDouble(1, ixx_);
      }
      if (java.lang.Double.doubleToRawLongBits(iyy_) != 0) {
        output.writeDouble(2, iyy_);
      }
      if (java.lang.Double.doubleToRawLongBits(izz_) != 0) {
        output.writeDouble(3, izz_);
      }
      if (java.lang.Double.doubleToRawLongBits(ixy_) != 0) {
        output.writeDouble(4, ixy_);
      }
      if (java.lang.Double.doubleToRawLongBits(ixz_) != 0) {
        output.writeDouble(5, ixz_);
      }
      if (java.lang.Double.doubleToRawLongBits(iyz_) != 0) {
        output.writeDouble(6, iyz_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (java.lang.Double.doubleToRawLongBits(ixx_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(1, ixx_);
      }
      if (java.lang.Double.doubleToRawLongBits(iyy_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(2, iyy_);
      }
      if (java.lang.Double.doubleToRawLongBits(izz_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, izz_);
      }
      if (java.lang.Double.doubleToRawLongBits(ixy_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(4, ixy_);
      }
      if (java.lang.Double.doubleToRawLongBits(ixz_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(5, ixz_);
      }
      if (java.lang.Double.doubleToRawLongBits(iyz_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(6, iyz_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.api.Geometry.Inertia)) {
        return super.equals(obj);
      }
      cmvr.api.Geometry.Inertia other = (cmvr.api.Geometry.Inertia) obj;

      if (java.lang.Double.doubleToLongBits(getIxx())
          != java.lang.Double.doubleToLongBits(
              other.getIxx())) return false;
      if (java.lang.Double.doubleToLongBits(getIyy())
          != java.lang.Double.doubleToLongBits(
              other.getIyy())) return false;
      if (java.lang.Double.doubleToLongBits(getIzz())
          != java.lang.Double.doubleToLongBits(
              other.getIzz())) return false;
      if (java.lang.Double.doubleToLongBits(getIxy())
          != java.lang.Double.doubleToLongBits(
              other.getIxy())) return false;
      if (java.lang.Double.doubleToLongBits(getIxz())
          != java.lang.Double.doubleToLongBits(
              other.getIxz())) return false;
      if (java.lang.Double.doubleToLongBits(getIyz())
          != java.lang.Double.doubleToLongBits(
              other.getIyz())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + IXX_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getIxx()));
      hash = (37 * hash) + IYY_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getIyy()));
      hash = (37 * hash) + IZZ_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getIzz()));
      hash = (37 * hash) + IXY_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getIxy()));
      hash = (37 * hash) + IXZ_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getIxz()));
      hash = (37 * hash) + IYZ_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getIyz()));
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.api.Geometry.Inertia parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.Inertia parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.Inertia parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.Inertia parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.Inertia parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.api.Geometry.Inertia parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.api.Geometry.Inertia parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.Inertia parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.api.Geometry.Inertia parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.Inertia parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.api.Geometry.Inertia parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.api.Geometry.Inertia parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.api.Geometry.Inertia prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Inertia tensor components (kg*m^2)
     * </pre>
     *
     * Protobuf type {@code cmvr.api.Inertia}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.api.Inertia)
        cmvr.api.Geometry.InertiaOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.api.Geometry.internal_static_cmvr_api_Inertia_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.api.Geometry.internal_static_cmvr_api_Inertia_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.api.Geometry.Inertia.class, cmvr.api.Geometry.Inertia.Builder.class);
      }

      // Construct using cmvr.api.Geometry.Inertia.newBuilder()
      private Builder() {

      }

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

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        ixx_ = 0D;

        iyy_ = 0D;

        izz_ = 0D;

        ixy_ = 0D;

        ixz_ = 0D;

        iyz_ = 0D;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.api.Geometry.internal_static_cmvr_api_Inertia_descriptor;
      }

      @java.lang.Override
      public cmvr.api.Geometry.Inertia getDefaultInstanceForType() {
        return cmvr.api.Geometry.Inertia.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.api.Geometry.Inertia build() {
        cmvr.api.Geometry.Inertia result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.api.Geometry.Inertia buildPartial() {
        cmvr.api.Geometry.Inertia result = new cmvr.api.Geometry.Inertia(this);
        result.ixx_ = ixx_;
        result.iyy_ = iyy_;
        result.izz_ = izz_;
        result.ixy_ = ixy_;
        result.ixz_ = ixz_;
        result.iyz_ = iyz_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(cmvr.api.Geometry.Inertia other) {
        if (other == cmvr.api.Geometry.Inertia.getDefaultInstance()) return this;
        if (other.getIxx() != 0D) {
          setIxx(other.getIxx());
        }
        if (other.getIyy() != 0D) {
          setIyy(other.getIyy());
        }
        if (other.getIzz() != 0D) {
          setIzz(other.getIzz());
        }
        if (other.getIxy() != 0D) {
          setIxy(other.getIxy());
        }
        if (other.getIxz() != 0D) {
          setIxz(other.getIxz());
        }
        if (other.getIyz() != 0D) {
          setIyz(other.getIyz());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 9: {
                ixx_ = input.readDouble();

                break;
              } // case 9
              case 17: {
                iyy_ = input.readDouble();

                break;
              } // case 17
              case 25: {
                izz_ = input.readDouble();

                break;
              } // case 25
              case 33: {
                ixy_ = input.readDouble();

                break;
              } // case 33
              case 41: {
                ixz_ = input.readDouble();

                break;
              } // case 41
              case 49: {
                iyz_ = input.readDouble();

                break;
              } // case 49
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private double ixx_ ;
      /**
       * <code>double ixx = 1;</code>
       * @return The ixx.
       */
      @java.lang.Override
      public double getIxx() {
        return ixx_;
      }
      /**
       * <code>double ixx = 1;</code>
       * @param value The ixx to set.
       * @return This builder for chaining.
       */
      public Builder setIxx(double value) {
        
        ixx_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double ixx = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearIxx() {
        
        ixx_ = 0D;
        onChanged();
        return this;
      }

      private double iyy_ ;
      /**
       * <code>double iyy = 2;</code>
       * @return The iyy.
       */
      @java.lang.Override
      public double getIyy() {
        return iyy_;
      }
      /**
       * <code>double iyy = 2;</code>
       * @param value The iyy to set.
       * @return This builder for chaining.
       */
      public Builder setIyy(double value) {
        
        iyy_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double iyy = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearIyy() {
        
        iyy_ = 0D;
        onChanged();
        return this;
      }

      private double izz_ ;
      /**
       * <code>double izz = 3;</code>
       * @return The izz.
       */
      @java.lang.Override
      public double getIzz() {
        return izz_;
      }
      /**
       * <code>double izz = 3;</code>
       * @param value The izz to set.
       * @return This builder for chaining.
       */
      public Builder setIzz(double value) {
        
        izz_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double izz = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearIzz() {
        
        izz_ = 0D;
        onChanged();
        return this;
      }

      private double ixy_ ;
      /**
       * <code>double ixy = 4;</code>
       * @return The ixy.
       */
      @java.lang.Override
      public double getIxy() {
        return ixy_;
      }
      /**
       * <code>double ixy = 4;</code>
       * @param value The ixy to set.
       * @return This builder for chaining.
       */
      public Builder setIxy(double value) {
        
        ixy_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double ixy = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearIxy() {
        
        ixy_ = 0D;
        onChanged();
        return this;
      }

      private double ixz_ ;
      /**
       * <code>double ixz = 5;</code>
       * @return The ixz.
       */
      @java.lang.Override
      public double getIxz() {
        return ixz_;
      }
      /**
       * <code>double ixz = 5;</code>
       * @param value The ixz to set.
       * @return This builder for chaining.
       */
      public Builder setIxz(double value) {
        
        ixz_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double ixz = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearIxz() {
        
        ixz_ = 0D;
        onChanged();
        return this;
      }

      private double iyz_ ;
      /**
       * <code>double iyz = 6;</code>
       * @return The iyz.
       */
      @java.lang.Override
      public double getIyz() {
        return iyz_;
      }
      /**
       * <code>double iyz = 6;</code>
       * @param value The iyz to set.
       * @return This builder for chaining.
       */
      public Builder setIyz(double value) {
        
        iyz_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double iyz = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearIyz() {
        
        iyz_ = 0D;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:cmvr.api.Inertia)
    }

    // @@protoc_insertion_point(class_scope:cmvr.api.Inertia)
    private static final cmvr.api.Geometry.Inertia DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.api.Geometry.Inertia();
    }

    public static cmvr.api.Geometry.Inertia getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public cmvr.api.Geometry.Inertia getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_api_Vec2_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_api_Vec2_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_api_Vec3_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_api_Vec3_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_api_SE2Pose_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_api_SE2Pose_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_api_SE2Velocity_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_api_SE2Velocity_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_api_Quaternion_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_api_Quaternion_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_api_EulerAngleZYX_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_api_EulerAngleZYX_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_api_SE3Pose_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_api_SE3Pose_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_api_Inertial_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_api_Inertial_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_api_Inertia_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_api_Inertia_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\027cmvr/api/geometry.proto\022\010cmvr.api\"\034\n\004V" +
      "ec2\022\t\n\001x\030\001 \001(\001\022\t\n\001y\030\002 \001(\001\"\'\n\004Vec3\022\t\n\001x\030\001" +
      " \001(\001\022\t\n\001y\030\002 \001(\001\022\t\n\001z\030\003 \001(\001\":\n\007SE2Pose\022 \n" +
      "\010position\030\001 \001(\0132\016.cmvr.api.Vec2\022\r\n\005angle" +
      "\030\002 \001(\001\">\n\013SE2Velocity\022\036\n\006linear\030\001 \001(\0132\016." +
      "cmvr.api.Vec2\022\017\n\007angular\030\002 \001(\001\"8\n\nQuater" +
      "nion\022\t\n\001x\030\001 \001(\001\022\t\n\001y\030\002 \001(\001\022\t\n\001z\030\003 \001(\001\022\t\n" +
      "\001w\030\004 \001(\001\"0\n\rEulerAngleZYX\022\t\n\001z\030\001 \001(\001\022\t\n\001" +
      "y\030\002 \001(\001\022\t\n\001x\030\003 \001(\001\"\215\001\n\007SE3Pose\022 \n\010positi" +
      "on\030\001 \001(\0132\016.cmvr.api.Vec3\022*\n\nquaternion\030\002" +
      " \001(\0132\024.cmvr.api.QuaternionH\000\022(\n\005euler\030\003 " +
      "\001(\0132\027.cmvr.api.EulerAngleZYXH\000B\n\n\010rotati" +
      "on\"d\n\010Inertial\022\014\n\004mass\030\001 \001(\001\022&\n\016center_o" +
      "f_mass\030\002 \001(\0132\016.cmvr.api.Vec3\022\"\n\007inertia\030" +
      "\003 \001(\0132\021.cmvr.api.Inertia\"W\n\007Inertia\022\013\n\003i" +
      "xx\030\001 \001(\001\022\013\n\003iyy\030\002 \001(\001\022\013\n\003izz\030\003 \001(\001\022\013\n\003ix" +
      "y\030\004 \001(\001\022\013\n\003ixz\030\005 \001(\001\022\013\n\003iyz\030\006 \001(\001b\006proto" +
      "3"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        });
    internal_static_cmvr_api_Vec2_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_cmvr_api_Vec2_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_api_Vec2_descriptor,
        new java.lang.String[] { "X", "Y", });
    internal_static_cmvr_api_Vec3_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_cmvr_api_Vec3_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_api_Vec3_descriptor,
        new java.lang.String[] { "X", "Y", "Z", });
    internal_static_cmvr_api_SE2Pose_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_cmvr_api_SE2Pose_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_api_SE2Pose_descriptor,
        new java.lang.String[] { "Position", "Angle", });
    internal_static_cmvr_api_SE2Velocity_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_cmvr_api_SE2Velocity_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_api_SE2Velocity_descriptor,
        new java.lang.String[] { "Linear", "Angular", });
    internal_static_cmvr_api_Quaternion_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_cmvr_api_Quaternion_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_api_Quaternion_descriptor,
        new java.lang.String[] { "X", "Y", "Z", "W", });
    internal_static_cmvr_api_EulerAngleZYX_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_cmvr_api_EulerAngleZYX_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_api_EulerAngleZYX_descriptor,
        new java.lang.String[] { "Z", "Y", "X", });
    internal_static_cmvr_api_SE3Pose_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_cmvr_api_SE3Pose_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_api_SE3Pose_descriptor,
        new java.lang.String[] { "Position", "Quaternion", "Euler", "Rotation", });
    internal_static_cmvr_api_Inertial_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_cmvr_api_Inertial_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_api_Inertial_descriptor,
        new java.lang.String[] { "Mass", "CenterOfMass", "Inertia", });
    internal_static_cmvr_api_Inertia_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_cmvr_api_Inertia_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_api_Inertia_descriptor,
        new java.lang.String[] { "Ixx", "Iyy", "Izz", "Ixy", "Ixz", "Iyz", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
