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

package api;

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

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  /**
   * Protobuf enum {@code api.Algorithm}
   */
  public enum Algorithm
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <pre>
     * BFS is short for the breadth-first search algorithm
     * </pre>
     *
     * <code>BFS = 0;</code>
     */
    BFS(0),
    /**
     * <pre>
     * DFS is short for the depth-first search algorithm
     * </pre>
     *
     * <code>DFS = 1;</code>
     */
    DFS(1),
    UNRECOGNIZED(-1),
    ;

    /**
     * <pre>
     * BFS is short for the breadth-first search algorithm
     * </pre>
     *
     * <code>BFS = 0;</code>
     */
    public static final int BFS_VALUE = 0;
    /**
     * <pre>
     * DFS is short for the depth-first search algorithm
     * </pre>
     *
     * <code>DFS = 1;</code>
     */
    public static final int DFS_VALUE = 1;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

    /**
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static Algorithm valueOf(int value) {
      return forNumber(value);
    }

    public static Algorithm forNumber(int value) {
      switch (value) {
        case 0: return BFS;
        case 1: return DFS;
        default: return null;
      }
    }

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

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

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:api.Algorithm)
  }

  /**
   * Protobuf enum {@code api.Aggregate}
   */
  public enum Aggregate
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>COUNT = 0;</code>
     */
    COUNT(0),
    /**
     * <code>SUM = 1;</code>
     */
    SUM(1),
    /**
     * <code>AVG = 2;</code>
     */
    AVG(2),
    /**
     * <code>MAX = 3;</code>
     */
    MAX(3),
    /**
     * <code>MIN = 4;</code>
     */
    MIN(4),
    /**
     * <code>PROD = 5;</code>
     */
    PROD(5),
    UNRECOGNIZED(-1),
    ;

    /**
     * <code>COUNT = 0;</code>
     */
    public static final int COUNT_VALUE = 0;
    /**
     * <code>SUM = 1;</code>
     */
    public static final int SUM_VALUE = 1;
    /**
     * <code>AVG = 2;</code>
     */
    public static final int AVG_VALUE = 2;
    /**
     * <code>MAX = 3;</code>
     */
    public static final int MAX_VALUE = 3;
    /**
     * <code>MIN = 4;</code>
     */
    public static final int MIN_VALUE = 4;
    /**
     * <code>PROD = 5;</code>
     */
    public static final int PROD_VALUE = 5;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

    /**
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static Aggregate valueOf(int value) {
      return forNumber(value);
    }

    public static Aggregate forNumber(int value) {
      switch (value) {
        case 0: return COUNT;
        case 1: return SUM;
        case 2: return AVG;
        case 3: return MAX;
        case 4: return MIN;
        case 5: return PROD;
        default: return null;
      }
    }

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

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

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:api.Aggregate)
  }

  /**
   * Protobuf enum {@code api.Membership}
   */
  public enum Membership
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>UNKNOWN = 0;</code>
     */
    UNKNOWN(0),
    /**
     * <code>FOLLOWER = 1;</code>
     */
    FOLLOWER(1),
    /**
     * <code>CANDIDATE = 2;</code>
     */
    CANDIDATE(2),
    /**
     * <code>LEADER = 3;</code>
     */
    LEADER(3),
    /**
     * <code>SHUTDOWN = 4;</code>
     */
    SHUTDOWN(4),
    UNRECOGNIZED(-1),
    ;

    /**
     * <code>UNKNOWN = 0;</code>
     */
    public static final int UNKNOWN_VALUE = 0;
    /**
     * <code>FOLLOWER = 1;</code>
     */
    public static final int FOLLOWER_VALUE = 1;
    /**
     * <code>CANDIDATE = 2;</code>
     */
    public static final int CANDIDATE_VALUE = 2;
    /**
     * <code>LEADER = 3;</code>
     */
    public static final int LEADER_VALUE = 3;
    /**
     * <code>SHUTDOWN = 4;</code>
     */
    public static final int SHUTDOWN_VALUE = 4;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

    /**
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static Membership valueOf(int value) {
      return forNumber(value);
    }

    public static Membership forNumber(int value) {
      switch (value) {
        case 0: return UNKNOWN;
        case 1: return FOLLOWER;
        case 2: return CANDIDATE;
        case 3: return LEADER;
        case 4: return SHUTDOWN;
        default: return null;
      }
    }

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

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return api.Graphik.getDescriptor().getEnumTypes().get(2);
    }

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:api.Membership)
  }

  public interface RefOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Ref)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * gtype is the type of the doc/connection ex: pet
     * </pre>
     *
     * <code>string gtype = 1 [(.validator.field) = { ... }</code>
     */
    java.lang.String getGtype();
    /**
     * <pre>
     * gtype is the type of the doc/connection ex: pet
     * </pre>
     *
     * <code>string gtype = 1 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getGtypeBytes();

    /**
     * <pre>
     * gid is the unique id of the doc/connection within the context of it's type
     * </pre>
     *
     * <code>string gid = 2 [(.validator.field) = { ... }</code>
     */
    java.lang.String getGid();
    /**
     * <pre>
     * gid is the unique id of the doc/connection within the context of it's type
     * </pre>
     *
     * <code>string gid = 2 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getGidBytes();
  }
  /**
   * <pre>
   * Ref describes a doc/connection type &amp; id
   * </pre>
   *
   * Protobuf type {@code api.Ref}
   */
  public  static final class Ref extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Ref)
      RefOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Ref.newBuilder() to construct.
    private Ref(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Ref() {
      gtype_ = "";
      gid_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Ref(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              gtype_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              gid_ = s;
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Ref_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Ref_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Ref.class, api.Graphik.Ref.Builder.class);
    }

    public static final int GTYPE_FIELD_NUMBER = 1;
    private volatile java.lang.Object gtype_;
    /**
     * <pre>
     * gtype is the type of the doc/connection ex: pet
     * </pre>
     *
     * <code>string gtype = 1 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getGtype() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        gtype_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * gtype is the type of the doc/connection ex: pet
     * </pre>
     *
     * <code>string gtype = 1 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getGtypeBytes() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gtype_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int GID_FIELD_NUMBER = 2;
    private volatile java.lang.Object gid_;
    /**
     * <pre>
     * gid is the unique id of the doc/connection within the context of it's type
     * </pre>
     *
     * <code>string gid = 2 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getGid() {
      java.lang.Object ref = gid_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        gid_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * gid is the unique id of the doc/connection within the context of it's type
     * </pre>
     *
     * <code>string gid = 2 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getGidBytes() {
      java.lang.Object ref = gid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    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 (!getGtypeBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, gtype_);
      }
      if (!getGidBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, gid_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getGtypeBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, gtype_);
      }
      if (!getGidBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, gid_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getGtype()
          .equals(other.getGtype());
      result = result && getGid()
          .equals(other.getGid());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + GTYPE_FIELD_NUMBER;
      hash = (53 * hash) + getGtype().hashCode();
      hash = (37 * hash) + GID_FIELD_NUMBER;
      hash = (53 * hash) + getGid().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Ref parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Ref parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Ref parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Ref parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Ref parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Ref parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Ref parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Ref 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 api.Graphik.Ref parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Ref 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 api.Graphik.Ref parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Ref 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(api.Graphik.Ref 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>
     * Ref describes a doc/connection type &amp; id
     * </pre>
     *
     * Protobuf type {@code api.Ref}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Ref)
        api.Graphik.RefOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Ref_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Ref_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Ref.class, api.Graphik.Ref.Builder.class);
      }

      // Construct using api.Graphik.Ref.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        gtype_ = "";

        gid_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Ref_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Ref getDefaultInstanceForType() {
        return api.Graphik.Ref.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Ref buildPartial() {
        api.Graphik.Ref result = new api.Graphik.Ref(this);
        result.gtype_ = gtype_;
        result.gid_ = gid_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Ref other) {
        if (other == api.Graphik.Ref.getDefaultInstance()) return this;
        if (!other.getGtype().isEmpty()) {
          gtype_ = other.gtype_;
          onChanged();
        }
        if (!other.getGid().isEmpty()) {
          gid_ = other.gid_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Ref parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Ref) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object gtype_ = "";
      /**
       * <pre>
       * gtype is the type of the doc/connection ex: pet
       * </pre>
       *
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getGtype() {
        java.lang.Object ref = gtype_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          gtype_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * gtype is the type of the doc/connection ex: pet
       * </pre>
       *
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getGtypeBytes() {
        java.lang.Object ref = gtype_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gtype_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * gtype is the type of the doc/connection ex: pet
       * </pre>
       *
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setGtype(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        gtype_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * gtype is the type of the doc/connection ex: pet
       * </pre>
       *
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearGtype() {
        
        gtype_ = getDefaultInstance().getGtype();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * gtype is the type of the doc/connection ex: pet
       * </pre>
       *
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setGtypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        gtype_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object gid_ = "";
      /**
       * <pre>
       * gid is the unique id of the doc/connection within the context of it's type
       * </pre>
       *
       * <code>string gid = 2 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getGid() {
        java.lang.Object ref = gid_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          gid_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * gid is the unique id of the doc/connection within the context of it's type
       * </pre>
       *
       * <code>string gid = 2 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getGidBytes() {
        java.lang.Object ref = gid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * gid is the unique id of the doc/connection within the context of it's type
       * </pre>
       *
       * <code>string gid = 2 [(.validator.field) = { ... }</code>
       */
      public Builder setGid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        gid_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * gid is the unique id of the doc/connection within the context of it's type
       * </pre>
       *
       * <code>string gid = 2 [(.validator.field) = { ... }</code>
       */
      public Builder clearGid() {
        
        gid_ = getDefaultInstance().getGid();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * gid is the unique id of the doc/connection within the context of it's type
       * </pre>
       *
       * <code>string gid = 2 [(.validator.field) = { ... }</code>
       */
      public Builder setGidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        gid_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Ref)
    }

    // @@protoc_insertion_point(class_scope:api.Ref)
    private static final api.Graphik.Ref DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Ref();
    }

    public static api.Graphik.Ref getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Ref>
        PARSER = new com.google.protobuf.AbstractParser<Ref>() {
      @java.lang.Override
      public Ref parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Ref(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Ref getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RefConstructorOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.RefConstructor)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * gtype is the type of the doc/connection ex: pet
     * </pre>
     *
     * <code>string gtype = 1 [(.validator.field) = { ... }</code>
     */
    java.lang.String getGtype();
    /**
     * <pre>
     * gtype is the type of the doc/connection ex: pet
     * </pre>
     *
     * <code>string gtype = 1 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getGtypeBytes();

    /**
     * <pre>
     * gid is the unique id of the doc/connection within the context of it's type
     * </pre>
     *
     * <code>string gid = 2;</code>
     */
    java.lang.String getGid();
    /**
     * <pre>
     * gid is the unique id of the doc/connection within the context of it's type
     * </pre>
     *
     * <code>string gid = 2;</code>
     */
    com.google.protobuf.ByteString
        getGidBytes();
  }
  /**
   * <pre>
   * RefConstructor creates a new Ref
   * </pre>
   *
   * Protobuf type {@code api.RefConstructor}
   */
  public  static final class RefConstructor extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.RefConstructor)
      RefConstructorOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RefConstructor.newBuilder() to construct.
    private RefConstructor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RefConstructor() {
      gtype_ = "";
      gid_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RefConstructor(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              gtype_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              gid_ = s;
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_RefConstructor_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_RefConstructor_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.RefConstructor.class, api.Graphik.RefConstructor.Builder.class);
    }

    public static final int GTYPE_FIELD_NUMBER = 1;
    private volatile java.lang.Object gtype_;
    /**
     * <pre>
     * gtype is the type of the doc/connection ex: pet
     * </pre>
     *
     * <code>string gtype = 1 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getGtype() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        gtype_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * gtype is the type of the doc/connection ex: pet
     * </pre>
     *
     * <code>string gtype = 1 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getGtypeBytes() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gtype_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int GID_FIELD_NUMBER = 2;
    private volatile java.lang.Object gid_;
    /**
     * <pre>
     * gid is the unique id of the doc/connection within the context of it's type
     * </pre>
     *
     * <code>string gid = 2;</code>
     */
    public java.lang.String getGid() {
      java.lang.Object ref = gid_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        gid_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * gid is the unique id of the doc/connection within the context of it's type
     * </pre>
     *
     * <code>string gid = 2;</code>
     */
    public com.google.protobuf.ByteString
        getGidBytes() {
      java.lang.Object ref = gid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    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 (!getGtypeBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, gtype_);
      }
      if (!getGidBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, gid_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getGtypeBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, gtype_);
      }
      if (!getGidBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, gid_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getGtype()
          .equals(other.getGtype());
      result = result && getGid()
          .equals(other.getGid());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + GTYPE_FIELD_NUMBER;
      hash = (53 * hash) + getGtype().hashCode();
      hash = (37 * hash) + GID_FIELD_NUMBER;
      hash = (53 * hash) + getGid().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.RefConstructor parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.RefConstructor parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.RefConstructor parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.RefConstructor parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.RefConstructor parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.RefConstructor parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.RefConstructor parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.RefConstructor 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 api.Graphik.RefConstructor parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.RefConstructor 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 api.Graphik.RefConstructor parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.RefConstructor 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(api.Graphik.RefConstructor 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>
     * RefConstructor creates a new Ref
     * </pre>
     *
     * Protobuf type {@code api.RefConstructor}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.RefConstructor)
        api.Graphik.RefConstructorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_RefConstructor_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_RefConstructor_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.RefConstructor.class, api.Graphik.RefConstructor.Builder.class);
      }

      // Construct using api.Graphik.RefConstructor.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        gtype_ = "";

        gid_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_RefConstructor_descriptor;
      }

      @java.lang.Override
      public api.Graphik.RefConstructor getDefaultInstanceForType() {
        return api.Graphik.RefConstructor.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.RefConstructor buildPartial() {
        api.Graphik.RefConstructor result = new api.Graphik.RefConstructor(this);
        result.gtype_ = gtype_;
        result.gid_ = gid_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.RefConstructor other) {
        if (other == api.Graphik.RefConstructor.getDefaultInstance()) return this;
        if (!other.getGtype().isEmpty()) {
          gtype_ = other.gtype_;
          onChanged();
        }
        if (!other.getGid().isEmpty()) {
          gid_ = other.gid_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.RefConstructor parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.RefConstructor) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object gtype_ = "";
      /**
       * <pre>
       * gtype is the type of the doc/connection ex: pet
       * </pre>
       *
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getGtype() {
        java.lang.Object ref = gtype_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          gtype_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * gtype is the type of the doc/connection ex: pet
       * </pre>
       *
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getGtypeBytes() {
        java.lang.Object ref = gtype_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gtype_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * gtype is the type of the doc/connection ex: pet
       * </pre>
       *
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setGtype(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        gtype_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * gtype is the type of the doc/connection ex: pet
       * </pre>
       *
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearGtype() {
        
        gtype_ = getDefaultInstance().getGtype();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * gtype is the type of the doc/connection ex: pet
       * </pre>
       *
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setGtypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        gtype_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object gid_ = "";
      /**
       * <pre>
       * gid is the unique id of the doc/connection within the context of it's type
       * </pre>
       *
       * <code>string gid = 2;</code>
       */
      public java.lang.String getGid() {
        java.lang.Object ref = gid_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          gid_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * gid is the unique id of the doc/connection within the context of it's type
       * </pre>
       *
       * <code>string gid = 2;</code>
       */
      public com.google.protobuf.ByteString
          getGidBytes() {
        java.lang.Object ref = gid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * gid is the unique id of the doc/connection within the context of it's type
       * </pre>
       *
       * <code>string gid = 2;</code>
       */
      public Builder setGid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        gid_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * gid is the unique id of the doc/connection within the context of it's type
       * </pre>
       *
       * <code>string gid = 2;</code>
       */
      public Builder clearGid() {
        
        gid_ = getDefaultInstance().getGid();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * gid is the unique id of the doc/connection within the context of it's type
       * </pre>
       *
       * <code>string gid = 2;</code>
       */
      public Builder setGidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        gid_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.RefConstructor)
    }

    // @@protoc_insertion_point(class_scope:api.RefConstructor)
    private static final api.Graphik.RefConstructor DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.RefConstructor();
    }

    public static api.Graphik.RefConstructor getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<RefConstructor>
        PARSER = new com.google.protobuf.AbstractParser<RefConstructor>() {
      @java.lang.Override
      public RefConstructor parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RefConstructor(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.RefConstructor getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RefsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Refs)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .api.Ref refs = 1;</code>
     */
    java.util.List<api.Graphik.Ref> 
        getRefsList();
    /**
     * <code>repeated .api.Ref refs = 1;</code>
     */
    api.Graphik.Ref getRefs(int index);
    /**
     * <code>repeated .api.Ref refs = 1;</code>
     */
    int getRefsCount();
    /**
     * <code>repeated .api.Ref refs = 1;</code>
     */
    java.util.List<? extends api.Graphik.RefOrBuilder> 
        getRefsOrBuilderList();
    /**
     * <code>repeated .api.Ref refs = 1;</code>
     */
    api.Graphik.RefOrBuilder getRefsOrBuilder(
        int index);
  }
  /**
   * <pre>
   * Refs is an array of refs
   * </pre>
   *
   * Protobuf type {@code api.Refs}
   */
  public  static final class Refs extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Refs)
      RefsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Refs.newBuilder() to construct.
    private Refs(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Refs() {
      refs_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Refs(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                refs_ = new java.util.ArrayList<api.Graphik.Ref>();
                mutable_bitField0_ |= 0x00000001;
              }
              refs_.add(
                  input.readMessage(api.Graphik.Ref.parser(), extensionRegistry));
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          refs_ = java.util.Collections.unmodifiableList(refs_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Refs_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Refs_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Refs.class, api.Graphik.Refs.Builder.class);
    }

    public static final int REFS_FIELD_NUMBER = 1;
    private java.util.List<api.Graphik.Ref> refs_;
    /**
     * <code>repeated .api.Ref refs = 1;</code>
     */
    public java.util.List<api.Graphik.Ref> getRefsList() {
      return refs_;
    }
    /**
     * <code>repeated .api.Ref refs = 1;</code>
     */
    public java.util.List<? extends api.Graphik.RefOrBuilder> 
        getRefsOrBuilderList() {
      return refs_;
    }
    /**
     * <code>repeated .api.Ref refs = 1;</code>
     */
    public int getRefsCount() {
      return refs_.size();
    }
    /**
     * <code>repeated .api.Ref refs = 1;</code>
     */
    public api.Graphik.Ref getRefs(int index) {
      return refs_.get(index);
    }
    /**
     * <code>repeated .api.Ref refs = 1;</code>
     */
    public api.Graphik.RefOrBuilder getRefsOrBuilder(
        int index) {
      return refs_.get(index);
    }

    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 {
      for (int i = 0; i < refs_.size(); i++) {
        output.writeMessage(1, refs_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < refs_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, refs_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getRefsList()
          .equals(other.getRefsList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getRefsCount() > 0) {
        hash = (37 * hash) + REFS_FIELD_NUMBER;
        hash = (53 * hash) + getRefsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Refs parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Refs parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Refs parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Refs parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Refs parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Refs parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Refs parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Refs 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 api.Graphik.Refs parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Refs 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 api.Graphik.Refs parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Refs 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(api.Graphik.Refs 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>
     * Refs is an array of refs
     * </pre>
     *
     * Protobuf type {@code api.Refs}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Refs)
        api.Graphik.RefsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Refs_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Refs_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Refs.class, api.Graphik.Refs.Builder.class);
      }

      // Construct using api.Graphik.Refs.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Refs_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Refs getDefaultInstanceForType() {
        return api.Graphik.Refs.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Refs buildPartial() {
        api.Graphik.Refs result = new api.Graphik.Refs(this);
        int from_bitField0_ = bitField0_;
        if (refsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            refs_ = java.util.Collections.unmodifiableList(refs_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.refs_ = refs_;
        } else {
          result.refs_ = refsBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Refs other) {
        if (other == api.Graphik.Refs.getDefaultInstance()) return this;
        if (refsBuilder_ == null) {
          if (!other.refs_.isEmpty()) {
            if (refs_.isEmpty()) {
              refs_ = other.refs_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureRefsIsMutable();
              refs_.addAll(other.refs_);
            }
            onChanged();
          }
        } else {
          if (!other.refs_.isEmpty()) {
            if (refsBuilder_.isEmpty()) {
              refsBuilder_.dispose();
              refsBuilder_ = null;
              refs_ = other.refs_;
              bitField0_ = (bitField0_ & ~0x00000001);
              refsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getRefsFieldBuilder() : null;
            } else {
              refsBuilder_.addAllMessages(other.refs_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Refs parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Refs) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<api.Graphik.Ref> refs_ =
        java.util.Collections.emptyList();
      private void ensureRefsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          refs_ = new java.util.ArrayList<api.Graphik.Ref>(refs_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> refsBuilder_;

      /**
       * <code>repeated .api.Ref refs = 1;</code>
       */
      public java.util.List<api.Graphik.Ref> getRefsList() {
        if (refsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(refs_);
        } else {
          return refsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .api.Ref refs = 1;</code>
       */
      public int getRefsCount() {
        if (refsBuilder_ == null) {
          return refs_.size();
        } else {
          return refsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .api.Ref refs = 1;</code>
       */
      public api.Graphik.Ref getRefs(int index) {
        if (refsBuilder_ == null) {
          return refs_.get(index);
        } else {
          return refsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .api.Ref refs = 1;</code>
       */
      public Builder setRefs(
          int index, api.Graphik.Ref value) {
        if (refsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRefsIsMutable();
          refs_.set(index, value);
          onChanged();
        } else {
          refsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref refs = 1;</code>
       */
      public Builder setRefs(
          int index, api.Graphik.Ref.Builder builderForValue) {
        if (refsBuilder_ == null) {
          ensureRefsIsMutable();
          refs_.set(index, builderForValue.build());
          onChanged();
        } else {
          refsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref refs = 1;</code>
       */
      public Builder addRefs(api.Graphik.Ref value) {
        if (refsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRefsIsMutable();
          refs_.add(value);
          onChanged();
        } else {
          refsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref refs = 1;</code>
       */
      public Builder addRefs(
          int index, api.Graphik.Ref value) {
        if (refsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRefsIsMutable();
          refs_.add(index, value);
          onChanged();
        } else {
          refsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref refs = 1;</code>
       */
      public Builder addRefs(
          api.Graphik.Ref.Builder builderForValue) {
        if (refsBuilder_ == null) {
          ensureRefsIsMutable();
          refs_.add(builderForValue.build());
          onChanged();
        } else {
          refsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref refs = 1;</code>
       */
      public Builder addRefs(
          int index, api.Graphik.Ref.Builder builderForValue) {
        if (refsBuilder_ == null) {
          ensureRefsIsMutable();
          refs_.add(index, builderForValue.build());
          onChanged();
        } else {
          refsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref refs = 1;</code>
       */
      public Builder addAllRefs(
          java.lang.Iterable<? extends api.Graphik.Ref> values) {
        if (refsBuilder_ == null) {
          ensureRefsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, refs_);
          onChanged();
        } else {
          refsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref refs = 1;</code>
       */
      public Builder clearRefs() {
        if (refsBuilder_ == null) {
          refs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          refsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref refs = 1;</code>
       */
      public Builder removeRefs(int index) {
        if (refsBuilder_ == null) {
          ensureRefsIsMutable();
          refs_.remove(index);
          onChanged();
        } else {
          refsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref refs = 1;</code>
       */
      public api.Graphik.Ref.Builder getRefsBuilder(
          int index) {
        return getRefsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .api.Ref refs = 1;</code>
       */
      public api.Graphik.RefOrBuilder getRefsOrBuilder(
          int index) {
        if (refsBuilder_ == null) {
          return refs_.get(index);  } else {
          return refsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .api.Ref refs = 1;</code>
       */
      public java.util.List<? extends api.Graphik.RefOrBuilder> 
           getRefsOrBuilderList() {
        if (refsBuilder_ != null) {
          return refsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(refs_);
        }
      }
      /**
       * <code>repeated .api.Ref refs = 1;</code>
       */
      public api.Graphik.Ref.Builder addRefsBuilder() {
        return getRefsFieldBuilder().addBuilder(
            api.Graphik.Ref.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Ref refs = 1;</code>
       */
      public api.Graphik.Ref.Builder addRefsBuilder(
          int index) {
        return getRefsFieldBuilder().addBuilder(
            index, api.Graphik.Ref.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Ref refs = 1;</code>
       */
      public java.util.List<api.Graphik.Ref.Builder> 
           getRefsBuilderList() {
        return getRefsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> 
          getRefsFieldBuilder() {
        if (refsBuilder_ == null) {
          refsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder>(
                  refs_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          refs_ = null;
        }
        return refsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Refs)
    }

    // @@protoc_insertion_point(class_scope:api.Refs)
    private static final api.Graphik.Refs DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Refs();
    }

    public static api.Graphik.Refs getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Refs>
        PARSER = new com.google.protobuf.AbstractParser<Refs>() {
      @java.lang.Override
      public Refs parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Refs(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Refs getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DocOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Doc)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ref is the ref to the doc
     * </pre>
     *
     * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
     */
    boolean hasRef();
    /**
     * <pre>
     * ref is the ref to the doc
     * </pre>
     *
     * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
     */
    api.Graphik.Ref getRef();
    /**
     * <pre>
     * ref is the ref to the doc
     * </pre>
     *
     * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
     */
    api.Graphik.RefOrBuilder getRefOrBuilder();

    /**
     * <pre>
     * k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    boolean hasAttributes();
    /**
     * <pre>
     * k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    com.google.protobuf.Struct getAttributes();
    /**
     * <pre>
     * k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    com.google.protobuf.StructOrBuilder getAttributesOrBuilder();
  }
  /**
   * <pre>
   * Doc is a Graph primitive representing a single entity/resource. It is connected to other docs via Connections
   * </pre>
   *
   * Protobuf type {@code api.Doc}
   */
  public  static final class Doc extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Doc)
      DocOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Doc.newBuilder() to construct.
    private Doc(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Doc() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Doc(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              api.Graphik.Ref.Builder subBuilder = null;
              if (ref_ != null) {
                subBuilder = ref_.toBuilder();
              }
              ref_ = input.readMessage(api.Graphik.Ref.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(ref_);
                ref_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              com.google.protobuf.Struct.Builder subBuilder = null;
              if (attributes_ != null) {
                subBuilder = attributes_.toBuilder();
              }
              attributes_ = input.readMessage(com.google.protobuf.Struct.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(attributes_);
                attributes_ = subBuilder.buildPartial();
              }

              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Doc_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Doc_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Doc.class, api.Graphik.Doc.Builder.class);
    }

    public static final int REF_FIELD_NUMBER = 1;
    private api.Graphik.Ref ref_;
    /**
     * <pre>
     * ref is the ref to the doc
     * </pre>
     *
     * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
     */
    public boolean hasRef() {
      return ref_ != null;
    }
    /**
     * <pre>
     * ref is the ref to the doc
     * </pre>
     *
     * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.Ref getRef() {
      return ref_ == null ? api.Graphik.Ref.getDefaultInstance() : ref_;
    }
    /**
     * <pre>
     * ref is the ref to the doc
     * </pre>
     *
     * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.RefOrBuilder getRefOrBuilder() {
      return getRef();
    }

    public static final int ATTRIBUTES_FIELD_NUMBER = 2;
    private com.google.protobuf.Struct attributes_;
    /**
     * <pre>
     * k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    public boolean hasAttributes() {
      return attributes_ != null;
    }
    /**
     * <pre>
     * k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    public com.google.protobuf.Struct getAttributes() {
      return attributes_ == null ? com.google.protobuf.Struct.getDefaultInstance() : attributes_;
    }
    /**
     * <pre>
     * k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    public com.google.protobuf.StructOrBuilder getAttributesOrBuilder() {
      return getAttributes();
    }

    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 (ref_ != null) {
        output.writeMessage(1, getRef());
      }
      if (attributes_ != null) {
        output.writeMessage(2, getAttributes());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (ref_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getRef());
      }
      if (attributes_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getAttributes());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && (hasRef() == other.hasRef());
      if (hasRef()) {
        result = result && getRef()
            .equals(other.getRef());
      }
      result = result && (hasAttributes() == other.hasAttributes());
      if (hasAttributes()) {
        result = result && getAttributes()
            .equals(other.getAttributes());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRef()) {
        hash = (37 * hash) + REF_FIELD_NUMBER;
        hash = (53 * hash) + getRef().hashCode();
      }
      if (hasAttributes()) {
        hash = (37 * hash) + ATTRIBUTES_FIELD_NUMBER;
        hash = (53 * hash) + getAttributes().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Doc parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Doc parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Doc parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Doc parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Doc parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Doc parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Doc parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Doc 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 api.Graphik.Doc parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Doc 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 api.Graphik.Doc parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Doc 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(api.Graphik.Doc 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>
     * Doc is a Graph primitive representing a single entity/resource. It is connected to other docs via Connections
     * </pre>
     *
     * Protobuf type {@code api.Doc}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Doc)
        api.Graphik.DocOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Doc_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Doc_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Doc.class, api.Graphik.Doc.Builder.class);
      }

      // Construct using api.Graphik.Doc.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (refBuilder_ == null) {
          ref_ = null;
        } else {
          ref_ = null;
          refBuilder_ = null;
        }
        if (attributesBuilder_ == null) {
          attributes_ = null;
        } else {
          attributes_ = null;
          attributesBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Doc_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Doc getDefaultInstanceForType() {
        return api.Graphik.Doc.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Doc buildPartial() {
        api.Graphik.Doc result = new api.Graphik.Doc(this);
        if (refBuilder_ == null) {
          result.ref_ = ref_;
        } else {
          result.ref_ = refBuilder_.build();
        }
        if (attributesBuilder_ == null) {
          result.attributes_ = attributes_;
        } else {
          result.attributes_ = attributesBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Doc other) {
        if (other == api.Graphik.Doc.getDefaultInstance()) return this;
        if (other.hasRef()) {
          mergeRef(other.getRef());
        }
        if (other.hasAttributes()) {
          mergeAttributes(other.getAttributes());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Doc parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Doc) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private api.Graphik.Ref ref_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> refBuilder_;
      /**
       * <pre>
       * ref is the ref to the doc
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public boolean hasRef() {
        return refBuilder_ != null || ref_ != null;
      }
      /**
       * <pre>
       * ref is the ref to the doc
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref getRef() {
        if (refBuilder_ == null) {
          return ref_ == null ? api.Graphik.Ref.getDefaultInstance() : ref_;
        } else {
          return refBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * ref is the ref to the doc
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setRef(api.Graphik.Ref value) {
        if (refBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ref_ = value;
          onChanged();
        } else {
          refBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the doc
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setRef(
          api.Graphik.Ref.Builder builderForValue) {
        if (refBuilder_ == null) {
          ref_ = builderForValue.build();
          onChanged();
        } else {
          refBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the doc
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder mergeRef(api.Graphik.Ref value) {
        if (refBuilder_ == null) {
          if (ref_ != null) {
            ref_ =
              api.Graphik.Ref.newBuilder(ref_).mergeFrom(value).buildPartial();
          } else {
            ref_ = value;
          }
          onChanged();
        } else {
          refBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the doc
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearRef() {
        if (refBuilder_ == null) {
          ref_ = null;
          onChanged();
        } else {
          ref_ = null;
          refBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the doc
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref.Builder getRefBuilder() {
        
        onChanged();
        return getRefFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * ref is the ref to the doc
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.RefOrBuilder getRefOrBuilder() {
        if (refBuilder_ != null) {
          return refBuilder_.getMessageOrBuilder();
        } else {
          return ref_ == null ?
              api.Graphik.Ref.getDefaultInstance() : ref_;
        }
      }
      /**
       * <pre>
       * ref is the ref to the doc
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> 
          getRefFieldBuilder() {
        if (refBuilder_ == null) {
          refBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder>(
                  getRef(),
                  getParentForChildren(),
                  isClean());
          ref_ = null;
        }
        return refBuilder_;
      }

      private com.google.protobuf.Struct attributes_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> attributesBuilder_;
      /**
       * <pre>
       * k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public boolean hasAttributes() {
        return attributesBuilder_ != null || attributes_ != null;
      }
      /**
       * <pre>
       * k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public com.google.protobuf.Struct getAttributes() {
        if (attributesBuilder_ == null) {
          return attributes_ == null ? com.google.protobuf.Struct.getDefaultInstance() : attributes_;
        } else {
          return attributesBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder setAttributes(com.google.protobuf.Struct value) {
        if (attributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          attributes_ = value;
          onChanged();
        } else {
          attributesBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder setAttributes(
          com.google.protobuf.Struct.Builder builderForValue) {
        if (attributesBuilder_ == null) {
          attributes_ = builderForValue.build();
          onChanged();
        } else {
          attributesBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder mergeAttributes(com.google.protobuf.Struct value) {
        if (attributesBuilder_ == null) {
          if (attributes_ != null) {
            attributes_ =
              com.google.protobuf.Struct.newBuilder(attributes_).mergeFrom(value).buildPartial();
          } else {
            attributes_ = value;
          }
          onChanged();
        } else {
          attributesBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder clearAttributes() {
        if (attributesBuilder_ == null) {
          attributes_ = null;
          onChanged();
        } else {
          attributes_ = null;
          attributesBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public com.google.protobuf.Struct.Builder getAttributesBuilder() {
        
        onChanged();
        return getAttributesFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public com.google.protobuf.StructOrBuilder getAttributesOrBuilder() {
        if (attributesBuilder_ != null) {
          return attributesBuilder_.getMessageOrBuilder();
        } else {
          return attributes_ == null ?
              com.google.protobuf.Struct.getDefaultInstance() : attributes_;
        }
      }
      /**
       * <pre>
       * k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> 
          getAttributesFieldBuilder() {
        if (attributesBuilder_ == null) {
          attributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder>(
                  getAttributes(),
                  getParentForChildren(),
                  isClean());
          attributes_ = null;
        }
        return attributesBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Doc)
    }

    // @@protoc_insertion_point(class_scope:api.Doc)
    private static final api.Graphik.Doc DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Doc();
    }

    public static api.Graphik.Doc getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Doc>
        PARSER = new com.google.protobuf.AbstractParser<Doc>() {
      @java.lang.Override
      public Doc parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Doc(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Doc getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DocConstructorOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.DocConstructor)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ref is the ref to the new Doc. If an id isn't present, one will be generated.
     * </pre>
     *
     * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
     */
    boolean hasRef();
    /**
     * <pre>
     * ref is the ref to the new Doc. If an id isn't present, one will be generated.
     * </pre>
     *
     * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
     */
    api.Graphik.RefConstructor getRef();
    /**
     * <pre>
     * ref is the ref to the new Doc. If an id isn't present, one will be generated.
     * </pre>
     *
     * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
     */
    api.Graphik.RefConstructorOrBuilder getRefOrBuilder();

    /**
     * <pre>
     * arbitrary k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    boolean hasAttributes();
    /**
     * <pre>
     * arbitrary k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    com.google.protobuf.Struct getAttributes();
    /**
     * <pre>
     * arbitrary k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    com.google.protobuf.StructOrBuilder getAttributesOrBuilder();
  }
  /**
   * <pre>
   * DocConstructor is used to create a doc
   * </pre>
   *
   * Protobuf type {@code api.DocConstructor}
   */
  public  static final class DocConstructor extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.DocConstructor)
      DocConstructorOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use DocConstructor.newBuilder() to construct.
    private DocConstructor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private DocConstructor() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private DocConstructor(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              api.Graphik.RefConstructor.Builder subBuilder = null;
              if (ref_ != null) {
                subBuilder = ref_.toBuilder();
              }
              ref_ = input.readMessage(api.Graphik.RefConstructor.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(ref_);
                ref_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              com.google.protobuf.Struct.Builder subBuilder = null;
              if (attributes_ != null) {
                subBuilder = attributes_.toBuilder();
              }
              attributes_ = input.readMessage(com.google.protobuf.Struct.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(attributes_);
                attributes_ = subBuilder.buildPartial();
              }

              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_DocConstructor_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_DocConstructor_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.DocConstructor.class, api.Graphik.DocConstructor.Builder.class);
    }

    public static final int REF_FIELD_NUMBER = 1;
    private api.Graphik.RefConstructor ref_;
    /**
     * <pre>
     * ref is the ref to the new Doc. If an id isn't present, one will be generated.
     * </pre>
     *
     * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
     */
    public boolean hasRef() {
      return ref_ != null;
    }
    /**
     * <pre>
     * ref is the ref to the new Doc. If an id isn't present, one will be generated.
     * </pre>
     *
     * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.RefConstructor getRef() {
      return ref_ == null ? api.Graphik.RefConstructor.getDefaultInstance() : ref_;
    }
    /**
     * <pre>
     * ref is the ref to the new Doc. If an id isn't present, one will be generated.
     * </pre>
     *
     * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.RefConstructorOrBuilder getRefOrBuilder() {
      return getRef();
    }

    public static final int ATTRIBUTES_FIELD_NUMBER = 2;
    private com.google.protobuf.Struct attributes_;
    /**
     * <pre>
     * arbitrary k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    public boolean hasAttributes() {
      return attributes_ != null;
    }
    /**
     * <pre>
     * arbitrary k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    public com.google.protobuf.Struct getAttributes() {
      return attributes_ == null ? com.google.protobuf.Struct.getDefaultInstance() : attributes_;
    }
    /**
     * <pre>
     * arbitrary k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    public com.google.protobuf.StructOrBuilder getAttributesOrBuilder() {
      return getAttributes();
    }

    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 (ref_ != null) {
        output.writeMessage(1, getRef());
      }
      if (attributes_ != null) {
        output.writeMessage(2, getAttributes());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (ref_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getRef());
      }
      if (attributes_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getAttributes());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && (hasRef() == other.hasRef());
      if (hasRef()) {
        result = result && getRef()
            .equals(other.getRef());
      }
      result = result && (hasAttributes() == other.hasAttributes());
      if (hasAttributes()) {
        result = result && getAttributes()
            .equals(other.getAttributes());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRef()) {
        hash = (37 * hash) + REF_FIELD_NUMBER;
        hash = (53 * hash) + getRef().hashCode();
      }
      if (hasAttributes()) {
        hash = (37 * hash) + ATTRIBUTES_FIELD_NUMBER;
        hash = (53 * hash) + getAttributes().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.DocConstructor parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.DocConstructor parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.DocConstructor parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.DocConstructor parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.DocConstructor parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.DocConstructor parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.DocConstructor parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.DocConstructor 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 api.Graphik.DocConstructor parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.DocConstructor 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 api.Graphik.DocConstructor parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.DocConstructor 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(api.Graphik.DocConstructor 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>
     * DocConstructor is used to create a doc
     * </pre>
     *
     * Protobuf type {@code api.DocConstructor}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.DocConstructor)
        api.Graphik.DocConstructorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_DocConstructor_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_DocConstructor_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.DocConstructor.class, api.Graphik.DocConstructor.Builder.class);
      }

      // Construct using api.Graphik.DocConstructor.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (refBuilder_ == null) {
          ref_ = null;
        } else {
          ref_ = null;
          refBuilder_ = null;
        }
        if (attributesBuilder_ == null) {
          attributes_ = null;
        } else {
          attributes_ = null;
          attributesBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_DocConstructor_descriptor;
      }

      @java.lang.Override
      public api.Graphik.DocConstructor getDefaultInstanceForType() {
        return api.Graphik.DocConstructor.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.DocConstructor buildPartial() {
        api.Graphik.DocConstructor result = new api.Graphik.DocConstructor(this);
        if (refBuilder_ == null) {
          result.ref_ = ref_;
        } else {
          result.ref_ = refBuilder_.build();
        }
        if (attributesBuilder_ == null) {
          result.attributes_ = attributes_;
        } else {
          result.attributes_ = attributesBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.DocConstructor other) {
        if (other == api.Graphik.DocConstructor.getDefaultInstance()) return this;
        if (other.hasRef()) {
          mergeRef(other.getRef());
        }
        if (other.hasAttributes()) {
          mergeAttributes(other.getAttributes());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.DocConstructor parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.DocConstructor) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private api.Graphik.RefConstructor ref_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.RefConstructor, api.Graphik.RefConstructor.Builder, api.Graphik.RefConstructorOrBuilder> refBuilder_;
      /**
       * <pre>
       * ref is the ref to the new Doc. If an id isn't present, one will be generated.
       * </pre>
       *
       * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
       */
      public boolean hasRef() {
        return refBuilder_ != null || ref_ != null;
      }
      /**
       * <pre>
       * ref is the ref to the new Doc. If an id isn't present, one will be generated.
       * </pre>
       *
       * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.RefConstructor getRef() {
        if (refBuilder_ == null) {
          return ref_ == null ? api.Graphik.RefConstructor.getDefaultInstance() : ref_;
        } else {
          return refBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * ref is the ref to the new Doc. If an id isn't present, one will be generated.
       * </pre>
       *
       * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setRef(api.Graphik.RefConstructor value) {
        if (refBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ref_ = value;
          onChanged();
        } else {
          refBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the new Doc. If an id isn't present, one will be generated.
       * </pre>
       *
       * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setRef(
          api.Graphik.RefConstructor.Builder builderForValue) {
        if (refBuilder_ == null) {
          ref_ = builderForValue.build();
          onChanged();
        } else {
          refBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the new Doc. If an id isn't present, one will be generated.
       * </pre>
       *
       * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder mergeRef(api.Graphik.RefConstructor value) {
        if (refBuilder_ == null) {
          if (ref_ != null) {
            ref_ =
              api.Graphik.RefConstructor.newBuilder(ref_).mergeFrom(value).buildPartial();
          } else {
            ref_ = value;
          }
          onChanged();
        } else {
          refBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the new Doc. If an id isn't present, one will be generated.
       * </pre>
       *
       * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearRef() {
        if (refBuilder_ == null) {
          ref_ = null;
          onChanged();
        } else {
          ref_ = null;
          refBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the new Doc. If an id isn't present, one will be generated.
       * </pre>
       *
       * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.RefConstructor.Builder getRefBuilder() {
        
        onChanged();
        return getRefFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * ref is the ref to the new Doc. If an id isn't present, one will be generated.
       * </pre>
       *
       * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.RefConstructorOrBuilder getRefOrBuilder() {
        if (refBuilder_ != null) {
          return refBuilder_.getMessageOrBuilder();
        } else {
          return ref_ == null ?
              api.Graphik.RefConstructor.getDefaultInstance() : ref_;
        }
      }
      /**
       * <pre>
       * ref is the ref to the new Doc. If an id isn't present, one will be generated.
       * </pre>
       *
       * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.RefConstructor, api.Graphik.RefConstructor.Builder, api.Graphik.RefConstructorOrBuilder> 
          getRefFieldBuilder() {
        if (refBuilder_ == null) {
          refBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.RefConstructor, api.Graphik.RefConstructor.Builder, api.Graphik.RefConstructorOrBuilder>(
                  getRef(),
                  getParentForChildren(),
                  isClean());
          ref_ = null;
        }
        return refBuilder_;
      }

      private com.google.protobuf.Struct attributes_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> attributesBuilder_;
      /**
       * <pre>
       * arbitrary k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public boolean hasAttributes() {
        return attributesBuilder_ != null || attributes_ != null;
      }
      /**
       * <pre>
       * arbitrary k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public com.google.protobuf.Struct getAttributes() {
        if (attributesBuilder_ == null) {
          return attributes_ == null ? com.google.protobuf.Struct.getDefaultInstance() : attributes_;
        } else {
          return attributesBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * arbitrary k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder setAttributes(com.google.protobuf.Struct value) {
        if (attributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          attributes_ = value;
          onChanged();
        } else {
          attributesBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * arbitrary k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder setAttributes(
          com.google.protobuf.Struct.Builder builderForValue) {
        if (attributesBuilder_ == null) {
          attributes_ = builderForValue.build();
          onChanged();
        } else {
          attributesBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * arbitrary k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder mergeAttributes(com.google.protobuf.Struct value) {
        if (attributesBuilder_ == null) {
          if (attributes_ != null) {
            attributes_ =
              com.google.protobuf.Struct.newBuilder(attributes_).mergeFrom(value).buildPartial();
          } else {
            attributes_ = value;
          }
          onChanged();
        } else {
          attributesBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * arbitrary k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder clearAttributes() {
        if (attributesBuilder_ == null) {
          attributes_ = null;
          onChanged();
        } else {
          attributes_ = null;
          attributesBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * arbitrary k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public com.google.protobuf.Struct.Builder getAttributesBuilder() {
        
        onChanged();
        return getAttributesFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * arbitrary k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public com.google.protobuf.StructOrBuilder getAttributesOrBuilder() {
        if (attributesBuilder_ != null) {
          return attributesBuilder_.getMessageOrBuilder();
        } else {
          return attributes_ == null ?
              com.google.protobuf.Struct.getDefaultInstance() : attributes_;
        }
      }
      /**
       * <pre>
       * arbitrary k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> 
          getAttributesFieldBuilder() {
        if (attributesBuilder_ == null) {
          attributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder>(
                  getAttributes(),
                  getParentForChildren(),
                  isClean());
          attributes_ = null;
        }
        return attributesBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.DocConstructor)
    }

    // @@protoc_insertion_point(class_scope:api.DocConstructor)
    private static final api.Graphik.DocConstructor DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.DocConstructor();
    }

    public static api.Graphik.DocConstructor getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<DocConstructor>
        PARSER = new com.google.protobuf.AbstractParser<DocConstructor>() {
      @java.lang.Override
      public DocConstructor parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DocConstructor(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.DocConstructor getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DocConstructorsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.DocConstructors)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * docs is an array of doc constructors
     * </pre>
     *
     * <code>repeated .api.DocConstructor docs = 1;</code>
     */
    java.util.List<api.Graphik.DocConstructor> 
        getDocsList();
    /**
     * <pre>
     * docs is an array of doc constructors
     * </pre>
     *
     * <code>repeated .api.DocConstructor docs = 1;</code>
     */
    api.Graphik.DocConstructor getDocs(int index);
    /**
     * <pre>
     * docs is an array of doc constructors
     * </pre>
     *
     * <code>repeated .api.DocConstructor docs = 1;</code>
     */
    int getDocsCount();
    /**
     * <pre>
     * docs is an array of doc constructors
     * </pre>
     *
     * <code>repeated .api.DocConstructor docs = 1;</code>
     */
    java.util.List<? extends api.Graphik.DocConstructorOrBuilder> 
        getDocsOrBuilderList();
    /**
     * <pre>
     * docs is an array of doc constructors
     * </pre>
     *
     * <code>repeated .api.DocConstructor docs = 1;</code>
     */
    api.Graphik.DocConstructorOrBuilder getDocsOrBuilder(
        int index);
  }
  /**
   * <pre>
   * DocConstructor is used to create a batch of docs
   * </pre>
   *
   * Protobuf type {@code api.DocConstructors}
   */
  public  static final class DocConstructors extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.DocConstructors)
      DocConstructorsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use DocConstructors.newBuilder() to construct.
    private DocConstructors(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private DocConstructors() {
      docs_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private DocConstructors(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                docs_ = new java.util.ArrayList<api.Graphik.DocConstructor>();
                mutable_bitField0_ |= 0x00000001;
              }
              docs_.add(
                  input.readMessage(api.Graphik.DocConstructor.parser(), extensionRegistry));
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          docs_ = java.util.Collections.unmodifiableList(docs_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_DocConstructors_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_DocConstructors_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.DocConstructors.class, api.Graphik.DocConstructors.Builder.class);
    }

    public static final int DOCS_FIELD_NUMBER = 1;
    private java.util.List<api.Graphik.DocConstructor> docs_;
    /**
     * <pre>
     * docs is an array of doc constructors
     * </pre>
     *
     * <code>repeated .api.DocConstructor docs = 1;</code>
     */
    public java.util.List<api.Graphik.DocConstructor> getDocsList() {
      return docs_;
    }
    /**
     * <pre>
     * docs is an array of doc constructors
     * </pre>
     *
     * <code>repeated .api.DocConstructor docs = 1;</code>
     */
    public java.util.List<? extends api.Graphik.DocConstructorOrBuilder> 
        getDocsOrBuilderList() {
      return docs_;
    }
    /**
     * <pre>
     * docs is an array of doc constructors
     * </pre>
     *
     * <code>repeated .api.DocConstructor docs = 1;</code>
     */
    public int getDocsCount() {
      return docs_.size();
    }
    /**
     * <pre>
     * docs is an array of doc constructors
     * </pre>
     *
     * <code>repeated .api.DocConstructor docs = 1;</code>
     */
    public api.Graphik.DocConstructor getDocs(int index) {
      return docs_.get(index);
    }
    /**
     * <pre>
     * docs is an array of doc constructors
     * </pre>
     *
     * <code>repeated .api.DocConstructor docs = 1;</code>
     */
    public api.Graphik.DocConstructorOrBuilder getDocsOrBuilder(
        int index) {
      return docs_.get(index);
    }

    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 {
      for (int i = 0; i < docs_.size(); i++) {
        output.writeMessage(1, docs_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < docs_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, docs_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getDocsList()
          .equals(other.getDocsList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getDocsCount() > 0) {
        hash = (37 * hash) + DOCS_FIELD_NUMBER;
        hash = (53 * hash) + getDocsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.DocConstructors parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.DocConstructors parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.DocConstructors parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.DocConstructors parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.DocConstructors parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.DocConstructors parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.DocConstructors parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.DocConstructors 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 api.Graphik.DocConstructors parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.DocConstructors 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 api.Graphik.DocConstructors parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.DocConstructors 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(api.Graphik.DocConstructors 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>
     * DocConstructor is used to create a batch of docs
     * </pre>
     *
     * Protobuf type {@code api.DocConstructors}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.DocConstructors)
        api.Graphik.DocConstructorsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_DocConstructors_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_DocConstructors_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.DocConstructors.class, api.Graphik.DocConstructors.Builder.class);
      }

      // Construct using api.Graphik.DocConstructors.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_DocConstructors_descriptor;
      }

      @java.lang.Override
      public api.Graphik.DocConstructors getDefaultInstanceForType() {
        return api.Graphik.DocConstructors.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.DocConstructors buildPartial() {
        api.Graphik.DocConstructors result = new api.Graphik.DocConstructors(this);
        int from_bitField0_ = bitField0_;
        if (docsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            docs_ = java.util.Collections.unmodifiableList(docs_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.docs_ = docs_;
        } else {
          result.docs_ = docsBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.DocConstructors other) {
        if (other == api.Graphik.DocConstructors.getDefaultInstance()) return this;
        if (docsBuilder_ == null) {
          if (!other.docs_.isEmpty()) {
            if (docs_.isEmpty()) {
              docs_ = other.docs_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureDocsIsMutable();
              docs_.addAll(other.docs_);
            }
            onChanged();
          }
        } else {
          if (!other.docs_.isEmpty()) {
            if (docsBuilder_.isEmpty()) {
              docsBuilder_.dispose();
              docsBuilder_ = null;
              docs_ = other.docs_;
              bitField0_ = (bitField0_ & ~0x00000001);
              docsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getDocsFieldBuilder() : null;
            } else {
              docsBuilder_.addAllMessages(other.docs_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.DocConstructors parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.DocConstructors) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<api.Graphik.DocConstructor> docs_ =
        java.util.Collections.emptyList();
      private void ensureDocsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          docs_ = new java.util.ArrayList<api.Graphik.DocConstructor>(docs_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.DocConstructor, api.Graphik.DocConstructor.Builder, api.Graphik.DocConstructorOrBuilder> docsBuilder_;

      /**
       * <pre>
       * docs is an array of doc constructors
       * </pre>
       *
       * <code>repeated .api.DocConstructor docs = 1;</code>
       */
      public java.util.List<api.Graphik.DocConstructor> getDocsList() {
        if (docsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(docs_);
        } else {
          return docsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * docs is an array of doc constructors
       * </pre>
       *
       * <code>repeated .api.DocConstructor docs = 1;</code>
       */
      public int getDocsCount() {
        if (docsBuilder_ == null) {
          return docs_.size();
        } else {
          return docsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * docs is an array of doc constructors
       * </pre>
       *
       * <code>repeated .api.DocConstructor docs = 1;</code>
       */
      public api.Graphik.DocConstructor getDocs(int index) {
        if (docsBuilder_ == null) {
          return docs_.get(index);
        } else {
          return docsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * docs is an array of doc constructors
       * </pre>
       *
       * <code>repeated .api.DocConstructor docs = 1;</code>
       */
      public Builder setDocs(
          int index, api.Graphik.DocConstructor value) {
        if (docsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDocsIsMutable();
          docs_.set(index, value);
          onChanged();
        } else {
          docsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * docs is an array of doc constructors
       * </pre>
       *
       * <code>repeated .api.DocConstructor docs = 1;</code>
       */
      public Builder setDocs(
          int index, api.Graphik.DocConstructor.Builder builderForValue) {
        if (docsBuilder_ == null) {
          ensureDocsIsMutable();
          docs_.set(index, builderForValue.build());
          onChanged();
        } else {
          docsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * docs is an array of doc constructors
       * </pre>
       *
       * <code>repeated .api.DocConstructor docs = 1;</code>
       */
      public Builder addDocs(api.Graphik.DocConstructor value) {
        if (docsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDocsIsMutable();
          docs_.add(value);
          onChanged();
        } else {
          docsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * docs is an array of doc constructors
       * </pre>
       *
       * <code>repeated .api.DocConstructor docs = 1;</code>
       */
      public Builder addDocs(
          int index, api.Graphik.DocConstructor value) {
        if (docsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDocsIsMutable();
          docs_.add(index, value);
          onChanged();
        } else {
          docsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * docs is an array of doc constructors
       * </pre>
       *
       * <code>repeated .api.DocConstructor docs = 1;</code>
       */
      public Builder addDocs(
          api.Graphik.DocConstructor.Builder builderForValue) {
        if (docsBuilder_ == null) {
          ensureDocsIsMutable();
          docs_.add(builderForValue.build());
          onChanged();
        } else {
          docsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * docs is an array of doc constructors
       * </pre>
       *
       * <code>repeated .api.DocConstructor docs = 1;</code>
       */
      public Builder addDocs(
          int index, api.Graphik.DocConstructor.Builder builderForValue) {
        if (docsBuilder_ == null) {
          ensureDocsIsMutable();
          docs_.add(index, builderForValue.build());
          onChanged();
        } else {
          docsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * docs is an array of doc constructors
       * </pre>
       *
       * <code>repeated .api.DocConstructor docs = 1;</code>
       */
      public Builder addAllDocs(
          java.lang.Iterable<? extends api.Graphik.DocConstructor> values) {
        if (docsBuilder_ == null) {
          ensureDocsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, docs_);
          onChanged();
        } else {
          docsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * docs is an array of doc constructors
       * </pre>
       *
       * <code>repeated .api.DocConstructor docs = 1;</code>
       */
      public Builder clearDocs() {
        if (docsBuilder_ == null) {
          docs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          docsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * docs is an array of doc constructors
       * </pre>
       *
       * <code>repeated .api.DocConstructor docs = 1;</code>
       */
      public Builder removeDocs(int index) {
        if (docsBuilder_ == null) {
          ensureDocsIsMutable();
          docs_.remove(index);
          onChanged();
        } else {
          docsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * docs is an array of doc constructors
       * </pre>
       *
       * <code>repeated .api.DocConstructor docs = 1;</code>
       */
      public api.Graphik.DocConstructor.Builder getDocsBuilder(
          int index) {
        return getDocsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * docs is an array of doc constructors
       * </pre>
       *
       * <code>repeated .api.DocConstructor docs = 1;</code>
       */
      public api.Graphik.DocConstructorOrBuilder getDocsOrBuilder(
          int index) {
        if (docsBuilder_ == null) {
          return docs_.get(index);  } else {
          return docsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * docs is an array of doc constructors
       * </pre>
       *
       * <code>repeated .api.DocConstructor docs = 1;</code>
       */
      public java.util.List<? extends api.Graphik.DocConstructorOrBuilder> 
           getDocsOrBuilderList() {
        if (docsBuilder_ != null) {
          return docsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(docs_);
        }
      }
      /**
       * <pre>
       * docs is an array of doc constructors
       * </pre>
       *
       * <code>repeated .api.DocConstructor docs = 1;</code>
       */
      public api.Graphik.DocConstructor.Builder addDocsBuilder() {
        return getDocsFieldBuilder().addBuilder(
            api.Graphik.DocConstructor.getDefaultInstance());
      }
      /**
       * <pre>
       * docs is an array of doc constructors
       * </pre>
       *
       * <code>repeated .api.DocConstructor docs = 1;</code>
       */
      public api.Graphik.DocConstructor.Builder addDocsBuilder(
          int index) {
        return getDocsFieldBuilder().addBuilder(
            index, api.Graphik.DocConstructor.getDefaultInstance());
      }
      /**
       * <pre>
       * docs is an array of doc constructors
       * </pre>
       *
       * <code>repeated .api.DocConstructor docs = 1;</code>
       */
      public java.util.List<api.Graphik.DocConstructor.Builder> 
           getDocsBuilderList() {
        return getDocsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.DocConstructor, api.Graphik.DocConstructor.Builder, api.Graphik.DocConstructorOrBuilder> 
          getDocsFieldBuilder() {
        if (docsBuilder_ == null) {
          docsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              api.Graphik.DocConstructor, api.Graphik.DocConstructor.Builder, api.Graphik.DocConstructorOrBuilder>(
                  docs_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          docs_ = null;
        }
        return docsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.DocConstructors)
    }

    // @@protoc_insertion_point(class_scope:api.DocConstructors)
    private static final api.Graphik.DocConstructors DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.DocConstructors();
    }

    public static api.Graphik.DocConstructors getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<DocConstructors>
        PARSER = new com.google.protobuf.AbstractParser<DocConstructors>() {
      @java.lang.Override
      public DocConstructors parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DocConstructors(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.DocConstructors getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface TraversalOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Traversal)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.api.Doc doc = 1;</code>
     */
    boolean hasDoc();
    /**
     * <code>.api.Doc doc = 1;</code>
     */
    api.Graphik.Doc getDoc();
    /**
     * <code>.api.Doc doc = 1;</code>
     */
    api.Graphik.DocOrBuilder getDocOrBuilder();

    /**
     * <code>repeated .api.Ref traversal_path = 2;</code>
     */
    java.util.List<api.Graphik.Ref> 
        getTraversalPathList();
    /**
     * <code>repeated .api.Ref traversal_path = 2;</code>
     */
    api.Graphik.Ref getTraversalPath(int index);
    /**
     * <code>repeated .api.Ref traversal_path = 2;</code>
     */
    int getTraversalPathCount();
    /**
     * <code>repeated .api.Ref traversal_path = 2;</code>
     */
    java.util.List<? extends api.Graphik.RefOrBuilder> 
        getTraversalPathOrBuilderList();
    /**
     * <code>repeated .api.Ref traversal_path = 2;</code>
     */
    api.Graphik.RefOrBuilder getTraversalPathOrBuilder(
        int index);

    /**
     * <code>uint64 depth = 3;</code>
     */
    long getDepth();

    /**
     * <code>uint64 hops = 4;</code>
     */
    long getHops();
  }
  /**
   * Protobuf type {@code api.Traversal}
   */
  public  static final class Traversal extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Traversal)
      TraversalOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Traversal.newBuilder() to construct.
    private Traversal(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Traversal() {
      traversalPath_ = java.util.Collections.emptyList();
      depth_ = 0L;
      hops_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Traversal(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              api.Graphik.Doc.Builder subBuilder = null;
              if (doc_ != null) {
                subBuilder = doc_.toBuilder();
              }
              doc_ = input.readMessage(api.Graphik.Doc.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(doc_);
                doc_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                traversalPath_ = new java.util.ArrayList<api.Graphik.Ref>();
                mutable_bitField0_ |= 0x00000002;
              }
              traversalPath_.add(
                  input.readMessage(api.Graphik.Ref.parser(), extensionRegistry));
              break;
            }
            case 24: {

              depth_ = input.readUInt64();
              break;
            }
            case 32: {

              hops_ = input.readUInt64();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          traversalPath_ = java.util.Collections.unmodifiableList(traversalPath_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Traversal_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Traversal_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Traversal.class, api.Graphik.Traversal.Builder.class);
    }

    private int bitField0_;
    public static final int DOC_FIELD_NUMBER = 1;
    private api.Graphik.Doc doc_;
    /**
     * <code>.api.Doc doc = 1;</code>
     */
    public boolean hasDoc() {
      return doc_ != null;
    }
    /**
     * <code>.api.Doc doc = 1;</code>
     */
    public api.Graphik.Doc getDoc() {
      return doc_ == null ? api.Graphik.Doc.getDefaultInstance() : doc_;
    }
    /**
     * <code>.api.Doc doc = 1;</code>
     */
    public api.Graphik.DocOrBuilder getDocOrBuilder() {
      return getDoc();
    }

    public static final int TRAVERSAL_PATH_FIELD_NUMBER = 2;
    private java.util.List<api.Graphik.Ref> traversalPath_;
    /**
     * <code>repeated .api.Ref traversal_path = 2;</code>
     */
    public java.util.List<api.Graphik.Ref> getTraversalPathList() {
      return traversalPath_;
    }
    /**
     * <code>repeated .api.Ref traversal_path = 2;</code>
     */
    public java.util.List<? extends api.Graphik.RefOrBuilder> 
        getTraversalPathOrBuilderList() {
      return traversalPath_;
    }
    /**
     * <code>repeated .api.Ref traversal_path = 2;</code>
     */
    public int getTraversalPathCount() {
      return traversalPath_.size();
    }
    /**
     * <code>repeated .api.Ref traversal_path = 2;</code>
     */
    public api.Graphik.Ref getTraversalPath(int index) {
      return traversalPath_.get(index);
    }
    /**
     * <code>repeated .api.Ref traversal_path = 2;</code>
     */
    public api.Graphik.RefOrBuilder getTraversalPathOrBuilder(
        int index) {
      return traversalPath_.get(index);
    }

    public static final int DEPTH_FIELD_NUMBER = 3;
    private long depth_;
    /**
     * <code>uint64 depth = 3;</code>
     */
    public long getDepth() {
      return depth_;
    }

    public static final int HOPS_FIELD_NUMBER = 4;
    private long hops_;
    /**
     * <code>uint64 hops = 4;</code>
     */
    public long getHops() {
      return hops_;
    }

    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 (doc_ != null) {
        output.writeMessage(1, getDoc());
      }
      for (int i = 0; i < traversalPath_.size(); i++) {
        output.writeMessage(2, traversalPath_.get(i));
      }
      if (depth_ != 0L) {
        output.writeUInt64(3, depth_);
      }
      if (hops_ != 0L) {
        output.writeUInt64(4, hops_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (doc_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getDoc());
      }
      for (int i = 0; i < traversalPath_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, traversalPath_.get(i));
      }
      if (depth_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(3, depth_);
      }
      if (hops_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(4, hops_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && (hasDoc() == other.hasDoc());
      if (hasDoc()) {
        result = result && getDoc()
            .equals(other.getDoc());
      }
      result = result && getTraversalPathList()
          .equals(other.getTraversalPathList());
      result = result && (getDepth()
          == other.getDepth());
      result = result && (getHops()
          == other.getHops());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasDoc()) {
        hash = (37 * hash) + DOC_FIELD_NUMBER;
        hash = (53 * hash) + getDoc().hashCode();
      }
      if (getTraversalPathCount() > 0) {
        hash = (37 * hash) + TRAVERSAL_PATH_FIELD_NUMBER;
        hash = (53 * hash) + getTraversalPathList().hashCode();
      }
      hash = (37 * hash) + DEPTH_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getDepth());
      hash = (37 * hash) + HOPS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getHops());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

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

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Traversal_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Traversal.class, api.Graphik.Traversal.Builder.class);
      }

      // Construct using api.Graphik.Traversal.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getTraversalPathFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (docBuilder_ == null) {
          doc_ = null;
        } else {
          doc_ = null;
          docBuilder_ = null;
        }
        if (traversalPathBuilder_ == null) {
          traversalPath_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          traversalPathBuilder_.clear();
        }
        depth_ = 0L;

        hops_ = 0L;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Traversal_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Traversal getDefaultInstanceForType() {
        return api.Graphik.Traversal.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Traversal buildPartial() {
        api.Graphik.Traversal result = new api.Graphik.Traversal(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (docBuilder_ == null) {
          result.doc_ = doc_;
        } else {
          result.doc_ = docBuilder_.build();
        }
        if (traversalPathBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            traversalPath_ = java.util.Collections.unmodifiableList(traversalPath_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.traversalPath_ = traversalPath_;
        } else {
          result.traversalPath_ = traversalPathBuilder_.build();
        }
        result.depth_ = depth_;
        result.hops_ = hops_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Traversal other) {
        if (other == api.Graphik.Traversal.getDefaultInstance()) return this;
        if (other.hasDoc()) {
          mergeDoc(other.getDoc());
        }
        if (traversalPathBuilder_ == null) {
          if (!other.traversalPath_.isEmpty()) {
            if (traversalPath_.isEmpty()) {
              traversalPath_ = other.traversalPath_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureTraversalPathIsMutable();
              traversalPath_.addAll(other.traversalPath_);
            }
            onChanged();
          }
        } else {
          if (!other.traversalPath_.isEmpty()) {
            if (traversalPathBuilder_.isEmpty()) {
              traversalPathBuilder_.dispose();
              traversalPathBuilder_ = null;
              traversalPath_ = other.traversalPath_;
              bitField0_ = (bitField0_ & ~0x00000002);
              traversalPathBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getTraversalPathFieldBuilder() : null;
            } else {
              traversalPathBuilder_.addAllMessages(other.traversalPath_);
            }
          }
        }
        if (other.getDepth() != 0L) {
          setDepth(other.getDepth());
        }
        if (other.getHops() != 0L) {
          setHops(other.getHops());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Traversal parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Traversal) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private api.Graphik.Doc doc_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Doc, api.Graphik.Doc.Builder, api.Graphik.DocOrBuilder> docBuilder_;
      /**
       * <code>.api.Doc doc = 1;</code>
       */
      public boolean hasDoc() {
        return docBuilder_ != null || doc_ != null;
      }
      /**
       * <code>.api.Doc doc = 1;</code>
       */
      public api.Graphik.Doc getDoc() {
        if (docBuilder_ == null) {
          return doc_ == null ? api.Graphik.Doc.getDefaultInstance() : doc_;
        } else {
          return docBuilder_.getMessage();
        }
      }
      /**
       * <code>.api.Doc doc = 1;</code>
       */
      public Builder setDoc(api.Graphik.Doc value) {
        if (docBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          doc_ = value;
          onChanged();
        } else {
          docBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.api.Doc doc = 1;</code>
       */
      public Builder setDoc(
          api.Graphik.Doc.Builder builderForValue) {
        if (docBuilder_ == null) {
          doc_ = builderForValue.build();
          onChanged();
        } else {
          docBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.api.Doc doc = 1;</code>
       */
      public Builder mergeDoc(api.Graphik.Doc value) {
        if (docBuilder_ == null) {
          if (doc_ != null) {
            doc_ =
              api.Graphik.Doc.newBuilder(doc_).mergeFrom(value).buildPartial();
          } else {
            doc_ = value;
          }
          onChanged();
        } else {
          docBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.api.Doc doc = 1;</code>
       */
      public Builder clearDoc() {
        if (docBuilder_ == null) {
          doc_ = null;
          onChanged();
        } else {
          doc_ = null;
          docBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.api.Doc doc = 1;</code>
       */
      public api.Graphik.Doc.Builder getDocBuilder() {
        
        onChanged();
        return getDocFieldBuilder().getBuilder();
      }
      /**
       * <code>.api.Doc doc = 1;</code>
       */
      public api.Graphik.DocOrBuilder getDocOrBuilder() {
        if (docBuilder_ != null) {
          return docBuilder_.getMessageOrBuilder();
        } else {
          return doc_ == null ?
              api.Graphik.Doc.getDefaultInstance() : doc_;
        }
      }
      /**
       * <code>.api.Doc doc = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Doc, api.Graphik.Doc.Builder, api.Graphik.DocOrBuilder> 
          getDocFieldBuilder() {
        if (docBuilder_ == null) {
          docBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Doc, api.Graphik.Doc.Builder, api.Graphik.DocOrBuilder>(
                  getDoc(),
                  getParentForChildren(),
                  isClean());
          doc_ = null;
        }
        return docBuilder_;
      }

      private java.util.List<api.Graphik.Ref> traversalPath_ =
        java.util.Collections.emptyList();
      private void ensureTraversalPathIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          traversalPath_ = new java.util.ArrayList<api.Graphik.Ref>(traversalPath_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> traversalPathBuilder_;

      /**
       * <code>repeated .api.Ref traversal_path = 2;</code>
       */
      public java.util.List<api.Graphik.Ref> getTraversalPathList() {
        if (traversalPathBuilder_ == null) {
          return java.util.Collections.unmodifiableList(traversalPath_);
        } else {
          return traversalPathBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .api.Ref traversal_path = 2;</code>
       */
      public int getTraversalPathCount() {
        if (traversalPathBuilder_ == null) {
          return traversalPath_.size();
        } else {
          return traversalPathBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .api.Ref traversal_path = 2;</code>
       */
      public api.Graphik.Ref getTraversalPath(int index) {
        if (traversalPathBuilder_ == null) {
          return traversalPath_.get(index);
        } else {
          return traversalPathBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .api.Ref traversal_path = 2;</code>
       */
      public Builder setTraversalPath(
          int index, api.Graphik.Ref value) {
        if (traversalPathBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTraversalPathIsMutable();
          traversalPath_.set(index, value);
          onChanged();
        } else {
          traversalPathBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref traversal_path = 2;</code>
       */
      public Builder setTraversalPath(
          int index, api.Graphik.Ref.Builder builderForValue) {
        if (traversalPathBuilder_ == null) {
          ensureTraversalPathIsMutable();
          traversalPath_.set(index, builderForValue.build());
          onChanged();
        } else {
          traversalPathBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref traversal_path = 2;</code>
       */
      public Builder addTraversalPath(api.Graphik.Ref value) {
        if (traversalPathBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTraversalPathIsMutable();
          traversalPath_.add(value);
          onChanged();
        } else {
          traversalPathBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref traversal_path = 2;</code>
       */
      public Builder addTraversalPath(
          int index, api.Graphik.Ref value) {
        if (traversalPathBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTraversalPathIsMutable();
          traversalPath_.add(index, value);
          onChanged();
        } else {
          traversalPathBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref traversal_path = 2;</code>
       */
      public Builder addTraversalPath(
          api.Graphik.Ref.Builder builderForValue) {
        if (traversalPathBuilder_ == null) {
          ensureTraversalPathIsMutable();
          traversalPath_.add(builderForValue.build());
          onChanged();
        } else {
          traversalPathBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref traversal_path = 2;</code>
       */
      public Builder addTraversalPath(
          int index, api.Graphik.Ref.Builder builderForValue) {
        if (traversalPathBuilder_ == null) {
          ensureTraversalPathIsMutable();
          traversalPath_.add(index, builderForValue.build());
          onChanged();
        } else {
          traversalPathBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref traversal_path = 2;</code>
       */
      public Builder addAllTraversalPath(
          java.lang.Iterable<? extends api.Graphik.Ref> values) {
        if (traversalPathBuilder_ == null) {
          ensureTraversalPathIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, traversalPath_);
          onChanged();
        } else {
          traversalPathBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref traversal_path = 2;</code>
       */
      public Builder clearTraversalPath() {
        if (traversalPathBuilder_ == null) {
          traversalPath_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          traversalPathBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref traversal_path = 2;</code>
       */
      public Builder removeTraversalPath(int index) {
        if (traversalPathBuilder_ == null) {
          ensureTraversalPathIsMutable();
          traversalPath_.remove(index);
          onChanged();
        } else {
          traversalPathBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref traversal_path = 2;</code>
       */
      public api.Graphik.Ref.Builder getTraversalPathBuilder(
          int index) {
        return getTraversalPathFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .api.Ref traversal_path = 2;</code>
       */
      public api.Graphik.RefOrBuilder getTraversalPathOrBuilder(
          int index) {
        if (traversalPathBuilder_ == null) {
          return traversalPath_.get(index);  } else {
          return traversalPathBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .api.Ref traversal_path = 2;</code>
       */
      public java.util.List<? extends api.Graphik.RefOrBuilder> 
           getTraversalPathOrBuilderList() {
        if (traversalPathBuilder_ != null) {
          return traversalPathBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(traversalPath_);
        }
      }
      /**
       * <code>repeated .api.Ref traversal_path = 2;</code>
       */
      public api.Graphik.Ref.Builder addTraversalPathBuilder() {
        return getTraversalPathFieldBuilder().addBuilder(
            api.Graphik.Ref.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Ref traversal_path = 2;</code>
       */
      public api.Graphik.Ref.Builder addTraversalPathBuilder(
          int index) {
        return getTraversalPathFieldBuilder().addBuilder(
            index, api.Graphik.Ref.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Ref traversal_path = 2;</code>
       */
      public java.util.List<api.Graphik.Ref.Builder> 
           getTraversalPathBuilderList() {
        return getTraversalPathFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> 
          getTraversalPathFieldBuilder() {
        if (traversalPathBuilder_ == null) {
          traversalPathBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder>(
                  traversalPath_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          traversalPath_ = null;
        }
        return traversalPathBuilder_;
      }

      private long depth_ ;
      /**
       * <code>uint64 depth = 3;</code>
       */
      public long getDepth() {
        return depth_;
      }
      /**
       * <code>uint64 depth = 3;</code>
       */
      public Builder setDepth(long value) {
        
        depth_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint64 depth = 3;</code>
       */
      public Builder clearDepth() {
        
        depth_ = 0L;
        onChanged();
        return this;
      }

      private long hops_ ;
      /**
       * <code>uint64 hops = 4;</code>
       */
      public long getHops() {
        return hops_;
      }
      /**
       * <code>uint64 hops = 4;</code>
       */
      public Builder setHops(long value) {
        
        hops_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint64 hops = 4;</code>
       */
      public Builder clearHops() {
        
        hops_ = 0L;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Traversal)
    }

    // @@protoc_insertion_point(class_scope:api.Traversal)
    private static final api.Graphik.Traversal DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Traversal();
    }

    public static api.Graphik.Traversal getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Traversal>
        PARSER = new com.google.protobuf.AbstractParser<Traversal>() {
      @java.lang.Override
      public Traversal parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Traversal(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Traversal getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface TraversalsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Traversals)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .api.Traversal traversals = 1;</code>
     */
    java.util.List<api.Graphik.Traversal> 
        getTraversalsList();
    /**
     * <code>repeated .api.Traversal traversals = 1;</code>
     */
    api.Graphik.Traversal getTraversals(int index);
    /**
     * <code>repeated .api.Traversal traversals = 1;</code>
     */
    int getTraversalsCount();
    /**
     * <code>repeated .api.Traversal traversals = 1;</code>
     */
    java.util.List<? extends api.Graphik.TraversalOrBuilder> 
        getTraversalsOrBuilderList();
    /**
     * <code>repeated .api.Traversal traversals = 1;</code>
     */
    api.Graphik.TraversalOrBuilder getTraversalsOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code api.Traversals}
   */
  public  static final class Traversals extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Traversals)
      TraversalsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Traversals.newBuilder() to construct.
    private Traversals(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Traversals() {
      traversals_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Traversals(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                traversals_ = new java.util.ArrayList<api.Graphik.Traversal>();
                mutable_bitField0_ |= 0x00000001;
              }
              traversals_.add(
                  input.readMessage(api.Graphik.Traversal.parser(), extensionRegistry));
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          traversals_ = java.util.Collections.unmodifiableList(traversals_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Traversals_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Traversals_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Traversals.class, api.Graphik.Traversals.Builder.class);
    }

    public static final int TRAVERSALS_FIELD_NUMBER = 1;
    private java.util.List<api.Graphik.Traversal> traversals_;
    /**
     * <code>repeated .api.Traversal traversals = 1;</code>
     */
    public java.util.List<api.Graphik.Traversal> getTraversalsList() {
      return traversals_;
    }
    /**
     * <code>repeated .api.Traversal traversals = 1;</code>
     */
    public java.util.List<? extends api.Graphik.TraversalOrBuilder> 
        getTraversalsOrBuilderList() {
      return traversals_;
    }
    /**
     * <code>repeated .api.Traversal traversals = 1;</code>
     */
    public int getTraversalsCount() {
      return traversals_.size();
    }
    /**
     * <code>repeated .api.Traversal traversals = 1;</code>
     */
    public api.Graphik.Traversal getTraversals(int index) {
      return traversals_.get(index);
    }
    /**
     * <code>repeated .api.Traversal traversals = 1;</code>
     */
    public api.Graphik.TraversalOrBuilder getTraversalsOrBuilder(
        int index) {
      return traversals_.get(index);
    }

    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 {
      for (int i = 0; i < traversals_.size(); i++) {
        output.writeMessage(1, traversals_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < traversals_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, traversals_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getTraversalsList()
          .equals(other.getTraversalsList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getTraversalsCount() > 0) {
        hash = (37 * hash) + TRAVERSALS_FIELD_NUMBER;
        hash = (53 * hash) + getTraversalsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

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

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Traversals_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Traversals.class, api.Graphik.Traversals.Builder.class);
      }

      // Construct using api.Graphik.Traversals.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Traversals_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Traversals getDefaultInstanceForType() {
        return api.Graphik.Traversals.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Traversals buildPartial() {
        api.Graphik.Traversals result = new api.Graphik.Traversals(this);
        int from_bitField0_ = bitField0_;
        if (traversalsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            traversals_ = java.util.Collections.unmodifiableList(traversals_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.traversals_ = traversals_;
        } else {
          result.traversals_ = traversalsBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Traversals other) {
        if (other == api.Graphik.Traversals.getDefaultInstance()) return this;
        if (traversalsBuilder_ == null) {
          if (!other.traversals_.isEmpty()) {
            if (traversals_.isEmpty()) {
              traversals_ = other.traversals_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureTraversalsIsMutable();
              traversals_.addAll(other.traversals_);
            }
            onChanged();
          }
        } else {
          if (!other.traversals_.isEmpty()) {
            if (traversalsBuilder_.isEmpty()) {
              traversalsBuilder_.dispose();
              traversalsBuilder_ = null;
              traversals_ = other.traversals_;
              bitField0_ = (bitField0_ & ~0x00000001);
              traversalsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getTraversalsFieldBuilder() : null;
            } else {
              traversalsBuilder_.addAllMessages(other.traversals_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Traversals parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Traversals) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<api.Graphik.Traversal> traversals_ =
        java.util.Collections.emptyList();
      private void ensureTraversalsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          traversals_ = new java.util.ArrayList<api.Graphik.Traversal>(traversals_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Traversal, api.Graphik.Traversal.Builder, api.Graphik.TraversalOrBuilder> traversalsBuilder_;

      /**
       * <code>repeated .api.Traversal traversals = 1;</code>
       */
      public java.util.List<api.Graphik.Traversal> getTraversalsList() {
        if (traversalsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(traversals_);
        } else {
          return traversalsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .api.Traversal traversals = 1;</code>
       */
      public int getTraversalsCount() {
        if (traversalsBuilder_ == null) {
          return traversals_.size();
        } else {
          return traversalsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .api.Traversal traversals = 1;</code>
       */
      public api.Graphik.Traversal getTraversals(int index) {
        if (traversalsBuilder_ == null) {
          return traversals_.get(index);
        } else {
          return traversalsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .api.Traversal traversals = 1;</code>
       */
      public Builder setTraversals(
          int index, api.Graphik.Traversal value) {
        if (traversalsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTraversalsIsMutable();
          traversals_.set(index, value);
          onChanged();
        } else {
          traversalsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Traversal traversals = 1;</code>
       */
      public Builder setTraversals(
          int index, api.Graphik.Traversal.Builder builderForValue) {
        if (traversalsBuilder_ == null) {
          ensureTraversalsIsMutable();
          traversals_.set(index, builderForValue.build());
          onChanged();
        } else {
          traversalsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Traversal traversals = 1;</code>
       */
      public Builder addTraversals(api.Graphik.Traversal value) {
        if (traversalsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTraversalsIsMutable();
          traversals_.add(value);
          onChanged();
        } else {
          traversalsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Traversal traversals = 1;</code>
       */
      public Builder addTraversals(
          int index, api.Graphik.Traversal value) {
        if (traversalsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTraversalsIsMutable();
          traversals_.add(index, value);
          onChanged();
        } else {
          traversalsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Traversal traversals = 1;</code>
       */
      public Builder addTraversals(
          api.Graphik.Traversal.Builder builderForValue) {
        if (traversalsBuilder_ == null) {
          ensureTraversalsIsMutable();
          traversals_.add(builderForValue.build());
          onChanged();
        } else {
          traversalsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Traversal traversals = 1;</code>
       */
      public Builder addTraversals(
          int index, api.Graphik.Traversal.Builder builderForValue) {
        if (traversalsBuilder_ == null) {
          ensureTraversalsIsMutable();
          traversals_.add(index, builderForValue.build());
          onChanged();
        } else {
          traversalsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Traversal traversals = 1;</code>
       */
      public Builder addAllTraversals(
          java.lang.Iterable<? extends api.Graphik.Traversal> values) {
        if (traversalsBuilder_ == null) {
          ensureTraversalsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, traversals_);
          onChanged();
        } else {
          traversalsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .api.Traversal traversals = 1;</code>
       */
      public Builder clearTraversals() {
        if (traversalsBuilder_ == null) {
          traversals_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          traversalsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .api.Traversal traversals = 1;</code>
       */
      public Builder removeTraversals(int index) {
        if (traversalsBuilder_ == null) {
          ensureTraversalsIsMutable();
          traversals_.remove(index);
          onChanged();
        } else {
          traversalsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .api.Traversal traversals = 1;</code>
       */
      public api.Graphik.Traversal.Builder getTraversalsBuilder(
          int index) {
        return getTraversalsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .api.Traversal traversals = 1;</code>
       */
      public api.Graphik.TraversalOrBuilder getTraversalsOrBuilder(
          int index) {
        if (traversalsBuilder_ == null) {
          return traversals_.get(index);  } else {
          return traversalsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .api.Traversal traversals = 1;</code>
       */
      public java.util.List<? extends api.Graphik.TraversalOrBuilder> 
           getTraversalsOrBuilderList() {
        if (traversalsBuilder_ != null) {
          return traversalsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(traversals_);
        }
      }
      /**
       * <code>repeated .api.Traversal traversals = 1;</code>
       */
      public api.Graphik.Traversal.Builder addTraversalsBuilder() {
        return getTraversalsFieldBuilder().addBuilder(
            api.Graphik.Traversal.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Traversal traversals = 1;</code>
       */
      public api.Graphik.Traversal.Builder addTraversalsBuilder(
          int index) {
        return getTraversalsFieldBuilder().addBuilder(
            index, api.Graphik.Traversal.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Traversal traversals = 1;</code>
       */
      public java.util.List<api.Graphik.Traversal.Builder> 
           getTraversalsBuilderList() {
        return getTraversalsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Traversal, api.Graphik.Traversal.Builder, api.Graphik.TraversalOrBuilder> 
          getTraversalsFieldBuilder() {
        if (traversalsBuilder_ == null) {
          traversalsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              api.Graphik.Traversal, api.Graphik.Traversal.Builder, api.Graphik.TraversalOrBuilder>(
                  traversals_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          traversals_ = null;
        }
        return traversalsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Traversals)
    }

    // @@protoc_insertion_point(class_scope:api.Traversals)
    private static final api.Graphik.Traversals DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Traversals();
    }

    public static api.Graphik.Traversals getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Traversals>
        PARSER = new com.google.protobuf.AbstractParser<Traversals>() {
      @java.lang.Override
      public Traversals parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Traversals(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Traversals getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DocsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Docs)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * docs is an array of docs
     * </pre>
     *
     * <code>repeated .api.Doc docs = 1;</code>
     */
    java.util.List<api.Graphik.Doc> 
        getDocsList();
    /**
     * <pre>
     * docs is an array of docs
     * </pre>
     *
     * <code>repeated .api.Doc docs = 1;</code>
     */
    api.Graphik.Doc getDocs(int index);
    /**
     * <pre>
     * docs is an array of docs
     * </pre>
     *
     * <code>repeated .api.Doc docs = 1;</code>
     */
    int getDocsCount();
    /**
     * <pre>
     * docs is an array of docs
     * </pre>
     *
     * <code>repeated .api.Doc docs = 1;</code>
     */
    java.util.List<? extends api.Graphik.DocOrBuilder> 
        getDocsOrBuilderList();
    /**
     * <pre>
     * docs is an array of docs
     * </pre>
     *
     * <code>repeated .api.Doc docs = 1;</code>
     */
    api.Graphik.DocOrBuilder getDocsOrBuilder(
        int index);

    /**
     * <code>string seek_next = 2;</code>
     */
    java.lang.String getSeekNext();
    /**
     * <code>string seek_next = 2;</code>
     */
    com.google.protobuf.ByteString
        getSeekNextBytes();
  }
  /**
   * <pre>
   * Docs is an array of docs
   * </pre>
   *
   * Protobuf type {@code api.Docs}
   */
  public  static final class Docs extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Docs)
      DocsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Docs.newBuilder() to construct.
    private Docs(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Docs() {
      docs_ = java.util.Collections.emptyList();
      seekNext_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Docs(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                docs_ = new java.util.ArrayList<api.Graphik.Doc>();
                mutable_bitField0_ |= 0x00000001;
              }
              docs_.add(
                  input.readMessage(api.Graphik.Doc.parser(), extensionRegistry));
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              seekNext_ = s;
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          docs_ = java.util.Collections.unmodifiableList(docs_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Docs_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Docs_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Docs.class, api.Graphik.Docs.Builder.class);
    }

    private int bitField0_;
    public static final int DOCS_FIELD_NUMBER = 1;
    private java.util.List<api.Graphik.Doc> docs_;
    /**
     * <pre>
     * docs is an array of docs
     * </pre>
     *
     * <code>repeated .api.Doc docs = 1;</code>
     */
    public java.util.List<api.Graphik.Doc> getDocsList() {
      return docs_;
    }
    /**
     * <pre>
     * docs is an array of docs
     * </pre>
     *
     * <code>repeated .api.Doc docs = 1;</code>
     */
    public java.util.List<? extends api.Graphik.DocOrBuilder> 
        getDocsOrBuilderList() {
      return docs_;
    }
    /**
     * <pre>
     * docs is an array of docs
     * </pre>
     *
     * <code>repeated .api.Doc docs = 1;</code>
     */
    public int getDocsCount() {
      return docs_.size();
    }
    /**
     * <pre>
     * docs is an array of docs
     * </pre>
     *
     * <code>repeated .api.Doc docs = 1;</code>
     */
    public api.Graphik.Doc getDocs(int index) {
      return docs_.get(index);
    }
    /**
     * <pre>
     * docs is an array of docs
     * </pre>
     *
     * <code>repeated .api.Doc docs = 1;</code>
     */
    public api.Graphik.DocOrBuilder getDocsOrBuilder(
        int index) {
      return docs_.get(index);
    }

    public static final int SEEK_NEXT_FIELD_NUMBER = 2;
    private volatile java.lang.Object seekNext_;
    /**
     * <code>string seek_next = 2;</code>
     */
    public java.lang.String getSeekNext() {
      java.lang.Object ref = seekNext_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        seekNext_ = s;
        return s;
      }
    }
    /**
     * <code>string seek_next = 2;</code>
     */
    public com.google.protobuf.ByteString
        getSeekNextBytes() {
      java.lang.Object ref = seekNext_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        seekNext_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    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 {
      for (int i = 0; i < docs_.size(); i++) {
        output.writeMessage(1, docs_.get(i));
      }
      if (!getSeekNextBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, seekNext_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < docs_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, docs_.get(i));
      }
      if (!getSeekNextBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, seekNext_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getDocsList()
          .equals(other.getDocsList());
      result = result && getSeekNext()
          .equals(other.getSeekNext());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getDocsCount() > 0) {
        hash = (37 * hash) + DOCS_FIELD_NUMBER;
        hash = (53 * hash) + getDocsList().hashCode();
      }
      hash = (37 * hash) + SEEK_NEXT_FIELD_NUMBER;
      hash = (53 * hash) + getSeekNext().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Docs parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Docs parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Docs parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Docs parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Docs parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Docs parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Docs parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Docs 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 api.Graphik.Docs parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Docs 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 api.Graphik.Docs parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Docs 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(api.Graphik.Docs 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>
     * Docs is an array of docs
     * </pre>
     *
     * Protobuf type {@code api.Docs}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Docs)
        api.Graphik.DocsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Docs_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Docs_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Docs.class, api.Graphik.Docs.Builder.class);
      }

      // Construct using api.Graphik.Docs.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getDocsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (docsBuilder_ == null) {
          docs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          docsBuilder_.clear();
        }
        seekNext_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Docs_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Docs getDefaultInstanceForType() {
        return api.Graphik.Docs.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Docs buildPartial() {
        api.Graphik.Docs result = new api.Graphik.Docs(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (docsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            docs_ = java.util.Collections.unmodifiableList(docs_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.docs_ = docs_;
        } else {
          result.docs_ = docsBuilder_.build();
        }
        result.seekNext_ = seekNext_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Docs other) {
        if (other == api.Graphik.Docs.getDefaultInstance()) return this;
        if (docsBuilder_ == null) {
          if (!other.docs_.isEmpty()) {
            if (docs_.isEmpty()) {
              docs_ = other.docs_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureDocsIsMutable();
              docs_.addAll(other.docs_);
            }
            onChanged();
          }
        } else {
          if (!other.docs_.isEmpty()) {
            if (docsBuilder_.isEmpty()) {
              docsBuilder_.dispose();
              docsBuilder_ = null;
              docs_ = other.docs_;
              bitField0_ = (bitField0_ & ~0x00000001);
              docsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getDocsFieldBuilder() : null;
            } else {
              docsBuilder_.addAllMessages(other.docs_);
            }
          }
        }
        if (!other.getSeekNext().isEmpty()) {
          seekNext_ = other.seekNext_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Docs parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Docs) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<api.Graphik.Doc> docs_ =
        java.util.Collections.emptyList();
      private void ensureDocsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          docs_ = new java.util.ArrayList<api.Graphik.Doc>(docs_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Doc, api.Graphik.Doc.Builder, api.Graphik.DocOrBuilder> docsBuilder_;

      /**
       * <pre>
       * docs is an array of docs
       * </pre>
       *
       * <code>repeated .api.Doc docs = 1;</code>
       */
      public java.util.List<api.Graphik.Doc> getDocsList() {
        if (docsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(docs_);
        } else {
          return docsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * docs is an array of docs
       * </pre>
       *
       * <code>repeated .api.Doc docs = 1;</code>
       */
      public int getDocsCount() {
        if (docsBuilder_ == null) {
          return docs_.size();
        } else {
          return docsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * docs is an array of docs
       * </pre>
       *
       * <code>repeated .api.Doc docs = 1;</code>
       */
      public api.Graphik.Doc getDocs(int index) {
        if (docsBuilder_ == null) {
          return docs_.get(index);
        } else {
          return docsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * docs is an array of docs
       * </pre>
       *
       * <code>repeated .api.Doc docs = 1;</code>
       */
      public Builder setDocs(
          int index, api.Graphik.Doc value) {
        if (docsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDocsIsMutable();
          docs_.set(index, value);
          onChanged();
        } else {
          docsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * docs is an array of docs
       * </pre>
       *
       * <code>repeated .api.Doc docs = 1;</code>
       */
      public Builder setDocs(
          int index, api.Graphik.Doc.Builder builderForValue) {
        if (docsBuilder_ == null) {
          ensureDocsIsMutable();
          docs_.set(index, builderForValue.build());
          onChanged();
        } else {
          docsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * docs is an array of docs
       * </pre>
       *
       * <code>repeated .api.Doc docs = 1;</code>
       */
      public Builder addDocs(api.Graphik.Doc value) {
        if (docsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDocsIsMutable();
          docs_.add(value);
          onChanged();
        } else {
          docsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * docs is an array of docs
       * </pre>
       *
       * <code>repeated .api.Doc docs = 1;</code>
       */
      public Builder addDocs(
          int index, api.Graphik.Doc value) {
        if (docsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDocsIsMutable();
          docs_.add(index, value);
          onChanged();
        } else {
          docsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * docs is an array of docs
       * </pre>
       *
       * <code>repeated .api.Doc docs = 1;</code>
       */
      public Builder addDocs(
          api.Graphik.Doc.Builder builderForValue) {
        if (docsBuilder_ == null) {
          ensureDocsIsMutable();
          docs_.add(builderForValue.build());
          onChanged();
        } else {
          docsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * docs is an array of docs
       * </pre>
       *
       * <code>repeated .api.Doc docs = 1;</code>
       */
      public Builder addDocs(
          int index, api.Graphik.Doc.Builder builderForValue) {
        if (docsBuilder_ == null) {
          ensureDocsIsMutable();
          docs_.add(index, builderForValue.build());
          onChanged();
        } else {
          docsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * docs is an array of docs
       * </pre>
       *
       * <code>repeated .api.Doc docs = 1;</code>
       */
      public Builder addAllDocs(
          java.lang.Iterable<? extends api.Graphik.Doc> values) {
        if (docsBuilder_ == null) {
          ensureDocsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, docs_);
          onChanged();
        } else {
          docsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * docs is an array of docs
       * </pre>
       *
       * <code>repeated .api.Doc docs = 1;</code>
       */
      public Builder clearDocs() {
        if (docsBuilder_ == null) {
          docs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          docsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * docs is an array of docs
       * </pre>
       *
       * <code>repeated .api.Doc docs = 1;</code>
       */
      public Builder removeDocs(int index) {
        if (docsBuilder_ == null) {
          ensureDocsIsMutable();
          docs_.remove(index);
          onChanged();
        } else {
          docsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * docs is an array of docs
       * </pre>
       *
       * <code>repeated .api.Doc docs = 1;</code>
       */
      public api.Graphik.Doc.Builder getDocsBuilder(
          int index) {
        return getDocsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * docs is an array of docs
       * </pre>
       *
       * <code>repeated .api.Doc docs = 1;</code>
       */
      public api.Graphik.DocOrBuilder getDocsOrBuilder(
          int index) {
        if (docsBuilder_ == null) {
          return docs_.get(index);  } else {
          return docsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * docs is an array of docs
       * </pre>
       *
       * <code>repeated .api.Doc docs = 1;</code>
       */
      public java.util.List<? extends api.Graphik.DocOrBuilder> 
           getDocsOrBuilderList() {
        if (docsBuilder_ != null) {
          return docsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(docs_);
        }
      }
      /**
       * <pre>
       * docs is an array of docs
       * </pre>
       *
       * <code>repeated .api.Doc docs = 1;</code>
       */
      public api.Graphik.Doc.Builder addDocsBuilder() {
        return getDocsFieldBuilder().addBuilder(
            api.Graphik.Doc.getDefaultInstance());
      }
      /**
       * <pre>
       * docs is an array of docs
       * </pre>
       *
       * <code>repeated .api.Doc docs = 1;</code>
       */
      public api.Graphik.Doc.Builder addDocsBuilder(
          int index) {
        return getDocsFieldBuilder().addBuilder(
            index, api.Graphik.Doc.getDefaultInstance());
      }
      /**
       * <pre>
       * docs is an array of docs
       * </pre>
       *
       * <code>repeated .api.Doc docs = 1;</code>
       */
      public java.util.List<api.Graphik.Doc.Builder> 
           getDocsBuilderList() {
        return getDocsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Doc, api.Graphik.Doc.Builder, api.Graphik.DocOrBuilder> 
          getDocsFieldBuilder() {
        if (docsBuilder_ == null) {
          docsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              api.Graphik.Doc, api.Graphik.Doc.Builder, api.Graphik.DocOrBuilder>(
                  docs_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          docs_ = null;
        }
        return docsBuilder_;
      }

      private java.lang.Object seekNext_ = "";
      /**
       * <code>string seek_next = 2;</code>
       */
      public java.lang.String getSeekNext() {
        java.lang.Object ref = seekNext_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          seekNext_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string seek_next = 2;</code>
       */
      public com.google.protobuf.ByteString
          getSeekNextBytes() {
        java.lang.Object ref = seekNext_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          seekNext_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string seek_next = 2;</code>
       */
      public Builder setSeekNext(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        seekNext_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string seek_next = 2;</code>
       */
      public Builder clearSeekNext() {
        
        seekNext_ = getDefaultInstance().getSeekNext();
        onChanged();
        return this;
      }
      /**
       * <code>string seek_next = 2;</code>
       */
      public Builder setSeekNextBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        seekNext_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Docs)
    }

    // @@protoc_insertion_point(class_scope:api.Docs)
    private static final api.Graphik.Docs DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Docs();
    }

    public static api.Graphik.Docs getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Docs>
        PARSER = new com.google.protobuf.AbstractParser<Docs>() {
      @java.lang.Override
      public Docs parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Docs(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Docs getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ConnectionOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Connection)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ref is the ref to the connection
     * </pre>
     *
     * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
     */
    boolean hasRef();
    /**
     * <pre>
     * ref is the ref to the connection
     * </pre>
     *
     * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
     */
    api.Graphik.Ref getRef();
    /**
     * <pre>
     * ref is the ref to the connection
     * </pre>
     *
     * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
     */
    api.Graphik.RefOrBuilder getRefOrBuilder();

    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    boolean hasAttributes();
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    com.google.protobuf.Struct getAttributes();
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    com.google.protobuf.StructOrBuilder getAttributesOrBuilder();

    /**
     * <pre>
     * directed is false if the connection is bi-directional
     * </pre>
     *
     * <code>bool directed = 3;</code>
     */
    boolean getDirected();

    /**
     * <pre>
     * from is the doc ref that is the source of the connection
     * </pre>
     *
     * <code>.api.Ref from = 4 [(.validator.field) = { ... }</code>
     */
    boolean hasFrom();
    /**
     * <pre>
     * from is the doc ref that is the source of the connection
     * </pre>
     *
     * <code>.api.Ref from = 4 [(.validator.field) = { ... }</code>
     */
    api.Graphik.Ref getFrom();
    /**
     * <pre>
     * from is the doc ref that is the source of the connection
     * </pre>
     *
     * <code>.api.Ref from = 4 [(.validator.field) = { ... }</code>
     */
    api.Graphik.RefOrBuilder getFromOrBuilder();

    /**
     * <pre>
     * to is the doc ref that is the destination of the connection
     * </pre>
     *
     * <code>.api.Ref to = 5 [(.validator.field) = { ... }</code>
     */
    boolean hasTo();
    /**
     * <pre>
     * to is the doc ref that is the destination of the connection
     * </pre>
     *
     * <code>.api.Ref to = 5 [(.validator.field) = { ... }</code>
     */
    api.Graphik.Ref getTo();
    /**
     * <pre>
     * to is the doc ref that is the destination of the connection
     * </pre>
     *
     * <code>.api.Ref to = 5 [(.validator.field) = { ... }</code>
     */
    api.Graphik.RefOrBuilder getToOrBuilder();
  }
  /**
   * <pre>
   * Connection is a graph primitive that represents a relationship between two docs
   * </pre>
   *
   * Protobuf type {@code api.Connection}
   */
  public  static final class Connection extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Connection)
      ConnectionOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Connection.newBuilder() to construct.
    private Connection(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Connection() {
      directed_ = false;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Connection(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              api.Graphik.Ref.Builder subBuilder = null;
              if (ref_ != null) {
                subBuilder = ref_.toBuilder();
              }
              ref_ = input.readMessage(api.Graphik.Ref.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(ref_);
                ref_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              com.google.protobuf.Struct.Builder subBuilder = null;
              if (attributes_ != null) {
                subBuilder = attributes_.toBuilder();
              }
              attributes_ = input.readMessage(com.google.protobuf.Struct.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(attributes_);
                attributes_ = subBuilder.buildPartial();
              }

              break;
            }
            case 24: {

              directed_ = input.readBool();
              break;
            }
            case 34: {
              api.Graphik.Ref.Builder subBuilder = null;
              if (from_ != null) {
                subBuilder = from_.toBuilder();
              }
              from_ = input.readMessage(api.Graphik.Ref.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(from_);
                from_ = subBuilder.buildPartial();
              }

              break;
            }
            case 42: {
              api.Graphik.Ref.Builder subBuilder = null;
              if (to_ != null) {
                subBuilder = to_.toBuilder();
              }
              to_ = input.readMessage(api.Graphik.Ref.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(to_);
                to_ = subBuilder.buildPartial();
              }

              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Connection_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Connection_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Connection.class, api.Graphik.Connection.Builder.class);
    }

    public static final int REF_FIELD_NUMBER = 1;
    private api.Graphik.Ref ref_;
    /**
     * <pre>
     * ref is the ref to the connection
     * </pre>
     *
     * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
     */
    public boolean hasRef() {
      return ref_ != null;
    }
    /**
     * <pre>
     * ref is the ref to the connection
     * </pre>
     *
     * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.Ref getRef() {
      return ref_ == null ? api.Graphik.Ref.getDefaultInstance() : ref_;
    }
    /**
     * <pre>
     * ref is the ref to the connection
     * </pre>
     *
     * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.RefOrBuilder getRefOrBuilder() {
      return getRef();
    }

    public static final int ATTRIBUTES_FIELD_NUMBER = 2;
    private com.google.protobuf.Struct attributes_;
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    public boolean hasAttributes() {
      return attributes_ != null;
    }
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    public com.google.protobuf.Struct getAttributes() {
      return attributes_ == null ? com.google.protobuf.Struct.getDefaultInstance() : attributes_;
    }
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    public com.google.protobuf.StructOrBuilder getAttributesOrBuilder() {
      return getAttributes();
    }

    public static final int DIRECTED_FIELD_NUMBER = 3;
    private boolean directed_;
    /**
     * <pre>
     * directed is false if the connection is bi-directional
     * </pre>
     *
     * <code>bool directed = 3;</code>
     */
    public boolean getDirected() {
      return directed_;
    }

    public static final int FROM_FIELD_NUMBER = 4;
    private api.Graphik.Ref from_;
    /**
     * <pre>
     * from is the doc ref that is the source of the connection
     * </pre>
     *
     * <code>.api.Ref from = 4 [(.validator.field) = { ... }</code>
     */
    public boolean hasFrom() {
      return from_ != null;
    }
    /**
     * <pre>
     * from is the doc ref that is the source of the connection
     * </pre>
     *
     * <code>.api.Ref from = 4 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.Ref getFrom() {
      return from_ == null ? api.Graphik.Ref.getDefaultInstance() : from_;
    }
    /**
     * <pre>
     * from is the doc ref that is the source of the connection
     * </pre>
     *
     * <code>.api.Ref from = 4 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.RefOrBuilder getFromOrBuilder() {
      return getFrom();
    }

    public static final int TO_FIELD_NUMBER = 5;
    private api.Graphik.Ref to_;
    /**
     * <pre>
     * to is the doc ref that is the destination of the connection
     * </pre>
     *
     * <code>.api.Ref to = 5 [(.validator.field) = { ... }</code>
     */
    public boolean hasTo() {
      return to_ != null;
    }
    /**
     * <pre>
     * to is the doc ref that is the destination of the connection
     * </pre>
     *
     * <code>.api.Ref to = 5 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.Ref getTo() {
      return to_ == null ? api.Graphik.Ref.getDefaultInstance() : to_;
    }
    /**
     * <pre>
     * to is the doc ref that is the destination of the connection
     * </pre>
     *
     * <code>.api.Ref to = 5 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.RefOrBuilder getToOrBuilder() {
      return getTo();
    }

    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 (ref_ != null) {
        output.writeMessage(1, getRef());
      }
      if (attributes_ != null) {
        output.writeMessage(2, getAttributes());
      }
      if (directed_ != false) {
        output.writeBool(3, directed_);
      }
      if (from_ != null) {
        output.writeMessage(4, getFrom());
      }
      if (to_ != null) {
        output.writeMessage(5, getTo());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (ref_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getRef());
      }
      if (attributes_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getAttributes());
      }
      if (directed_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, directed_);
      }
      if (from_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getFrom());
      }
      if (to_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getTo());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && (hasRef() == other.hasRef());
      if (hasRef()) {
        result = result && getRef()
            .equals(other.getRef());
      }
      result = result && (hasAttributes() == other.hasAttributes());
      if (hasAttributes()) {
        result = result && getAttributes()
            .equals(other.getAttributes());
      }
      result = result && (getDirected()
          == other.getDirected());
      result = result && (hasFrom() == other.hasFrom());
      if (hasFrom()) {
        result = result && getFrom()
            .equals(other.getFrom());
      }
      result = result && (hasTo() == other.hasTo());
      if (hasTo()) {
        result = result && getTo()
            .equals(other.getTo());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRef()) {
        hash = (37 * hash) + REF_FIELD_NUMBER;
        hash = (53 * hash) + getRef().hashCode();
      }
      if (hasAttributes()) {
        hash = (37 * hash) + ATTRIBUTES_FIELD_NUMBER;
        hash = (53 * hash) + getAttributes().hashCode();
      }
      hash = (37 * hash) + DIRECTED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getDirected());
      if (hasFrom()) {
        hash = (37 * hash) + FROM_FIELD_NUMBER;
        hash = (53 * hash) + getFrom().hashCode();
      }
      if (hasTo()) {
        hash = (37 * hash) + TO_FIELD_NUMBER;
        hash = (53 * hash) + getTo().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Connection parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Connection parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Connection parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Connection parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Connection parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Connection parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Connection parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Connection 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 api.Graphik.Connection parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Connection 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 api.Graphik.Connection parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Connection 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(api.Graphik.Connection 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>
     * Connection is a graph primitive that represents a relationship between two docs
     * </pre>
     *
     * Protobuf type {@code api.Connection}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Connection)
        api.Graphik.ConnectionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Connection_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Connection_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Connection.class, api.Graphik.Connection.Builder.class);
      }

      // Construct using api.Graphik.Connection.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (refBuilder_ == null) {
          ref_ = null;
        } else {
          ref_ = null;
          refBuilder_ = null;
        }
        if (attributesBuilder_ == null) {
          attributes_ = null;
        } else {
          attributes_ = null;
          attributesBuilder_ = null;
        }
        directed_ = false;

        if (fromBuilder_ == null) {
          from_ = null;
        } else {
          from_ = null;
          fromBuilder_ = null;
        }
        if (toBuilder_ == null) {
          to_ = null;
        } else {
          to_ = null;
          toBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Connection_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Connection getDefaultInstanceForType() {
        return api.Graphik.Connection.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Connection buildPartial() {
        api.Graphik.Connection result = new api.Graphik.Connection(this);
        if (refBuilder_ == null) {
          result.ref_ = ref_;
        } else {
          result.ref_ = refBuilder_.build();
        }
        if (attributesBuilder_ == null) {
          result.attributes_ = attributes_;
        } else {
          result.attributes_ = attributesBuilder_.build();
        }
        result.directed_ = directed_;
        if (fromBuilder_ == null) {
          result.from_ = from_;
        } else {
          result.from_ = fromBuilder_.build();
        }
        if (toBuilder_ == null) {
          result.to_ = to_;
        } else {
          result.to_ = toBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Connection other) {
        if (other == api.Graphik.Connection.getDefaultInstance()) return this;
        if (other.hasRef()) {
          mergeRef(other.getRef());
        }
        if (other.hasAttributes()) {
          mergeAttributes(other.getAttributes());
        }
        if (other.getDirected() != false) {
          setDirected(other.getDirected());
        }
        if (other.hasFrom()) {
          mergeFrom(other.getFrom());
        }
        if (other.hasTo()) {
          mergeTo(other.getTo());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Connection parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Connection) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private api.Graphik.Ref ref_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> refBuilder_;
      /**
       * <pre>
       * ref is the ref to the connection
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public boolean hasRef() {
        return refBuilder_ != null || ref_ != null;
      }
      /**
       * <pre>
       * ref is the ref to the connection
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref getRef() {
        if (refBuilder_ == null) {
          return ref_ == null ? api.Graphik.Ref.getDefaultInstance() : ref_;
        } else {
          return refBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * ref is the ref to the connection
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setRef(api.Graphik.Ref value) {
        if (refBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ref_ = value;
          onChanged();
        } else {
          refBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the connection
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setRef(
          api.Graphik.Ref.Builder builderForValue) {
        if (refBuilder_ == null) {
          ref_ = builderForValue.build();
          onChanged();
        } else {
          refBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the connection
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder mergeRef(api.Graphik.Ref value) {
        if (refBuilder_ == null) {
          if (ref_ != null) {
            ref_ =
              api.Graphik.Ref.newBuilder(ref_).mergeFrom(value).buildPartial();
          } else {
            ref_ = value;
          }
          onChanged();
        } else {
          refBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the connection
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearRef() {
        if (refBuilder_ == null) {
          ref_ = null;
          onChanged();
        } else {
          ref_ = null;
          refBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the connection
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref.Builder getRefBuilder() {
        
        onChanged();
        return getRefFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * ref is the ref to the connection
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.RefOrBuilder getRefOrBuilder() {
        if (refBuilder_ != null) {
          return refBuilder_.getMessageOrBuilder();
        } else {
          return ref_ == null ?
              api.Graphik.Ref.getDefaultInstance() : ref_;
        }
      }
      /**
       * <pre>
       * ref is the ref to the connection
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> 
          getRefFieldBuilder() {
        if (refBuilder_ == null) {
          refBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder>(
                  getRef(),
                  getParentForChildren(),
                  isClean());
          ref_ = null;
        }
        return refBuilder_;
      }

      private com.google.protobuf.Struct attributes_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> attributesBuilder_;
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public boolean hasAttributes() {
        return attributesBuilder_ != null || attributes_ != null;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public com.google.protobuf.Struct getAttributes() {
        if (attributesBuilder_ == null) {
          return attributes_ == null ? com.google.protobuf.Struct.getDefaultInstance() : attributes_;
        } else {
          return attributesBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder setAttributes(com.google.protobuf.Struct value) {
        if (attributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          attributes_ = value;
          onChanged();
        } else {
          attributesBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder setAttributes(
          com.google.protobuf.Struct.Builder builderForValue) {
        if (attributesBuilder_ == null) {
          attributes_ = builderForValue.build();
          onChanged();
        } else {
          attributesBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder mergeAttributes(com.google.protobuf.Struct value) {
        if (attributesBuilder_ == null) {
          if (attributes_ != null) {
            attributes_ =
              com.google.protobuf.Struct.newBuilder(attributes_).mergeFrom(value).buildPartial();
          } else {
            attributes_ = value;
          }
          onChanged();
        } else {
          attributesBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder clearAttributes() {
        if (attributesBuilder_ == null) {
          attributes_ = null;
          onChanged();
        } else {
          attributes_ = null;
          attributesBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public com.google.protobuf.Struct.Builder getAttributesBuilder() {
        
        onChanged();
        return getAttributesFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public com.google.protobuf.StructOrBuilder getAttributesOrBuilder() {
        if (attributesBuilder_ != null) {
          return attributesBuilder_.getMessageOrBuilder();
        } else {
          return attributes_ == null ?
              com.google.protobuf.Struct.getDefaultInstance() : attributes_;
        }
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> 
          getAttributesFieldBuilder() {
        if (attributesBuilder_ == null) {
          attributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder>(
                  getAttributes(),
                  getParentForChildren(),
                  isClean());
          attributes_ = null;
        }
        return attributesBuilder_;
      }

      private boolean directed_ ;
      /**
       * <pre>
       * directed is false if the connection is bi-directional
       * </pre>
       *
       * <code>bool directed = 3;</code>
       */
      public boolean getDirected() {
        return directed_;
      }
      /**
       * <pre>
       * directed is false if the connection is bi-directional
       * </pre>
       *
       * <code>bool directed = 3;</code>
       */
      public Builder setDirected(boolean value) {
        
        directed_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * directed is false if the connection is bi-directional
       * </pre>
       *
       * <code>bool directed = 3;</code>
       */
      public Builder clearDirected() {
        
        directed_ = false;
        onChanged();
        return this;
      }

      private api.Graphik.Ref from_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> fromBuilder_;
      /**
       * <pre>
       * from is the doc ref that is the source of the connection
       * </pre>
       *
       * <code>.api.Ref from = 4 [(.validator.field) = { ... }</code>
       */
      public boolean hasFrom() {
        return fromBuilder_ != null || from_ != null;
      }
      /**
       * <pre>
       * from is the doc ref that is the source of the connection
       * </pre>
       *
       * <code>.api.Ref from = 4 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref getFrom() {
        if (fromBuilder_ == null) {
          return from_ == null ? api.Graphik.Ref.getDefaultInstance() : from_;
        } else {
          return fromBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * from is the doc ref that is the source of the connection
       * </pre>
       *
       * <code>.api.Ref from = 4 [(.validator.field) = { ... }</code>
       */
      public Builder setFrom(api.Graphik.Ref value) {
        if (fromBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          from_ = value;
          onChanged();
        } else {
          fromBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * from is the doc ref that is the source of the connection
       * </pre>
       *
       * <code>.api.Ref from = 4 [(.validator.field) = { ... }</code>
       */
      public Builder setFrom(
          api.Graphik.Ref.Builder builderForValue) {
        if (fromBuilder_ == null) {
          from_ = builderForValue.build();
          onChanged();
        } else {
          fromBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * from is the doc ref that is the source of the connection
       * </pre>
       *
       * <code>.api.Ref from = 4 [(.validator.field) = { ... }</code>
       */
      public Builder mergeFrom(api.Graphik.Ref value) {
        if (fromBuilder_ == null) {
          if (from_ != null) {
            from_ =
              api.Graphik.Ref.newBuilder(from_).mergeFrom(value).buildPartial();
          } else {
            from_ = value;
          }
          onChanged();
        } else {
          fromBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * from is the doc ref that is the source of the connection
       * </pre>
       *
       * <code>.api.Ref from = 4 [(.validator.field) = { ... }</code>
       */
      public Builder clearFrom() {
        if (fromBuilder_ == null) {
          from_ = null;
          onChanged();
        } else {
          from_ = null;
          fromBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * from is the doc ref that is the source of the connection
       * </pre>
       *
       * <code>.api.Ref from = 4 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref.Builder getFromBuilder() {
        
        onChanged();
        return getFromFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * from is the doc ref that is the source of the connection
       * </pre>
       *
       * <code>.api.Ref from = 4 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.RefOrBuilder getFromOrBuilder() {
        if (fromBuilder_ != null) {
          return fromBuilder_.getMessageOrBuilder();
        } else {
          return from_ == null ?
              api.Graphik.Ref.getDefaultInstance() : from_;
        }
      }
      /**
       * <pre>
       * from is the doc ref that is the source of the connection
       * </pre>
       *
       * <code>.api.Ref from = 4 [(.validator.field) = { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> 
          getFromFieldBuilder() {
        if (fromBuilder_ == null) {
          fromBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder>(
                  getFrom(),
                  getParentForChildren(),
                  isClean());
          from_ = null;
        }
        return fromBuilder_;
      }

      private api.Graphik.Ref to_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> toBuilder_;
      /**
       * <pre>
       * to is the doc ref that is the destination of the connection
       * </pre>
       *
       * <code>.api.Ref to = 5 [(.validator.field) = { ... }</code>
       */
      public boolean hasTo() {
        return toBuilder_ != null || to_ != null;
      }
      /**
       * <pre>
       * to is the doc ref that is the destination of the connection
       * </pre>
       *
       * <code>.api.Ref to = 5 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref getTo() {
        if (toBuilder_ == null) {
          return to_ == null ? api.Graphik.Ref.getDefaultInstance() : to_;
        } else {
          return toBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * to is the doc ref that is the destination of the connection
       * </pre>
       *
       * <code>.api.Ref to = 5 [(.validator.field) = { ... }</code>
       */
      public Builder setTo(api.Graphik.Ref value) {
        if (toBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          to_ = value;
          onChanged();
        } else {
          toBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * to is the doc ref that is the destination of the connection
       * </pre>
       *
       * <code>.api.Ref to = 5 [(.validator.field) = { ... }</code>
       */
      public Builder setTo(
          api.Graphik.Ref.Builder builderForValue) {
        if (toBuilder_ == null) {
          to_ = builderForValue.build();
          onChanged();
        } else {
          toBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * to is the doc ref that is the destination of the connection
       * </pre>
       *
       * <code>.api.Ref to = 5 [(.validator.field) = { ... }</code>
       */
      public Builder mergeTo(api.Graphik.Ref value) {
        if (toBuilder_ == null) {
          if (to_ != null) {
            to_ =
              api.Graphik.Ref.newBuilder(to_).mergeFrom(value).buildPartial();
          } else {
            to_ = value;
          }
          onChanged();
        } else {
          toBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * to is the doc ref that is the destination of the connection
       * </pre>
       *
       * <code>.api.Ref to = 5 [(.validator.field) = { ... }</code>
       */
      public Builder clearTo() {
        if (toBuilder_ == null) {
          to_ = null;
          onChanged();
        } else {
          to_ = null;
          toBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * to is the doc ref that is the destination of the connection
       * </pre>
       *
       * <code>.api.Ref to = 5 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref.Builder getToBuilder() {
        
        onChanged();
        return getToFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * to is the doc ref that is the destination of the connection
       * </pre>
       *
       * <code>.api.Ref to = 5 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.RefOrBuilder getToOrBuilder() {
        if (toBuilder_ != null) {
          return toBuilder_.getMessageOrBuilder();
        } else {
          return to_ == null ?
              api.Graphik.Ref.getDefaultInstance() : to_;
        }
      }
      /**
       * <pre>
       * to is the doc ref that is the destination of the connection
       * </pre>
       *
       * <code>.api.Ref to = 5 [(.validator.field) = { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> 
          getToFieldBuilder() {
        if (toBuilder_ == null) {
          toBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder>(
                  getTo(),
                  getParentForChildren(),
                  isClean());
          to_ = null;
        }
        return toBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Connection)
    }

    // @@protoc_insertion_point(class_scope:api.Connection)
    private static final api.Graphik.Connection DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Connection();
    }

    public static api.Graphik.Connection getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Connection>
        PARSER = new com.google.protobuf.AbstractParser<Connection>() {
      @java.lang.Override
      public Connection parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Connection(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Connection getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ConnectionConstructorOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.ConnectionConstructor)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ref is the ref to the new Connection. If an id isn't present, one will be generated.
     * </pre>
     *
     * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
     */
    boolean hasRef();
    /**
     * <pre>
     * ref is the ref to the new Connection. If an id isn't present, one will be generated.
     * </pre>
     *
     * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
     */
    api.Graphik.RefConstructor getRef();
    /**
     * <pre>
     * ref is the ref to the new Connection. If an id isn't present, one will be generated.
     * </pre>
     *
     * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
     */
    api.Graphik.RefConstructorOrBuilder getRefOrBuilder();

    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 3;</code>
     */
    boolean hasAttributes();
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 3;</code>
     */
    com.google.protobuf.Struct getAttributes();
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 3;</code>
     */
    com.google.protobuf.StructOrBuilder getAttributesOrBuilder();

    /**
     * <pre>
     * directed is false if the connection is bi-directional
     * </pre>
     *
     * <code>bool directed = 4;</code>
     */
    boolean getDirected();

    /**
     * <pre>
     * from is the doc ref that is the root of the connection
     * </pre>
     *
     * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
     */
    boolean hasFrom();
    /**
     * <pre>
     * from is the doc ref that is the root of the connection
     * </pre>
     *
     * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
     */
    api.Graphik.Ref getFrom();
    /**
     * <pre>
     * from is the doc ref that is the root of the connection
     * </pre>
     *
     * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
     */
    api.Graphik.RefOrBuilder getFromOrBuilder();

    /**
     * <pre>
     * to is the doc ref that is the destination of the connection
     * </pre>
     *
     * <code>.api.Ref to = 6 [(.validator.field) = { ... }</code>
     */
    boolean hasTo();
    /**
     * <pre>
     * to is the doc ref that is the destination of the connection
     * </pre>
     *
     * <code>.api.Ref to = 6 [(.validator.field) = { ... }</code>
     */
    api.Graphik.Ref getTo();
    /**
     * <pre>
     * to is the doc ref that is the destination of the connection
     * </pre>
     *
     * <code>.api.Ref to = 6 [(.validator.field) = { ... }</code>
     */
    api.Graphik.RefOrBuilder getToOrBuilder();
  }
  /**
   * <pre>
   * ConnectionConstructor is used to create an Connection
   * </pre>
   *
   * Protobuf type {@code api.ConnectionConstructor}
   */
  public  static final class ConnectionConstructor extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.ConnectionConstructor)
      ConnectionConstructorOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ConnectionConstructor.newBuilder() to construct.
    private ConnectionConstructor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ConnectionConstructor() {
      directed_ = false;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ConnectionConstructor(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              api.Graphik.RefConstructor.Builder subBuilder = null;
              if (ref_ != null) {
                subBuilder = ref_.toBuilder();
              }
              ref_ = input.readMessage(api.Graphik.RefConstructor.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(ref_);
                ref_ = subBuilder.buildPartial();
              }

              break;
            }
            case 26: {
              com.google.protobuf.Struct.Builder subBuilder = null;
              if (attributes_ != null) {
                subBuilder = attributes_.toBuilder();
              }
              attributes_ = input.readMessage(com.google.protobuf.Struct.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(attributes_);
                attributes_ = subBuilder.buildPartial();
              }

              break;
            }
            case 32: {

              directed_ = input.readBool();
              break;
            }
            case 42: {
              api.Graphik.Ref.Builder subBuilder = null;
              if (from_ != null) {
                subBuilder = from_.toBuilder();
              }
              from_ = input.readMessage(api.Graphik.Ref.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(from_);
                from_ = subBuilder.buildPartial();
              }

              break;
            }
            case 50: {
              api.Graphik.Ref.Builder subBuilder = null;
              if (to_ != null) {
                subBuilder = to_.toBuilder();
              }
              to_ = input.readMessage(api.Graphik.Ref.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(to_);
                to_ = subBuilder.buildPartial();
              }

              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_ConnectionConstructor_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_ConnectionConstructor_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.ConnectionConstructor.class, api.Graphik.ConnectionConstructor.Builder.class);
    }

    public static final int REF_FIELD_NUMBER = 1;
    private api.Graphik.RefConstructor ref_;
    /**
     * <pre>
     * ref is the ref to the new Connection. If an id isn't present, one will be generated.
     * </pre>
     *
     * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
     */
    public boolean hasRef() {
      return ref_ != null;
    }
    /**
     * <pre>
     * ref is the ref to the new Connection. If an id isn't present, one will be generated.
     * </pre>
     *
     * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.RefConstructor getRef() {
      return ref_ == null ? api.Graphik.RefConstructor.getDefaultInstance() : ref_;
    }
    /**
     * <pre>
     * ref is the ref to the new Connection. If an id isn't present, one will be generated.
     * </pre>
     *
     * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.RefConstructorOrBuilder getRefOrBuilder() {
      return getRef();
    }

    public static final int ATTRIBUTES_FIELD_NUMBER = 3;
    private com.google.protobuf.Struct attributes_;
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 3;</code>
     */
    public boolean hasAttributes() {
      return attributes_ != null;
    }
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 3;</code>
     */
    public com.google.protobuf.Struct getAttributes() {
      return attributes_ == null ? com.google.protobuf.Struct.getDefaultInstance() : attributes_;
    }
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 3;</code>
     */
    public com.google.protobuf.StructOrBuilder getAttributesOrBuilder() {
      return getAttributes();
    }

    public static final int DIRECTED_FIELD_NUMBER = 4;
    private boolean directed_;
    /**
     * <pre>
     * directed is false if the connection is bi-directional
     * </pre>
     *
     * <code>bool directed = 4;</code>
     */
    public boolean getDirected() {
      return directed_;
    }

    public static final int FROM_FIELD_NUMBER = 5;
    private api.Graphik.Ref from_;
    /**
     * <pre>
     * from is the doc ref that is the root of the connection
     * </pre>
     *
     * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
     */
    public boolean hasFrom() {
      return from_ != null;
    }
    /**
     * <pre>
     * from is the doc ref that is the root of the connection
     * </pre>
     *
     * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.Ref getFrom() {
      return from_ == null ? api.Graphik.Ref.getDefaultInstance() : from_;
    }
    /**
     * <pre>
     * from is the doc ref that is the root of the connection
     * </pre>
     *
     * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.RefOrBuilder getFromOrBuilder() {
      return getFrom();
    }

    public static final int TO_FIELD_NUMBER = 6;
    private api.Graphik.Ref to_;
    /**
     * <pre>
     * to is the doc ref that is the destination of the connection
     * </pre>
     *
     * <code>.api.Ref to = 6 [(.validator.field) = { ... }</code>
     */
    public boolean hasTo() {
      return to_ != null;
    }
    /**
     * <pre>
     * to is the doc ref that is the destination of the connection
     * </pre>
     *
     * <code>.api.Ref to = 6 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.Ref getTo() {
      return to_ == null ? api.Graphik.Ref.getDefaultInstance() : to_;
    }
    /**
     * <pre>
     * to is the doc ref that is the destination of the connection
     * </pre>
     *
     * <code>.api.Ref to = 6 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.RefOrBuilder getToOrBuilder() {
      return getTo();
    }

    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 (ref_ != null) {
        output.writeMessage(1, getRef());
      }
      if (attributes_ != null) {
        output.writeMessage(3, getAttributes());
      }
      if (directed_ != false) {
        output.writeBool(4, directed_);
      }
      if (from_ != null) {
        output.writeMessage(5, getFrom());
      }
      if (to_ != null) {
        output.writeMessage(6, getTo());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (ref_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getRef());
      }
      if (attributes_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getAttributes());
      }
      if (directed_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, directed_);
      }
      if (from_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getFrom());
      }
      if (to_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, getTo());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && (hasRef() == other.hasRef());
      if (hasRef()) {
        result = result && getRef()
            .equals(other.getRef());
      }
      result = result && (hasAttributes() == other.hasAttributes());
      if (hasAttributes()) {
        result = result && getAttributes()
            .equals(other.getAttributes());
      }
      result = result && (getDirected()
          == other.getDirected());
      result = result && (hasFrom() == other.hasFrom());
      if (hasFrom()) {
        result = result && getFrom()
            .equals(other.getFrom());
      }
      result = result && (hasTo() == other.hasTo());
      if (hasTo()) {
        result = result && getTo()
            .equals(other.getTo());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRef()) {
        hash = (37 * hash) + REF_FIELD_NUMBER;
        hash = (53 * hash) + getRef().hashCode();
      }
      if (hasAttributes()) {
        hash = (37 * hash) + ATTRIBUTES_FIELD_NUMBER;
        hash = (53 * hash) + getAttributes().hashCode();
      }
      hash = (37 * hash) + DIRECTED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getDirected());
      if (hasFrom()) {
        hash = (37 * hash) + FROM_FIELD_NUMBER;
        hash = (53 * hash) + getFrom().hashCode();
      }
      if (hasTo()) {
        hash = (37 * hash) + TO_FIELD_NUMBER;
        hash = (53 * hash) + getTo().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.ConnectionConstructor parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.ConnectionConstructor parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.ConnectionConstructor parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.ConnectionConstructor parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.ConnectionConstructor parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.ConnectionConstructor parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.ConnectionConstructor parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.ConnectionConstructor 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 api.Graphik.ConnectionConstructor parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.ConnectionConstructor 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 api.Graphik.ConnectionConstructor parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.ConnectionConstructor 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(api.Graphik.ConnectionConstructor 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>
     * ConnectionConstructor is used to create an Connection
     * </pre>
     *
     * Protobuf type {@code api.ConnectionConstructor}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.ConnectionConstructor)
        api.Graphik.ConnectionConstructorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_ConnectionConstructor_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_ConnectionConstructor_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.ConnectionConstructor.class, api.Graphik.ConnectionConstructor.Builder.class);
      }

      // Construct using api.Graphik.ConnectionConstructor.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (refBuilder_ == null) {
          ref_ = null;
        } else {
          ref_ = null;
          refBuilder_ = null;
        }
        if (attributesBuilder_ == null) {
          attributes_ = null;
        } else {
          attributes_ = null;
          attributesBuilder_ = null;
        }
        directed_ = false;

        if (fromBuilder_ == null) {
          from_ = null;
        } else {
          from_ = null;
          fromBuilder_ = null;
        }
        if (toBuilder_ == null) {
          to_ = null;
        } else {
          to_ = null;
          toBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_ConnectionConstructor_descriptor;
      }

      @java.lang.Override
      public api.Graphik.ConnectionConstructor getDefaultInstanceForType() {
        return api.Graphik.ConnectionConstructor.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.ConnectionConstructor buildPartial() {
        api.Graphik.ConnectionConstructor result = new api.Graphik.ConnectionConstructor(this);
        if (refBuilder_ == null) {
          result.ref_ = ref_;
        } else {
          result.ref_ = refBuilder_.build();
        }
        if (attributesBuilder_ == null) {
          result.attributes_ = attributes_;
        } else {
          result.attributes_ = attributesBuilder_.build();
        }
        result.directed_ = directed_;
        if (fromBuilder_ == null) {
          result.from_ = from_;
        } else {
          result.from_ = fromBuilder_.build();
        }
        if (toBuilder_ == null) {
          result.to_ = to_;
        } else {
          result.to_ = toBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.ConnectionConstructor other) {
        if (other == api.Graphik.ConnectionConstructor.getDefaultInstance()) return this;
        if (other.hasRef()) {
          mergeRef(other.getRef());
        }
        if (other.hasAttributes()) {
          mergeAttributes(other.getAttributes());
        }
        if (other.getDirected() != false) {
          setDirected(other.getDirected());
        }
        if (other.hasFrom()) {
          mergeFrom(other.getFrom());
        }
        if (other.hasTo()) {
          mergeTo(other.getTo());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.ConnectionConstructor parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.ConnectionConstructor) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private api.Graphik.RefConstructor ref_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.RefConstructor, api.Graphik.RefConstructor.Builder, api.Graphik.RefConstructorOrBuilder> refBuilder_;
      /**
       * <pre>
       * ref is the ref to the new Connection. If an id isn't present, one will be generated.
       * </pre>
       *
       * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
       */
      public boolean hasRef() {
        return refBuilder_ != null || ref_ != null;
      }
      /**
       * <pre>
       * ref is the ref to the new Connection. If an id isn't present, one will be generated.
       * </pre>
       *
       * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.RefConstructor getRef() {
        if (refBuilder_ == null) {
          return ref_ == null ? api.Graphik.RefConstructor.getDefaultInstance() : ref_;
        } else {
          return refBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * ref is the ref to the new Connection. If an id isn't present, one will be generated.
       * </pre>
       *
       * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setRef(api.Graphik.RefConstructor value) {
        if (refBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ref_ = value;
          onChanged();
        } else {
          refBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the new Connection. If an id isn't present, one will be generated.
       * </pre>
       *
       * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setRef(
          api.Graphik.RefConstructor.Builder builderForValue) {
        if (refBuilder_ == null) {
          ref_ = builderForValue.build();
          onChanged();
        } else {
          refBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the new Connection. If an id isn't present, one will be generated.
       * </pre>
       *
       * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder mergeRef(api.Graphik.RefConstructor value) {
        if (refBuilder_ == null) {
          if (ref_ != null) {
            ref_ =
              api.Graphik.RefConstructor.newBuilder(ref_).mergeFrom(value).buildPartial();
          } else {
            ref_ = value;
          }
          onChanged();
        } else {
          refBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the new Connection. If an id isn't present, one will be generated.
       * </pre>
       *
       * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearRef() {
        if (refBuilder_ == null) {
          ref_ = null;
          onChanged();
        } else {
          ref_ = null;
          refBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the new Connection. If an id isn't present, one will be generated.
       * </pre>
       *
       * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.RefConstructor.Builder getRefBuilder() {
        
        onChanged();
        return getRefFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * ref is the ref to the new Connection. If an id isn't present, one will be generated.
       * </pre>
       *
       * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.RefConstructorOrBuilder getRefOrBuilder() {
        if (refBuilder_ != null) {
          return refBuilder_.getMessageOrBuilder();
        } else {
          return ref_ == null ?
              api.Graphik.RefConstructor.getDefaultInstance() : ref_;
        }
      }
      /**
       * <pre>
       * ref is the ref to the new Connection. If an id isn't present, one will be generated.
       * </pre>
       *
       * <code>.api.RefConstructor ref = 1 [(.validator.field) = { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.RefConstructor, api.Graphik.RefConstructor.Builder, api.Graphik.RefConstructorOrBuilder> 
          getRefFieldBuilder() {
        if (refBuilder_ == null) {
          refBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.RefConstructor, api.Graphik.RefConstructor.Builder, api.Graphik.RefConstructorOrBuilder>(
                  getRef(),
                  getParentForChildren(),
                  isClean());
          ref_ = null;
        }
        return refBuilder_;
      }

      private com.google.protobuf.Struct attributes_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> attributesBuilder_;
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public boolean hasAttributes() {
        return attributesBuilder_ != null || attributes_ != null;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public com.google.protobuf.Struct getAttributes() {
        if (attributesBuilder_ == null) {
          return attributes_ == null ? com.google.protobuf.Struct.getDefaultInstance() : attributes_;
        } else {
          return attributesBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public Builder setAttributes(com.google.protobuf.Struct value) {
        if (attributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          attributes_ = value;
          onChanged();
        } else {
          attributesBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public Builder setAttributes(
          com.google.protobuf.Struct.Builder builderForValue) {
        if (attributesBuilder_ == null) {
          attributes_ = builderForValue.build();
          onChanged();
        } else {
          attributesBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public Builder mergeAttributes(com.google.protobuf.Struct value) {
        if (attributesBuilder_ == null) {
          if (attributes_ != null) {
            attributes_ =
              com.google.protobuf.Struct.newBuilder(attributes_).mergeFrom(value).buildPartial();
          } else {
            attributes_ = value;
          }
          onChanged();
        } else {
          attributesBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public Builder clearAttributes() {
        if (attributesBuilder_ == null) {
          attributes_ = null;
          onChanged();
        } else {
          attributes_ = null;
          attributesBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public com.google.protobuf.Struct.Builder getAttributesBuilder() {
        
        onChanged();
        return getAttributesFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public com.google.protobuf.StructOrBuilder getAttributesOrBuilder() {
        if (attributesBuilder_ != null) {
          return attributesBuilder_.getMessageOrBuilder();
        } else {
          return attributes_ == null ?
              com.google.protobuf.Struct.getDefaultInstance() : attributes_;
        }
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> 
          getAttributesFieldBuilder() {
        if (attributesBuilder_ == null) {
          attributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder>(
                  getAttributes(),
                  getParentForChildren(),
                  isClean());
          attributes_ = null;
        }
        return attributesBuilder_;
      }

      private boolean directed_ ;
      /**
       * <pre>
       * directed is false if the connection is bi-directional
       * </pre>
       *
       * <code>bool directed = 4;</code>
       */
      public boolean getDirected() {
        return directed_;
      }
      /**
       * <pre>
       * directed is false if the connection is bi-directional
       * </pre>
       *
       * <code>bool directed = 4;</code>
       */
      public Builder setDirected(boolean value) {
        
        directed_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * directed is false if the connection is bi-directional
       * </pre>
       *
       * <code>bool directed = 4;</code>
       */
      public Builder clearDirected() {
        
        directed_ = false;
        onChanged();
        return this;
      }

      private api.Graphik.Ref from_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> fromBuilder_;
      /**
       * <pre>
       * from is the doc ref that is the root of the connection
       * </pre>
       *
       * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
       */
      public boolean hasFrom() {
        return fromBuilder_ != null || from_ != null;
      }
      /**
       * <pre>
       * from is the doc ref that is the root of the connection
       * </pre>
       *
       * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref getFrom() {
        if (fromBuilder_ == null) {
          return from_ == null ? api.Graphik.Ref.getDefaultInstance() : from_;
        } else {
          return fromBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * from is the doc ref that is the root of the connection
       * </pre>
       *
       * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
       */
      public Builder setFrom(api.Graphik.Ref value) {
        if (fromBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          from_ = value;
          onChanged();
        } else {
          fromBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * from is the doc ref that is the root of the connection
       * </pre>
       *
       * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
       */
      public Builder setFrom(
          api.Graphik.Ref.Builder builderForValue) {
        if (fromBuilder_ == null) {
          from_ = builderForValue.build();
          onChanged();
        } else {
          fromBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * from is the doc ref that is the root of the connection
       * </pre>
       *
       * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
       */
      public Builder mergeFrom(api.Graphik.Ref value) {
        if (fromBuilder_ == null) {
          if (from_ != null) {
            from_ =
              api.Graphik.Ref.newBuilder(from_).mergeFrom(value).buildPartial();
          } else {
            from_ = value;
          }
          onChanged();
        } else {
          fromBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * from is the doc ref that is the root of the connection
       * </pre>
       *
       * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
       */
      public Builder clearFrom() {
        if (fromBuilder_ == null) {
          from_ = null;
          onChanged();
        } else {
          from_ = null;
          fromBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * from is the doc ref that is the root of the connection
       * </pre>
       *
       * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref.Builder getFromBuilder() {
        
        onChanged();
        return getFromFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * from is the doc ref that is the root of the connection
       * </pre>
       *
       * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.RefOrBuilder getFromOrBuilder() {
        if (fromBuilder_ != null) {
          return fromBuilder_.getMessageOrBuilder();
        } else {
          return from_ == null ?
              api.Graphik.Ref.getDefaultInstance() : from_;
        }
      }
      /**
       * <pre>
       * from is the doc ref that is the root of the connection
       * </pre>
       *
       * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> 
          getFromFieldBuilder() {
        if (fromBuilder_ == null) {
          fromBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder>(
                  getFrom(),
                  getParentForChildren(),
                  isClean());
          from_ = null;
        }
        return fromBuilder_;
      }

      private api.Graphik.Ref to_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> toBuilder_;
      /**
       * <pre>
       * to is the doc ref that is the destination of the connection
       * </pre>
       *
       * <code>.api.Ref to = 6 [(.validator.field) = { ... }</code>
       */
      public boolean hasTo() {
        return toBuilder_ != null || to_ != null;
      }
      /**
       * <pre>
       * to is the doc ref that is the destination of the connection
       * </pre>
       *
       * <code>.api.Ref to = 6 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref getTo() {
        if (toBuilder_ == null) {
          return to_ == null ? api.Graphik.Ref.getDefaultInstance() : to_;
        } else {
          return toBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * to is the doc ref that is the destination of the connection
       * </pre>
       *
       * <code>.api.Ref to = 6 [(.validator.field) = { ... }</code>
       */
      public Builder setTo(api.Graphik.Ref value) {
        if (toBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          to_ = value;
          onChanged();
        } else {
          toBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * to is the doc ref that is the destination of the connection
       * </pre>
       *
       * <code>.api.Ref to = 6 [(.validator.field) = { ... }</code>
       */
      public Builder setTo(
          api.Graphik.Ref.Builder builderForValue) {
        if (toBuilder_ == null) {
          to_ = builderForValue.build();
          onChanged();
        } else {
          toBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * to is the doc ref that is the destination of the connection
       * </pre>
       *
       * <code>.api.Ref to = 6 [(.validator.field) = { ... }</code>
       */
      public Builder mergeTo(api.Graphik.Ref value) {
        if (toBuilder_ == null) {
          if (to_ != null) {
            to_ =
              api.Graphik.Ref.newBuilder(to_).mergeFrom(value).buildPartial();
          } else {
            to_ = value;
          }
          onChanged();
        } else {
          toBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * to is the doc ref that is the destination of the connection
       * </pre>
       *
       * <code>.api.Ref to = 6 [(.validator.field) = { ... }</code>
       */
      public Builder clearTo() {
        if (toBuilder_ == null) {
          to_ = null;
          onChanged();
        } else {
          to_ = null;
          toBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * to is the doc ref that is the destination of the connection
       * </pre>
       *
       * <code>.api.Ref to = 6 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref.Builder getToBuilder() {
        
        onChanged();
        return getToFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * to is the doc ref that is the destination of the connection
       * </pre>
       *
       * <code>.api.Ref to = 6 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.RefOrBuilder getToOrBuilder() {
        if (toBuilder_ != null) {
          return toBuilder_.getMessageOrBuilder();
        } else {
          return to_ == null ?
              api.Graphik.Ref.getDefaultInstance() : to_;
        }
      }
      /**
       * <pre>
       * to is the doc ref that is the destination of the connection
       * </pre>
       *
       * <code>.api.Ref to = 6 [(.validator.field) = { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> 
          getToFieldBuilder() {
        if (toBuilder_ == null) {
          toBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder>(
                  getTo(),
                  getParentForChildren(),
                  isClean());
          to_ = null;
        }
        return toBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.ConnectionConstructor)
    }

    // @@protoc_insertion_point(class_scope:api.ConnectionConstructor)
    private static final api.Graphik.ConnectionConstructor DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.ConnectionConstructor();
    }

    public static api.Graphik.ConnectionConstructor getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ConnectionConstructor>
        PARSER = new com.google.protobuf.AbstractParser<ConnectionConstructor>() {
      @java.lang.Override
      public ConnectionConstructor parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ConnectionConstructor(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.ConnectionConstructor getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SearchConnectFilterOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.SearchConnectFilter)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.api.Filter filter = 1;</code>
     */
    boolean hasFilter();
    /**
     * <code>.api.Filter filter = 1;</code>
     */
    api.Graphik.Filter getFilter();
    /**
     * <code>.api.Filter filter = 1;</code>
     */
    api.Graphik.FilterOrBuilder getFilterOrBuilder();

    /**
     * <code>string gtype = 2;</code>
     */
    java.lang.String getGtype();
    /**
     * <code>string gtype = 2;</code>
     */
    com.google.protobuf.ByteString
        getGtypeBytes();

    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 3;</code>
     */
    boolean hasAttributes();
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 3;</code>
     */
    com.google.protobuf.Struct getAttributes();
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 3;</code>
     */
    com.google.protobuf.StructOrBuilder getAttributesOrBuilder();

    /**
     * <pre>
     * directed is false if the connection is bi-directional
     * </pre>
     *
     * <code>bool directed = 4;</code>
     */
    boolean getDirected();

    /**
     * <pre>
     * from is the doc ref that is the root of the connection
     * </pre>
     *
     * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
     */
    boolean hasFrom();
    /**
     * <pre>
     * from is the doc ref that is the root of the connection
     * </pre>
     *
     * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
     */
    api.Graphik.Ref getFrom();
    /**
     * <pre>
     * from is the doc ref that is the root of the connection
     * </pre>
     *
     * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
     */
    api.Graphik.RefOrBuilder getFromOrBuilder();
  }
  /**
   * Protobuf type {@code api.SearchConnectFilter}
   */
  public  static final class SearchConnectFilter extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.SearchConnectFilter)
      SearchConnectFilterOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SearchConnectFilter.newBuilder() to construct.
    private SearchConnectFilter(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SearchConnectFilter() {
      gtype_ = "";
      directed_ = false;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private SearchConnectFilter(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              api.Graphik.Filter.Builder subBuilder = null;
              if (filter_ != null) {
                subBuilder = filter_.toBuilder();
              }
              filter_ = input.readMessage(api.Graphik.Filter.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(filter_);
                filter_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              gtype_ = s;
              break;
            }
            case 26: {
              com.google.protobuf.Struct.Builder subBuilder = null;
              if (attributes_ != null) {
                subBuilder = attributes_.toBuilder();
              }
              attributes_ = input.readMessage(com.google.protobuf.Struct.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(attributes_);
                attributes_ = subBuilder.buildPartial();
              }

              break;
            }
            case 32: {

              directed_ = input.readBool();
              break;
            }
            case 42: {
              api.Graphik.Ref.Builder subBuilder = null;
              if (from_ != null) {
                subBuilder = from_.toBuilder();
              }
              from_ = input.readMessage(api.Graphik.Ref.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(from_);
                from_ = subBuilder.buildPartial();
              }

              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_SearchConnectFilter_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_SearchConnectFilter_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.SearchConnectFilter.class, api.Graphik.SearchConnectFilter.Builder.class);
    }

    public static final int FILTER_FIELD_NUMBER = 1;
    private api.Graphik.Filter filter_;
    /**
     * <code>.api.Filter filter = 1;</code>
     */
    public boolean hasFilter() {
      return filter_ != null;
    }
    /**
     * <code>.api.Filter filter = 1;</code>
     */
    public api.Graphik.Filter getFilter() {
      return filter_ == null ? api.Graphik.Filter.getDefaultInstance() : filter_;
    }
    /**
     * <code>.api.Filter filter = 1;</code>
     */
    public api.Graphik.FilterOrBuilder getFilterOrBuilder() {
      return getFilter();
    }

    public static final int GTYPE_FIELD_NUMBER = 2;
    private volatile java.lang.Object gtype_;
    /**
     * <code>string gtype = 2;</code>
     */
    public java.lang.String getGtype() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        gtype_ = s;
        return s;
      }
    }
    /**
     * <code>string gtype = 2;</code>
     */
    public com.google.protobuf.ByteString
        getGtypeBytes() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gtype_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ATTRIBUTES_FIELD_NUMBER = 3;
    private com.google.protobuf.Struct attributes_;
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 3;</code>
     */
    public boolean hasAttributes() {
      return attributes_ != null;
    }
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 3;</code>
     */
    public com.google.protobuf.Struct getAttributes() {
      return attributes_ == null ? com.google.protobuf.Struct.getDefaultInstance() : attributes_;
    }
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 3;</code>
     */
    public com.google.protobuf.StructOrBuilder getAttributesOrBuilder() {
      return getAttributes();
    }

    public static final int DIRECTED_FIELD_NUMBER = 4;
    private boolean directed_;
    /**
     * <pre>
     * directed is false if the connection is bi-directional
     * </pre>
     *
     * <code>bool directed = 4;</code>
     */
    public boolean getDirected() {
      return directed_;
    }

    public static final int FROM_FIELD_NUMBER = 5;
    private api.Graphik.Ref from_;
    /**
     * <pre>
     * from is the doc ref that is the root of the connection
     * </pre>
     *
     * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
     */
    public boolean hasFrom() {
      return from_ != null;
    }
    /**
     * <pre>
     * from is the doc ref that is the root of the connection
     * </pre>
     *
     * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.Ref getFrom() {
      return from_ == null ? api.Graphik.Ref.getDefaultInstance() : from_;
    }
    /**
     * <pre>
     * from is the doc ref that is the root of the connection
     * </pre>
     *
     * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.RefOrBuilder getFromOrBuilder() {
      return getFrom();
    }

    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 (filter_ != null) {
        output.writeMessage(1, getFilter());
      }
      if (!getGtypeBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, gtype_);
      }
      if (attributes_ != null) {
        output.writeMessage(3, getAttributes());
      }
      if (directed_ != false) {
        output.writeBool(4, directed_);
      }
      if (from_ != null) {
        output.writeMessage(5, getFrom());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (filter_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getFilter());
      }
      if (!getGtypeBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, gtype_);
      }
      if (attributes_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getAttributes());
      }
      if (directed_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, directed_);
      }
      if (from_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getFrom());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && (hasFilter() == other.hasFilter());
      if (hasFilter()) {
        result = result && getFilter()
            .equals(other.getFilter());
      }
      result = result && getGtype()
          .equals(other.getGtype());
      result = result && (hasAttributes() == other.hasAttributes());
      if (hasAttributes()) {
        result = result && getAttributes()
            .equals(other.getAttributes());
      }
      result = result && (getDirected()
          == other.getDirected());
      result = result && (hasFrom() == other.hasFrom());
      if (hasFrom()) {
        result = result && getFrom()
            .equals(other.getFrom());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasFilter()) {
        hash = (37 * hash) + FILTER_FIELD_NUMBER;
        hash = (53 * hash) + getFilter().hashCode();
      }
      hash = (37 * hash) + GTYPE_FIELD_NUMBER;
      hash = (53 * hash) + getGtype().hashCode();
      if (hasAttributes()) {
        hash = (37 * hash) + ATTRIBUTES_FIELD_NUMBER;
        hash = (53 * hash) + getAttributes().hashCode();
      }
      hash = (37 * hash) + DIRECTED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getDirected());
      if (hasFrom()) {
        hash = (37 * hash) + FROM_FIELD_NUMBER;
        hash = (53 * hash) + getFrom().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

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

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_SearchConnectFilter_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.SearchConnectFilter.class, api.Graphik.SearchConnectFilter.Builder.class);
      }

      // Construct using api.Graphik.SearchConnectFilter.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (filterBuilder_ == null) {
          filter_ = null;
        } else {
          filter_ = null;
          filterBuilder_ = null;
        }
        gtype_ = "";

        if (attributesBuilder_ == null) {
          attributes_ = null;
        } else {
          attributes_ = null;
          attributesBuilder_ = null;
        }
        directed_ = false;

        if (fromBuilder_ == null) {
          from_ = null;
        } else {
          from_ = null;
          fromBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_SearchConnectFilter_descriptor;
      }

      @java.lang.Override
      public api.Graphik.SearchConnectFilter getDefaultInstanceForType() {
        return api.Graphik.SearchConnectFilter.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.SearchConnectFilter buildPartial() {
        api.Graphik.SearchConnectFilter result = new api.Graphik.SearchConnectFilter(this);
        if (filterBuilder_ == null) {
          result.filter_ = filter_;
        } else {
          result.filter_ = filterBuilder_.build();
        }
        result.gtype_ = gtype_;
        if (attributesBuilder_ == null) {
          result.attributes_ = attributes_;
        } else {
          result.attributes_ = attributesBuilder_.build();
        }
        result.directed_ = directed_;
        if (fromBuilder_ == null) {
          result.from_ = from_;
        } else {
          result.from_ = fromBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.SearchConnectFilter other) {
        if (other == api.Graphik.SearchConnectFilter.getDefaultInstance()) return this;
        if (other.hasFilter()) {
          mergeFilter(other.getFilter());
        }
        if (!other.getGtype().isEmpty()) {
          gtype_ = other.gtype_;
          onChanged();
        }
        if (other.hasAttributes()) {
          mergeAttributes(other.getAttributes());
        }
        if (other.getDirected() != false) {
          setDirected(other.getDirected());
        }
        if (other.hasFrom()) {
          mergeFrom(other.getFrom());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.SearchConnectFilter parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.SearchConnectFilter) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private api.Graphik.Filter filter_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Filter, api.Graphik.Filter.Builder, api.Graphik.FilterOrBuilder> filterBuilder_;
      /**
       * <code>.api.Filter filter = 1;</code>
       */
      public boolean hasFilter() {
        return filterBuilder_ != null || filter_ != null;
      }
      /**
       * <code>.api.Filter filter = 1;</code>
       */
      public api.Graphik.Filter getFilter() {
        if (filterBuilder_ == null) {
          return filter_ == null ? api.Graphik.Filter.getDefaultInstance() : filter_;
        } else {
          return filterBuilder_.getMessage();
        }
      }
      /**
       * <code>.api.Filter filter = 1;</code>
       */
      public Builder setFilter(api.Graphik.Filter value) {
        if (filterBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          filter_ = value;
          onChanged();
        } else {
          filterBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.api.Filter filter = 1;</code>
       */
      public Builder setFilter(
          api.Graphik.Filter.Builder builderForValue) {
        if (filterBuilder_ == null) {
          filter_ = builderForValue.build();
          onChanged();
        } else {
          filterBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.api.Filter filter = 1;</code>
       */
      public Builder mergeFilter(api.Graphik.Filter value) {
        if (filterBuilder_ == null) {
          if (filter_ != null) {
            filter_ =
              api.Graphik.Filter.newBuilder(filter_).mergeFrom(value).buildPartial();
          } else {
            filter_ = value;
          }
          onChanged();
        } else {
          filterBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.api.Filter filter = 1;</code>
       */
      public Builder clearFilter() {
        if (filterBuilder_ == null) {
          filter_ = null;
          onChanged();
        } else {
          filter_ = null;
          filterBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.api.Filter filter = 1;</code>
       */
      public api.Graphik.Filter.Builder getFilterBuilder() {
        
        onChanged();
        return getFilterFieldBuilder().getBuilder();
      }
      /**
       * <code>.api.Filter filter = 1;</code>
       */
      public api.Graphik.FilterOrBuilder getFilterOrBuilder() {
        if (filterBuilder_ != null) {
          return filterBuilder_.getMessageOrBuilder();
        } else {
          return filter_ == null ?
              api.Graphik.Filter.getDefaultInstance() : filter_;
        }
      }
      /**
       * <code>.api.Filter filter = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Filter, api.Graphik.Filter.Builder, api.Graphik.FilterOrBuilder> 
          getFilterFieldBuilder() {
        if (filterBuilder_ == null) {
          filterBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Filter, api.Graphik.Filter.Builder, api.Graphik.FilterOrBuilder>(
                  getFilter(),
                  getParentForChildren(),
                  isClean());
          filter_ = null;
        }
        return filterBuilder_;
      }

      private java.lang.Object gtype_ = "";
      /**
       * <code>string gtype = 2;</code>
       */
      public java.lang.String getGtype() {
        java.lang.Object ref = gtype_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          gtype_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string gtype = 2;</code>
       */
      public com.google.protobuf.ByteString
          getGtypeBytes() {
        java.lang.Object ref = gtype_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gtype_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string gtype = 2;</code>
       */
      public Builder setGtype(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        gtype_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string gtype = 2;</code>
       */
      public Builder clearGtype() {
        
        gtype_ = getDefaultInstance().getGtype();
        onChanged();
        return this;
      }
      /**
       * <code>string gtype = 2;</code>
       */
      public Builder setGtypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        gtype_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.Struct attributes_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> attributesBuilder_;
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public boolean hasAttributes() {
        return attributesBuilder_ != null || attributes_ != null;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public com.google.protobuf.Struct getAttributes() {
        if (attributesBuilder_ == null) {
          return attributes_ == null ? com.google.protobuf.Struct.getDefaultInstance() : attributes_;
        } else {
          return attributesBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public Builder setAttributes(com.google.protobuf.Struct value) {
        if (attributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          attributes_ = value;
          onChanged();
        } else {
          attributesBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public Builder setAttributes(
          com.google.protobuf.Struct.Builder builderForValue) {
        if (attributesBuilder_ == null) {
          attributes_ = builderForValue.build();
          onChanged();
        } else {
          attributesBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public Builder mergeAttributes(com.google.protobuf.Struct value) {
        if (attributesBuilder_ == null) {
          if (attributes_ != null) {
            attributes_ =
              com.google.protobuf.Struct.newBuilder(attributes_).mergeFrom(value).buildPartial();
          } else {
            attributes_ = value;
          }
          onChanged();
        } else {
          attributesBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public Builder clearAttributes() {
        if (attributesBuilder_ == null) {
          attributes_ = null;
          onChanged();
        } else {
          attributes_ = null;
          attributesBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public com.google.protobuf.Struct.Builder getAttributesBuilder() {
        
        onChanged();
        return getAttributesFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public com.google.protobuf.StructOrBuilder getAttributesOrBuilder() {
        if (attributesBuilder_ != null) {
          return attributesBuilder_.getMessageOrBuilder();
        } else {
          return attributes_ == null ?
              com.google.protobuf.Struct.getDefaultInstance() : attributes_;
        }
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> 
          getAttributesFieldBuilder() {
        if (attributesBuilder_ == null) {
          attributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder>(
                  getAttributes(),
                  getParentForChildren(),
                  isClean());
          attributes_ = null;
        }
        return attributesBuilder_;
      }

      private boolean directed_ ;
      /**
       * <pre>
       * directed is false if the connection is bi-directional
       * </pre>
       *
       * <code>bool directed = 4;</code>
       */
      public boolean getDirected() {
        return directed_;
      }
      /**
       * <pre>
       * directed is false if the connection is bi-directional
       * </pre>
       *
       * <code>bool directed = 4;</code>
       */
      public Builder setDirected(boolean value) {
        
        directed_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * directed is false if the connection is bi-directional
       * </pre>
       *
       * <code>bool directed = 4;</code>
       */
      public Builder clearDirected() {
        
        directed_ = false;
        onChanged();
        return this;
      }

      private api.Graphik.Ref from_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> fromBuilder_;
      /**
       * <pre>
       * from is the doc ref that is the root of the connection
       * </pre>
       *
       * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
       */
      public boolean hasFrom() {
        return fromBuilder_ != null || from_ != null;
      }
      /**
       * <pre>
       * from is the doc ref that is the root of the connection
       * </pre>
       *
       * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref getFrom() {
        if (fromBuilder_ == null) {
          return from_ == null ? api.Graphik.Ref.getDefaultInstance() : from_;
        } else {
          return fromBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * from is the doc ref that is the root of the connection
       * </pre>
       *
       * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
       */
      public Builder setFrom(api.Graphik.Ref value) {
        if (fromBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          from_ = value;
          onChanged();
        } else {
          fromBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * from is the doc ref that is the root of the connection
       * </pre>
       *
       * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
       */
      public Builder setFrom(
          api.Graphik.Ref.Builder builderForValue) {
        if (fromBuilder_ == null) {
          from_ = builderForValue.build();
          onChanged();
        } else {
          fromBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * from is the doc ref that is the root of the connection
       * </pre>
       *
       * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
       */
      public Builder mergeFrom(api.Graphik.Ref value) {
        if (fromBuilder_ == null) {
          if (from_ != null) {
            from_ =
              api.Graphik.Ref.newBuilder(from_).mergeFrom(value).buildPartial();
          } else {
            from_ = value;
          }
          onChanged();
        } else {
          fromBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * from is the doc ref that is the root of the connection
       * </pre>
       *
       * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
       */
      public Builder clearFrom() {
        if (fromBuilder_ == null) {
          from_ = null;
          onChanged();
        } else {
          from_ = null;
          fromBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * from is the doc ref that is the root of the connection
       * </pre>
       *
       * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref.Builder getFromBuilder() {
        
        onChanged();
        return getFromFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * from is the doc ref that is the root of the connection
       * </pre>
       *
       * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.RefOrBuilder getFromOrBuilder() {
        if (fromBuilder_ != null) {
          return fromBuilder_.getMessageOrBuilder();
        } else {
          return from_ == null ?
              api.Graphik.Ref.getDefaultInstance() : from_;
        }
      }
      /**
       * <pre>
       * from is the doc ref that is the root of the connection
       * </pre>
       *
       * <code>.api.Ref from = 5 [(.validator.field) = { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> 
          getFromFieldBuilder() {
        if (fromBuilder_ == null) {
          fromBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder>(
                  getFrom(),
                  getParentForChildren(),
                  isClean());
          from_ = null;
        }
        return fromBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.SearchConnectFilter)
    }

    // @@protoc_insertion_point(class_scope:api.SearchConnectFilter)
    private static final api.Graphik.SearchConnectFilter DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.SearchConnectFilter();
    }

    public static api.Graphik.SearchConnectFilter getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<SearchConnectFilter>
        PARSER = new com.google.protobuf.AbstractParser<SearchConnectFilter>() {
      @java.lang.Override
      public SearchConnectFilter parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SearchConnectFilter(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.SearchConnectFilter getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SearchConnectMeFilterOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.SearchConnectMeFilter)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.api.Filter filter = 1;</code>
     */
    boolean hasFilter();
    /**
     * <code>.api.Filter filter = 1;</code>
     */
    api.Graphik.Filter getFilter();
    /**
     * <code>.api.Filter filter = 1;</code>
     */
    api.Graphik.FilterOrBuilder getFilterOrBuilder();

    /**
     * <code>string gtype = 2;</code>
     */
    java.lang.String getGtype();
    /**
     * <code>string gtype = 2;</code>
     */
    com.google.protobuf.ByteString
        getGtypeBytes();

    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 3;</code>
     */
    boolean hasAttributes();
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 3;</code>
     */
    com.google.protobuf.Struct getAttributes();
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 3;</code>
     */
    com.google.protobuf.StructOrBuilder getAttributesOrBuilder();

    /**
     * <pre>
     * directed is false if the connection is bi-directional
     * </pre>
     *
     * <code>bool directed = 4;</code>
     */
    boolean getDirected();
  }
  /**
   * Protobuf type {@code api.SearchConnectMeFilter}
   */
  public  static final class SearchConnectMeFilter extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.SearchConnectMeFilter)
      SearchConnectMeFilterOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SearchConnectMeFilter.newBuilder() to construct.
    private SearchConnectMeFilter(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SearchConnectMeFilter() {
      gtype_ = "";
      directed_ = false;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private SearchConnectMeFilter(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              api.Graphik.Filter.Builder subBuilder = null;
              if (filter_ != null) {
                subBuilder = filter_.toBuilder();
              }
              filter_ = input.readMessage(api.Graphik.Filter.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(filter_);
                filter_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              gtype_ = s;
              break;
            }
            case 26: {
              com.google.protobuf.Struct.Builder subBuilder = null;
              if (attributes_ != null) {
                subBuilder = attributes_.toBuilder();
              }
              attributes_ = input.readMessage(com.google.protobuf.Struct.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(attributes_);
                attributes_ = subBuilder.buildPartial();
              }

              break;
            }
            case 32: {

              directed_ = input.readBool();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_SearchConnectMeFilter_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_SearchConnectMeFilter_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.SearchConnectMeFilter.class, api.Graphik.SearchConnectMeFilter.Builder.class);
    }

    public static final int FILTER_FIELD_NUMBER = 1;
    private api.Graphik.Filter filter_;
    /**
     * <code>.api.Filter filter = 1;</code>
     */
    public boolean hasFilter() {
      return filter_ != null;
    }
    /**
     * <code>.api.Filter filter = 1;</code>
     */
    public api.Graphik.Filter getFilter() {
      return filter_ == null ? api.Graphik.Filter.getDefaultInstance() : filter_;
    }
    /**
     * <code>.api.Filter filter = 1;</code>
     */
    public api.Graphik.FilterOrBuilder getFilterOrBuilder() {
      return getFilter();
    }

    public static final int GTYPE_FIELD_NUMBER = 2;
    private volatile java.lang.Object gtype_;
    /**
     * <code>string gtype = 2;</code>
     */
    public java.lang.String getGtype() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        gtype_ = s;
        return s;
      }
    }
    /**
     * <code>string gtype = 2;</code>
     */
    public com.google.protobuf.ByteString
        getGtypeBytes() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gtype_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ATTRIBUTES_FIELD_NUMBER = 3;
    private com.google.protobuf.Struct attributes_;
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 3;</code>
     */
    public boolean hasAttributes() {
      return attributes_ != null;
    }
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 3;</code>
     */
    public com.google.protobuf.Struct getAttributes() {
      return attributes_ == null ? com.google.protobuf.Struct.getDefaultInstance() : attributes_;
    }
    /**
     * <pre>
     * attributes are k/v pairs
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 3;</code>
     */
    public com.google.protobuf.StructOrBuilder getAttributesOrBuilder() {
      return getAttributes();
    }

    public static final int DIRECTED_FIELD_NUMBER = 4;
    private boolean directed_;
    /**
     * <pre>
     * directed is false if the connection is bi-directional
     * </pre>
     *
     * <code>bool directed = 4;</code>
     */
    public boolean getDirected() {
      return directed_;
    }

    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 (filter_ != null) {
        output.writeMessage(1, getFilter());
      }
      if (!getGtypeBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, gtype_);
      }
      if (attributes_ != null) {
        output.writeMessage(3, getAttributes());
      }
      if (directed_ != false) {
        output.writeBool(4, directed_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (filter_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getFilter());
      }
      if (!getGtypeBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, gtype_);
      }
      if (attributes_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getAttributes());
      }
      if (directed_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, directed_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && (hasFilter() == other.hasFilter());
      if (hasFilter()) {
        result = result && getFilter()
            .equals(other.getFilter());
      }
      result = result && getGtype()
          .equals(other.getGtype());
      result = result && (hasAttributes() == other.hasAttributes());
      if (hasAttributes()) {
        result = result && getAttributes()
            .equals(other.getAttributes());
      }
      result = result && (getDirected()
          == other.getDirected());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasFilter()) {
        hash = (37 * hash) + FILTER_FIELD_NUMBER;
        hash = (53 * hash) + getFilter().hashCode();
      }
      hash = (37 * hash) + GTYPE_FIELD_NUMBER;
      hash = (53 * hash) + getGtype().hashCode();
      if (hasAttributes()) {
        hash = (37 * hash) + ATTRIBUTES_FIELD_NUMBER;
        hash = (53 * hash) + getAttributes().hashCode();
      }
      hash = (37 * hash) + DIRECTED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getDirected());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

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

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_SearchConnectMeFilter_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.SearchConnectMeFilter.class, api.Graphik.SearchConnectMeFilter.Builder.class);
      }

      // Construct using api.Graphik.SearchConnectMeFilter.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (filterBuilder_ == null) {
          filter_ = null;
        } else {
          filter_ = null;
          filterBuilder_ = null;
        }
        gtype_ = "";

        if (attributesBuilder_ == null) {
          attributes_ = null;
        } else {
          attributes_ = null;
          attributesBuilder_ = null;
        }
        directed_ = false;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_SearchConnectMeFilter_descriptor;
      }

      @java.lang.Override
      public api.Graphik.SearchConnectMeFilter getDefaultInstanceForType() {
        return api.Graphik.SearchConnectMeFilter.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.SearchConnectMeFilter buildPartial() {
        api.Graphik.SearchConnectMeFilter result = new api.Graphik.SearchConnectMeFilter(this);
        if (filterBuilder_ == null) {
          result.filter_ = filter_;
        } else {
          result.filter_ = filterBuilder_.build();
        }
        result.gtype_ = gtype_;
        if (attributesBuilder_ == null) {
          result.attributes_ = attributes_;
        } else {
          result.attributes_ = attributesBuilder_.build();
        }
        result.directed_ = directed_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.SearchConnectMeFilter other) {
        if (other == api.Graphik.SearchConnectMeFilter.getDefaultInstance()) return this;
        if (other.hasFilter()) {
          mergeFilter(other.getFilter());
        }
        if (!other.getGtype().isEmpty()) {
          gtype_ = other.gtype_;
          onChanged();
        }
        if (other.hasAttributes()) {
          mergeAttributes(other.getAttributes());
        }
        if (other.getDirected() != false) {
          setDirected(other.getDirected());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.SearchConnectMeFilter parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.SearchConnectMeFilter) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private api.Graphik.Filter filter_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Filter, api.Graphik.Filter.Builder, api.Graphik.FilterOrBuilder> filterBuilder_;
      /**
       * <code>.api.Filter filter = 1;</code>
       */
      public boolean hasFilter() {
        return filterBuilder_ != null || filter_ != null;
      }
      /**
       * <code>.api.Filter filter = 1;</code>
       */
      public api.Graphik.Filter getFilter() {
        if (filterBuilder_ == null) {
          return filter_ == null ? api.Graphik.Filter.getDefaultInstance() : filter_;
        } else {
          return filterBuilder_.getMessage();
        }
      }
      /**
       * <code>.api.Filter filter = 1;</code>
       */
      public Builder setFilter(api.Graphik.Filter value) {
        if (filterBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          filter_ = value;
          onChanged();
        } else {
          filterBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.api.Filter filter = 1;</code>
       */
      public Builder setFilter(
          api.Graphik.Filter.Builder builderForValue) {
        if (filterBuilder_ == null) {
          filter_ = builderForValue.build();
          onChanged();
        } else {
          filterBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.api.Filter filter = 1;</code>
       */
      public Builder mergeFilter(api.Graphik.Filter value) {
        if (filterBuilder_ == null) {
          if (filter_ != null) {
            filter_ =
              api.Graphik.Filter.newBuilder(filter_).mergeFrom(value).buildPartial();
          } else {
            filter_ = value;
          }
          onChanged();
        } else {
          filterBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.api.Filter filter = 1;</code>
       */
      public Builder clearFilter() {
        if (filterBuilder_ == null) {
          filter_ = null;
          onChanged();
        } else {
          filter_ = null;
          filterBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.api.Filter filter = 1;</code>
       */
      public api.Graphik.Filter.Builder getFilterBuilder() {
        
        onChanged();
        return getFilterFieldBuilder().getBuilder();
      }
      /**
       * <code>.api.Filter filter = 1;</code>
       */
      public api.Graphik.FilterOrBuilder getFilterOrBuilder() {
        if (filterBuilder_ != null) {
          return filterBuilder_.getMessageOrBuilder();
        } else {
          return filter_ == null ?
              api.Graphik.Filter.getDefaultInstance() : filter_;
        }
      }
      /**
       * <code>.api.Filter filter = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Filter, api.Graphik.Filter.Builder, api.Graphik.FilterOrBuilder> 
          getFilterFieldBuilder() {
        if (filterBuilder_ == null) {
          filterBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Filter, api.Graphik.Filter.Builder, api.Graphik.FilterOrBuilder>(
                  getFilter(),
                  getParentForChildren(),
                  isClean());
          filter_ = null;
        }
        return filterBuilder_;
      }

      private java.lang.Object gtype_ = "";
      /**
       * <code>string gtype = 2;</code>
       */
      public java.lang.String getGtype() {
        java.lang.Object ref = gtype_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          gtype_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string gtype = 2;</code>
       */
      public com.google.protobuf.ByteString
          getGtypeBytes() {
        java.lang.Object ref = gtype_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gtype_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string gtype = 2;</code>
       */
      public Builder setGtype(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        gtype_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string gtype = 2;</code>
       */
      public Builder clearGtype() {
        
        gtype_ = getDefaultInstance().getGtype();
        onChanged();
        return this;
      }
      /**
       * <code>string gtype = 2;</code>
       */
      public Builder setGtypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        gtype_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.Struct attributes_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> attributesBuilder_;
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public boolean hasAttributes() {
        return attributesBuilder_ != null || attributes_ != null;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public com.google.protobuf.Struct getAttributes() {
        if (attributesBuilder_ == null) {
          return attributes_ == null ? com.google.protobuf.Struct.getDefaultInstance() : attributes_;
        } else {
          return attributesBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public Builder setAttributes(com.google.protobuf.Struct value) {
        if (attributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          attributes_ = value;
          onChanged();
        } else {
          attributesBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public Builder setAttributes(
          com.google.protobuf.Struct.Builder builderForValue) {
        if (attributesBuilder_ == null) {
          attributes_ = builderForValue.build();
          onChanged();
        } else {
          attributesBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public Builder mergeAttributes(com.google.protobuf.Struct value) {
        if (attributesBuilder_ == null) {
          if (attributes_ != null) {
            attributes_ =
              com.google.protobuf.Struct.newBuilder(attributes_).mergeFrom(value).buildPartial();
          } else {
            attributes_ = value;
          }
          onChanged();
        } else {
          attributesBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public Builder clearAttributes() {
        if (attributesBuilder_ == null) {
          attributes_ = null;
          onChanged();
        } else {
          attributes_ = null;
          attributesBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public com.google.protobuf.Struct.Builder getAttributesBuilder() {
        
        onChanged();
        return getAttributesFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      public com.google.protobuf.StructOrBuilder getAttributesOrBuilder() {
        if (attributesBuilder_ != null) {
          return attributesBuilder_.getMessageOrBuilder();
        } else {
          return attributes_ == null ?
              com.google.protobuf.Struct.getDefaultInstance() : attributes_;
        }
      }
      /**
       * <pre>
       * attributes are k/v pairs
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> 
          getAttributesFieldBuilder() {
        if (attributesBuilder_ == null) {
          attributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder>(
                  getAttributes(),
                  getParentForChildren(),
                  isClean());
          attributes_ = null;
        }
        return attributesBuilder_;
      }

      private boolean directed_ ;
      /**
       * <pre>
       * directed is false if the connection is bi-directional
       * </pre>
       *
       * <code>bool directed = 4;</code>
       */
      public boolean getDirected() {
        return directed_;
      }
      /**
       * <pre>
       * directed is false if the connection is bi-directional
       * </pre>
       *
       * <code>bool directed = 4;</code>
       */
      public Builder setDirected(boolean value) {
        
        directed_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * directed is false if the connection is bi-directional
       * </pre>
       *
       * <code>bool directed = 4;</code>
       */
      public Builder clearDirected() {
        
        directed_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.SearchConnectMeFilter)
    }

    // @@protoc_insertion_point(class_scope:api.SearchConnectMeFilter)
    private static final api.Graphik.SearchConnectMeFilter DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.SearchConnectMeFilter();
    }

    public static api.Graphik.SearchConnectMeFilter getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<SearchConnectMeFilter>
        PARSER = new com.google.protobuf.AbstractParser<SearchConnectMeFilter>() {
      @java.lang.Override
      public SearchConnectMeFilter parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SearchConnectMeFilter(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.SearchConnectMeFilter getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ConnectionConstructorsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.ConnectionConstructors)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .api.ConnectionConstructor connections = 1;</code>
     */
    java.util.List<api.Graphik.ConnectionConstructor> 
        getConnectionsList();
    /**
     * <code>repeated .api.ConnectionConstructor connections = 1;</code>
     */
    api.Graphik.ConnectionConstructor getConnections(int index);
    /**
     * <code>repeated .api.ConnectionConstructor connections = 1;</code>
     */
    int getConnectionsCount();
    /**
     * <code>repeated .api.ConnectionConstructor connections = 1;</code>
     */
    java.util.List<? extends api.Graphik.ConnectionConstructorOrBuilder> 
        getConnectionsOrBuilderList();
    /**
     * <code>repeated .api.ConnectionConstructor connections = 1;</code>
     */
    api.Graphik.ConnectionConstructorOrBuilder getConnectionsOrBuilder(
        int index);
  }
  /**
   * <pre>
   * ConnectionConstructors is an array of ConnectionConstructor
   * </pre>
   *
   * Protobuf type {@code api.ConnectionConstructors}
   */
  public  static final class ConnectionConstructors extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.ConnectionConstructors)
      ConnectionConstructorsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ConnectionConstructors.newBuilder() to construct.
    private ConnectionConstructors(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ConnectionConstructors() {
      connections_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ConnectionConstructors(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                connections_ = new java.util.ArrayList<api.Graphik.ConnectionConstructor>();
                mutable_bitField0_ |= 0x00000001;
              }
              connections_.add(
                  input.readMessage(api.Graphik.ConnectionConstructor.parser(), extensionRegistry));
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          connections_ = java.util.Collections.unmodifiableList(connections_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_ConnectionConstructors_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_ConnectionConstructors_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.ConnectionConstructors.class, api.Graphik.ConnectionConstructors.Builder.class);
    }

    public static final int CONNECTIONS_FIELD_NUMBER = 1;
    private java.util.List<api.Graphik.ConnectionConstructor> connections_;
    /**
     * <code>repeated .api.ConnectionConstructor connections = 1;</code>
     */
    public java.util.List<api.Graphik.ConnectionConstructor> getConnectionsList() {
      return connections_;
    }
    /**
     * <code>repeated .api.ConnectionConstructor connections = 1;</code>
     */
    public java.util.List<? extends api.Graphik.ConnectionConstructorOrBuilder> 
        getConnectionsOrBuilderList() {
      return connections_;
    }
    /**
     * <code>repeated .api.ConnectionConstructor connections = 1;</code>
     */
    public int getConnectionsCount() {
      return connections_.size();
    }
    /**
     * <code>repeated .api.ConnectionConstructor connections = 1;</code>
     */
    public api.Graphik.ConnectionConstructor getConnections(int index) {
      return connections_.get(index);
    }
    /**
     * <code>repeated .api.ConnectionConstructor connections = 1;</code>
     */
    public api.Graphik.ConnectionConstructorOrBuilder getConnectionsOrBuilder(
        int index) {
      return connections_.get(index);
    }

    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 {
      for (int i = 0; i < connections_.size(); i++) {
        output.writeMessage(1, connections_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < connections_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, connections_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getConnectionsList()
          .equals(other.getConnectionsList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getConnectionsCount() > 0) {
        hash = (37 * hash) + CONNECTIONS_FIELD_NUMBER;
        hash = (53 * hash) + getConnectionsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.ConnectionConstructors parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.ConnectionConstructors parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.ConnectionConstructors parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.ConnectionConstructors parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.ConnectionConstructors parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.ConnectionConstructors parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.ConnectionConstructors parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.ConnectionConstructors 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 api.Graphik.ConnectionConstructors parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.ConnectionConstructors 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 api.Graphik.ConnectionConstructors parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.ConnectionConstructors 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(api.Graphik.ConnectionConstructors 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>
     * ConnectionConstructors is an array of ConnectionConstructor
     * </pre>
     *
     * Protobuf type {@code api.ConnectionConstructors}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.ConnectionConstructors)
        api.Graphik.ConnectionConstructorsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_ConnectionConstructors_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_ConnectionConstructors_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.ConnectionConstructors.class, api.Graphik.ConnectionConstructors.Builder.class);
      }

      // Construct using api.Graphik.ConnectionConstructors.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_ConnectionConstructors_descriptor;
      }

      @java.lang.Override
      public api.Graphik.ConnectionConstructors getDefaultInstanceForType() {
        return api.Graphik.ConnectionConstructors.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.ConnectionConstructors buildPartial() {
        api.Graphik.ConnectionConstructors result = new api.Graphik.ConnectionConstructors(this);
        int from_bitField0_ = bitField0_;
        if (connectionsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            connections_ = java.util.Collections.unmodifiableList(connections_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.connections_ = connections_;
        } else {
          result.connections_ = connectionsBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.ConnectionConstructors other) {
        if (other == api.Graphik.ConnectionConstructors.getDefaultInstance()) return this;
        if (connectionsBuilder_ == null) {
          if (!other.connections_.isEmpty()) {
            if (connections_.isEmpty()) {
              connections_ = other.connections_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureConnectionsIsMutable();
              connections_.addAll(other.connections_);
            }
            onChanged();
          }
        } else {
          if (!other.connections_.isEmpty()) {
            if (connectionsBuilder_.isEmpty()) {
              connectionsBuilder_.dispose();
              connectionsBuilder_ = null;
              connections_ = other.connections_;
              bitField0_ = (bitField0_ & ~0x00000001);
              connectionsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getConnectionsFieldBuilder() : null;
            } else {
              connectionsBuilder_.addAllMessages(other.connections_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.ConnectionConstructors parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.ConnectionConstructors) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<api.Graphik.ConnectionConstructor> connections_ =
        java.util.Collections.emptyList();
      private void ensureConnectionsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          connections_ = new java.util.ArrayList<api.Graphik.ConnectionConstructor>(connections_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.ConnectionConstructor, api.Graphik.ConnectionConstructor.Builder, api.Graphik.ConnectionConstructorOrBuilder> connectionsBuilder_;

      /**
       * <code>repeated .api.ConnectionConstructor connections = 1;</code>
       */
      public java.util.List<api.Graphik.ConnectionConstructor> getConnectionsList() {
        if (connectionsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(connections_);
        } else {
          return connectionsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .api.ConnectionConstructor connections = 1;</code>
       */
      public int getConnectionsCount() {
        if (connectionsBuilder_ == null) {
          return connections_.size();
        } else {
          return connectionsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .api.ConnectionConstructor connections = 1;</code>
       */
      public api.Graphik.ConnectionConstructor getConnections(int index) {
        if (connectionsBuilder_ == null) {
          return connections_.get(index);
        } else {
          return connectionsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .api.ConnectionConstructor connections = 1;</code>
       */
      public Builder setConnections(
          int index, api.Graphik.ConnectionConstructor value) {
        if (connectionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureConnectionsIsMutable();
          connections_.set(index, value);
          onChanged();
        } else {
          connectionsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.ConnectionConstructor connections = 1;</code>
       */
      public Builder setConnections(
          int index, api.Graphik.ConnectionConstructor.Builder builderForValue) {
        if (connectionsBuilder_ == null) {
          ensureConnectionsIsMutable();
          connections_.set(index, builderForValue.build());
          onChanged();
        } else {
          connectionsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.ConnectionConstructor connections = 1;</code>
       */
      public Builder addConnections(api.Graphik.ConnectionConstructor value) {
        if (connectionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureConnectionsIsMutable();
          connections_.add(value);
          onChanged();
        } else {
          connectionsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .api.ConnectionConstructor connections = 1;</code>
       */
      public Builder addConnections(
          int index, api.Graphik.ConnectionConstructor value) {
        if (connectionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureConnectionsIsMutable();
          connections_.add(index, value);
          onChanged();
        } else {
          connectionsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.ConnectionConstructor connections = 1;</code>
       */
      public Builder addConnections(
          api.Graphik.ConnectionConstructor.Builder builderForValue) {
        if (connectionsBuilder_ == null) {
          ensureConnectionsIsMutable();
          connections_.add(builderForValue.build());
          onChanged();
        } else {
          connectionsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.ConnectionConstructor connections = 1;</code>
       */
      public Builder addConnections(
          int index, api.Graphik.ConnectionConstructor.Builder builderForValue) {
        if (connectionsBuilder_ == null) {
          ensureConnectionsIsMutable();
          connections_.add(index, builderForValue.build());
          onChanged();
        } else {
          connectionsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.ConnectionConstructor connections = 1;</code>
       */
      public Builder addAllConnections(
          java.lang.Iterable<? extends api.Graphik.ConnectionConstructor> values) {
        if (connectionsBuilder_ == null) {
          ensureConnectionsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, connections_);
          onChanged();
        } else {
          connectionsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .api.ConnectionConstructor connections = 1;</code>
       */
      public Builder clearConnections() {
        if (connectionsBuilder_ == null) {
          connections_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          connectionsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .api.ConnectionConstructor connections = 1;</code>
       */
      public Builder removeConnections(int index) {
        if (connectionsBuilder_ == null) {
          ensureConnectionsIsMutable();
          connections_.remove(index);
          onChanged();
        } else {
          connectionsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .api.ConnectionConstructor connections = 1;</code>
       */
      public api.Graphik.ConnectionConstructor.Builder getConnectionsBuilder(
          int index) {
        return getConnectionsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .api.ConnectionConstructor connections = 1;</code>
       */
      public api.Graphik.ConnectionConstructorOrBuilder getConnectionsOrBuilder(
          int index) {
        if (connectionsBuilder_ == null) {
          return connections_.get(index);  } else {
          return connectionsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .api.ConnectionConstructor connections = 1;</code>
       */
      public java.util.List<? extends api.Graphik.ConnectionConstructorOrBuilder> 
           getConnectionsOrBuilderList() {
        if (connectionsBuilder_ != null) {
          return connectionsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(connections_);
        }
      }
      /**
       * <code>repeated .api.ConnectionConstructor connections = 1;</code>
       */
      public api.Graphik.ConnectionConstructor.Builder addConnectionsBuilder() {
        return getConnectionsFieldBuilder().addBuilder(
            api.Graphik.ConnectionConstructor.getDefaultInstance());
      }
      /**
       * <code>repeated .api.ConnectionConstructor connections = 1;</code>
       */
      public api.Graphik.ConnectionConstructor.Builder addConnectionsBuilder(
          int index) {
        return getConnectionsFieldBuilder().addBuilder(
            index, api.Graphik.ConnectionConstructor.getDefaultInstance());
      }
      /**
       * <code>repeated .api.ConnectionConstructor connections = 1;</code>
       */
      public java.util.List<api.Graphik.ConnectionConstructor.Builder> 
           getConnectionsBuilderList() {
        return getConnectionsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.ConnectionConstructor, api.Graphik.ConnectionConstructor.Builder, api.Graphik.ConnectionConstructorOrBuilder> 
          getConnectionsFieldBuilder() {
        if (connectionsBuilder_ == null) {
          connectionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              api.Graphik.ConnectionConstructor, api.Graphik.ConnectionConstructor.Builder, api.Graphik.ConnectionConstructorOrBuilder>(
                  connections_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          connections_ = null;
        }
        return connectionsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.ConnectionConstructors)
    }

    // @@protoc_insertion_point(class_scope:api.ConnectionConstructors)
    private static final api.Graphik.ConnectionConstructors DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.ConnectionConstructors();
    }

    public static api.Graphik.ConnectionConstructors getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ConnectionConstructors>
        PARSER = new com.google.protobuf.AbstractParser<ConnectionConstructors>() {
      @java.lang.Override
      public ConnectionConstructors parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ConnectionConstructors(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.ConnectionConstructors getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ConnectionsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Connections)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .api.Connection connections = 1;</code>
     */
    java.util.List<api.Graphik.Connection> 
        getConnectionsList();
    /**
     * <code>repeated .api.Connection connections = 1;</code>
     */
    api.Graphik.Connection getConnections(int index);
    /**
     * <code>repeated .api.Connection connections = 1;</code>
     */
    int getConnectionsCount();
    /**
     * <code>repeated .api.Connection connections = 1;</code>
     */
    java.util.List<? extends api.Graphik.ConnectionOrBuilder> 
        getConnectionsOrBuilderList();
    /**
     * <code>repeated .api.Connection connections = 1;</code>
     */
    api.Graphik.ConnectionOrBuilder getConnectionsOrBuilder(
        int index);

    /**
     * <code>string seek_next = 2;</code>
     */
    java.lang.String getSeekNext();
    /**
     * <code>string seek_next = 2;</code>
     */
    com.google.protobuf.ByteString
        getSeekNextBytes();
  }
  /**
   * <pre>
   * Connections is an array of Connection
   * </pre>
   *
   * Protobuf type {@code api.Connections}
   */
  public  static final class Connections extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Connections)
      ConnectionsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Connections.newBuilder() to construct.
    private Connections(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Connections() {
      connections_ = java.util.Collections.emptyList();
      seekNext_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Connections(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                connections_ = new java.util.ArrayList<api.Graphik.Connection>();
                mutable_bitField0_ |= 0x00000001;
              }
              connections_.add(
                  input.readMessage(api.Graphik.Connection.parser(), extensionRegistry));
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              seekNext_ = s;
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          connections_ = java.util.Collections.unmodifiableList(connections_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Connections_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Connections_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Connections.class, api.Graphik.Connections.Builder.class);
    }

    private int bitField0_;
    public static final int CONNECTIONS_FIELD_NUMBER = 1;
    private java.util.List<api.Graphik.Connection> connections_;
    /**
     * <code>repeated .api.Connection connections = 1;</code>
     */
    public java.util.List<api.Graphik.Connection> getConnectionsList() {
      return connections_;
    }
    /**
     * <code>repeated .api.Connection connections = 1;</code>
     */
    public java.util.List<? extends api.Graphik.ConnectionOrBuilder> 
        getConnectionsOrBuilderList() {
      return connections_;
    }
    /**
     * <code>repeated .api.Connection connections = 1;</code>
     */
    public int getConnectionsCount() {
      return connections_.size();
    }
    /**
     * <code>repeated .api.Connection connections = 1;</code>
     */
    public api.Graphik.Connection getConnections(int index) {
      return connections_.get(index);
    }
    /**
     * <code>repeated .api.Connection connections = 1;</code>
     */
    public api.Graphik.ConnectionOrBuilder getConnectionsOrBuilder(
        int index) {
      return connections_.get(index);
    }

    public static final int SEEK_NEXT_FIELD_NUMBER = 2;
    private volatile java.lang.Object seekNext_;
    /**
     * <code>string seek_next = 2;</code>
     */
    public java.lang.String getSeekNext() {
      java.lang.Object ref = seekNext_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        seekNext_ = s;
        return s;
      }
    }
    /**
     * <code>string seek_next = 2;</code>
     */
    public com.google.protobuf.ByteString
        getSeekNextBytes() {
      java.lang.Object ref = seekNext_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        seekNext_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    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 {
      for (int i = 0; i < connections_.size(); i++) {
        output.writeMessage(1, connections_.get(i));
      }
      if (!getSeekNextBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, seekNext_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < connections_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, connections_.get(i));
      }
      if (!getSeekNextBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, seekNext_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getConnectionsList()
          .equals(other.getConnectionsList());
      result = result && getSeekNext()
          .equals(other.getSeekNext());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getConnectionsCount() > 0) {
        hash = (37 * hash) + CONNECTIONS_FIELD_NUMBER;
        hash = (53 * hash) + getConnectionsList().hashCode();
      }
      hash = (37 * hash) + SEEK_NEXT_FIELD_NUMBER;
      hash = (53 * hash) + getSeekNext().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Connections parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Connections parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Connections parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Connections parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Connections parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Connections parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Connections parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Connections 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 api.Graphik.Connections parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Connections 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 api.Graphik.Connections parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Connections 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(api.Graphik.Connections 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>
     * Connections is an array of Connection
     * </pre>
     *
     * Protobuf type {@code api.Connections}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Connections)
        api.Graphik.ConnectionsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Connections_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Connections_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Connections.class, api.Graphik.Connections.Builder.class);
      }

      // Construct using api.Graphik.Connections.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getConnectionsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (connectionsBuilder_ == null) {
          connections_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          connectionsBuilder_.clear();
        }
        seekNext_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Connections_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Connections getDefaultInstanceForType() {
        return api.Graphik.Connections.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Connections buildPartial() {
        api.Graphik.Connections result = new api.Graphik.Connections(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (connectionsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            connections_ = java.util.Collections.unmodifiableList(connections_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.connections_ = connections_;
        } else {
          result.connections_ = connectionsBuilder_.build();
        }
        result.seekNext_ = seekNext_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Connections other) {
        if (other == api.Graphik.Connections.getDefaultInstance()) return this;
        if (connectionsBuilder_ == null) {
          if (!other.connections_.isEmpty()) {
            if (connections_.isEmpty()) {
              connections_ = other.connections_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureConnectionsIsMutable();
              connections_.addAll(other.connections_);
            }
            onChanged();
          }
        } else {
          if (!other.connections_.isEmpty()) {
            if (connectionsBuilder_.isEmpty()) {
              connectionsBuilder_.dispose();
              connectionsBuilder_ = null;
              connections_ = other.connections_;
              bitField0_ = (bitField0_ & ~0x00000001);
              connectionsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getConnectionsFieldBuilder() : null;
            } else {
              connectionsBuilder_.addAllMessages(other.connections_);
            }
          }
        }
        if (!other.getSeekNext().isEmpty()) {
          seekNext_ = other.seekNext_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Connections parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Connections) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<api.Graphik.Connection> connections_ =
        java.util.Collections.emptyList();
      private void ensureConnectionsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          connections_ = new java.util.ArrayList<api.Graphik.Connection>(connections_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Connection, api.Graphik.Connection.Builder, api.Graphik.ConnectionOrBuilder> connectionsBuilder_;

      /**
       * <code>repeated .api.Connection connections = 1;</code>
       */
      public java.util.List<api.Graphik.Connection> getConnectionsList() {
        if (connectionsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(connections_);
        } else {
          return connectionsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .api.Connection connections = 1;</code>
       */
      public int getConnectionsCount() {
        if (connectionsBuilder_ == null) {
          return connections_.size();
        } else {
          return connectionsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .api.Connection connections = 1;</code>
       */
      public api.Graphik.Connection getConnections(int index) {
        if (connectionsBuilder_ == null) {
          return connections_.get(index);
        } else {
          return connectionsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .api.Connection connections = 1;</code>
       */
      public Builder setConnections(
          int index, api.Graphik.Connection value) {
        if (connectionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureConnectionsIsMutable();
          connections_.set(index, value);
          onChanged();
        } else {
          connectionsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Connection connections = 1;</code>
       */
      public Builder setConnections(
          int index, api.Graphik.Connection.Builder builderForValue) {
        if (connectionsBuilder_ == null) {
          ensureConnectionsIsMutable();
          connections_.set(index, builderForValue.build());
          onChanged();
        } else {
          connectionsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Connection connections = 1;</code>
       */
      public Builder addConnections(api.Graphik.Connection value) {
        if (connectionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureConnectionsIsMutable();
          connections_.add(value);
          onChanged();
        } else {
          connectionsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Connection connections = 1;</code>
       */
      public Builder addConnections(
          int index, api.Graphik.Connection value) {
        if (connectionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureConnectionsIsMutable();
          connections_.add(index, value);
          onChanged();
        } else {
          connectionsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Connection connections = 1;</code>
       */
      public Builder addConnections(
          api.Graphik.Connection.Builder builderForValue) {
        if (connectionsBuilder_ == null) {
          ensureConnectionsIsMutable();
          connections_.add(builderForValue.build());
          onChanged();
        } else {
          connectionsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Connection connections = 1;</code>
       */
      public Builder addConnections(
          int index, api.Graphik.Connection.Builder builderForValue) {
        if (connectionsBuilder_ == null) {
          ensureConnectionsIsMutable();
          connections_.add(index, builderForValue.build());
          onChanged();
        } else {
          connectionsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Connection connections = 1;</code>
       */
      public Builder addAllConnections(
          java.lang.Iterable<? extends api.Graphik.Connection> values) {
        if (connectionsBuilder_ == null) {
          ensureConnectionsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, connections_);
          onChanged();
        } else {
          connectionsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .api.Connection connections = 1;</code>
       */
      public Builder clearConnections() {
        if (connectionsBuilder_ == null) {
          connections_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          connectionsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .api.Connection connections = 1;</code>
       */
      public Builder removeConnections(int index) {
        if (connectionsBuilder_ == null) {
          ensureConnectionsIsMutable();
          connections_.remove(index);
          onChanged();
        } else {
          connectionsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .api.Connection connections = 1;</code>
       */
      public api.Graphik.Connection.Builder getConnectionsBuilder(
          int index) {
        return getConnectionsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .api.Connection connections = 1;</code>
       */
      public api.Graphik.ConnectionOrBuilder getConnectionsOrBuilder(
          int index) {
        if (connectionsBuilder_ == null) {
          return connections_.get(index);  } else {
          return connectionsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .api.Connection connections = 1;</code>
       */
      public java.util.List<? extends api.Graphik.ConnectionOrBuilder> 
           getConnectionsOrBuilderList() {
        if (connectionsBuilder_ != null) {
          return connectionsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(connections_);
        }
      }
      /**
       * <code>repeated .api.Connection connections = 1;</code>
       */
      public api.Graphik.Connection.Builder addConnectionsBuilder() {
        return getConnectionsFieldBuilder().addBuilder(
            api.Graphik.Connection.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Connection connections = 1;</code>
       */
      public api.Graphik.Connection.Builder addConnectionsBuilder(
          int index) {
        return getConnectionsFieldBuilder().addBuilder(
            index, api.Graphik.Connection.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Connection connections = 1;</code>
       */
      public java.util.List<api.Graphik.Connection.Builder> 
           getConnectionsBuilderList() {
        return getConnectionsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Connection, api.Graphik.Connection.Builder, api.Graphik.ConnectionOrBuilder> 
          getConnectionsFieldBuilder() {
        if (connectionsBuilder_ == null) {
          connectionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              api.Graphik.Connection, api.Graphik.Connection.Builder, api.Graphik.ConnectionOrBuilder>(
                  connections_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          connections_ = null;
        }
        return connectionsBuilder_;
      }

      private java.lang.Object seekNext_ = "";
      /**
       * <code>string seek_next = 2;</code>
       */
      public java.lang.String getSeekNext() {
        java.lang.Object ref = seekNext_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          seekNext_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string seek_next = 2;</code>
       */
      public com.google.protobuf.ByteString
          getSeekNextBytes() {
        java.lang.Object ref = seekNext_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          seekNext_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string seek_next = 2;</code>
       */
      public Builder setSeekNext(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        seekNext_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string seek_next = 2;</code>
       */
      public Builder clearSeekNext() {
        
        seekNext_ = getDefaultInstance().getSeekNext();
        onChanged();
        return this;
      }
      /**
       * <code>string seek_next = 2;</code>
       */
      public Builder setSeekNextBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        seekNext_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Connections)
    }

    // @@protoc_insertion_point(class_scope:api.Connections)
    private static final api.Graphik.Connections DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Connections();
    }

    public static api.Graphik.Connections getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Connections>
        PARSER = new com.google.protobuf.AbstractParser<Connections>() {
      @java.lang.Override
      public Connections parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Connections(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Connections getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ConnectFilterOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.ConnectFilter)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * doc_ref is the ref to the target doc. (validator.field) = {msg_exists : true}]
     * </pre>
     *
     * <code>.api.Ref doc_ref = 1 [(.validator.field) = { ... }</code>
     */
    boolean hasDocRef();
    /**
     * <pre>
     * doc_ref is the ref to the target doc. (validator.field) = {msg_exists : true}]
     * </pre>
     *
     * <code>.api.Ref doc_ref = 1 [(.validator.field) = { ... }</code>
     */
    api.Graphik.Ref getDocRef();
    /**
     * <pre>
     * doc_ref is the ref to the target doc. (validator.field) = {msg_exists : true}]
     * </pre>
     *
     * <code>.api.Ref doc_ref = 1 [(.validator.field) = { ... }</code>
     */
    api.Graphik.RefOrBuilder getDocRefOrBuilder();

    /**
     * <pre>
     * gtype is the type of connections to return. (validator.field) = {regex : "^.{1,225}$"}
     * </pre>
     *
     * <code>string gtype = 2 [(.validator.field) = { ... }</code>
     */
    java.lang.String getGtype();
    /**
     * <pre>
     * gtype is the type of connections to return. (validator.field) = {regex : "^.{1,225}$"}
     * </pre>
     *
     * <code>string gtype = 2 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getGtypeBytes();

    /**
     * <pre>
     * expression is a CEL expression used to filter connections/modes
     * </pre>
     *
     * <code>string expression = 3;</code>
     */
    java.lang.String getExpression();
    /**
     * <pre>
     * expression is a CEL expression used to filter connections/modes
     * </pre>
     *
     * <code>string expression = 3;</code>
     */
    com.google.protobuf.ByteString
        getExpressionBytes();

    /**
     * <pre>
     * limit is the maximum number of items to return. (validator.field) = {int_gt : 0}
     * </pre>
     *
     * <code>uint64 limit = 4 [(.validator.field) = { ... }</code>
     */
    long getLimit();

    /**
     * <pre>
     * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
     * </pre>
     *
     * <code>string sort = 5 [(.validator.field) = { ... }</code>
     */
    java.lang.String getSort();
    /**
     * <pre>
     * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
     * </pre>
     *
     * <code>string sort = 5 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getSortBytes();

    /**
     * <pre>
     * seek to a specific key for pagination
     * </pre>
     *
     * <code>string seek = 6;</code>
     */
    java.lang.String getSeek();
    /**
     * <pre>
     * seek to a specific key for pagination
     * </pre>
     *
     * <code>string seek = 6;</code>
     */
    com.google.protobuf.ByteString
        getSeekBytes();

    /**
     * <pre>
     * reverse the results
     * </pre>
     *
     * <code>bool reverse = 7;</code>
     */
    boolean getReverse();
  }
  /**
   * <pre>
   * ConnectFilter is used to fetch connections related to a single noted
   * </pre>
   *
   * Protobuf type {@code api.ConnectFilter}
   */
  public  static final class ConnectFilter extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.ConnectFilter)
      ConnectFilterOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ConnectFilter.newBuilder() to construct.
    private ConnectFilter(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ConnectFilter() {
      gtype_ = "";
      expression_ = "";
      limit_ = 0L;
      sort_ = "";
      seek_ = "";
      reverse_ = false;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ConnectFilter(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              api.Graphik.Ref.Builder subBuilder = null;
              if (docRef_ != null) {
                subBuilder = docRef_.toBuilder();
              }
              docRef_ = input.readMessage(api.Graphik.Ref.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(docRef_);
                docRef_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              gtype_ = s;
              break;
            }
            case 26: {
              java.lang.String s = input.readStringRequireUtf8();

              expression_ = s;
              break;
            }
            case 32: {

              limit_ = input.readUInt64();
              break;
            }
            case 42: {
              java.lang.String s = input.readStringRequireUtf8();

              sort_ = s;
              break;
            }
            case 50: {
              java.lang.String s = input.readStringRequireUtf8();

              seek_ = s;
              break;
            }
            case 56: {

              reverse_ = input.readBool();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_ConnectFilter_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_ConnectFilter_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.ConnectFilter.class, api.Graphik.ConnectFilter.Builder.class);
    }

    public static final int DOC_REF_FIELD_NUMBER = 1;
    private api.Graphik.Ref docRef_;
    /**
     * <pre>
     * doc_ref is the ref to the target doc. (validator.field) = {msg_exists : true}]
     * </pre>
     *
     * <code>.api.Ref doc_ref = 1 [(.validator.field) = { ... }</code>
     */
    public boolean hasDocRef() {
      return docRef_ != null;
    }
    /**
     * <pre>
     * doc_ref is the ref to the target doc. (validator.field) = {msg_exists : true}]
     * </pre>
     *
     * <code>.api.Ref doc_ref = 1 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.Ref getDocRef() {
      return docRef_ == null ? api.Graphik.Ref.getDefaultInstance() : docRef_;
    }
    /**
     * <pre>
     * doc_ref is the ref to the target doc. (validator.field) = {msg_exists : true}]
     * </pre>
     *
     * <code>.api.Ref doc_ref = 1 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.RefOrBuilder getDocRefOrBuilder() {
      return getDocRef();
    }

    public static final int GTYPE_FIELD_NUMBER = 2;
    private volatile java.lang.Object gtype_;
    /**
     * <pre>
     * gtype is the type of connections to return. (validator.field) = {regex : "^.{1,225}$"}
     * </pre>
     *
     * <code>string gtype = 2 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getGtype() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        gtype_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * gtype is the type of connections to return. (validator.field) = {regex : "^.{1,225}$"}
     * </pre>
     *
     * <code>string gtype = 2 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getGtypeBytes() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gtype_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int EXPRESSION_FIELD_NUMBER = 3;
    private volatile java.lang.Object expression_;
    /**
     * <pre>
     * expression is a CEL expression used to filter connections/modes
     * </pre>
     *
     * <code>string expression = 3;</code>
     */
    public java.lang.String getExpression() {
      java.lang.Object ref = expression_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        expression_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * expression is a CEL expression used to filter connections/modes
     * </pre>
     *
     * <code>string expression = 3;</code>
     */
    public com.google.protobuf.ByteString
        getExpressionBytes() {
      java.lang.Object ref = expression_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        expression_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int LIMIT_FIELD_NUMBER = 4;
    private long limit_;
    /**
     * <pre>
     * limit is the maximum number of items to return. (validator.field) = {int_gt : 0}
     * </pre>
     *
     * <code>uint64 limit = 4 [(.validator.field) = { ... }</code>
     */
    public long getLimit() {
      return limit_;
    }

    public static final int SORT_FIELD_NUMBER = 5;
    private volatile java.lang.Object sort_;
    /**
     * <pre>
     * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
     * </pre>
     *
     * <code>string sort = 5 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getSort() {
      java.lang.Object ref = sort_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        sort_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
     * </pre>
     *
     * <code>string sort = 5 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getSortBytes() {
      java.lang.Object ref = sort_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        sort_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SEEK_FIELD_NUMBER = 6;
    private volatile java.lang.Object seek_;
    /**
     * <pre>
     * seek to a specific key for pagination
     * </pre>
     *
     * <code>string seek = 6;</code>
     */
    public java.lang.String getSeek() {
      java.lang.Object ref = seek_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        seek_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * seek to a specific key for pagination
     * </pre>
     *
     * <code>string seek = 6;</code>
     */
    public com.google.protobuf.ByteString
        getSeekBytes() {
      java.lang.Object ref = seek_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        seek_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int REVERSE_FIELD_NUMBER = 7;
    private boolean reverse_;
    /**
     * <pre>
     * reverse the results
     * </pre>
     *
     * <code>bool reverse = 7;</code>
     */
    public boolean getReverse() {
      return reverse_;
    }

    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 (docRef_ != null) {
        output.writeMessage(1, getDocRef());
      }
      if (!getGtypeBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, gtype_);
      }
      if (!getExpressionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, expression_);
      }
      if (limit_ != 0L) {
        output.writeUInt64(4, limit_);
      }
      if (!getSortBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, sort_);
      }
      if (!getSeekBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, seek_);
      }
      if (reverse_ != false) {
        output.writeBool(7, reverse_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (docRef_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getDocRef());
      }
      if (!getGtypeBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, gtype_);
      }
      if (!getExpressionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, expression_);
      }
      if (limit_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(4, limit_);
      }
      if (!getSortBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, sort_);
      }
      if (!getSeekBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, seek_);
      }
      if (reverse_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(7, reverse_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && (hasDocRef() == other.hasDocRef());
      if (hasDocRef()) {
        result = result && getDocRef()
            .equals(other.getDocRef());
      }
      result = result && getGtype()
          .equals(other.getGtype());
      result = result && getExpression()
          .equals(other.getExpression());
      result = result && (getLimit()
          == other.getLimit());
      result = result && getSort()
          .equals(other.getSort());
      result = result && getSeek()
          .equals(other.getSeek());
      result = result && (getReverse()
          == other.getReverse());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasDocRef()) {
        hash = (37 * hash) + DOC_REF_FIELD_NUMBER;
        hash = (53 * hash) + getDocRef().hashCode();
      }
      hash = (37 * hash) + GTYPE_FIELD_NUMBER;
      hash = (53 * hash) + getGtype().hashCode();
      hash = (37 * hash) + EXPRESSION_FIELD_NUMBER;
      hash = (53 * hash) + getExpression().hashCode();
      hash = (37 * hash) + LIMIT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getLimit());
      hash = (37 * hash) + SORT_FIELD_NUMBER;
      hash = (53 * hash) + getSort().hashCode();
      hash = (37 * hash) + SEEK_FIELD_NUMBER;
      hash = (53 * hash) + getSeek().hashCode();
      hash = (37 * hash) + REVERSE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getReverse());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.ConnectFilter parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.ConnectFilter parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.ConnectFilter parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.ConnectFilter parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.ConnectFilter parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.ConnectFilter parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.ConnectFilter parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.ConnectFilter 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 api.Graphik.ConnectFilter parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.ConnectFilter 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 api.Graphik.ConnectFilter parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.ConnectFilter 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(api.Graphik.ConnectFilter 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>
     * ConnectFilter is used to fetch connections related to a single noted
     * </pre>
     *
     * Protobuf type {@code api.ConnectFilter}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.ConnectFilter)
        api.Graphik.ConnectFilterOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_ConnectFilter_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_ConnectFilter_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.ConnectFilter.class, api.Graphik.ConnectFilter.Builder.class);
      }

      // Construct using api.Graphik.ConnectFilter.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (docRefBuilder_ == null) {
          docRef_ = null;
        } else {
          docRef_ = null;
          docRefBuilder_ = null;
        }
        gtype_ = "";

        expression_ = "";

        limit_ = 0L;

        sort_ = "";

        seek_ = "";

        reverse_ = false;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_ConnectFilter_descriptor;
      }

      @java.lang.Override
      public api.Graphik.ConnectFilter getDefaultInstanceForType() {
        return api.Graphik.ConnectFilter.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.ConnectFilter buildPartial() {
        api.Graphik.ConnectFilter result = new api.Graphik.ConnectFilter(this);
        if (docRefBuilder_ == null) {
          result.docRef_ = docRef_;
        } else {
          result.docRef_ = docRefBuilder_.build();
        }
        result.gtype_ = gtype_;
        result.expression_ = expression_;
        result.limit_ = limit_;
        result.sort_ = sort_;
        result.seek_ = seek_;
        result.reverse_ = reverse_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.ConnectFilter other) {
        if (other == api.Graphik.ConnectFilter.getDefaultInstance()) return this;
        if (other.hasDocRef()) {
          mergeDocRef(other.getDocRef());
        }
        if (!other.getGtype().isEmpty()) {
          gtype_ = other.gtype_;
          onChanged();
        }
        if (!other.getExpression().isEmpty()) {
          expression_ = other.expression_;
          onChanged();
        }
        if (other.getLimit() != 0L) {
          setLimit(other.getLimit());
        }
        if (!other.getSort().isEmpty()) {
          sort_ = other.sort_;
          onChanged();
        }
        if (!other.getSeek().isEmpty()) {
          seek_ = other.seek_;
          onChanged();
        }
        if (other.getReverse() != false) {
          setReverse(other.getReverse());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.ConnectFilter parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.ConnectFilter) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private api.Graphik.Ref docRef_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> docRefBuilder_;
      /**
       * <pre>
       * doc_ref is the ref to the target doc. (validator.field) = {msg_exists : true}]
       * </pre>
       *
       * <code>.api.Ref doc_ref = 1 [(.validator.field) = { ... }</code>
       */
      public boolean hasDocRef() {
        return docRefBuilder_ != null || docRef_ != null;
      }
      /**
       * <pre>
       * doc_ref is the ref to the target doc. (validator.field) = {msg_exists : true}]
       * </pre>
       *
       * <code>.api.Ref doc_ref = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref getDocRef() {
        if (docRefBuilder_ == null) {
          return docRef_ == null ? api.Graphik.Ref.getDefaultInstance() : docRef_;
        } else {
          return docRefBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * doc_ref is the ref to the target doc. (validator.field) = {msg_exists : true}]
       * </pre>
       *
       * <code>.api.Ref doc_ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setDocRef(api.Graphik.Ref value) {
        if (docRefBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          docRef_ = value;
          onChanged();
        } else {
          docRefBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * doc_ref is the ref to the target doc. (validator.field) = {msg_exists : true}]
       * </pre>
       *
       * <code>.api.Ref doc_ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setDocRef(
          api.Graphik.Ref.Builder builderForValue) {
        if (docRefBuilder_ == null) {
          docRef_ = builderForValue.build();
          onChanged();
        } else {
          docRefBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * doc_ref is the ref to the target doc. (validator.field) = {msg_exists : true}]
       * </pre>
       *
       * <code>.api.Ref doc_ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder mergeDocRef(api.Graphik.Ref value) {
        if (docRefBuilder_ == null) {
          if (docRef_ != null) {
            docRef_ =
              api.Graphik.Ref.newBuilder(docRef_).mergeFrom(value).buildPartial();
          } else {
            docRef_ = value;
          }
          onChanged();
        } else {
          docRefBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * doc_ref is the ref to the target doc. (validator.field) = {msg_exists : true}]
       * </pre>
       *
       * <code>.api.Ref doc_ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearDocRef() {
        if (docRefBuilder_ == null) {
          docRef_ = null;
          onChanged();
        } else {
          docRef_ = null;
          docRefBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * doc_ref is the ref to the target doc. (validator.field) = {msg_exists : true}]
       * </pre>
       *
       * <code>.api.Ref doc_ref = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref.Builder getDocRefBuilder() {
        
        onChanged();
        return getDocRefFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * doc_ref is the ref to the target doc. (validator.field) = {msg_exists : true}]
       * </pre>
       *
       * <code>.api.Ref doc_ref = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.RefOrBuilder getDocRefOrBuilder() {
        if (docRefBuilder_ != null) {
          return docRefBuilder_.getMessageOrBuilder();
        } else {
          return docRef_ == null ?
              api.Graphik.Ref.getDefaultInstance() : docRef_;
        }
      }
      /**
       * <pre>
       * doc_ref is the ref to the target doc. (validator.field) = {msg_exists : true}]
       * </pre>
       *
       * <code>.api.Ref doc_ref = 1 [(.validator.field) = { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> 
          getDocRefFieldBuilder() {
        if (docRefBuilder_ == null) {
          docRefBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder>(
                  getDocRef(),
                  getParentForChildren(),
                  isClean());
          docRef_ = null;
        }
        return docRefBuilder_;
      }

      private java.lang.Object gtype_ = "";
      /**
       * <pre>
       * gtype is the type of connections to return. (validator.field) = {regex : "^.{1,225}$"}
       * </pre>
       *
       * <code>string gtype = 2 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getGtype() {
        java.lang.Object ref = gtype_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          gtype_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * gtype is the type of connections to return. (validator.field) = {regex : "^.{1,225}$"}
       * </pre>
       *
       * <code>string gtype = 2 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getGtypeBytes() {
        java.lang.Object ref = gtype_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gtype_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * gtype is the type of connections to return. (validator.field) = {regex : "^.{1,225}$"}
       * </pre>
       *
       * <code>string gtype = 2 [(.validator.field) = { ... }</code>
       */
      public Builder setGtype(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        gtype_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * gtype is the type of connections to return. (validator.field) = {regex : "^.{1,225}$"}
       * </pre>
       *
       * <code>string gtype = 2 [(.validator.field) = { ... }</code>
       */
      public Builder clearGtype() {
        
        gtype_ = getDefaultInstance().getGtype();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * gtype is the type of connections to return. (validator.field) = {regex : "^.{1,225}$"}
       * </pre>
       *
       * <code>string gtype = 2 [(.validator.field) = { ... }</code>
       */
      public Builder setGtypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        gtype_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object expression_ = "";
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 3;</code>
       */
      public java.lang.String getExpression() {
        java.lang.Object ref = expression_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          expression_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 3;</code>
       */
      public com.google.protobuf.ByteString
          getExpressionBytes() {
        java.lang.Object ref = expression_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          expression_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 3;</code>
       */
      public Builder setExpression(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        expression_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 3;</code>
       */
      public Builder clearExpression() {
        
        expression_ = getDefaultInstance().getExpression();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 3;</code>
       */
      public Builder setExpressionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        expression_ = value;
        onChanged();
        return this;
      }

      private long limit_ ;
      /**
       * <pre>
       * limit is the maximum number of items to return. (validator.field) = {int_gt : 0}
       * </pre>
       *
       * <code>uint64 limit = 4 [(.validator.field) = { ... }</code>
       */
      public long getLimit() {
        return limit_;
      }
      /**
       * <pre>
       * limit is the maximum number of items to return. (validator.field) = {int_gt : 0}
       * </pre>
       *
       * <code>uint64 limit = 4 [(.validator.field) = { ... }</code>
       */
      public Builder setLimit(long value) {
        
        limit_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * limit is the maximum number of items to return. (validator.field) = {int_gt : 0}
       * </pre>
       *
       * <code>uint64 limit = 4 [(.validator.field) = { ... }</code>
       */
      public Builder clearLimit() {
        
        limit_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object sort_ = "";
      /**
       * <pre>
       * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
       * </pre>
       *
       * <code>string sort = 5 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getSort() {
        java.lang.Object ref = sort_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          sort_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
       * </pre>
       *
       * <code>string sort = 5 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getSortBytes() {
        java.lang.Object ref = sort_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          sort_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
       * </pre>
       *
       * <code>string sort = 5 [(.validator.field) = { ... }</code>
       */
      public Builder setSort(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        sort_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
       * </pre>
       *
       * <code>string sort = 5 [(.validator.field) = { ... }</code>
       */
      public Builder clearSort() {
        
        sort_ = getDefaultInstance().getSort();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
       * </pre>
       *
       * <code>string sort = 5 [(.validator.field) = { ... }</code>
       */
      public Builder setSortBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        sort_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object seek_ = "";
      /**
       * <pre>
       * seek to a specific key for pagination
       * </pre>
       *
       * <code>string seek = 6;</code>
       */
      public java.lang.String getSeek() {
        java.lang.Object ref = seek_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          seek_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * seek to a specific key for pagination
       * </pre>
       *
       * <code>string seek = 6;</code>
       */
      public com.google.protobuf.ByteString
          getSeekBytes() {
        java.lang.Object ref = seek_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          seek_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * seek to a specific key for pagination
       * </pre>
       *
       * <code>string seek = 6;</code>
       */
      public Builder setSeek(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        seek_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * seek to a specific key for pagination
       * </pre>
       *
       * <code>string seek = 6;</code>
       */
      public Builder clearSeek() {
        
        seek_ = getDefaultInstance().getSeek();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * seek to a specific key for pagination
       * </pre>
       *
       * <code>string seek = 6;</code>
       */
      public Builder setSeekBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        seek_ = value;
        onChanged();
        return this;
      }

      private boolean reverse_ ;
      /**
       * <pre>
       * reverse the results
       * </pre>
       *
       * <code>bool reverse = 7;</code>
       */
      public boolean getReverse() {
        return reverse_;
      }
      /**
       * <pre>
       * reverse the results
       * </pre>
       *
       * <code>bool reverse = 7;</code>
       */
      public Builder setReverse(boolean value) {
        
        reverse_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * reverse the results
       * </pre>
       *
       * <code>bool reverse = 7;</code>
       */
      public Builder clearReverse() {
        
        reverse_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.ConnectFilter)
    }

    // @@protoc_insertion_point(class_scope:api.ConnectFilter)
    private static final api.Graphik.ConnectFilter DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.ConnectFilter();
    }

    public static api.Graphik.ConnectFilter getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ConnectFilter>
        PARSER = new com.google.protobuf.AbstractParser<ConnectFilter>() {
      @java.lang.Override
      public ConnectFilter parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ConnectFilter(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.ConnectFilter getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface FilterOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Filter)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * gtype is the doc/connection type to be filtered
     * </pre>
     *
     * <code>string gtype = 1 [(.validator.field) = { ... }</code>
     */
    java.lang.String getGtype();
    /**
     * <pre>
     * gtype is the doc/connection type to be filtered
     * </pre>
     *
     * <code>string gtype = 1 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getGtypeBytes();

    /**
     * <pre>
     * expression is a CEL expression used to filter connections/modes
     * </pre>
     *
     * <code>string expression = 2;</code>
     */
    java.lang.String getExpression();
    /**
     * <pre>
     * expression is a CEL expression used to filter connections/modes
     * </pre>
     *
     * <code>string expression = 2;</code>
     */
    com.google.protobuf.ByteString
        getExpressionBytes();

    /**
     * <pre>
     * limit is the maximum number of items to return
     * </pre>
     *
     * <code>uint64 limit = 3 [(.validator.field) = { ... }</code>
     */
    long getLimit();

    /**
     * <pre>
     * custom sorting of the results.
     * </pre>
     *
     * <code>string sort = 4 [(.validator.field) = { ... }</code>
     */
    java.lang.String getSort();
    /**
     * <pre>
     * custom sorting of the results.
     * </pre>
     *
     * <code>string sort = 4 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getSortBytes();

    /**
     * <pre>
     * seek to a specific key for pagination
     * </pre>
     *
     * <code>string seek = 5;</code>
     */
    java.lang.String getSeek();
    /**
     * <pre>
     * seek to a specific key for pagination
     * </pre>
     *
     * <code>string seek = 5;</code>
     */
    com.google.protobuf.ByteString
        getSeekBytes();

    /**
     * <pre>
     * reverse the results
     * </pre>
     *
     * <code>bool reverse = 6;</code>
     */
    boolean getReverse();

    /**
     * <pre>
     * search in a specific index
     * </pre>
     *
     * <code>string index = 7;</code>
     */
    java.lang.String getIndex();
    /**
     * <pre>
     * search in a specific index
     * </pre>
     *
     * <code>string index = 7;</code>
     */
    com.google.protobuf.ByteString
        getIndexBytes();
  }
  /**
   * <pre>
   * Filter is a generic filter using Common Expression Language
   * </pre>
   *
   * Protobuf type {@code api.Filter}
   */
  public  static final class Filter extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Filter)
      FilterOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Filter.newBuilder() to construct.
    private Filter(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Filter() {
      gtype_ = "";
      expression_ = "";
      limit_ = 0L;
      sort_ = "";
      seek_ = "";
      reverse_ = false;
      index_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Filter(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              gtype_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              expression_ = s;
              break;
            }
            case 24: {

              limit_ = input.readUInt64();
              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();

              sort_ = s;
              break;
            }
            case 42: {
              java.lang.String s = input.readStringRequireUtf8();

              seek_ = s;
              break;
            }
            case 48: {

              reverse_ = input.readBool();
              break;
            }
            case 58: {
              java.lang.String s = input.readStringRequireUtf8();

              index_ = s;
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Filter_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Filter_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Filter.class, api.Graphik.Filter.Builder.class);
    }

    public static final int GTYPE_FIELD_NUMBER = 1;
    private volatile java.lang.Object gtype_;
    /**
     * <pre>
     * gtype is the doc/connection type to be filtered
     * </pre>
     *
     * <code>string gtype = 1 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getGtype() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        gtype_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * gtype is the doc/connection type to be filtered
     * </pre>
     *
     * <code>string gtype = 1 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getGtypeBytes() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gtype_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int EXPRESSION_FIELD_NUMBER = 2;
    private volatile java.lang.Object expression_;
    /**
     * <pre>
     * expression is a CEL expression used to filter connections/modes
     * </pre>
     *
     * <code>string expression = 2;</code>
     */
    public java.lang.String getExpression() {
      java.lang.Object ref = expression_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        expression_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * expression is a CEL expression used to filter connections/modes
     * </pre>
     *
     * <code>string expression = 2;</code>
     */
    public com.google.protobuf.ByteString
        getExpressionBytes() {
      java.lang.Object ref = expression_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        expression_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int LIMIT_FIELD_NUMBER = 3;
    private long limit_;
    /**
     * <pre>
     * limit is the maximum number of items to return
     * </pre>
     *
     * <code>uint64 limit = 3 [(.validator.field) = { ... }</code>
     */
    public long getLimit() {
      return limit_;
    }

    public static final int SORT_FIELD_NUMBER = 4;
    private volatile java.lang.Object sort_;
    /**
     * <pre>
     * custom sorting of the results.
     * </pre>
     *
     * <code>string sort = 4 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getSort() {
      java.lang.Object ref = sort_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        sort_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * custom sorting of the results.
     * </pre>
     *
     * <code>string sort = 4 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getSortBytes() {
      java.lang.Object ref = sort_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        sort_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SEEK_FIELD_NUMBER = 5;
    private volatile java.lang.Object seek_;
    /**
     * <pre>
     * seek to a specific key for pagination
     * </pre>
     *
     * <code>string seek = 5;</code>
     */
    public java.lang.String getSeek() {
      java.lang.Object ref = seek_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        seek_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * seek to a specific key for pagination
     * </pre>
     *
     * <code>string seek = 5;</code>
     */
    public com.google.protobuf.ByteString
        getSeekBytes() {
      java.lang.Object ref = seek_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        seek_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int REVERSE_FIELD_NUMBER = 6;
    private boolean reverse_;
    /**
     * <pre>
     * reverse the results
     * </pre>
     *
     * <code>bool reverse = 6;</code>
     */
    public boolean getReverse() {
      return reverse_;
    }

    public static final int INDEX_FIELD_NUMBER = 7;
    private volatile java.lang.Object index_;
    /**
     * <pre>
     * search in a specific index
     * </pre>
     *
     * <code>string index = 7;</code>
     */
    public java.lang.String getIndex() {
      java.lang.Object ref = index_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        index_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * search in a specific index
     * </pre>
     *
     * <code>string index = 7;</code>
     */
    public com.google.protobuf.ByteString
        getIndexBytes() {
      java.lang.Object ref = index_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        index_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    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 (!getGtypeBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, gtype_);
      }
      if (!getExpressionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, expression_);
      }
      if (limit_ != 0L) {
        output.writeUInt64(3, limit_);
      }
      if (!getSortBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, sort_);
      }
      if (!getSeekBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, seek_);
      }
      if (reverse_ != false) {
        output.writeBool(6, reverse_);
      }
      if (!getIndexBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, index_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getGtypeBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, gtype_);
      }
      if (!getExpressionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, expression_);
      }
      if (limit_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(3, limit_);
      }
      if (!getSortBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, sort_);
      }
      if (!getSeekBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, seek_);
      }
      if (reverse_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, reverse_);
      }
      if (!getIndexBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, index_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getGtype()
          .equals(other.getGtype());
      result = result && getExpression()
          .equals(other.getExpression());
      result = result && (getLimit()
          == other.getLimit());
      result = result && getSort()
          .equals(other.getSort());
      result = result && getSeek()
          .equals(other.getSeek());
      result = result && (getReverse()
          == other.getReverse());
      result = result && getIndex()
          .equals(other.getIndex());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + GTYPE_FIELD_NUMBER;
      hash = (53 * hash) + getGtype().hashCode();
      hash = (37 * hash) + EXPRESSION_FIELD_NUMBER;
      hash = (53 * hash) + getExpression().hashCode();
      hash = (37 * hash) + LIMIT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getLimit());
      hash = (37 * hash) + SORT_FIELD_NUMBER;
      hash = (53 * hash) + getSort().hashCode();
      hash = (37 * hash) + SEEK_FIELD_NUMBER;
      hash = (53 * hash) + getSeek().hashCode();
      hash = (37 * hash) + REVERSE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getReverse());
      hash = (37 * hash) + INDEX_FIELD_NUMBER;
      hash = (53 * hash) + getIndex().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Filter parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Filter parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Filter parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Filter parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Filter parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Filter parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Filter parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Filter 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 api.Graphik.Filter parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Filter 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 api.Graphik.Filter parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Filter 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(api.Graphik.Filter 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>
     * Filter is a generic filter using Common Expression Language
     * </pre>
     *
     * Protobuf type {@code api.Filter}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Filter)
        api.Graphik.FilterOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Filter_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Filter_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Filter.class, api.Graphik.Filter.Builder.class);
      }

      // Construct using api.Graphik.Filter.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        gtype_ = "";

        expression_ = "";

        limit_ = 0L;

        sort_ = "";

        seek_ = "";

        reverse_ = false;

        index_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Filter_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Filter getDefaultInstanceForType() {
        return api.Graphik.Filter.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Filter buildPartial() {
        api.Graphik.Filter result = new api.Graphik.Filter(this);
        result.gtype_ = gtype_;
        result.expression_ = expression_;
        result.limit_ = limit_;
        result.sort_ = sort_;
        result.seek_ = seek_;
        result.reverse_ = reverse_;
        result.index_ = index_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Filter other) {
        if (other == api.Graphik.Filter.getDefaultInstance()) return this;
        if (!other.getGtype().isEmpty()) {
          gtype_ = other.gtype_;
          onChanged();
        }
        if (!other.getExpression().isEmpty()) {
          expression_ = other.expression_;
          onChanged();
        }
        if (other.getLimit() != 0L) {
          setLimit(other.getLimit());
        }
        if (!other.getSort().isEmpty()) {
          sort_ = other.sort_;
          onChanged();
        }
        if (!other.getSeek().isEmpty()) {
          seek_ = other.seek_;
          onChanged();
        }
        if (other.getReverse() != false) {
          setReverse(other.getReverse());
        }
        if (!other.getIndex().isEmpty()) {
          index_ = other.index_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Filter parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Filter) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object gtype_ = "";
      /**
       * <pre>
       * gtype is the doc/connection type to be filtered
       * </pre>
       *
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getGtype() {
        java.lang.Object ref = gtype_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          gtype_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * gtype is the doc/connection type to be filtered
       * </pre>
       *
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getGtypeBytes() {
        java.lang.Object ref = gtype_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gtype_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * gtype is the doc/connection type to be filtered
       * </pre>
       *
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setGtype(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        gtype_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * gtype is the doc/connection type to be filtered
       * </pre>
       *
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearGtype() {
        
        gtype_ = getDefaultInstance().getGtype();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * gtype is the doc/connection type to be filtered
       * </pre>
       *
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setGtypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        gtype_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object expression_ = "";
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 2;</code>
       */
      public java.lang.String getExpression() {
        java.lang.Object ref = expression_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          expression_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 2;</code>
       */
      public com.google.protobuf.ByteString
          getExpressionBytes() {
        java.lang.Object ref = expression_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          expression_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 2;</code>
       */
      public Builder setExpression(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        expression_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 2;</code>
       */
      public Builder clearExpression() {
        
        expression_ = getDefaultInstance().getExpression();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 2;</code>
       */
      public Builder setExpressionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        expression_ = value;
        onChanged();
        return this;
      }

      private long limit_ ;
      /**
       * <pre>
       * limit is the maximum number of items to return
       * </pre>
       *
       * <code>uint64 limit = 3 [(.validator.field) = { ... }</code>
       */
      public long getLimit() {
        return limit_;
      }
      /**
       * <pre>
       * limit is the maximum number of items to return
       * </pre>
       *
       * <code>uint64 limit = 3 [(.validator.field) = { ... }</code>
       */
      public Builder setLimit(long value) {
        
        limit_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * limit is the maximum number of items to return
       * </pre>
       *
       * <code>uint64 limit = 3 [(.validator.field) = { ... }</code>
       */
      public Builder clearLimit() {
        
        limit_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object sort_ = "";
      /**
       * <pre>
       * custom sorting of the results.
       * </pre>
       *
       * <code>string sort = 4 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getSort() {
        java.lang.Object ref = sort_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          sort_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * custom sorting of the results.
       * </pre>
       *
       * <code>string sort = 4 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getSortBytes() {
        java.lang.Object ref = sort_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          sort_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * custom sorting of the results.
       * </pre>
       *
       * <code>string sort = 4 [(.validator.field) = { ... }</code>
       */
      public Builder setSort(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        sort_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * custom sorting of the results.
       * </pre>
       *
       * <code>string sort = 4 [(.validator.field) = { ... }</code>
       */
      public Builder clearSort() {
        
        sort_ = getDefaultInstance().getSort();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * custom sorting of the results.
       * </pre>
       *
       * <code>string sort = 4 [(.validator.field) = { ... }</code>
       */
      public Builder setSortBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        sort_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object seek_ = "";
      /**
       * <pre>
       * seek to a specific key for pagination
       * </pre>
       *
       * <code>string seek = 5;</code>
       */
      public java.lang.String getSeek() {
        java.lang.Object ref = seek_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          seek_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * seek to a specific key for pagination
       * </pre>
       *
       * <code>string seek = 5;</code>
       */
      public com.google.protobuf.ByteString
          getSeekBytes() {
        java.lang.Object ref = seek_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          seek_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * seek to a specific key for pagination
       * </pre>
       *
       * <code>string seek = 5;</code>
       */
      public Builder setSeek(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        seek_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * seek to a specific key for pagination
       * </pre>
       *
       * <code>string seek = 5;</code>
       */
      public Builder clearSeek() {
        
        seek_ = getDefaultInstance().getSeek();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * seek to a specific key for pagination
       * </pre>
       *
       * <code>string seek = 5;</code>
       */
      public Builder setSeekBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        seek_ = value;
        onChanged();
        return this;
      }

      private boolean reverse_ ;
      /**
       * <pre>
       * reverse the results
       * </pre>
       *
       * <code>bool reverse = 6;</code>
       */
      public boolean getReverse() {
        return reverse_;
      }
      /**
       * <pre>
       * reverse the results
       * </pre>
       *
       * <code>bool reverse = 6;</code>
       */
      public Builder setReverse(boolean value) {
        
        reverse_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * reverse the results
       * </pre>
       *
       * <code>bool reverse = 6;</code>
       */
      public Builder clearReverse() {
        
        reverse_ = false;
        onChanged();
        return this;
      }

      private java.lang.Object index_ = "";
      /**
       * <pre>
       * search in a specific index
       * </pre>
       *
       * <code>string index = 7;</code>
       */
      public java.lang.String getIndex() {
        java.lang.Object ref = index_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          index_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * search in a specific index
       * </pre>
       *
       * <code>string index = 7;</code>
       */
      public com.google.protobuf.ByteString
          getIndexBytes() {
        java.lang.Object ref = index_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          index_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * search in a specific index
       * </pre>
       *
       * <code>string index = 7;</code>
       */
      public Builder setIndex(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        index_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * search in a specific index
       * </pre>
       *
       * <code>string index = 7;</code>
       */
      public Builder clearIndex() {
        
        index_ = getDefaultInstance().getIndex();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * search in a specific index
       * </pre>
       *
       * <code>string index = 7;</code>
       */
      public Builder setIndexBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        index_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Filter)
    }

    // @@protoc_insertion_point(class_scope:api.Filter)
    private static final api.Graphik.Filter DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Filter();
    }

    public static api.Graphik.Filter getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Filter>
        PARSER = new com.google.protobuf.AbstractParser<Filter>() {
      @java.lang.Override
      public Filter parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Filter(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Filter getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AggFilterOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.AggFilter)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.api.Filter filter = 1 [(.validator.field) = { ... }</code>
     */
    boolean hasFilter();
    /**
     * <code>.api.Filter filter = 1 [(.validator.field) = { ... }</code>
     */
    api.Graphik.Filter getFilter();
    /**
     * <code>.api.Filter filter = 1 [(.validator.field) = { ... }</code>
     */
    api.Graphik.FilterOrBuilder getFilterOrBuilder();

    /**
     * <code>.api.Aggregate aggregate = 2;</code>
     */
    int getAggregateValue();
    /**
     * <code>.api.Aggregate aggregate = 2;</code>
     */
    api.Graphik.Aggregate getAggregate();

    /**
     * <code>string field = 3 [(.validator.field) = { ... }</code>
     */
    java.lang.String getField();
    /**
     * <code>string field = 3 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getFieldBytes();
  }
  /**
   * Protobuf type {@code api.AggFilter}
   */
  public  static final class AggFilter extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.AggFilter)
      AggFilterOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AggFilter.newBuilder() to construct.
    private AggFilter(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AggFilter() {
      aggregate_ = 0;
      field_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private AggFilter(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              api.Graphik.Filter.Builder subBuilder = null;
              if (filter_ != null) {
                subBuilder = filter_.toBuilder();
              }
              filter_ = input.readMessage(api.Graphik.Filter.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(filter_);
                filter_ = subBuilder.buildPartial();
              }

              break;
            }
            case 16: {
              int rawValue = input.readEnum();

              aggregate_ = rawValue;
              break;
            }
            case 26: {
              java.lang.String s = input.readStringRequireUtf8();

              field_ = s;
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_AggFilter_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_AggFilter_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.AggFilter.class, api.Graphik.AggFilter.Builder.class);
    }

    public static final int FILTER_FIELD_NUMBER = 1;
    private api.Graphik.Filter filter_;
    /**
     * <code>.api.Filter filter = 1 [(.validator.field) = { ... }</code>
     */
    public boolean hasFilter() {
      return filter_ != null;
    }
    /**
     * <code>.api.Filter filter = 1 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.Filter getFilter() {
      return filter_ == null ? api.Graphik.Filter.getDefaultInstance() : filter_;
    }
    /**
     * <code>.api.Filter filter = 1 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.FilterOrBuilder getFilterOrBuilder() {
      return getFilter();
    }

    public static final int AGGREGATE_FIELD_NUMBER = 2;
    private int aggregate_;
    /**
     * <code>.api.Aggregate aggregate = 2;</code>
     */
    public int getAggregateValue() {
      return aggregate_;
    }
    /**
     * <code>.api.Aggregate aggregate = 2;</code>
     */
    public api.Graphik.Aggregate getAggregate() {
      @SuppressWarnings("deprecation")
      api.Graphik.Aggregate result = api.Graphik.Aggregate.valueOf(aggregate_);
      return result == null ? api.Graphik.Aggregate.UNRECOGNIZED : result;
    }

    public static final int FIELD_FIELD_NUMBER = 3;
    private volatile java.lang.Object field_;
    /**
     * <code>string field = 3 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getField() {
      java.lang.Object ref = field_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        field_ = s;
        return s;
      }
    }
    /**
     * <code>string field = 3 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getFieldBytes() {
      java.lang.Object ref = field_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        field_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    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 (filter_ != null) {
        output.writeMessage(1, getFilter());
      }
      if (aggregate_ != api.Graphik.Aggregate.COUNT.getNumber()) {
        output.writeEnum(2, aggregate_);
      }
      if (!getFieldBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, field_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (filter_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getFilter());
      }
      if (aggregate_ != api.Graphik.Aggregate.COUNT.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, aggregate_);
      }
      if (!getFieldBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, field_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && (hasFilter() == other.hasFilter());
      if (hasFilter()) {
        result = result && getFilter()
            .equals(other.getFilter());
      }
      result = result && aggregate_ == other.aggregate_;
      result = result && getField()
          .equals(other.getField());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasFilter()) {
        hash = (37 * hash) + FILTER_FIELD_NUMBER;
        hash = (53 * hash) + getFilter().hashCode();
      }
      hash = (37 * hash) + AGGREGATE_FIELD_NUMBER;
      hash = (53 * hash) + aggregate_;
      hash = (37 * hash) + FIELD_FIELD_NUMBER;
      hash = (53 * hash) + getField().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

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

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_AggFilter_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.AggFilter.class, api.Graphik.AggFilter.Builder.class);
      }

      // Construct using api.Graphik.AggFilter.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (filterBuilder_ == null) {
          filter_ = null;
        } else {
          filter_ = null;
          filterBuilder_ = null;
        }
        aggregate_ = 0;

        field_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_AggFilter_descriptor;
      }

      @java.lang.Override
      public api.Graphik.AggFilter getDefaultInstanceForType() {
        return api.Graphik.AggFilter.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.AggFilter buildPartial() {
        api.Graphik.AggFilter result = new api.Graphik.AggFilter(this);
        if (filterBuilder_ == null) {
          result.filter_ = filter_;
        } else {
          result.filter_ = filterBuilder_.build();
        }
        result.aggregate_ = aggregate_;
        result.field_ = field_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.AggFilter other) {
        if (other == api.Graphik.AggFilter.getDefaultInstance()) return this;
        if (other.hasFilter()) {
          mergeFilter(other.getFilter());
        }
        if (other.aggregate_ != 0) {
          setAggregateValue(other.getAggregateValue());
        }
        if (!other.getField().isEmpty()) {
          field_ = other.field_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.AggFilter parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.AggFilter) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private api.Graphik.Filter filter_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Filter, api.Graphik.Filter.Builder, api.Graphik.FilterOrBuilder> filterBuilder_;
      /**
       * <code>.api.Filter filter = 1 [(.validator.field) = { ... }</code>
       */
      public boolean hasFilter() {
        return filterBuilder_ != null || filter_ != null;
      }
      /**
       * <code>.api.Filter filter = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Filter getFilter() {
        if (filterBuilder_ == null) {
          return filter_ == null ? api.Graphik.Filter.getDefaultInstance() : filter_;
        } else {
          return filterBuilder_.getMessage();
        }
      }
      /**
       * <code>.api.Filter filter = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setFilter(api.Graphik.Filter value) {
        if (filterBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          filter_ = value;
          onChanged();
        } else {
          filterBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.api.Filter filter = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setFilter(
          api.Graphik.Filter.Builder builderForValue) {
        if (filterBuilder_ == null) {
          filter_ = builderForValue.build();
          onChanged();
        } else {
          filterBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.api.Filter filter = 1 [(.validator.field) = { ... }</code>
       */
      public Builder mergeFilter(api.Graphik.Filter value) {
        if (filterBuilder_ == null) {
          if (filter_ != null) {
            filter_ =
              api.Graphik.Filter.newBuilder(filter_).mergeFrom(value).buildPartial();
          } else {
            filter_ = value;
          }
          onChanged();
        } else {
          filterBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.api.Filter filter = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearFilter() {
        if (filterBuilder_ == null) {
          filter_ = null;
          onChanged();
        } else {
          filter_ = null;
          filterBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.api.Filter filter = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Filter.Builder getFilterBuilder() {
        
        onChanged();
        return getFilterFieldBuilder().getBuilder();
      }
      /**
       * <code>.api.Filter filter = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.FilterOrBuilder getFilterOrBuilder() {
        if (filterBuilder_ != null) {
          return filterBuilder_.getMessageOrBuilder();
        } else {
          return filter_ == null ?
              api.Graphik.Filter.getDefaultInstance() : filter_;
        }
      }
      /**
       * <code>.api.Filter filter = 1 [(.validator.field) = { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Filter, api.Graphik.Filter.Builder, api.Graphik.FilterOrBuilder> 
          getFilterFieldBuilder() {
        if (filterBuilder_ == null) {
          filterBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Filter, api.Graphik.Filter.Builder, api.Graphik.FilterOrBuilder>(
                  getFilter(),
                  getParentForChildren(),
                  isClean());
          filter_ = null;
        }
        return filterBuilder_;
      }

      private int aggregate_ = 0;
      /**
       * <code>.api.Aggregate aggregate = 2;</code>
       */
      public int getAggregateValue() {
        return aggregate_;
      }
      /**
       * <code>.api.Aggregate aggregate = 2;</code>
       */
      public Builder setAggregateValue(int value) {
        aggregate_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.api.Aggregate aggregate = 2;</code>
       */
      public api.Graphik.Aggregate getAggregate() {
        @SuppressWarnings("deprecation")
        api.Graphik.Aggregate result = api.Graphik.Aggregate.valueOf(aggregate_);
        return result == null ? api.Graphik.Aggregate.UNRECOGNIZED : result;
      }
      /**
       * <code>.api.Aggregate aggregate = 2;</code>
       */
      public Builder setAggregate(api.Graphik.Aggregate value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        aggregate_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.api.Aggregate aggregate = 2;</code>
       */
      public Builder clearAggregate() {
        
        aggregate_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object field_ = "";
      /**
       * <code>string field = 3 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getField() {
        java.lang.Object ref = field_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          field_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string field = 3 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getFieldBytes() {
        java.lang.Object ref = field_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          field_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string field = 3 [(.validator.field) = { ... }</code>
       */
      public Builder setField(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        field_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string field = 3 [(.validator.field) = { ... }</code>
       */
      public Builder clearField() {
        
        field_ = getDefaultInstance().getField();
        onChanged();
        return this;
      }
      /**
       * <code>string field = 3 [(.validator.field) = { ... }</code>
       */
      public Builder setFieldBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        field_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.AggFilter)
    }

    // @@protoc_insertion_point(class_scope:api.AggFilter)
    private static final api.Graphik.AggFilter DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.AggFilter();
    }

    public static api.Graphik.AggFilter getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AggFilter>
        PARSER = new com.google.protobuf.AbstractParser<AggFilter>() {
      @java.lang.Override
      public AggFilter parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AggFilter(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.AggFilter getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface TraverseFilterOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.TraverseFilter)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.api.Ref root = 1 [(.validator.field) = { ... }</code>
     */
    boolean hasRoot();
    /**
     * <code>.api.Ref root = 1 [(.validator.field) = { ... }</code>
     */
    api.Graphik.Ref getRoot();
    /**
     * <code>.api.Ref root = 1 [(.validator.field) = { ... }</code>
     */
    api.Graphik.RefOrBuilder getRootOrBuilder();

    /**
     * <code>string doc_expression = 2;</code>
     */
    java.lang.String getDocExpression();
    /**
     * <code>string doc_expression = 2;</code>
     */
    com.google.protobuf.ByteString
        getDocExpressionBytes();

    /**
     * <code>string connection_expression = 3;</code>
     */
    java.lang.String getConnectionExpression();
    /**
     * <code>string connection_expression = 3;</code>
     */
    com.google.protobuf.ByteString
        getConnectionExpressionBytes();

    /**
     * <code>uint64 limit = 4 [(.validator.field) = { ... }</code>
     */
    long getLimit();

    /**
     * <pre>
     * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
     * </pre>
     *
     * <code>string sort = 5 [(.validator.field) = { ... }</code>
     */
    java.lang.String getSort();
    /**
     * <pre>
     * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
     * </pre>
     *
     * <code>string sort = 5 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getSortBytes();

    /**
     * <code>bool reverse = 6;</code>
     */
    boolean getReverse();

    /**
     * <code>.api.Algorithm algorithm = 7;</code>
     */
    int getAlgorithmValue();
    /**
     * <code>.api.Algorithm algorithm = 7;</code>
     */
    api.Graphik.Algorithm getAlgorithm();

    /**
     * <pre>
     * maximum degree/depth of nodes to be visited during traversal
     * </pre>
     *
     * <code>uint64 max_depth = 8 [(.validator.field) = { ... }</code>
     */
    long getMaxDepth();

    /**
     * <pre>
     * maximum number of nodes to be visited during traversal
     * </pre>
     *
     * <code>uint64 max_hops = 9 [(.validator.field) = { ... }</code>
     */
    long getMaxHops();
  }
  /**
   * Protobuf type {@code api.TraverseFilter}
   */
  public  static final class TraverseFilter extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.TraverseFilter)
      TraverseFilterOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use TraverseFilter.newBuilder() to construct.
    private TraverseFilter(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private TraverseFilter() {
      docExpression_ = "";
      connectionExpression_ = "";
      limit_ = 0L;
      sort_ = "";
      reverse_ = false;
      algorithm_ = 0;
      maxDepth_ = 0L;
      maxHops_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private TraverseFilter(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              api.Graphik.Ref.Builder subBuilder = null;
              if (root_ != null) {
                subBuilder = root_.toBuilder();
              }
              root_ = input.readMessage(api.Graphik.Ref.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(root_);
                root_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              docExpression_ = s;
              break;
            }
            case 26: {
              java.lang.String s = input.readStringRequireUtf8();

              connectionExpression_ = s;
              break;
            }
            case 32: {

              limit_ = input.readUInt64();
              break;
            }
            case 42: {
              java.lang.String s = input.readStringRequireUtf8();

              sort_ = s;
              break;
            }
            case 48: {

              reverse_ = input.readBool();
              break;
            }
            case 56: {
              int rawValue = input.readEnum();

              algorithm_ = rawValue;
              break;
            }
            case 64: {

              maxDepth_ = input.readUInt64();
              break;
            }
            case 72: {

              maxHops_ = input.readUInt64();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_TraverseFilter_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_TraverseFilter_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.TraverseFilter.class, api.Graphik.TraverseFilter.Builder.class);
    }

    public static final int ROOT_FIELD_NUMBER = 1;
    private api.Graphik.Ref root_;
    /**
     * <code>.api.Ref root = 1 [(.validator.field) = { ... }</code>
     */
    public boolean hasRoot() {
      return root_ != null;
    }
    /**
     * <code>.api.Ref root = 1 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.Ref getRoot() {
      return root_ == null ? api.Graphik.Ref.getDefaultInstance() : root_;
    }
    /**
     * <code>.api.Ref root = 1 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.RefOrBuilder getRootOrBuilder() {
      return getRoot();
    }

    public static final int DOC_EXPRESSION_FIELD_NUMBER = 2;
    private volatile java.lang.Object docExpression_;
    /**
     * <code>string doc_expression = 2;</code>
     */
    public java.lang.String getDocExpression() {
      java.lang.Object ref = docExpression_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        docExpression_ = s;
        return s;
      }
    }
    /**
     * <code>string doc_expression = 2;</code>
     */
    public com.google.protobuf.ByteString
        getDocExpressionBytes() {
      java.lang.Object ref = docExpression_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        docExpression_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CONNECTION_EXPRESSION_FIELD_NUMBER = 3;
    private volatile java.lang.Object connectionExpression_;
    /**
     * <code>string connection_expression = 3;</code>
     */
    public java.lang.String getConnectionExpression() {
      java.lang.Object ref = connectionExpression_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        connectionExpression_ = s;
        return s;
      }
    }
    /**
     * <code>string connection_expression = 3;</code>
     */
    public com.google.protobuf.ByteString
        getConnectionExpressionBytes() {
      java.lang.Object ref = connectionExpression_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        connectionExpression_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int LIMIT_FIELD_NUMBER = 4;
    private long limit_;
    /**
     * <code>uint64 limit = 4 [(.validator.field) = { ... }</code>
     */
    public long getLimit() {
      return limit_;
    }

    public static final int SORT_FIELD_NUMBER = 5;
    private volatile java.lang.Object sort_;
    /**
     * <pre>
     * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
     * </pre>
     *
     * <code>string sort = 5 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getSort() {
      java.lang.Object ref = sort_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        sort_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
     * </pre>
     *
     * <code>string sort = 5 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getSortBytes() {
      java.lang.Object ref = sort_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        sort_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int REVERSE_FIELD_NUMBER = 6;
    private boolean reverse_;
    /**
     * <code>bool reverse = 6;</code>
     */
    public boolean getReverse() {
      return reverse_;
    }

    public static final int ALGORITHM_FIELD_NUMBER = 7;
    private int algorithm_;
    /**
     * <code>.api.Algorithm algorithm = 7;</code>
     */
    public int getAlgorithmValue() {
      return algorithm_;
    }
    /**
     * <code>.api.Algorithm algorithm = 7;</code>
     */
    public api.Graphik.Algorithm getAlgorithm() {
      @SuppressWarnings("deprecation")
      api.Graphik.Algorithm result = api.Graphik.Algorithm.valueOf(algorithm_);
      return result == null ? api.Graphik.Algorithm.UNRECOGNIZED : result;
    }

    public static final int MAX_DEPTH_FIELD_NUMBER = 8;
    private long maxDepth_;
    /**
     * <pre>
     * maximum degree/depth of nodes to be visited during traversal
     * </pre>
     *
     * <code>uint64 max_depth = 8 [(.validator.field) = { ... }</code>
     */
    public long getMaxDepth() {
      return maxDepth_;
    }

    public static final int MAX_HOPS_FIELD_NUMBER = 9;
    private long maxHops_;
    /**
     * <pre>
     * maximum number of nodes to be visited during traversal
     * </pre>
     *
     * <code>uint64 max_hops = 9 [(.validator.field) = { ... }</code>
     */
    public long getMaxHops() {
      return maxHops_;
    }

    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 (root_ != null) {
        output.writeMessage(1, getRoot());
      }
      if (!getDocExpressionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, docExpression_);
      }
      if (!getConnectionExpressionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, connectionExpression_);
      }
      if (limit_ != 0L) {
        output.writeUInt64(4, limit_);
      }
      if (!getSortBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, sort_);
      }
      if (reverse_ != false) {
        output.writeBool(6, reverse_);
      }
      if (algorithm_ != api.Graphik.Algorithm.BFS.getNumber()) {
        output.writeEnum(7, algorithm_);
      }
      if (maxDepth_ != 0L) {
        output.writeUInt64(8, maxDepth_);
      }
      if (maxHops_ != 0L) {
        output.writeUInt64(9, maxHops_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (root_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getRoot());
      }
      if (!getDocExpressionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, docExpression_);
      }
      if (!getConnectionExpressionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, connectionExpression_);
      }
      if (limit_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(4, limit_);
      }
      if (!getSortBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, sort_);
      }
      if (reverse_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, reverse_);
      }
      if (algorithm_ != api.Graphik.Algorithm.BFS.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(7, algorithm_);
      }
      if (maxDepth_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(8, maxDepth_);
      }
      if (maxHops_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(9, maxHops_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && (hasRoot() == other.hasRoot());
      if (hasRoot()) {
        result = result && getRoot()
            .equals(other.getRoot());
      }
      result = result && getDocExpression()
          .equals(other.getDocExpression());
      result = result && getConnectionExpression()
          .equals(other.getConnectionExpression());
      result = result && (getLimit()
          == other.getLimit());
      result = result && getSort()
          .equals(other.getSort());
      result = result && (getReverse()
          == other.getReverse());
      result = result && algorithm_ == other.algorithm_;
      result = result && (getMaxDepth()
          == other.getMaxDepth());
      result = result && (getMaxHops()
          == other.getMaxHops());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRoot()) {
        hash = (37 * hash) + ROOT_FIELD_NUMBER;
        hash = (53 * hash) + getRoot().hashCode();
      }
      hash = (37 * hash) + DOC_EXPRESSION_FIELD_NUMBER;
      hash = (53 * hash) + getDocExpression().hashCode();
      hash = (37 * hash) + CONNECTION_EXPRESSION_FIELD_NUMBER;
      hash = (53 * hash) + getConnectionExpression().hashCode();
      hash = (37 * hash) + LIMIT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getLimit());
      hash = (37 * hash) + SORT_FIELD_NUMBER;
      hash = (53 * hash) + getSort().hashCode();
      hash = (37 * hash) + REVERSE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getReverse());
      hash = (37 * hash) + ALGORITHM_FIELD_NUMBER;
      hash = (53 * hash) + algorithm_;
      hash = (37 * hash) + MAX_DEPTH_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getMaxDepth());
      hash = (37 * hash) + MAX_HOPS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getMaxHops());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

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

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_TraverseFilter_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.TraverseFilter.class, api.Graphik.TraverseFilter.Builder.class);
      }

      // Construct using api.Graphik.TraverseFilter.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (rootBuilder_ == null) {
          root_ = null;
        } else {
          root_ = null;
          rootBuilder_ = null;
        }
        docExpression_ = "";

        connectionExpression_ = "";

        limit_ = 0L;

        sort_ = "";

        reverse_ = false;

        algorithm_ = 0;

        maxDepth_ = 0L;

        maxHops_ = 0L;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_TraverseFilter_descriptor;
      }

      @java.lang.Override
      public api.Graphik.TraverseFilter getDefaultInstanceForType() {
        return api.Graphik.TraverseFilter.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.TraverseFilter buildPartial() {
        api.Graphik.TraverseFilter result = new api.Graphik.TraverseFilter(this);
        if (rootBuilder_ == null) {
          result.root_ = root_;
        } else {
          result.root_ = rootBuilder_.build();
        }
        result.docExpression_ = docExpression_;
        result.connectionExpression_ = connectionExpression_;
        result.limit_ = limit_;
        result.sort_ = sort_;
        result.reverse_ = reverse_;
        result.algorithm_ = algorithm_;
        result.maxDepth_ = maxDepth_;
        result.maxHops_ = maxHops_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.TraverseFilter other) {
        if (other == api.Graphik.TraverseFilter.getDefaultInstance()) return this;
        if (other.hasRoot()) {
          mergeRoot(other.getRoot());
        }
        if (!other.getDocExpression().isEmpty()) {
          docExpression_ = other.docExpression_;
          onChanged();
        }
        if (!other.getConnectionExpression().isEmpty()) {
          connectionExpression_ = other.connectionExpression_;
          onChanged();
        }
        if (other.getLimit() != 0L) {
          setLimit(other.getLimit());
        }
        if (!other.getSort().isEmpty()) {
          sort_ = other.sort_;
          onChanged();
        }
        if (other.getReverse() != false) {
          setReverse(other.getReverse());
        }
        if (other.algorithm_ != 0) {
          setAlgorithmValue(other.getAlgorithmValue());
        }
        if (other.getMaxDepth() != 0L) {
          setMaxDepth(other.getMaxDepth());
        }
        if (other.getMaxHops() != 0L) {
          setMaxHops(other.getMaxHops());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.TraverseFilter parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.TraverseFilter) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private api.Graphik.Ref root_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> rootBuilder_;
      /**
       * <code>.api.Ref root = 1 [(.validator.field) = { ... }</code>
       */
      public boolean hasRoot() {
        return rootBuilder_ != null || root_ != null;
      }
      /**
       * <code>.api.Ref root = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref getRoot() {
        if (rootBuilder_ == null) {
          return root_ == null ? api.Graphik.Ref.getDefaultInstance() : root_;
        } else {
          return rootBuilder_.getMessage();
        }
      }
      /**
       * <code>.api.Ref root = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setRoot(api.Graphik.Ref value) {
        if (rootBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          root_ = value;
          onChanged();
        } else {
          rootBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.api.Ref root = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setRoot(
          api.Graphik.Ref.Builder builderForValue) {
        if (rootBuilder_ == null) {
          root_ = builderForValue.build();
          onChanged();
        } else {
          rootBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.api.Ref root = 1 [(.validator.field) = { ... }</code>
       */
      public Builder mergeRoot(api.Graphik.Ref value) {
        if (rootBuilder_ == null) {
          if (root_ != null) {
            root_ =
              api.Graphik.Ref.newBuilder(root_).mergeFrom(value).buildPartial();
          } else {
            root_ = value;
          }
          onChanged();
        } else {
          rootBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.api.Ref root = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearRoot() {
        if (rootBuilder_ == null) {
          root_ = null;
          onChanged();
        } else {
          root_ = null;
          rootBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.api.Ref root = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref.Builder getRootBuilder() {
        
        onChanged();
        return getRootFieldBuilder().getBuilder();
      }
      /**
       * <code>.api.Ref root = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.RefOrBuilder getRootOrBuilder() {
        if (rootBuilder_ != null) {
          return rootBuilder_.getMessageOrBuilder();
        } else {
          return root_ == null ?
              api.Graphik.Ref.getDefaultInstance() : root_;
        }
      }
      /**
       * <code>.api.Ref root = 1 [(.validator.field) = { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> 
          getRootFieldBuilder() {
        if (rootBuilder_ == null) {
          rootBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder>(
                  getRoot(),
                  getParentForChildren(),
                  isClean());
          root_ = null;
        }
        return rootBuilder_;
      }

      private java.lang.Object docExpression_ = "";
      /**
       * <code>string doc_expression = 2;</code>
       */
      public java.lang.String getDocExpression() {
        java.lang.Object ref = docExpression_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          docExpression_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string doc_expression = 2;</code>
       */
      public com.google.protobuf.ByteString
          getDocExpressionBytes() {
        java.lang.Object ref = docExpression_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          docExpression_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string doc_expression = 2;</code>
       */
      public Builder setDocExpression(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        docExpression_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string doc_expression = 2;</code>
       */
      public Builder clearDocExpression() {
        
        docExpression_ = getDefaultInstance().getDocExpression();
        onChanged();
        return this;
      }
      /**
       * <code>string doc_expression = 2;</code>
       */
      public Builder setDocExpressionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        docExpression_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object connectionExpression_ = "";
      /**
       * <code>string connection_expression = 3;</code>
       */
      public java.lang.String getConnectionExpression() {
        java.lang.Object ref = connectionExpression_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          connectionExpression_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string connection_expression = 3;</code>
       */
      public com.google.protobuf.ByteString
          getConnectionExpressionBytes() {
        java.lang.Object ref = connectionExpression_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          connectionExpression_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string connection_expression = 3;</code>
       */
      public Builder setConnectionExpression(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        connectionExpression_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string connection_expression = 3;</code>
       */
      public Builder clearConnectionExpression() {
        
        connectionExpression_ = getDefaultInstance().getConnectionExpression();
        onChanged();
        return this;
      }
      /**
       * <code>string connection_expression = 3;</code>
       */
      public Builder setConnectionExpressionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        connectionExpression_ = value;
        onChanged();
        return this;
      }

      private long limit_ ;
      /**
       * <code>uint64 limit = 4 [(.validator.field) = { ... }</code>
       */
      public long getLimit() {
        return limit_;
      }
      /**
       * <code>uint64 limit = 4 [(.validator.field) = { ... }</code>
       */
      public Builder setLimit(long value) {
        
        limit_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint64 limit = 4 [(.validator.field) = { ... }</code>
       */
      public Builder clearLimit() {
        
        limit_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object sort_ = "";
      /**
       * <pre>
       * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
       * </pre>
       *
       * <code>string sort = 5 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getSort() {
        java.lang.Object ref = sort_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          sort_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
       * </pre>
       *
       * <code>string sort = 5 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getSortBytes() {
        java.lang.Object ref = sort_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          sort_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
       * </pre>
       *
       * <code>string sort = 5 [(.validator.field) = { ... }</code>
       */
      public Builder setSort(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        sort_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
       * </pre>
       *
       * <code>string sort = 5 [(.validator.field) = { ... }</code>
       */
      public Builder clearSort() {
        
        sort_ = getDefaultInstance().getSort();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
       * </pre>
       *
       * <code>string sort = 5 [(.validator.field) = { ... }</code>
       */
      public Builder setSortBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        sort_ = value;
        onChanged();
        return this;
      }

      private boolean reverse_ ;
      /**
       * <code>bool reverse = 6;</code>
       */
      public boolean getReverse() {
        return reverse_;
      }
      /**
       * <code>bool reverse = 6;</code>
       */
      public Builder setReverse(boolean value) {
        
        reverse_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool reverse = 6;</code>
       */
      public Builder clearReverse() {
        
        reverse_ = false;
        onChanged();
        return this;
      }

      private int algorithm_ = 0;
      /**
       * <code>.api.Algorithm algorithm = 7;</code>
       */
      public int getAlgorithmValue() {
        return algorithm_;
      }
      /**
       * <code>.api.Algorithm algorithm = 7;</code>
       */
      public Builder setAlgorithmValue(int value) {
        algorithm_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.api.Algorithm algorithm = 7;</code>
       */
      public api.Graphik.Algorithm getAlgorithm() {
        @SuppressWarnings("deprecation")
        api.Graphik.Algorithm result = api.Graphik.Algorithm.valueOf(algorithm_);
        return result == null ? api.Graphik.Algorithm.UNRECOGNIZED : result;
      }
      /**
       * <code>.api.Algorithm algorithm = 7;</code>
       */
      public Builder setAlgorithm(api.Graphik.Algorithm value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        algorithm_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.api.Algorithm algorithm = 7;</code>
       */
      public Builder clearAlgorithm() {
        
        algorithm_ = 0;
        onChanged();
        return this;
      }

      private long maxDepth_ ;
      /**
       * <pre>
       * maximum degree/depth of nodes to be visited during traversal
       * </pre>
       *
       * <code>uint64 max_depth = 8 [(.validator.field) = { ... }</code>
       */
      public long getMaxDepth() {
        return maxDepth_;
      }
      /**
       * <pre>
       * maximum degree/depth of nodes to be visited during traversal
       * </pre>
       *
       * <code>uint64 max_depth = 8 [(.validator.field) = { ... }</code>
       */
      public Builder setMaxDepth(long value) {
        
        maxDepth_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * maximum degree/depth of nodes to be visited during traversal
       * </pre>
       *
       * <code>uint64 max_depth = 8 [(.validator.field) = { ... }</code>
       */
      public Builder clearMaxDepth() {
        
        maxDepth_ = 0L;
        onChanged();
        return this;
      }

      private long maxHops_ ;
      /**
       * <pre>
       * maximum number of nodes to be visited during traversal
       * </pre>
       *
       * <code>uint64 max_hops = 9 [(.validator.field) = { ... }</code>
       */
      public long getMaxHops() {
        return maxHops_;
      }
      /**
       * <pre>
       * maximum number of nodes to be visited during traversal
       * </pre>
       *
       * <code>uint64 max_hops = 9 [(.validator.field) = { ... }</code>
       */
      public Builder setMaxHops(long value) {
        
        maxHops_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * maximum number of nodes to be visited during traversal
       * </pre>
       *
       * <code>uint64 max_hops = 9 [(.validator.field) = { ... }</code>
       */
      public Builder clearMaxHops() {
        
        maxHops_ = 0L;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.TraverseFilter)
    }

    // @@protoc_insertion_point(class_scope:api.TraverseFilter)
    private static final api.Graphik.TraverseFilter DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.TraverseFilter();
    }

    public static api.Graphik.TraverseFilter getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<TraverseFilter>
        PARSER = new com.google.protobuf.AbstractParser<TraverseFilter>() {
      @java.lang.Override
      public TraverseFilter parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new TraverseFilter(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.TraverseFilter getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface TraverseMeFilterOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.TraverseMeFilter)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string doc_expression = 1;</code>
     */
    java.lang.String getDocExpression();
    /**
     * <code>string doc_expression = 1;</code>
     */
    com.google.protobuf.ByteString
        getDocExpressionBytes();

    /**
     * <code>string connection_expression = 2;</code>
     */
    java.lang.String getConnectionExpression();
    /**
     * <code>string connection_expression = 2;</code>
     */
    com.google.protobuf.ByteString
        getConnectionExpressionBytes();

    /**
     * <code>uint64 limit = 3 [(.validator.field) = { ... }</code>
     */
    long getLimit();

    /**
     * <pre>
     * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
     * </pre>
     *
     * <code>string sort = 4 [(.validator.field) = { ... }</code>
     */
    java.lang.String getSort();
    /**
     * <pre>
     * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
     * </pre>
     *
     * <code>string sort = 4 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getSortBytes();

    /**
     * <code>bool reverse = 5;</code>
     */
    boolean getReverse();

    /**
     * <code>.api.Algorithm algorithm = 6;</code>
     */
    int getAlgorithmValue();
    /**
     * <code>.api.Algorithm algorithm = 6;</code>
     */
    api.Graphik.Algorithm getAlgorithm();

    /**
     * <pre>
     * maximum degree/depth of nodes to be visited during traversal
     * </pre>
     *
     * <code>uint64 max_depth = 7 [(.validator.field) = { ... }</code>
     */
    long getMaxDepth();

    /**
     * <pre>
     * maximum number of nodes to be visited during traversal
     * </pre>
     *
     * <code>uint64 max_hops = 8 [(.validator.field) = { ... }</code>
     */
    long getMaxHops();
  }
  /**
   * Protobuf type {@code api.TraverseMeFilter}
   */
  public  static final class TraverseMeFilter extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.TraverseMeFilter)
      TraverseMeFilterOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use TraverseMeFilter.newBuilder() to construct.
    private TraverseMeFilter(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private TraverseMeFilter() {
      docExpression_ = "";
      connectionExpression_ = "";
      limit_ = 0L;
      sort_ = "";
      reverse_ = false;
      algorithm_ = 0;
      maxDepth_ = 0L;
      maxHops_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private TraverseMeFilter(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              docExpression_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              connectionExpression_ = s;
              break;
            }
            case 24: {

              limit_ = input.readUInt64();
              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();

              sort_ = s;
              break;
            }
            case 40: {

              reverse_ = input.readBool();
              break;
            }
            case 48: {
              int rawValue = input.readEnum();

              algorithm_ = rawValue;
              break;
            }
            case 56: {

              maxDepth_ = input.readUInt64();
              break;
            }
            case 64: {

              maxHops_ = input.readUInt64();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_TraverseMeFilter_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_TraverseMeFilter_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.TraverseMeFilter.class, api.Graphik.TraverseMeFilter.Builder.class);
    }

    public static final int DOC_EXPRESSION_FIELD_NUMBER = 1;
    private volatile java.lang.Object docExpression_;
    /**
     * <code>string doc_expression = 1;</code>
     */
    public java.lang.String getDocExpression() {
      java.lang.Object ref = docExpression_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        docExpression_ = s;
        return s;
      }
    }
    /**
     * <code>string doc_expression = 1;</code>
     */
    public com.google.protobuf.ByteString
        getDocExpressionBytes() {
      java.lang.Object ref = docExpression_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        docExpression_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CONNECTION_EXPRESSION_FIELD_NUMBER = 2;
    private volatile java.lang.Object connectionExpression_;
    /**
     * <code>string connection_expression = 2;</code>
     */
    public java.lang.String getConnectionExpression() {
      java.lang.Object ref = connectionExpression_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        connectionExpression_ = s;
        return s;
      }
    }
    /**
     * <code>string connection_expression = 2;</code>
     */
    public com.google.protobuf.ByteString
        getConnectionExpressionBytes() {
      java.lang.Object ref = connectionExpression_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        connectionExpression_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int LIMIT_FIELD_NUMBER = 3;
    private long limit_;
    /**
     * <code>uint64 limit = 3 [(.validator.field) = { ... }</code>
     */
    public long getLimit() {
      return limit_;
    }

    public static final int SORT_FIELD_NUMBER = 4;
    private volatile java.lang.Object sort_;
    /**
     * <pre>
     * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
     * </pre>
     *
     * <code>string sort = 4 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getSort() {
      java.lang.Object ref = sort_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        sort_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
     * </pre>
     *
     * <code>string sort = 4 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getSortBytes() {
      java.lang.Object ref = sort_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        sort_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int REVERSE_FIELD_NUMBER = 5;
    private boolean reverse_;
    /**
     * <code>bool reverse = 5;</code>
     */
    public boolean getReverse() {
      return reverse_;
    }

    public static final int ALGORITHM_FIELD_NUMBER = 6;
    private int algorithm_;
    /**
     * <code>.api.Algorithm algorithm = 6;</code>
     */
    public int getAlgorithmValue() {
      return algorithm_;
    }
    /**
     * <code>.api.Algorithm algorithm = 6;</code>
     */
    public api.Graphik.Algorithm getAlgorithm() {
      @SuppressWarnings("deprecation")
      api.Graphik.Algorithm result = api.Graphik.Algorithm.valueOf(algorithm_);
      return result == null ? api.Graphik.Algorithm.UNRECOGNIZED : result;
    }

    public static final int MAX_DEPTH_FIELD_NUMBER = 7;
    private long maxDepth_;
    /**
     * <pre>
     * maximum degree/depth of nodes to be visited during traversal
     * </pre>
     *
     * <code>uint64 max_depth = 7 [(.validator.field) = { ... }</code>
     */
    public long getMaxDepth() {
      return maxDepth_;
    }

    public static final int MAX_HOPS_FIELD_NUMBER = 8;
    private long maxHops_;
    /**
     * <pre>
     * maximum number of nodes to be visited during traversal
     * </pre>
     *
     * <code>uint64 max_hops = 8 [(.validator.field) = { ... }</code>
     */
    public long getMaxHops() {
      return maxHops_;
    }

    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 (!getDocExpressionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, docExpression_);
      }
      if (!getConnectionExpressionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, connectionExpression_);
      }
      if (limit_ != 0L) {
        output.writeUInt64(3, limit_);
      }
      if (!getSortBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, sort_);
      }
      if (reverse_ != false) {
        output.writeBool(5, reverse_);
      }
      if (algorithm_ != api.Graphik.Algorithm.BFS.getNumber()) {
        output.writeEnum(6, algorithm_);
      }
      if (maxDepth_ != 0L) {
        output.writeUInt64(7, maxDepth_);
      }
      if (maxHops_ != 0L) {
        output.writeUInt64(8, maxHops_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getDocExpressionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, docExpression_);
      }
      if (!getConnectionExpressionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, connectionExpression_);
      }
      if (limit_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(3, limit_);
      }
      if (!getSortBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, sort_);
      }
      if (reverse_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, reverse_);
      }
      if (algorithm_ != api.Graphik.Algorithm.BFS.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(6, algorithm_);
      }
      if (maxDepth_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(7, maxDepth_);
      }
      if (maxHops_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(8, maxHops_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getDocExpression()
          .equals(other.getDocExpression());
      result = result && getConnectionExpression()
          .equals(other.getConnectionExpression());
      result = result && (getLimit()
          == other.getLimit());
      result = result && getSort()
          .equals(other.getSort());
      result = result && (getReverse()
          == other.getReverse());
      result = result && algorithm_ == other.algorithm_;
      result = result && (getMaxDepth()
          == other.getMaxDepth());
      result = result && (getMaxHops()
          == other.getMaxHops());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + DOC_EXPRESSION_FIELD_NUMBER;
      hash = (53 * hash) + getDocExpression().hashCode();
      hash = (37 * hash) + CONNECTION_EXPRESSION_FIELD_NUMBER;
      hash = (53 * hash) + getConnectionExpression().hashCode();
      hash = (37 * hash) + LIMIT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getLimit());
      hash = (37 * hash) + SORT_FIELD_NUMBER;
      hash = (53 * hash) + getSort().hashCode();
      hash = (37 * hash) + REVERSE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getReverse());
      hash = (37 * hash) + ALGORITHM_FIELD_NUMBER;
      hash = (53 * hash) + algorithm_;
      hash = (37 * hash) + MAX_DEPTH_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getMaxDepth());
      hash = (37 * hash) + MAX_HOPS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getMaxHops());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

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

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_TraverseMeFilter_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.TraverseMeFilter.class, api.Graphik.TraverseMeFilter.Builder.class);
      }

      // Construct using api.Graphik.TraverseMeFilter.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        docExpression_ = "";

        connectionExpression_ = "";

        limit_ = 0L;

        sort_ = "";

        reverse_ = false;

        algorithm_ = 0;

        maxDepth_ = 0L;

        maxHops_ = 0L;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_TraverseMeFilter_descriptor;
      }

      @java.lang.Override
      public api.Graphik.TraverseMeFilter getDefaultInstanceForType() {
        return api.Graphik.TraverseMeFilter.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.TraverseMeFilter buildPartial() {
        api.Graphik.TraverseMeFilter result = new api.Graphik.TraverseMeFilter(this);
        result.docExpression_ = docExpression_;
        result.connectionExpression_ = connectionExpression_;
        result.limit_ = limit_;
        result.sort_ = sort_;
        result.reverse_ = reverse_;
        result.algorithm_ = algorithm_;
        result.maxDepth_ = maxDepth_;
        result.maxHops_ = maxHops_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.TraverseMeFilter other) {
        if (other == api.Graphik.TraverseMeFilter.getDefaultInstance()) return this;
        if (!other.getDocExpression().isEmpty()) {
          docExpression_ = other.docExpression_;
          onChanged();
        }
        if (!other.getConnectionExpression().isEmpty()) {
          connectionExpression_ = other.connectionExpression_;
          onChanged();
        }
        if (other.getLimit() != 0L) {
          setLimit(other.getLimit());
        }
        if (!other.getSort().isEmpty()) {
          sort_ = other.sort_;
          onChanged();
        }
        if (other.getReverse() != false) {
          setReverse(other.getReverse());
        }
        if (other.algorithm_ != 0) {
          setAlgorithmValue(other.getAlgorithmValue());
        }
        if (other.getMaxDepth() != 0L) {
          setMaxDepth(other.getMaxDepth());
        }
        if (other.getMaxHops() != 0L) {
          setMaxHops(other.getMaxHops());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.TraverseMeFilter parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.TraverseMeFilter) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object docExpression_ = "";
      /**
       * <code>string doc_expression = 1;</code>
       */
      public java.lang.String getDocExpression() {
        java.lang.Object ref = docExpression_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          docExpression_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string doc_expression = 1;</code>
       */
      public com.google.protobuf.ByteString
          getDocExpressionBytes() {
        java.lang.Object ref = docExpression_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          docExpression_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string doc_expression = 1;</code>
       */
      public Builder setDocExpression(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        docExpression_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string doc_expression = 1;</code>
       */
      public Builder clearDocExpression() {
        
        docExpression_ = getDefaultInstance().getDocExpression();
        onChanged();
        return this;
      }
      /**
       * <code>string doc_expression = 1;</code>
       */
      public Builder setDocExpressionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        docExpression_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object connectionExpression_ = "";
      /**
       * <code>string connection_expression = 2;</code>
       */
      public java.lang.String getConnectionExpression() {
        java.lang.Object ref = connectionExpression_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          connectionExpression_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string connection_expression = 2;</code>
       */
      public com.google.protobuf.ByteString
          getConnectionExpressionBytes() {
        java.lang.Object ref = connectionExpression_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          connectionExpression_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string connection_expression = 2;</code>
       */
      public Builder setConnectionExpression(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        connectionExpression_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string connection_expression = 2;</code>
       */
      public Builder clearConnectionExpression() {
        
        connectionExpression_ = getDefaultInstance().getConnectionExpression();
        onChanged();
        return this;
      }
      /**
       * <code>string connection_expression = 2;</code>
       */
      public Builder setConnectionExpressionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        connectionExpression_ = value;
        onChanged();
        return this;
      }

      private long limit_ ;
      /**
       * <code>uint64 limit = 3 [(.validator.field) = { ... }</code>
       */
      public long getLimit() {
        return limit_;
      }
      /**
       * <code>uint64 limit = 3 [(.validator.field) = { ... }</code>
       */
      public Builder setLimit(long value) {
        
        limit_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint64 limit = 3 [(.validator.field) = { ... }</code>
       */
      public Builder clearLimit() {
        
        limit_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object sort_ = "";
      /**
       * <pre>
       * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
       * </pre>
       *
       * <code>string sort = 4 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getSort() {
        java.lang.Object ref = sort_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          sort_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
       * </pre>
       *
       * <code>string sort = 4 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getSortBytes() {
        java.lang.Object ref = sort_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          sort_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
       * </pre>
       *
       * <code>string sort = 4 [(.validator.field) = { ... }</code>
       */
      public Builder setSort(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        sort_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
       * </pre>
       *
       * <code>string sort = 4 [(.validator.field) = { ... }</code>
       */
      public Builder clearSort() {
        
        sort_ = getDefaultInstance().getSort();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * custom sorting of the results. (validator.field) = {regex : "((^|, )(|ref.gid|ref.gtype|^attributes.(.*)))+$"}
       * </pre>
       *
       * <code>string sort = 4 [(.validator.field) = { ... }</code>
       */
      public Builder setSortBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        sort_ = value;
        onChanged();
        return this;
      }

      private boolean reverse_ ;
      /**
       * <code>bool reverse = 5;</code>
       */
      public boolean getReverse() {
        return reverse_;
      }
      /**
       * <code>bool reverse = 5;</code>
       */
      public Builder setReverse(boolean value) {
        
        reverse_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool reverse = 5;</code>
       */
      public Builder clearReverse() {
        
        reverse_ = false;
        onChanged();
        return this;
      }

      private int algorithm_ = 0;
      /**
       * <code>.api.Algorithm algorithm = 6;</code>
       */
      public int getAlgorithmValue() {
        return algorithm_;
      }
      /**
       * <code>.api.Algorithm algorithm = 6;</code>
       */
      public Builder setAlgorithmValue(int value) {
        algorithm_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.api.Algorithm algorithm = 6;</code>
       */
      public api.Graphik.Algorithm getAlgorithm() {
        @SuppressWarnings("deprecation")
        api.Graphik.Algorithm result = api.Graphik.Algorithm.valueOf(algorithm_);
        return result == null ? api.Graphik.Algorithm.UNRECOGNIZED : result;
      }
      /**
       * <code>.api.Algorithm algorithm = 6;</code>
       */
      public Builder setAlgorithm(api.Graphik.Algorithm value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        algorithm_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.api.Algorithm algorithm = 6;</code>
       */
      public Builder clearAlgorithm() {
        
        algorithm_ = 0;
        onChanged();
        return this;
      }

      private long maxDepth_ ;
      /**
       * <pre>
       * maximum degree/depth of nodes to be visited during traversal
       * </pre>
       *
       * <code>uint64 max_depth = 7 [(.validator.field) = { ... }</code>
       */
      public long getMaxDepth() {
        return maxDepth_;
      }
      /**
       * <pre>
       * maximum degree/depth of nodes to be visited during traversal
       * </pre>
       *
       * <code>uint64 max_depth = 7 [(.validator.field) = { ... }</code>
       */
      public Builder setMaxDepth(long value) {
        
        maxDepth_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * maximum degree/depth of nodes to be visited during traversal
       * </pre>
       *
       * <code>uint64 max_depth = 7 [(.validator.field) = { ... }</code>
       */
      public Builder clearMaxDepth() {
        
        maxDepth_ = 0L;
        onChanged();
        return this;
      }

      private long maxHops_ ;
      /**
       * <pre>
       * maximum number of nodes to be visited during traversal
       * </pre>
       *
       * <code>uint64 max_hops = 8 [(.validator.field) = { ... }</code>
       */
      public long getMaxHops() {
        return maxHops_;
      }
      /**
       * <pre>
       * maximum number of nodes to be visited during traversal
       * </pre>
       *
       * <code>uint64 max_hops = 8 [(.validator.field) = { ... }</code>
       */
      public Builder setMaxHops(long value) {
        
        maxHops_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * maximum number of nodes to be visited during traversal
       * </pre>
       *
       * <code>uint64 max_hops = 8 [(.validator.field) = { ... }</code>
       */
      public Builder clearMaxHops() {
        
        maxHops_ = 0L;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.TraverseMeFilter)
    }

    // @@protoc_insertion_point(class_scope:api.TraverseMeFilter)
    private static final api.Graphik.TraverseMeFilter DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.TraverseMeFilter();
    }

    public static api.Graphik.TraverseMeFilter getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<TraverseMeFilter>
        PARSER = new com.google.protobuf.AbstractParser<TraverseMeFilter>() {
      @java.lang.Override
      public TraverseMeFilter parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new TraverseMeFilter(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.TraverseMeFilter getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface IndexConstructorOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.IndexConstructor)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * name is the unique name of the Index
     * </pre>
     *
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    java.lang.String getName();
    /**
     * <pre>
     * name is the unique name of the Index
     * </pre>
     *
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <pre>
     * gtype is the doc/connection type to be filtered
     * </pre>
     *
     * <code>string gtype = 3 [(.validator.field) = { ... }</code>
     */
    java.lang.String getGtype();
    /**
     * <pre>
     * gtype is the doc/connection type to be filtered
     * </pre>
     *
     * <code>string gtype = 3 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getGtypeBytes();

    /**
     * <pre>
     * expression is a CEL expression used to filter connections/modes
     * </pre>
     *
     * <code>string expression = 4 [(.validator.field) = { ... }</code>
     */
    java.lang.String getExpression();
    /**
     * <pre>
     * expression is a CEL expression used to filter connections/modes
     * </pre>
     *
     * <code>string expression = 4 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getExpressionBytes();

    /**
     * <pre>
     * if target_docs is true, this index will be applied to documents.
     * </pre>
     *
     * <code>bool target_docs = 6;</code>
     */
    boolean getTargetDocs();

    /**
     * <pre>
     * if target_connections is true, this index will be applied to connections.
     * </pre>
     *
     * <code>bool target_connections = 7;</code>
     */
    boolean getTargetConnections();
  }
  /**
   * <pre>
   * IndexConstructor is used to construct Indexes
   * </pre>
   *
   * Protobuf type {@code api.IndexConstructor}
   */
  public  static final class IndexConstructor extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.IndexConstructor)
      IndexConstructorOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use IndexConstructor.newBuilder() to construct.
    private IndexConstructor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private IndexConstructor() {
      name_ = "";
      gtype_ = "";
      expression_ = "";
      targetDocs_ = false;
      targetConnections_ = false;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private IndexConstructor(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              name_ = s;
              break;
            }
            case 26: {
              java.lang.String s = input.readStringRequireUtf8();

              gtype_ = s;
              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();

              expression_ = s;
              break;
            }
            case 48: {

              targetDocs_ = input.readBool();
              break;
            }
            case 56: {

              targetConnections_ = input.readBool();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_IndexConstructor_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_IndexConstructor_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.IndexConstructor.class, api.Graphik.IndexConstructor.Builder.class);
    }

    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     * <pre>
     * name is the unique name of the Index
     * </pre>
     *
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * name is the unique name of the Index
     * </pre>
     *
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int GTYPE_FIELD_NUMBER = 3;
    private volatile java.lang.Object gtype_;
    /**
     * <pre>
     * gtype is the doc/connection type to be filtered
     * </pre>
     *
     * <code>string gtype = 3 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getGtype() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        gtype_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * gtype is the doc/connection type to be filtered
     * </pre>
     *
     * <code>string gtype = 3 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getGtypeBytes() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gtype_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int EXPRESSION_FIELD_NUMBER = 4;
    private volatile java.lang.Object expression_;
    /**
     * <pre>
     * expression is a CEL expression used to filter connections/modes
     * </pre>
     *
     * <code>string expression = 4 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getExpression() {
      java.lang.Object ref = expression_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        expression_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * expression is a CEL expression used to filter connections/modes
     * </pre>
     *
     * <code>string expression = 4 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getExpressionBytes() {
      java.lang.Object ref = expression_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        expression_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TARGET_DOCS_FIELD_NUMBER = 6;
    private boolean targetDocs_;
    /**
     * <pre>
     * if target_docs is true, this index will be applied to documents.
     * </pre>
     *
     * <code>bool target_docs = 6;</code>
     */
    public boolean getTargetDocs() {
      return targetDocs_;
    }

    public static final int TARGET_CONNECTIONS_FIELD_NUMBER = 7;
    private boolean targetConnections_;
    /**
     * <pre>
     * if target_connections is true, this index will be applied to connections.
     * </pre>
     *
     * <code>bool target_connections = 7;</code>
     */
    public boolean getTargetConnections() {
      return targetConnections_;
    }

    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 (!getNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
      }
      if (!getGtypeBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, gtype_);
      }
      if (!getExpressionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, expression_);
      }
      if (targetDocs_ != false) {
        output.writeBool(6, targetDocs_);
      }
      if (targetConnections_ != false) {
        output.writeBool(7, targetConnections_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
      }
      if (!getGtypeBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, gtype_);
      }
      if (!getExpressionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, expression_);
      }
      if (targetDocs_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, targetDocs_);
      }
      if (targetConnections_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(7, targetConnections_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getName()
          .equals(other.getName());
      result = result && getGtype()
          .equals(other.getGtype());
      result = result && getExpression()
          .equals(other.getExpression());
      result = result && (getTargetDocs()
          == other.getTargetDocs());
      result = result && (getTargetConnections()
          == other.getTargetConnections());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      hash = (37 * hash) + GTYPE_FIELD_NUMBER;
      hash = (53 * hash) + getGtype().hashCode();
      hash = (37 * hash) + EXPRESSION_FIELD_NUMBER;
      hash = (53 * hash) + getExpression().hashCode();
      hash = (37 * hash) + TARGET_DOCS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getTargetDocs());
      hash = (37 * hash) + TARGET_CONNECTIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getTargetConnections());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.IndexConstructor parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.IndexConstructor parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.IndexConstructor parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.IndexConstructor parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.IndexConstructor parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.IndexConstructor parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.IndexConstructor parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.IndexConstructor 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 api.Graphik.IndexConstructor parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.IndexConstructor 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 api.Graphik.IndexConstructor parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.IndexConstructor 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(api.Graphik.IndexConstructor 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>
     * IndexConstructor is used to construct Indexes
     * </pre>
     *
     * Protobuf type {@code api.IndexConstructor}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.IndexConstructor)
        api.Graphik.IndexConstructorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_IndexConstructor_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_IndexConstructor_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.IndexConstructor.class, api.Graphik.IndexConstructor.Builder.class);
      }

      // Construct using api.Graphik.IndexConstructor.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        name_ = "";

        gtype_ = "";

        expression_ = "";

        targetDocs_ = false;

        targetConnections_ = false;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_IndexConstructor_descriptor;
      }

      @java.lang.Override
      public api.Graphik.IndexConstructor getDefaultInstanceForType() {
        return api.Graphik.IndexConstructor.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.IndexConstructor buildPartial() {
        api.Graphik.IndexConstructor result = new api.Graphik.IndexConstructor(this);
        result.name_ = name_;
        result.gtype_ = gtype_;
        result.expression_ = expression_;
        result.targetDocs_ = targetDocs_;
        result.targetConnections_ = targetConnections_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.IndexConstructor other) {
        if (other == api.Graphik.IndexConstructor.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (!other.getGtype().isEmpty()) {
          gtype_ = other.gtype_;
          onChanged();
        }
        if (!other.getExpression().isEmpty()) {
          expression_ = other.expression_;
          onChanged();
        }
        if (other.getTargetDocs() != false) {
          setTargetDocs(other.getTargetDocs());
        }
        if (other.getTargetConnections() != false) {
          setTargetConnections(other.getTargetConnections());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.IndexConstructor parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.IndexConstructor) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <pre>
       * name is the unique name of the Index
       * </pre>
       *
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * name is the unique name of the Index
       * </pre>
       *
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * name is the unique name of the Index
       * </pre>
       *
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * name is the unique name of the Index
       * </pre>
       *
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearName() {
        
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * name is the unique name of the Index
       * </pre>
       *
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        name_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object gtype_ = "";
      /**
       * <pre>
       * gtype is the doc/connection type to be filtered
       * </pre>
       *
       * <code>string gtype = 3 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getGtype() {
        java.lang.Object ref = gtype_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          gtype_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * gtype is the doc/connection type to be filtered
       * </pre>
       *
       * <code>string gtype = 3 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getGtypeBytes() {
        java.lang.Object ref = gtype_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gtype_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * gtype is the doc/connection type to be filtered
       * </pre>
       *
       * <code>string gtype = 3 [(.validator.field) = { ... }</code>
       */
      public Builder setGtype(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        gtype_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * gtype is the doc/connection type to be filtered
       * </pre>
       *
       * <code>string gtype = 3 [(.validator.field) = { ... }</code>
       */
      public Builder clearGtype() {
        
        gtype_ = getDefaultInstance().getGtype();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * gtype is the doc/connection type to be filtered
       * </pre>
       *
       * <code>string gtype = 3 [(.validator.field) = { ... }</code>
       */
      public Builder setGtypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        gtype_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object expression_ = "";
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 4 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getExpression() {
        java.lang.Object ref = expression_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          expression_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 4 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getExpressionBytes() {
        java.lang.Object ref = expression_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          expression_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 4 [(.validator.field) = { ... }</code>
       */
      public Builder setExpression(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        expression_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 4 [(.validator.field) = { ... }</code>
       */
      public Builder clearExpression() {
        
        expression_ = getDefaultInstance().getExpression();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 4 [(.validator.field) = { ... }</code>
       */
      public Builder setExpressionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        expression_ = value;
        onChanged();
        return this;
      }

      private boolean targetDocs_ ;
      /**
       * <pre>
       * if target_docs is true, this index will be applied to documents.
       * </pre>
       *
       * <code>bool target_docs = 6;</code>
       */
      public boolean getTargetDocs() {
        return targetDocs_;
      }
      /**
       * <pre>
       * if target_docs is true, this index will be applied to documents.
       * </pre>
       *
       * <code>bool target_docs = 6;</code>
       */
      public Builder setTargetDocs(boolean value) {
        
        targetDocs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * if target_docs is true, this index will be applied to documents.
       * </pre>
       *
       * <code>bool target_docs = 6;</code>
       */
      public Builder clearTargetDocs() {
        
        targetDocs_ = false;
        onChanged();
        return this;
      }

      private boolean targetConnections_ ;
      /**
       * <pre>
       * if target_connections is true, this index will be applied to connections.
       * </pre>
       *
       * <code>bool target_connections = 7;</code>
       */
      public boolean getTargetConnections() {
        return targetConnections_;
      }
      /**
       * <pre>
       * if target_connections is true, this index will be applied to connections.
       * </pre>
       *
       * <code>bool target_connections = 7;</code>
       */
      public Builder setTargetConnections(boolean value) {
        
        targetConnections_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * if target_connections is true, this index will be applied to connections.
       * </pre>
       *
       * <code>bool target_connections = 7;</code>
       */
      public Builder clearTargetConnections() {
        
        targetConnections_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.IndexConstructor)
    }

    // @@protoc_insertion_point(class_scope:api.IndexConstructor)
    private static final api.Graphik.IndexConstructor DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.IndexConstructor();
    }

    public static api.Graphik.IndexConstructor getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<IndexConstructor>
        PARSER = new com.google.protobuf.AbstractParser<IndexConstructor>() {
      @java.lang.Override
      public IndexConstructor parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new IndexConstructor(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.IndexConstructor getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AuthTargetOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.AuthTarget)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * user is the user making the request
     * </pre>
     *
     * <code>.api.Doc user = 1 [(.validator.field) = { ... }</code>
     */
    boolean hasUser();
    /**
     * <pre>
     * user is the user making the request
     * </pre>
     *
     * <code>.api.Doc user = 1 [(.validator.field) = { ... }</code>
     */
    api.Graphik.Doc getUser();
    /**
     * <pre>
     * user is the user making the request
     * </pre>
     *
     * <code>.api.Doc user = 1 [(.validator.field) = { ... }</code>
     */
    api.Graphik.DocOrBuilder getUserOrBuilder();

    /**
     * <pre>
     * target is the request/response represented as a Struct
     * </pre>
     *
     * <code>.google.protobuf.Struct target = 2;</code>
     */
    boolean hasTarget();
    /**
     * <pre>
     * target is the request/response represented as a Struct
     * </pre>
     *
     * <code>.google.protobuf.Struct target = 2;</code>
     */
    com.google.protobuf.Struct getTarget();
    /**
     * <pre>
     * target is the request/response represented as a Struct
     * </pre>
     *
     * <code>.google.protobuf.Struct target = 2;</code>
     */
    com.google.protobuf.StructOrBuilder getTargetOrBuilder();

    /**
     * <pre>
     * headers are the request headers
     * </pre>
     *
     * <code>map&lt;string, string&gt; headers = 3;</code>
     */
    int getHeadersCount();
    /**
     * <pre>
     * headers are the request headers
     * </pre>
     *
     * <code>map&lt;string, string&gt; headers = 3;</code>
     */
    boolean containsHeaders(
        java.lang.String key);
    /**
     * Use {@link #getHeadersMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.String, java.lang.String>
    getHeaders();
    /**
     * <pre>
     * headers are the request headers
     * </pre>
     *
     * <code>map&lt;string, string&gt; headers = 3;</code>
     */
    java.util.Map<java.lang.String, java.lang.String>
    getHeadersMap();
    /**
     * <pre>
     * headers are the request headers
     * </pre>
     *
     * <code>map&lt;string, string&gt; headers = 3;</code>
     */

    java.lang.String getHeadersOrDefault(
        java.lang.String key,
        java.lang.String defaultValue);
    /**
     * <pre>
     * headers are the request headers
     * </pre>
     *
     * <code>map&lt;string, string&gt; headers = 3;</code>
     */

    java.lang.String getHeadersOrThrow(
        java.lang.String key);
  }
  /**
   * <pre>
   * AuthTarget is the payload/input to Authorizer expressions
   * </pre>
   *
   * Protobuf type {@code api.AuthTarget}
   */
  public  static final class AuthTarget extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.AuthTarget)
      AuthTargetOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AuthTarget.newBuilder() to construct.
    private AuthTarget(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AuthTarget() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private AuthTarget(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              api.Graphik.Doc.Builder subBuilder = null;
              if (user_ != null) {
                subBuilder = user_.toBuilder();
              }
              user_ = input.readMessage(api.Graphik.Doc.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(user_);
                user_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              com.google.protobuf.Struct.Builder subBuilder = null;
              if (target_ != null) {
                subBuilder = target_.toBuilder();
              }
              target_ = input.readMessage(com.google.protobuf.Struct.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(target_);
                target_ = subBuilder.buildPartial();
              }

              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                headers_ = com.google.protobuf.MapField.newMapField(
                    HeadersDefaultEntryHolder.defaultEntry);
                mutable_bitField0_ |= 0x00000004;
              }
              com.google.protobuf.MapEntry<java.lang.String, java.lang.String>
              headers__ = input.readMessage(
                  HeadersDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
              headers_.getMutableMap().put(
                  headers__.getKey(), headers__.getValue());
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_AuthTarget_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    @java.lang.Override
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 3:
          return internalGetHeaders();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_AuthTarget_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.AuthTarget.class, api.Graphik.AuthTarget.Builder.class);
    }

    private int bitField0_;
    public static final int USER_FIELD_NUMBER = 1;
    private api.Graphik.Doc user_;
    /**
     * <pre>
     * user is the user making the request
     * </pre>
     *
     * <code>.api.Doc user = 1 [(.validator.field) = { ... }</code>
     */
    public boolean hasUser() {
      return user_ != null;
    }
    /**
     * <pre>
     * user is the user making the request
     * </pre>
     *
     * <code>.api.Doc user = 1 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.Doc getUser() {
      return user_ == null ? api.Graphik.Doc.getDefaultInstance() : user_;
    }
    /**
     * <pre>
     * user is the user making the request
     * </pre>
     *
     * <code>.api.Doc user = 1 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.DocOrBuilder getUserOrBuilder() {
      return getUser();
    }

    public static final int TARGET_FIELD_NUMBER = 2;
    private com.google.protobuf.Struct target_;
    /**
     * <pre>
     * target is the request/response represented as a Struct
     * </pre>
     *
     * <code>.google.protobuf.Struct target = 2;</code>
     */
    public boolean hasTarget() {
      return target_ != null;
    }
    /**
     * <pre>
     * target is the request/response represented as a Struct
     * </pre>
     *
     * <code>.google.protobuf.Struct target = 2;</code>
     */
    public com.google.protobuf.Struct getTarget() {
      return target_ == null ? com.google.protobuf.Struct.getDefaultInstance() : target_;
    }
    /**
     * <pre>
     * target is the request/response represented as a Struct
     * </pre>
     *
     * <code>.google.protobuf.Struct target = 2;</code>
     */
    public com.google.protobuf.StructOrBuilder getTargetOrBuilder() {
      return getTarget();
    }

    public static final int HEADERS_FIELD_NUMBER = 3;
    private static final class HeadersDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.String, java.lang.String> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.String, java.lang.String>newDefaultInstance(
                  api.Graphik.internal_static_api_AuthTarget_HeadersEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "",
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "");
    }
    private com.google.protobuf.MapField<
        java.lang.String, java.lang.String> headers_;
    private com.google.protobuf.MapField<java.lang.String, java.lang.String>
    internalGetHeaders() {
      if (headers_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            HeadersDefaultEntryHolder.defaultEntry);
      }
      return headers_;
    }

    public int getHeadersCount() {
      return internalGetHeaders().getMap().size();
    }
    /**
     * <pre>
     * headers are the request headers
     * </pre>
     *
     * <code>map&lt;string, string&gt; headers = 3;</code>
     */

    public boolean containsHeaders(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      return internalGetHeaders().getMap().containsKey(key);
    }
    /**
     * Use {@link #getHeadersMap()} instead.
     */
    @java.lang.Deprecated
    public java.util.Map<java.lang.String, java.lang.String> getHeaders() {
      return getHeadersMap();
    }
    /**
     * <pre>
     * headers are the request headers
     * </pre>
     *
     * <code>map&lt;string, string&gt; headers = 3;</code>
     */

    public java.util.Map<java.lang.String, java.lang.String> getHeadersMap() {
      return internalGetHeaders().getMap();
    }
    /**
     * <pre>
     * headers are the request headers
     * </pre>
     *
     * <code>map&lt;string, string&gt; headers = 3;</code>
     */

    public java.lang.String getHeadersOrDefault(
        java.lang.String key,
        java.lang.String defaultValue) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, java.lang.String> map =
          internalGetHeaders().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <pre>
     * headers are the request headers
     * </pre>
     *
     * <code>map&lt;string, string&gt; headers = 3;</code>
     */

    public java.lang.String getHeadersOrThrow(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, java.lang.String> map =
          internalGetHeaders().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

    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 (user_ != null) {
        output.writeMessage(1, getUser());
      }
      if (target_ != null) {
        output.writeMessage(2, getTarget());
      }
      com.google.protobuf.GeneratedMessageV3
        .serializeStringMapTo(
          output,
          internalGetHeaders(),
          HeadersDefaultEntryHolder.defaultEntry,
          3);
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (user_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getUser());
      }
      if (target_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getTarget());
      }
      for (java.util.Map.Entry<java.lang.String, java.lang.String> entry
           : internalGetHeaders().getMap().entrySet()) {
        com.google.protobuf.MapEntry<java.lang.String, java.lang.String>
        headers__ = HeadersDefaultEntryHolder.defaultEntry.newBuilderForType()
            .setKey(entry.getKey())
            .setValue(entry.getValue())
            .build();
        size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(3, headers__);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && (hasUser() == other.hasUser());
      if (hasUser()) {
        result = result && getUser()
            .equals(other.getUser());
      }
      result = result && (hasTarget() == other.hasTarget());
      if (hasTarget()) {
        result = result && getTarget()
            .equals(other.getTarget());
      }
      result = result && internalGetHeaders().equals(
          other.internalGetHeaders());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasUser()) {
        hash = (37 * hash) + USER_FIELD_NUMBER;
        hash = (53 * hash) + getUser().hashCode();
      }
      if (hasTarget()) {
        hash = (37 * hash) + TARGET_FIELD_NUMBER;
        hash = (53 * hash) + getTarget().hashCode();
      }
      if (!internalGetHeaders().getMap().isEmpty()) {
        hash = (37 * hash) + HEADERS_FIELD_NUMBER;
        hash = (53 * hash) + internalGetHeaders().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.AuthTarget parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.AuthTarget parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.AuthTarget parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.AuthTarget parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.AuthTarget parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.AuthTarget parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.AuthTarget parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.AuthTarget 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 api.Graphik.AuthTarget parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.AuthTarget 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 api.Graphik.AuthTarget parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.AuthTarget 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(api.Graphik.AuthTarget 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>
     * AuthTarget is the payload/input to Authorizer expressions
     * </pre>
     *
     * Protobuf type {@code api.AuthTarget}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.AuthTarget)
        api.Graphik.AuthTargetOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_AuthTarget_descriptor;
      }

      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMapField(
          int number) {
        switch (number) {
          case 3:
            return internalGetHeaders();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMutableMapField(
          int number) {
        switch (number) {
          case 3:
            return internalGetMutableHeaders();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_AuthTarget_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.AuthTarget.class, api.Graphik.AuthTarget.Builder.class);
      }

      // Construct using api.Graphik.AuthTarget.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (userBuilder_ == null) {
          user_ = null;
        } else {
          user_ = null;
          userBuilder_ = null;
        }
        if (targetBuilder_ == null) {
          target_ = null;
        } else {
          target_ = null;
          targetBuilder_ = null;
        }
        internalGetMutableHeaders().clear();
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_AuthTarget_descriptor;
      }

      @java.lang.Override
      public api.Graphik.AuthTarget getDefaultInstanceForType() {
        return api.Graphik.AuthTarget.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.AuthTarget buildPartial() {
        api.Graphik.AuthTarget result = new api.Graphik.AuthTarget(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (userBuilder_ == null) {
          result.user_ = user_;
        } else {
          result.user_ = userBuilder_.build();
        }
        if (targetBuilder_ == null) {
          result.target_ = target_;
        } else {
          result.target_ = targetBuilder_.build();
        }
        result.headers_ = internalGetHeaders();
        result.headers_.makeImmutable();
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.AuthTarget other) {
        if (other == api.Graphik.AuthTarget.getDefaultInstance()) return this;
        if (other.hasUser()) {
          mergeUser(other.getUser());
        }
        if (other.hasTarget()) {
          mergeTarget(other.getTarget());
        }
        internalGetMutableHeaders().mergeFrom(
            other.internalGetHeaders());
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.AuthTarget parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.AuthTarget) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private api.Graphik.Doc user_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Doc, api.Graphik.Doc.Builder, api.Graphik.DocOrBuilder> userBuilder_;
      /**
       * <pre>
       * user is the user making the request
       * </pre>
       *
       * <code>.api.Doc user = 1 [(.validator.field) = { ... }</code>
       */
      public boolean hasUser() {
        return userBuilder_ != null || user_ != null;
      }
      /**
       * <pre>
       * user is the user making the request
       * </pre>
       *
       * <code>.api.Doc user = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Doc getUser() {
        if (userBuilder_ == null) {
          return user_ == null ? api.Graphik.Doc.getDefaultInstance() : user_;
        } else {
          return userBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * user is the user making the request
       * </pre>
       *
       * <code>.api.Doc user = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setUser(api.Graphik.Doc value) {
        if (userBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          user_ = value;
          onChanged();
        } else {
          userBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * user is the user making the request
       * </pre>
       *
       * <code>.api.Doc user = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setUser(
          api.Graphik.Doc.Builder builderForValue) {
        if (userBuilder_ == null) {
          user_ = builderForValue.build();
          onChanged();
        } else {
          userBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * user is the user making the request
       * </pre>
       *
       * <code>.api.Doc user = 1 [(.validator.field) = { ... }</code>
       */
      public Builder mergeUser(api.Graphik.Doc value) {
        if (userBuilder_ == null) {
          if (user_ != null) {
            user_ =
              api.Graphik.Doc.newBuilder(user_).mergeFrom(value).buildPartial();
          } else {
            user_ = value;
          }
          onChanged();
        } else {
          userBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * user is the user making the request
       * </pre>
       *
       * <code>.api.Doc user = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearUser() {
        if (userBuilder_ == null) {
          user_ = null;
          onChanged();
        } else {
          user_ = null;
          userBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * user is the user making the request
       * </pre>
       *
       * <code>.api.Doc user = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Doc.Builder getUserBuilder() {
        
        onChanged();
        return getUserFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * user is the user making the request
       * </pre>
       *
       * <code>.api.Doc user = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.DocOrBuilder getUserOrBuilder() {
        if (userBuilder_ != null) {
          return userBuilder_.getMessageOrBuilder();
        } else {
          return user_ == null ?
              api.Graphik.Doc.getDefaultInstance() : user_;
        }
      }
      /**
       * <pre>
       * user is the user making the request
       * </pre>
       *
       * <code>.api.Doc user = 1 [(.validator.field) = { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Doc, api.Graphik.Doc.Builder, api.Graphik.DocOrBuilder> 
          getUserFieldBuilder() {
        if (userBuilder_ == null) {
          userBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Doc, api.Graphik.Doc.Builder, api.Graphik.DocOrBuilder>(
                  getUser(),
                  getParentForChildren(),
                  isClean());
          user_ = null;
        }
        return userBuilder_;
      }

      private com.google.protobuf.Struct target_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> targetBuilder_;
      /**
       * <pre>
       * target is the request/response represented as a Struct
       * </pre>
       *
       * <code>.google.protobuf.Struct target = 2;</code>
       */
      public boolean hasTarget() {
        return targetBuilder_ != null || target_ != null;
      }
      /**
       * <pre>
       * target is the request/response represented as a Struct
       * </pre>
       *
       * <code>.google.protobuf.Struct target = 2;</code>
       */
      public com.google.protobuf.Struct getTarget() {
        if (targetBuilder_ == null) {
          return target_ == null ? com.google.protobuf.Struct.getDefaultInstance() : target_;
        } else {
          return targetBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * target is the request/response represented as a Struct
       * </pre>
       *
       * <code>.google.protobuf.Struct target = 2;</code>
       */
      public Builder setTarget(com.google.protobuf.Struct value) {
        if (targetBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          target_ = value;
          onChanged();
        } else {
          targetBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * target is the request/response represented as a Struct
       * </pre>
       *
       * <code>.google.protobuf.Struct target = 2;</code>
       */
      public Builder setTarget(
          com.google.protobuf.Struct.Builder builderForValue) {
        if (targetBuilder_ == null) {
          target_ = builderForValue.build();
          onChanged();
        } else {
          targetBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * target is the request/response represented as a Struct
       * </pre>
       *
       * <code>.google.protobuf.Struct target = 2;</code>
       */
      public Builder mergeTarget(com.google.protobuf.Struct value) {
        if (targetBuilder_ == null) {
          if (target_ != null) {
            target_ =
              com.google.protobuf.Struct.newBuilder(target_).mergeFrom(value).buildPartial();
          } else {
            target_ = value;
          }
          onChanged();
        } else {
          targetBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * target is the request/response represented as a Struct
       * </pre>
       *
       * <code>.google.protobuf.Struct target = 2;</code>
       */
      public Builder clearTarget() {
        if (targetBuilder_ == null) {
          target_ = null;
          onChanged();
        } else {
          target_ = null;
          targetBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * target is the request/response represented as a Struct
       * </pre>
       *
       * <code>.google.protobuf.Struct target = 2;</code>
       */
      public com.google.protobuf.Struct.Builder getTargetBuilder() {
        
        onChanged();
        return getTargetFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * target is the request/response represented as a Struct
       * </pre>
       *
       * <code>.google.protobuf.Struct target = 2;</code>
       */
      public com.google.protobuf.StructOrBuilder getTargetOrBuilder() {
        if (targetBuilder_ != null) {
          return targetBuilder_.getMessageOrBuilder();
        } else {
          return target_ == null ?
              com.google.protobuf.Struct.getDefaultInstance() : target_;
        }
      }
      /**
       * <pre>
       * target is the request/response represented as a Struct
       * </pre>
       *
       * <code>.google.protobuf.Struct target = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> 
          getTargetFieldBuilder() {
        if (targetBuilder_ == null) {
          targetBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder>(
                  getTarget(),
                  getParentForChildren(),
                  isClean());
          target_ = null;
        }
        return targetBuilder_;
      }

      private com.google.protobuf.MapField<
          java.lang.String, java.lang.String> headers_;
      private com.google.protobuf.MapField<java.lang.String, java.lang.String>
      internalGetHeaders() {
        if (headers_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              HeadersDefaultEntryHolder.defaultEntry);
        }
        return headers_;
      }
      private com.google.protobuf.MapField<java.lang.String, java.lang.String>
      internalGetMutableHeaders() {
        onChanged();;
        if (headers_ == null) {
          headers_ = com.google.protobuf.MapField.newMapField(
              HeadersDefaultEntryHolder.defaultEntry);
        }
        if (!headers_.isMutable()) {
          headers_ = headers_.copy();
        }
        return headers_;
      }

      public int getHeadersCount() {
        return internalGetHeaders().getMap().size();
      }
      /**
       * <pre>
       * headers are the request headers
       * </pre>
       *
       * <code>map&lt;string, string&gt; headers = 3;</code>
       */

      public boolean containsHeaders(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        return internalGetHeaders().getMap().containsKey(key);
      }
      /**
       * Use {@link #getHeadersMap()} instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, java.lang.String> getHeaders() {
        return getHeadersMap();
      }
      /**
       * <pre>
       * headers are the request headers
       * </pre>
       *
       * <code>map&lt;string, string&gt; headers = 3;</code>
       */

      public java.util.Map<java.lang.String, java.lang.String> getHeadersMap() {
        return internalGetHeaders().getMap();
      }
      /**
       * <pre>
       * headers are the request headers
       * </pre>
       *
       * <code>map&lt;string, string&gt; headers = 3;</code>
       */

      public java.lang.String getHeadersOrDefault(
          java.lang.String key,
          java.lang.String defaultValue) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, java.lang.String> map =
            internalGetHeaders().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <pre>
       * headers are the request headers
       * </pre>
       *
       * <code>map&lt;string, string&gt; headers = 3;</code>
       */

      public java.lang.String getHeadersOrThrow(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, java.lang.String> map =
            internalGetHeaders().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearHeaders() {
        internalGetMutableHeaders().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <pre>
       * headers are the request headers
       * </pre>
       *
       * <code>map&lt;string, string&gt; headers = 3;</code>
       */

      public Builder removeHeaders(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableHeaders().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, java.lang.String>
      getMutableHeaders() {
        return internalGetMutableHeaders().getMutableMap();
      }
      /**
       * <pre>
       * headers are the request headers
       * </pre>
       *
       * <code>map&lt;string, string&gt; headers = 3;</code>
       */
      public Builder putHeaders(
          java.lang.String key,
          java.lang.String value) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        if (value == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableHeaders().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <pre>
       * headers are the request headers
       * </pre>
       *
       * <code>map&lt;string, string&gt; headers = 3;</code>
       */

      public Builder putAllHeaders(
          java.util.Map<java.lang.String, java.lang.String> values) {
        internalGetMutableHeaders().getMutableMap()
            .putAll(values);
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.AuthTarget)
    }

    // @@protoc_insertion_point(class_scope:api.AuthTarget)
    private static final api.Graphik.AuthTarget DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.AuthTarget();
    }

    public static api.Graphik.AuthTarget getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AuthTarget>
        PARSER = new com.google.protobuf.AbstractParser<AuthTarget>() {
      @java.lang.Override
      public AuthTarget parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AuthTarget(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.AuthTarget getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AuthorizerOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Authorizer)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * name is the unique name of the authorizer
     * </pre>
     *
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    java.lang.String getName();
    /**
     * <pre>
     * name is the unique name of the authorizer
     * </pre>
     *
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <pre>
     * method is the rpc method that will invoke the authorizer
     * </pre>
     *
     * <code>string method = 2 [(.validator.field) = { ... }</code>
     */
    java.lang.String getMethod();
    /**
     * <pre>
     * method is the rpc method that will invoke the authorizer
     * </pre>
     *
     * <code>string method = 2 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getMethodBytes();

    /**
     * <pre>
     * expression is the boolean CEL expression that evaluates either the request or response body
     * </pre>
     *
     * <code>string expression = 3 [(.validator.field) = { ... }</code>
     */
    java.lang.String getExpression();
    /**
     * <pre>
     * expression is the boolean CEL expression that evaluates either the request or response body
     * </pre>
     *
     * <code>string expression = 3 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getExpressionBytes();

    /**
     * <pre>
     * target_responses sets the authorizer to evaluate request bodies
     * </pre>
     *
     * <code>bool target_requests = 4;</code>
     */
    boolean getTargetRequests();

    /**
     * <pre>
     * target_responses sets the authorizer to evaluate response bodies
     * </pre>
     *
     * <code>bool target_responses = 5;</code>
     */
    boolean getTargetResponses();
  }
  /**
   * <pre>
   * Authorizer is a graph primitive used for authorizing inbound requests and/or responses(see AuthTarget)
   * </pre>
   *
   * Protobuf type {@code api.Authorizer}
   */
  public  static final class Authorizer extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Authorizer)
      AuthorizerOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Authorizer.newBuilder() to construct.
    private Authorizer(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Authorizer() {
      name_ = "";
      method_ = "";
      expression_ = "";
      targetRequests_ = false;
      targetResponses_ = false;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Authorizer(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              name_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              method_ = s;
              break;
            }
            case 26: {
              java.lang.String s = input.readStringRequireUtf8();

              expression_ = s;
              break;
            }
            case 32: {

              targetRequests_ = input.readBool();
              break;
            }
            case 40: {

              targetResponses_ = input.readBool();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Authorizer_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Authorizer_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Authorizer.class, api.Graphik.Authorizer.Builder.class);
    }

    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     * <pre>
     * name is the unique name of the authorizer
     * </pre>
     *
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * name is the unique name of the authorizer
     * </pre>
     *
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int METHOD_FIELD_NUMBER = 2;
    private volatile java.lang.Object method_;
    /**
     * <pre>
     * method is the rpc method that will invoke the authorizer
     * </pre>
     *
     * <code>string method = 2 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getMethod() {
      java.lang.Object ref = method_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        method_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * method is the rpc method that will invoke the authorizer
     * </pre>
     *
     * <code>string method = 2 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getMethodBytes() {
      java.lang.Object ref = method_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        method_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int EXPRESSION_FIELD_NUMBER = 3;
    private volatile java.lang.Object expression_;
    /**
     * <pre>
     * expression is the boolean CEL expression that evaluates either the request or response body
     * </pre>
     *
     * <code>string expression = 3 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getExpression() {
      java.lang.Object ref = expression_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        expression_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * expression is the boolean CEL expression that evaluates either the request or response body
     * </pre>
     *
     * <code>string expression = 3 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getExpressionBytes() {
      java.lang.Object ref = expression_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        expression_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TARGET_REQUESTS_FIELD_NUMBER = 4;
    private boolean targetRequests_;
    /**
     * <pre>
     * target_responses sets the authorizer to evaluate request bodies
     * </pre>
     *
     * <code>bool target_requests = 4;</code>
     */
    public boolean getTargetRequests() {
      return targetRequests_;
    }

    public static final int TARGET_RESPONSES_FIELD_NUMBER = 5;
    private boolean targetResponses_;
    /**
     * <pre>
     * target_responses sets the authorizer to evaluate response bodies
     * </pre>
     *
     * <code>bool target_responses = 5;</code>
     */
    public boolean getTargetResponses() {
      return targetResponses_;
    }

    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 (!getNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
      }
      if (!getMethodBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, method_);
      }
      if (!getExpressionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, expression_);
      }
      if (targetRequests_ != false) {
        output.writeBool(4, targetRequests_);
      }
      if (targetResponses_ != false) {
        output.writeBool(5, targetResponses_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
      }
      if (!getMethodBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, method_);
      }
      if (!getExpressionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, expression_);
      }
      if (targetRequests_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, targetRequests_);
      }
      if (targetResponses_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, targetResponses_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getName()
          .equals(other.getName());
      result = result && getMethod()
          .equals(other.getMethod());
      result = result && getExpression()
          .equals(other.getExpression());
      result = result && (getTargetRequests()
          == other.getTargetRequests());
      result = result && (getTargetResponses()
          == other.getTargetResponses());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      hash = (37 * hash) + METHOD_FIELD_NUMBER;
      hash = (53 * hash) + getMethod().hashCode();
      hash = (37 * hash) + EXPRESSION_FIELD_NUMBER;
      hash = (53 * hash) + getExpression().hashCode();
      hash = (37 * hash) + TARGET_REQUESTS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getTargetRequests());
      hash = (37 * hash) + TARGET_RESPONSES_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getTargetResponses());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Authorizer parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Authorizer parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Authorizer parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Authorizer parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Authorizer parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Authorizer parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Authorizer parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Authorizer 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 api.Graphik.Authorizer parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Authorizer 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 api.Graphik.Authorizer parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Authorizer 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(api.Graphik.Authorizer 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>
     * Authorizer is a graph primitive used for authorizing inbound requests and/or responses(see AuthTarget)
     * </pre>
     *
     * Protobuf type {@code api.Authorizer}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Authorizer)
        api.Graphik.AuthorizerOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Authorizer_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Authorizer_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Authorizer.class, api.Graphik.Authorizer.Builder.class);
      }

      // Construct using api.Graphik.Authorizer.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        name_ = "";

        method_ = "";

        expression_ = "";

        targetRequests_ = false;

        targetResponses_ = false;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Authorizer_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Authorizer getDefaultInstanceForType() {
        return api.Graphik.Authorizer.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Authorizer buildPartial() {
        api.Graphik.Authorizer result = new api.Graphik.Authorizer(this);
        result.name_ = name_;
        result.method_ = method_;
        result.expression_ = expression_;
        result.targetRequests_ = targetRequests_;
        result.targetResponses_ = targetResponses_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Authorizer other) {
        if (other == api.Graphik.Authorizer.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (!other.getMethod().isEmpty()) {
          method_ = other.method_;
          onChanged();
        }
        if (!other.getExpression().isEmpty()) {
          expression_ = other.expression_;
          onChanged();
        }
        if (other.getTargetRequests() != false) {
          setTargetRequests(other.getTargetRequests());
        }
        if (other.getTargetResponses() != false) {
          setTargetResponses(other.getTargetResponses());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Authorizer parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Authorizer) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <pre>
       * name is the unique name of the authorizer
       * </pre>
       *
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * name is the unique name of the authorizer
       * </pre>
       *
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * name is the unique name of the authorizer
       * </pre>
       *
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * name is the unique name of the authorizer
       * </pre>
       *
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearName() {
        
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * name is the unique name of the authorizer
       * </pre>
       *
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        name_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object method_ = "";
      /**
       * <pre>
       * method is the rpc method that will invoke the authorizer
       * </pre>
       *
       * <code>string method = 2 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getMethod() {
        java.lang.Object ref = method_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          method_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * method is the rpc method that will invoke the authorizer
       * </pre>
       *
       * <code>string method = 2 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getMethodBytes() {
        java.lang.Object ref = method_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          method_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * method is the rpc method that will invoke the authorizer
       * </pre>
       *
       * <code>string method = 2 [(.validator.field) = { ... }</code>
       */
      public Builder setMethod(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        method_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * method is the rpc method that will invoke the authorizer
       * </pre>
       *
       * <code>string method = 2 [(.validator.field) = { ... }</code>
       */
      public Builder clearMethod() {
        
        method_ = getDefaultInstance().getMethod();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * method is the rpc method that will invoke the authorizer
       * </pre>
       *
       * <code>string method = 2 [(.validator.field) = { ... }</code>
       */
      public Builder setMethodBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        method_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object expression_ = "";
      /**
       * <pre>
       * expression is the boolean CEL expression that evaluates either the request or response body
       * </pre>
       *
       * <code>string expression = 3 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getExpression() {
        java.lang.Object ref = expression_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          expression_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * expression is the boolean CEL expression that evaluates either the request or response body
       * </pre>
       *
       * <code>string expression = 3 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getExpressionBytes() {
        java.lang.Object ref = expression_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          expression_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * expression is the boolean CEL expression that evaluates either the request or response body
       * </pre>
       *
       * <code>string expression = 3 [(.validator.field) = { ... }</code>
       */
      public Builder setExpression(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        expression_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * expression is the boolean CEL expression that evaluates either the request or response body
       * </pre>
       *
       * <code>string expression = 3 [(.validator.field) = { ... }</code>
       */
      public Builder clearExpression() {
        
        expression_ = getDefaultInstance().getExpression();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * expression is the boolean CEL expression that evaluates either the request or response body
       * </pre>
       *
       * <code>string expression = 3 [(.validator.field) = { ... }</code>
       */
      public Builder setExpressionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        expression_ = value;
        onChanged();
        return this;
      }

      private boolean targetRequests_ ;
      /**
       * <pre>
       * target_responses sets the authorizer to evaluate request bodies
       * </pre>
       *
       * <code>bool target_requests = 4;</code>
       */
      public boolean getTargetRequests() {
        return targetRequests_;
      }
      /**
       * <pre>
       * target_responses sets the authorizer to evaluate request bodies
       * </pre>
       *
       * <code>bool target_requests = 4;</code>
       */
      public Builder setTargetRequests(boolean value) {
        
        targetRequests_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * target_responses sets the authorizer to evaluate request bodies
       * </pre>
       *
       * <code>bool target_requests = 4;</code>
       */
      public Builder clearTargetRequests() {
        
        targetRequests_ = false;
        onChanged();
        return this;
      }

      private boolean targetResponses_ ;
      /**
       * <pre>
       * target_responses sets the authorizer to evaluate response bodies
       * </pre>
       *
       * <code>bool target_responses = 5;</code>
       */
      public boolean getTargetResponses() {
        return targetResponses_;
      }
      /**
       * <pre>
       * target_responses sets the authorizer to evaluate response bodies
       * </pre>
       *
       * <code>bool target_responses = 5;</code>
       */
      public Builder setTargetResponses(boolean value) {
        
        targetResponses_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * target_responses sets the authorizer to evaluate response bodies
       * </pre>
       *
       * <code>bool target_responses = 5;</code>
       */
      public Builder clearTargetResponses() {
        
        targetResponses_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Authorizer)
    }

    // @@protoc_insertion_point(class_scope:api.Authorizer)
    private static final api.Graphik.Authorizer DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Authorizer();
    }

    public static api.Graphik.Authorizer getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Authorizer>
        PARSER = new com.google.protobuf.AbstractParser<Authorizer>() {
      @java.lang.Override
      public Authorizer parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Authorizer(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Authorizer getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AuthorizersOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Authorizers)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .api.Authorizer authorizers = 1;</code>
     */
    java.util.List<api.Graphik.Authorizer> 
        getAuthorizersList();
    /**
     * <code>repeated .api.Authorizer authorizers = 1;</code>
     */
    api.Graphik.Authorizer getAuthorizers(int index);
    /**
     * <code>repeated .api.Authorizer authorizers = 1;</code>
     */
    int getAuthorizersCount();
    /**
     * <code>repeated .api.Authorizer authorizers = 1;</code>
     */
    java.util.List<? extends api.Graphik.AuthorizerOrBuilder> 
        getAuthorizersOrBuilderList();
    /**
     * <code>repeated .api.Authorizer authorizers = 1;</code>
     */
    api.Graphik.AuthorizerOrBuilder getAuthorizersOrBuilder(
        int index);
  }
  /**
   * <pre>
   * Authorizers is an array of authorizer
   * </pre>
   *
   * Protobuf type {@code api.Authorizers}
   */
  public  static final class Authorizers extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Authorizers)
      AuthorizersOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Authorizers.newBuilder() to construct.
    private Authorizers(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Authorizers() {
      authorizers_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Authorizers(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                authorizers_ = new java.util.ArrayList<api.Graphik.Authorizer>();
                mutable_bitField0_ |= 0x00000001;
              }
              authorizers_.add(
                  input.readMessage(api.Graphik.Authorizer.parser(), extensionRegistry));
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          authorizers_ = java.util.Collections.unmodifiableList(authorizers_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Authorizers_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Authorizers_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Authorizers.class, api.Graphik.Authorizers.Builder.class);
    }

    public static final int AUTHORIZERS_FIELD_NUMBER = 1;
    private java.util.List<api.Graphik.Authorizer> authorizers_;
    /**
     * <code>repeated .api.Authorizer authorizers = 1;</code>
     */
    public java.util.List<api.Graphik.Authorizer> getAuthorizersList() {
      return authorizers_;
    }
    /**
     * <code>repeated .api.Authorizer authorizers = 1;</code>
     */
    public java.util.List<? extends api.Graphik.AuthorizerOrBuilder> 
        getAuthorizersOrBuilderList() {
      return authorizers_;
    }
    /**
     * <code>repeated .api.Authorizer authorizers = 1;</code>
     */
    public int getAuthorizersCount() {
      return authorizers_.size();
    }
    /**
     * <code>repeated .api.Authorizer authorizers = 1;</code>
     */
    public api.Graphik.Authorizer getAuthorizers(int index) {
      return authorizers_.get(index);
    }
    /**
     * <code>repeated .api.Authorizer authorizers = 1;</code>
     */
    public api.Graphik.AuthorizerOrBuilder getAuthorizersOrBuilder(
        int index) {
      return authorizers_.get(index);
    }

    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 {
      for (int i = 0; i < authorizers_.size(); i++) {
        output.writeMessage(1, authorizers_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < authorizers_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, authorizers_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getAuthorizersList()
          .equals(other.getAuthorizersList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getAuthorizersCount() > 0) {
        hash = (37 * hash) + AUTHORIZERS_FIELD_NUMBER;
        hash = (53 * hash) + getAuthorizersList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Authorizers parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Authorizers parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Authorizers parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Authorizers parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Authorizers parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Authorizers parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Authorizers parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Authorizers 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 api.Graphik.Authorizers parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Authorizers 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 api.Graphik.Authorizers parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Authorizers 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(api.Graphik.Authorizers 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>
     * Authorizers is an array of authorizer
     * </pre>
     *
     * Protobuf type {@code api.Authorizers}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Authorizers)
        api.Graphik.AuthorizersOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Authorizers_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Authorizers_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Authorizers.class, api.Graphik.Authorizers.Builder.class);
      }

      // Construct using api.Graphik.Authorizers.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Authorizers_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Authorizers getDefaultInstanceForType() {
        return api.Graphik.Authorizers.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Authorizers buildPartial() {
        api.Graphik.Authorizers result = new api.Graphik.Authorizers(this);
        int from_bitField0_ = bitField0_;
        if (authorizersBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            authorizers_ = java.util.Collections.unmodifiableList(authorizers_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.authorizers_ = authorizers_;
        } else {
          result.authorizers_ = authorizersBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Authorizers other) {
        if (other == api.Graphik.Authorizers.getDefaultInstance()) return this;
        if (authorizersBuilder_ == null) {
          if (!other.authorizers_.isEmpty()) {
            if (authorizers_.isEmpty()) {
              authorizers_ = other.authorizers_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureAuthorizersIsMutable();
              authorizers_.addAll(other.authorizers_);
            }
            onChanged();
          }
        } else {
          if (!other.authorizers_.isEmpty()) {
            if (authorizersBuilder_.isEmpty()) {
              authorizersBuilder_.dispose();
              authorizersBuilder_ = null;
              authorizers_ = other.authorizers_;
              bitField0_ = (bitField0_ & ~0x00000001);
              authorizersBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getAuthorizersFieldBuilder() : null;
            } else {
              authorizersBuilder_.addAllMessages(other.authorizers_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Authorizers parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Authorizers) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<api.Graphik.Authorizer> authorizers_ =
        java.util.Collections.emptyList();
      private void ensureAuthorizersIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          authorizers_ = new java.util.ArrayList<api.Graphik.Authorizer>(authorizers_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Authorizer, api.Graphik.Authorizer.Builder, api.Graphik.AuthorizerOrBuilder> authorizersBuilder_;

      /**
       * <code>repeated .api.Authorizer authorizers = 1;</code>
       */
      public java.util.List<api.Graphik.Authorizer> getAuthorizersList() {
        if (authorizersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(authorizers_);
        } else {
          return authorizersBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .api.Authorizer authorizers = 1;</code>
       */
      public int getAuthorizersCount() {
        if (authorizersBuilder_ == null) {
          return authorizers_.size();
        } else {
          return authorizersBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .api.Authorizer authorizers = 1;</code>
       */
      public api.Graphik.Authorizer getAuthorizers(int index) {
        if (authorizersBuilder_ == null) {
          return authorizers_.get(index);
        } else {
          return authorizersBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .api.Authorizer authorizers = 1;</code>
       */
      public Builder setAuthorizers(
          int index, api.Graphik.Authorizer value) {
        if (authorizersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAuthorizersIsMutable();
          authorizers_.set(index, value);
          onChanged();
        } else {
          authorizersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Authorizer authorizers = 1;</code>
       */
      public Builder setAuthorizers(
          int index, api.Graphik.Authorizer.Builder builderForValue) {
        if (authorizersBuilder_ == null) {
          ensureAuthorizersIsMutable();
          authorizers_.set(index, builderForValue.build());
          onChanged();
        } else {
          authorizersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Authorizer authorizers = 1;</code>
       */
      public Builder addAuthorizers(api.Graphik.Authorizer value) {
        if (authorizersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAuthorizersIsMutable();
          authorizers_.add(value);
          onChanged();
        } else {
          authorizersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Authorizer authorizers = 1;</code>
       */
      public Builder addAuthorizers(
          int index, api.Graphik.Authorizer value) {
        if (authorizersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAuthorizersIsMutable();
          authorizers_.add(index, value);
          onChanged();
        } else {
          authorizersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Authorizer authorizers = 1;</code>
       */
      public Builder addAuthorizers(
          api.Graphik.Authorizer.Builder builderForValue) {
        if (authorizersBuilder_ == null) {
          ensureAuthorizersIsMutable();
          authorizers_.add(builderForValue.build());
          onChanged();
        } else {
          authorizersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Authorizer authorizers = 1;</code>
       */
      public Builder addAuthorizers(
          int index, api.Graphik.Authorizer.Builder builderForValue) {
        if (authorizersBuilder_ == null) {
          ensureAuthorizersIsMutable();
          authorizers_.add(index, builderForValue.build());
          onChanged();
        } else {
          authorizersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Authorizer authorizers = 1;</code>
       */
      public Builder addAllAuthorizers(
          java.lang.Iterable<? extends api.Graphik.Authorizer> values) {
        if (authorizersBuilder_ == null) {
          ensureAuthorizersIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, authorizers_);
          onChanged();
        } else {
          authorizersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .api.Authorizer authorizers = 1;</code>
       */
      public Builder clearAuthorizers() {
        if (authorizersBuilder_ == null) {
          authorizers_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          authorizersBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .api.Authorizer authorizers = 1;</code>
       */
      public Builder removeAuthorizers(int index) {
        if (authorizersBuilder_ == null) {
          ensureAuthorizersIsMutable();
          authorizers_.remove(index);
          onChanged();
        } else {
          authorizersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .api.Authorizer authorizers = 1;</code>
       */
      public api.Graphik.Authorizer.Builder getAuthorizersBuilder(
          int index) {
        return getAuthorizersFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .api.Authorizer authorizers = 1;</code>
       */
      public api.Graphik.AuthorizerOrBuilder getAuthorizersOrBuilder(
          int index) {
        if (authorizersBuilder_ == null) {
          return authorizers_.get(index);  } else {
          return authorizersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .api.Authorizer authorizers = 1;</code>
       */
      public java.util.List<? extends api.Graphik.AuthorizerOrBuilder> 
           getAuthorizersOrBuilderList() {
        if (authorizersBuilder_ != null) {
          return authorizersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(authorizers_);
        }
      }
      /**
       * <code>repeated .api.Authorizer authorizers = 1;</code>
       */
      public api.Graphik.Authorizer.Builder addAuthorizersBuilder() {
        return getAuthorizersFieldBuilder().addBuilder(
            api.Graphik.Authorizer.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Authorizer authorizers = 1;</code>
       */
      public api.Graphik.Authorizer.Builder addAuthorizersBuilder(
          int index) {
        return getAuthorizersFieldBuilder().addBuilder(
            index, api.Graphik.Authorizer.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Authorizer authorizers = 1;</code>
       */
      public java.util.List<api.Graphik.Authorizer.Builder> 
           getAuthorizersBuilderList() {
        return getAuthorizersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Authorizer, api.Graphik.Authorizer.Builder, api.Graphik.AuthorizerOrBuilder> 
          getAuthorizersFieldBuilder() {
        if (authorizersBuilder_ == null) {
          authorizersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              api.Graphik.Authorizer, api.Graphik.Authorizer.Builder, api.Graphik.AuthorizerOrBuilder>(
                  authorizers_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          authorizers_ = null;
        }
        return authorizersBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Authorizers)
    }

    // @@protoc_insertion_point(class_scope:api.Authorizers)
    private static final api.Graphik.Authorizers DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Authorizers();
    }

    public static api.Graphik.Authorizers getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Authorizers>
        PARSER = new com.google.protobuf.AbstractParser<Authorizers>() {
      @java.lang.Override
      public Authorizers parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Authorizers(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Authorizers getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ConstraintOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Constraint)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    java.lang.String getName();
    /**
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <code>string gtype = 2 [(.validator.field) = { ... }</code>
     */
    java.lang.String getGtype();
    /**
     * <code>string gtype = 2 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getGtypeBytes();

    /**
     * <code>string expression = 3 [(.validator.field) = { ... }</code>
     */
    java.lang.String getExpression();
    /**
     * <code>string expression = 3 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getExpressionBytes();

    /**
     * <pre>
     * if target_docs is true, this validator will be applied to documents.
     * </pre>
     *
     * <code>bool target_docs = 4;</code>
     */
    boolean getTargetDocs();

    /**
     * <pre>
     * if target_connections is true, this validator will be applied to connections.
     * </pre>
     *
     * <code>bool target_connections = 5;</code>
     */
    boolean getTargetConnections();
  }
  /**
   * <pre>
   * Constraint a graph primitive used to validate custom doc/connection constraints
   * </pre>
   *
   * Protobuf type {@code api.Constraint}
   */
  public  static final class Constraint extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Constraint)
      ConstraintOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Constraint.newBuilder() to construct.
    private Constraint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Constraint() {
      name_ = "";
      gtype_ = "";
      expression_ = "";
      targetDocs_ = false;
      targetConnections_ = false;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Constraint(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              name_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              gtype_ = s;
              break;
            }
            case 26: {
              java.lang.String s = input.readStringRequireUtf8();

              expression_ = s;
              break;
            }
            case 32: {

              targetDocs_ = input.readBool();
              break;
            }
            case 40: {

              targetConnections_ = input.readBool();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Constraint_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Constraint_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Constraint.class, api.Graphik.Constraint.Builder.class);
    }

    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int GTYPE_FIELD_NUMBER = 2;
    private volatile java.lang.Object gtype_;
    /**
     * <code>string gtype = 2 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getGtype() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        gtype_ = s;
        return s;
      }
    }
    /**
     * <code>string gtype = 2 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getGtypeBytes() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gtype_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int EXPRESSION_FIELD_NUMBER = 3;
    private volatile java.lang.Object expression_;
    /**
     * <code>string expression = 3 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getExpression() {
      java.lang.Object ref = expression_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        expression_ = s;
        return s;
      }
    }
    /**
     * <code>string expression = 3 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getExpressionBytes() {
      java.lang.Object ref = expression_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        expression_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TARGET_DOCS_FIELD_NUMBER = 4;
    private boolean targetDocs_;
    /**
     * <pre>
     * if target_docs is true, this validator will be applied to documents.
     * </pre>
     *
     * <code>bool target_docs = 4;</code>
     */
    public boolean getTargetDocs() {
      return targetDocs_;
    }

    public static final int TARGET_CONNECTIONS_FIELD_NUMBER = 5;
    private boolean targetConnections_;
    /**
     * <pre>
     * if target_connections is true, this validator will be applied to connections.
     * </pre>
     *
     * <code>bool target_connections = 5;</code>
     */
    public boolean getTargetConnections() {
      return targetConnections_;
    }

    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 (!getNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
      }
      if (!getGtypeBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, gtype_);
      }
      if (!getExpressionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, expression_);
      }
      if (targetDocs_ != false) {
        output.writeBool(4, targetDocs_);
      }
      if (targetConnections_ != false) {
        output.writeBool(5, targetConnections_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
      }
      if (!getGtypeBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, gtype_);
      }
      if (!getExpressionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, expression_);
      }
      if (targetDocs_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, targetDocs_);
      }
      if (targetConnections_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, targetConnections_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getName()
          .equals(other.getName());
      result = result && getGtype()
          .equals(other.getGtype());
      result = result && getExpression()
          .equals(other.getExpression());
      result = result && (getTargetDocs()
          == other.getTargetDocs());
      result = result && (getTargetConnections()
          == other.getTargetConnections());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      hash = (37 * hash) + GTYPE_FIELD_NUMBER;
      hash = (53 * hash) + getGtype().hashCode();
      hash = (37 * hash) + EXPRESSION_FIELD_NUMBER;
      hash = (53 * hash) + getExpression().hashCode();
      hash = (37 * hash) + TARGET_DOCS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getTargetDocs());
      hash = (37 * hash) + TARGET_CONNECTIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getTargetConnections());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Constraint parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Constraint parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Constraint parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Constraint parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Constraint parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Constraint parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Constraint parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Constraint 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 api.Graphik.Constraint parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Constraint 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 api.Graphik.Constraint parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Constraint 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(api.Graphik.Constraint 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>
     * Constraint a graph primitive used to validate custom doc/connection constraints
     * </pre>
     *
     * Protobuf type {@code api.Constraint}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Constraint)
        api.Graphik.ConstraintOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Constraint_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Constraint_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Constraint.class, api.Graphik.Constraint.Builder.class);
      }

      // Construct using api.Graphik.Constraint.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        name_ = "";

        gtype_ = "";

        expression_ = "";

        targetDocs_ = false;

        targetConnections_ = false;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Constraint_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Constraint getDefaultInstanceForType() {
        return api.Graphik.Constraint.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Constraint buildPartial() {
        api.Graphik.Constraint result = new api.Graphik.Constraint(this);
        result.name_ = name_;
        result.gtype_ = gtype_;
        result.expression_ = expression_;
        result.targetDocs_ = targetDocs_;
        result.targetConnections_ = targetConnections_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Constraint other) {
        if (other == api.Graphik.Constraint.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (!other.getGtype().isEmpty()) {
          gtype_ = other.gtype_;
          onChanged();
        }
        if (!other.getExpression().isEmpty()) {
          expression_ = other.expression_;
          onChanged();
        }
        if (other.getTargetDocs() != false) {
          setTargetDocs(other.getTargetDocs());
        }
        if (other.getTargetConnections() != false) {
          setTargetConnections(other.getTargetConnections());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Constraint parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Constraint) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearName() {
        
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        name_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object gtype_ = "";
      /**
       * <code>string gtype = 2 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getGtype() {
        java.lang.Object ref = gtype_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          gtype_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string gtype = 2 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getGtypeBytes() {
        java.lang.Object ref = gtype_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gtype_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string gtype = 2 [(.validator.field) = { ... }</code>
       */
      public Builder setGtype(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        gtype_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string gtype = 2 [(.validator.field) = { ... }</code>
       */
      public Builder clearGtype() {
        
        gtype_ = getDefaultInstance().getGtype();
        onChanged();
        return this;
      }
      /**
       * <code>string gtype = 2 [(.validator.field) = { ... }</code>
       */
      public Builder setGtypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        gtype_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object expression_ = "";
      /**
       * <code>string expression = 3 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getExpression() {
        java.lang.Object ref = expression_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          expression_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string expression = 3 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getExpressionBytes() {
        java.lang.Object ref = expression_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          expression_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string expression = 3 [(.validator.field) = { ... }</code>
       */
      public Builder setExpression(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        expression_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string expression = 3 [(.validator.field) = { ... }</code>
       */
      public Builder clearExpression() {
        
        expression_ = getDefaultInstance().getExpression();
        onChanged();
        return this;
      }
      /**
       * <code>string expression = 3 [(.validator.field) = { ... }</code>
       */
      public Builder setExpressionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        expression_ = value;
        onChanged();
        return this;
      }

      private boolean targetDocs_ ;
      /**
       * <pre>
       * if target_docs is true, this validator will be applied to documents.
       * </pre>
       *
       * <code>bool target_docs = 4;</code>
       */
      public boolean getTargetDocs() {
        return targetDocs_;
      }
      /**
       * <pre>
       * if target_docs is true, this validator will be applied to documents.
       * </pre>
       *
       * <code>bool target_docs = 4;</code>
       */
      public Builder setTargetDocs(boolean value) {
        
        targetDocs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * if target_docs is true, this validator will be applied to documents.
       * </pre>
       *
       * <code>bool target_docs = 4;</code>
       */
      public Builder clearTargetDocs() {
        
        targetDocs_ = false;
        onChanged();
        return this;
      }

      private boolean targetConnections_ ;
      /**
       * <pre>
       * if target_connections is true, this validator will be applied to connections.
       * </pre>
       *
       * <code>bool target_connections = 5;</code>
       */
      public boolean getTargetConnections() {
        return targetConnections_;
      }
      /**
       * <pre>
       * if target_connections is true, this validator will be applied to connections.
       * </pre>
       *
       * <code>bool target_connections = 5;</code>
       */
      public Builder setTargetConnections(boolean value) {
        
        targetConnections_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * if target_connections is true, this validator will be applied to connections.
       * </pre>
       *
       * <code>bool target_connections = 5;</code>
       */
      public Builder clearTargetConnections() {
        
        targetConnections_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Constraint)
    }

    // @@protoc_insertion_point(class_scope:api.Constraint)
    private static final api.Graphik.Constraint DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Constraint();
    }

    public static api.Graphik.Constraint getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Constraint>
        PARSER = new com.google.protobuf.AbstractParser<Constraint>() {
      @java.lang.Override
      public Constraint parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Constraint(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Constraint getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ConstraintsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Constraints)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .api.Constraint constraints = 1;</code>
     */
    java.util.List<api.Graphik.Constraint> 
        getConstraintsList();
    /**
     * <code>repeated .api.Constraint constraints = 1;</code>
     */
    api.Graphik.Constraint getConstraints(int index);
    /**
     * <code>repeated .api.Constraint constraints = 1;</code>
     */
    int getConstraintsCount();
    /**
     * <code>repeated .api.Constraint constraints = 1;</code>
     */
    java.util.List<? extends api.Graphik.ConstraintOrBuilder> 
        getConstraintsOrBuilderList();
    /**
     * <code>repeated .api.Constraint constraints = 1;</code>
     */
    api.Graphik.ConstraintOrBuilder getConstraintsOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code api.Constraints}
   */
  public  static final class Constraints extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Constraints)
      ConstraintsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Constraints.newBuilder() to construct.
    private Constraints(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Constraints() {
      constraints_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Constraints(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                constraints_ = new java.util.ArrayList<api.Graphik.Constraint>();
                mutable_bitField0_ |= 0x00000001;
              }
              constraints_.add(
                  input.readMessage(api.Graphik.Constraint.parser(), extensionRegistry));
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          constraints_ = java.util.Collections.unmodifiableList(constraints_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Constraints_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Constraints_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Constraints.class, api.Graphik.Constraints.Builder.class);
    }

    public static final int CONSTRAINTS_FIELD_NUMBER = 1;
    private java.util.List<api.Graphik.Constraint> constraints_;
    /**
     * <code>repeated .api.Constraint constraints = 1;</code>
     */
    public java.util.List<api.Graphik.Constraint> getConstraintsList() {
      return constraints_;
    }
    /**
     * <code>repeated .api.Constraint constraints = 1;</code>
     */
    public java.util.List<? extends api.Graphik.ConstraintOrBuilder> 
        getConstraintsOrBuilderList() {
      return constraints_;
    }
    /**
     * <code>repeated .api.Constraint constraints = 1;</code>
     */
    public int getConstraintsCount() {
      return constraints_.size();
    }
    /**
     * <code>repeated .api.Constraint constraints = 1;</code>
     */
    public api.Graphik.Constraint getConstraints(int index) {
      return constraints_.get(index);
    }
    /**
     * <code>repeated .api.Constraint constraints = 1;</code>
     */
    public api.Graphik.ConstraintOrBuilder getConstraintsOrBuilder(
        int index) {
      return constraints_.get(index);
    }

    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 {
      for (int i = 0; i < constraints_.size(); i++) {
        output.writeMessage(1, constraints_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < constraints_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, constraints_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getConstraintsList()
          .equals(other.getConstraintsList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getConstraintsCount() > 0) {
        hash = (37 * hash) + CONSTRAINTS_FIELD_NUMBER;
        hash = (53 * hash) + getConstraintsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

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

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Constraints_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Constraints.class, api.Graphik.Constraints.Builder.class);
      }

      // Construct using api.Graphik.Constraints.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Constraints_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Constraints getDefaultInstanceForType() {
        return api.Graphik.Constraints.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Constraints buildPartial() {
        api.Graphik.Constraints result = new api.Graphik.Constraints(this);
        int from_bitField0_ = bitField0_;
        if (constraintsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            constraints_ = java.util.Collections.unmodifiableList(constraints_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.constraints_ = constraints_;
        } else {
          result.constraints_ = constraintsBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Constraints other) {
        if (other == api.Graphik.Constraints.getDefaultInstance()) return this;
        if (constraintsBuilder_ == null) {
          if (!other.constraints_.isEmpty()) {
            if (constraints_.isEmpty()) {
              constraints_ = other.constraints_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureConstraintsIsMutable();
              constraints_.addAll(other.constraints_);
            }
            onChanged();
          }
        } else {
          if (!other.constraints_.isEmpty()) {
            if (constraintsBuilder_.isEmpty()) {
              constraintsBuilder_.dispose();
              constraintsBuilder_ = null;
              constraints_ = other.constraints_;
              bitField0_ = (bitField0_ & ~0x00000001);
              constraintsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getConstraintsFieldBuilder() : null;
            } else {
              constraintsBuilder_.addAllMessages(other.constraints_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Constraints parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Constraints) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<api.Graphik.Constraint> constraints_ =
        java.util.Collections.emptyList();
      private void ensureConstraintsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          constraints_ = new java.util.ArrayList<api.Graphik.Constraint>(constraints_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Constraint, api.Graphik.Constraint.Builder, api.Graphik.ConstraintOrBuilder> constraintsBuilder_;

      /**
       * <code>repeated .api.Constraint constraints = 1;</code>
       */
      public java.util.List<api.Graphik.Constraint> getConstraintsList() {
        if (constraintsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(constraints_);
        } else {
          return constraintsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .api.Constraint constraints = 1;</code>
       */
      public int getConstraintsCount() {
        if (constraintsBuilder_ == null) {
          return constraints_.size();
        } else {
          return constraintsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .api.Constraint constraints = 1;</code>
       */
      public api.Graphik.Constraint getConstraints(int index) {
        if (constraintsBuilder_ == null) {
          return constraints_.get(index);
        } else {
          return constraintsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .api.Constraint constraints = 1;</code>
       */
      public Builder setConstraints(
          int index, api.Graphik.Constraint value) {
        if (constraintsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureConstraintsIsMutable();
          constraints_.set(index, value);
          onChanged();
        } else {
          constraintsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Constraint constraints = 1;</code>
       */
      public Builder setConstraints(
          int index, api.Graphik.Constraint.Builder builderForValue) {
        if (constraintsBuilder_ == null) {
          ensureConstraintsIsMutable();
          constraints_.set(index, builderForValue.build());
          onChanged();
        } else {
          constraintsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Constraint constraints = 1;</code>
       */
      public Builder addConstraints(api.Graphik.Constraint value) {
        if (constraintsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureConstraintsIsMutable();
          constraints_.add(value);
          onChanged();
        } else {
          constraintsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Constraint constraints = 1;</code>
       */
      public Builder addConstraints(
          int index, api.Graphik.Constraint value) {
        if (constraintsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureConstraintsIsMutable();
          constraints_.add(index, value);
          onChanged();
        } else {
          constraintsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Constraint constraints = 1;</code>
       */
      public Builder addConstraints(
          api.Graphik.Constraint.Builder builderForValue) {
        if (constraintsBuilder_ == null) {
          ensureConstraintsIsMutable();
          constraints_.add(builderForValue.build());
          onChanged();
        } else {
          constraintsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Constraint constraints = 1;</code>
       */
      public Builder addConstraints(
          int index, api.Graphik.Constraint.Builder builderForValue) {
        if (constraintsBuilder_ == null) {
          ensureConstraintsIsMutable();
          constraints_.add(index, builderForValue.build());
          onChanged();
        } else {
          constraintsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Constraint constraints = 1;</code>
       */
      public Builder addAllConstraints(
          java.lang.Iterable<? extends api.Graphik.Constraint> values) {
        if (constraintsBuilder_ == null) {
          ensureConstraintsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, constraints_);
          onChanged();
        } else {
          constraintsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .api.Constraint constraints = 1;</code>
       */
      public Builder clearConstraints() {
        if (constraintsBuilder_ == null) {
          constraints_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          constraintsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .api.Constraint constraints = 1;</code>
       */
      public Builder removeConstraints(int index) {
        if (constraintsBuilder_ == null) {
          ensureConstraintsIsMutable();
          constraints_.remove(index);
          onChanged();
        } else {
          constraintsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .api.Constraint constraints = 1;</code>
       */
      public api.Graphik.Constraint.Builder getConstraintsBuilder(
          int index) {
        return getConstraintsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .api.Constraint constraints = 1;</code>
       */
      public api.Graphik.ConstraintOrBuilder getConstraintsOrBuilder(
          int index) {
        if (constraintsBuilder_ == null) {
          return constraints_.get(index);  } else {
          return constraintsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .api.Constraint constraints = 1;</code>
       */
      public java.util.List<? extends api.Graphik.ConstraintOrBuilder> 
           getConstraintsOrBuilderList() {
        if (constraintsBuilder_ != null) {
          return constraintsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(constraints_);
        }
      }
      /**
       * <code>repeated .api.Constraint constraints = 1;</code>
       */
      public api.Graphik.Constraint.Builder addConstraintsBuilder() {
        return getConstraintsFieldBuilder().addBuilder(
            api.Graphik.Constraint.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Constraint constraints = 1;</code>
       */
      public api.Graphik.Constraint.Builder addConstraintsBuilder(
          int index) {
        return getConstraintsFieldBuilder().addBuilder(
            index, api.Graphik.Constraint.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Constraint constraints = 1;</code>
       */
      public java.util.List<api.Graphik.Constraint.Builder> 
           getConstraintsBuilderList() {
        return getConstraintsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Constraint, api.Graphik.Constraint.Builder, api.Graphik.ConstraintOrBuilder> 
          getConstraintsFieldBuilder() {
        if (constraintsBuilder_ == null) {
          constraintsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              api.Graphik.Constraint, api.Graphik.Constraint.Builder, api.Graphik.ConstraintOrBuilder>(
                  constraints_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          constraints_ = null;
        }
        return constraintsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Constraints)
    }

    // @@protoc_insertion_point(class_scope:api.Constraints)
    private static final api.Graphik.Constraints DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Constraints();
    }

    public static api.Graphik.Constraints getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Constraints>
        PARSER = new com.google.protobuf.AbstractParser<Constraints>() {
      @java.lang.Override
      public Constraints parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Constraints(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Constraints getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface IndexOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Index)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    java.lang.String getName();
    /**
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <pre>
     * gtype is the doc/connection type to be filtered
     * </pre>
     *
     * <code>string gtype = 3 [(.validator.field) = { ... }</code>
     */
    java.lang.String getGtype();
    /**
     * <pre>
     * gtype is the doc/connection type to be filtered
     * </pre>
     *
     * <code>string gtype = 3 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getGtypeBytes();

    /**
     * <pre>
     * expression is a CEL expression used to filter connections/modes
     * </pre>
     *
     * <code>string expression = 4 [(.validator.field) = { ... }</code>
     */
    java.lang.String getExpression();
    /**
     * <pre>
     * expression is a CEL expression used to filter connections/modes
     * </pre>
     *
     * <code>string expression = 4 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getExpressionBytes();

    /**
     * <pre>
     * if target_docs is true, this index will be applied to documents.
     * </pre>
     *
     * <code>bool target_docs = 5;</code>
     */
    boolean getTargetDocs();

    /**
     * <pre>
     * if target_connections is true, this index will be applied to connections.
     * </pre>
     *
     * <code>bool target_connections = 6;</code>
     */
    boolean getTargetConnections();
  }
  /**
   * <pre>
   * Index is a secondary index
   * </pre>
   *
   * Protobuf type {@code api.Index}
   */
  public  static final class Index extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Index)
      IndexOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Index.newBuilder() to construct.
    private Index(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Index() {
      name_ = "";
      gtype_ = "";
      expression_ = "";
      targetDocs_ = false;
      targetConnections_ = false;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Index(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              name_ = s;
              break;
            }
            case 26: {
              java.lang.String s = input.readStringRequireUtf8();

              gtype_ = s;
              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();

              expression_ = s;
              break;
            }
            case 40: {

              targetDocs_ = input.readBool();
              break;
            }
            case 48: {

              targetConnections_ = input.readBool();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Index_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Index_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Index.class, api.Graphik.Index.Builder.class);
    }

    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int GTYPE_FIELD_NUMBER = 3;
    private volatile java.lang.Object gtype_;
    /**
     * <pre>
     * gtype is the doc/connection type to be filtered
     * </pre>
     *
     * <code>string gtype = 3 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getGtype() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        gtype_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * gtype is the doc/connection type to be filtered
     * </pre>
     *
     * <code>string gtype = 3 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getGtypeBytes() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gtype_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int EXPRESSION_FIELD_NUMBER = 4;
    private volatile java.lang.Object expression_;
    /**
     * <pre>
     * expression is a CEL expression used to filter connections/modes
     * </pre>
     *
     * <code>string expression = 4 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getExpression() {
      java.lang.Object ref = expression_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        expression_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * expression is a CEL expression used to filter connections/modes
     * </pre>
     *
     * <code>string expression = 4 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getExpressionBytes() {
      java.lang.Object ref = expression_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        expression_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TARGET_DOCS_FIELD_NUMBER = 5;
    private boolean targetDocs_;
    /**
     * <pre>
     * if target_docs is true, this index will be applied to documents.
     * </pre>
     *
     * <code>bool target_docs = 5;</code>
     */
    public boolean getTargetDocs() {
      return targetDocs_;
    }

    public static final int TARGET_CONNECTIONS_FIELD_NUMBER = 6;
    private boolean targetConnections_;
    /**
     * <pre>
     * if target_connections is true, this index will be applied to connections.
     * </pre>
     *
     * <code>bool target_connections = 6;</code>
     */
    public boolean getTargetConnections() {
      return targetConnections_;
    }

    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 (!getNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
      }
      if (!getGtypeBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, gtype_);
      }
      if (!getExpressionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, expression_);
      }
      if (targetDocs_ != false) {
        output.writeBool(5, targetDocs_);
      }
      if (targetConnections_ != false) {
        output.writeBool(6, targetConnections_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
      }
      if (!getGtypeBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, gtype_);
      }
      if (!getExpressionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, expression_);
      }
      if (targetDocs_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, targetDocs_);
      }
      if (targetConnections_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, targetConnections_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getName()
          .equals(other.getName());
      result = result && getGtype()
          .equals(other.getGtype());
      result = result && getExpression()
          .equals(other.getExpression());
      result = result && (getTargetDocs()
          == other.getTargetDocs());
      result = result && (getTargetConnections()
          == other.getTargetConnections());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      hash = (37 * hash) + GTYPE_FIELD_NUMBER;
      hash = (53 * hash) + getGtype().hashCode();
      hash = (37 * hash) + EXPRESSION_FIELD_NUMBER;
      hash = (53 * hash) + getExpression().hashCode();
      hash = (37 * hash) + TARGET_DOCS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getTargetDocs());
      hash = (37 * hash) + TARGET_CONNECTIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getTargetConnections());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Index parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Index parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Index parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Index parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Index parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Index parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Index parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Index 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 api.Graphik.Index parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Index 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 api.Graphik.Index parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Index 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(api.Graphik.Index 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>
     * Index is a secondary index
     * </pre>
     *
     * Protobuf type {@code api.Index}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Index)
        api.Graphik.IndexOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Index_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Index_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Index.class, api.Graphik.Index.Builder.class);
      }

      // Construct using api.Graphik.Index.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        name_ = "";

        gtype_ = "";

        expression_ = "";

        targetDocs_ = false;

        targetConnections_ = false;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Index_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Index getDefaultInstanceForType() {
        return api.Graphik.Index.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Index buildPartial() {
        api.Graphik.Index result = new api.Graphik.Index(this);
        result.name_ = name_;
        result.gtype_ = gtype_;
        result.expression_ = expression_;
        result.targetDocs_ = targetDocs_;
        result.targetConnections_ = targetConnections_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Index other) {
        if (other == api.Graphik.Index.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (!other.getGtype().isEmpty()) {
          gtype_ = other.gtype_;
          onChanged();
        }
        if (!other.getExpression().isEmpty()) {
          expression_ = other.expression_;
          onChanged();
        }
        if (other.getTargetDocs() != false) {
          setTargetDocs(other.getTargetDocs());
        }
        if (other.getTargetConnections() != false) {
          setTargetConnections(other.getTargetConnections());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Index parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Index) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearName() {
        
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        name_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object gtype_ = "";
      /**
       * <pre>
       * gtype is the doc/connection type to be filtered
       * </pre>
       *
       * <code>string gtype = 3 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getGtype() {
        java.lang.Object ref = gtype_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          gtype_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * gtype is the doc/connection type to be filtered
       * </pre>
       *
       * <code>string gtype = 3 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getGtypeBytes() {
        java.lang.Object ref = gtype_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gtype_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * gtype is the doc/connection type to be filtered
       * </pre>
       *
       * <code>string gtype = 3 [(.validator.field) = { ... }</code>
       */
      public Builder setGtype(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        gtype_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * gtype is the doc/connection type to be filtered
       * </pre>
       *
       * <code>string gtype = 3 [(.validator.field) = { ... }</code>
       */
      public Builder clearGtype() {
        
        gtype_ = getDefaultInstance().getGtype();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * gtype is the doc/connection type to be filtered
       * </pre>
       *
       * <code>string gtype = 3 [(.validator.field) = { ... }</code>
       */
      public Builder setGtypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        gtype_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object expression_ = "";
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 4 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getExpression() {
        java.lang.Object ref = expression_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          expression_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 4 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getExpressionBytes() {
        java.lang.Object ref = expression_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          expression_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 4 [(.validator.field) = { ... }</code>
       */
      public Builder setExpression(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        expression_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 4 [(.validator.field) = { ... }</code>
       */
      public Builder clearExpression() {
        
        expression_ = getDefaultInstance().getExpression();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/modes
       * </pre>
       *
       * <code>string expression = 4 [(.validator.field) = { ... }</code>
       */
      public Builder setExpressionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        expression_ = value;
        onChanged();
        return this;
      }

      private boolean targetDocs_ ;
      /**
       * <pre>
       * if target_docs is true, this index will be applied to documents.
       * </pre>
       *
       * <code>bool target_docs = 5;</code>
       */
      public boolean getTargetDocs() {
        return targetDocs_;
      }
      /**
       * <pre>
       * if target_docs is true, this index will be applied to documents.
       * </pre>
       *
       * <code>bool target_docs = 5;</code>
       */
      public Builder setTargetDocs(boolean value) {
        
        targetDocs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * if target_docs is true, this index will be applied to documents.
       * </pre>
       *
       * <code>bool target_docs = 5;</code>
       */
      public Builder clearTargetDocs() {
        
        targetDocs_ = false;
        onChanged();
        return this;
      }

      private boolean targetConnections_ ;
      /**
       * <pre>
       * if target_connections is true, this index will be applied to connections.
       * </pre>
       *
       * <code>bool target_connections = 6;</code>
       */
      public boolean getTargetConnections() {
        return targetConnections_;
      }
      /**
       * <pre>
       * if target_connections is true, this index will be applied to connections.
       * </pre>
       *
       * <code>bool target_connections = 6;</code>
       */
      public Builder setTargetConnections(boolean value) {
        
        targetConnections_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * if target_connections is true, this index will be applied to connections.
       * </pre>
       *
       * <code>bool target_connections = 6;</code>
       */
      public Builder clearTargetConnections() {
        
        targetConnections_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Index)
    }

    // @@protoc_insertion_point(class_scope:api.Index)
    private static final api.Graphik.Index DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Index();
    }

    public static api.Graphik.Index getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Index>
        PARSER = new com.google.protobuf.AbstractParser<Index>() {
      @java.lang.Override
      public Index parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Index(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Index getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface IndexesOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Indexes)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .api.Index indexes = 1;</code>
     */
    java.util.List<api.Graphik.Index> 
        getIndexesList();
    /**
     * <code>repeated .api.Index indexes = 1;</code>
     */
    api.Graphik.Index getIndexes(int index);
    /**
     * <code>repeated .api.Index indexes = 1;</code>
     */
    int getIndexesCount();
    /**
     * <code>repeated .api.Index indexes = 1;</code>
     */
    java.util.List<? extends api.Graphik.IndexOrBuilder> 
        getIndexesOrBuilderList();
    /**
     * <code>repeated .api.Index indexes = 1;</code>
     */
    api.Graphik.IndexOrBuilder getIndexesOrBuilder(
        int index);
  }
  /**
   * <pre>
   * Indexes is an array of Index
   * </pre>
   *
   * Protobuf type {@code api.Indexes}
   */
  public  static final class Indexes extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Indexes)
      IndexesOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Indexes.newBuilder() to construct.
    private Indexes(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Indexes() {
      indexes_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Indexes(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                indexes_ = new java.util.ArrayList<api.Graphik.Index>();
                mutable_bitField0_ |= 0x00000001;
              }
              indexes_.add(
                  input.readMessage(api.Graphik.Index.parser(), extensionRegistry));
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          indexes_ = java.util.Collections.unmodifiableList(indexes_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Indexes_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Indexes_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Indexes.class, api.Graphik.Indexes.Builder.class);
    }

    public static final int INDEXES_FIELD_NUMBER = 1;
    private java.util.List<api.Graphik.Index> indexes_;
    /**
     * <code>repeated .api.Index indexes = 1;</code>
     */
    public java.util.List<api.Graphik.Index> getIndexesList() {
      return indexes_;
    }
    /**
     * <code>repeated .api.Index indexes = 1;</code>
     */
    public java.util.List<? extends api.Graphik.IndexOrBuilder> 
        getIndexesOrBuilderList() {
      return indexes_;
    }
    /**
     * <code>repeated .api.Index indexes = 1;</code>
     */
    public int getIndexesCount() {
      return indexes_.size();
    }
    /**
     * <code>repeated .api.Index indexes = 1;</code>
     */
    public api.Graphik.Index getIndexes(int index) {
      return indexes_.get(index);
    }
    /**
     * <code>repeated .api.Index indexes = 1;</code>
     */
    public api.Graphik.IndexOrBuilder getIndexesOrBuilder(
        int index) {
      return indexes_.get(index);
    }

    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 {
      for (int i = 0; i < indexes_.size(); i++) {
        output.writeMessage(1, indexes_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < indexes_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, indexes_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getIndexesList()
          .equals(other.getIndexesList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getIndexesCount() > 0) {
        hash = (37 * hash) + INDEXES_FIELD_NUMBER;
        hash = (53 * hash) + getIndexesList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Indexes parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Indexes parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Indexes parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Indexes parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Indexes parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Indexes parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Indexes parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Indexes 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 api.Graphik.Indexes parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Indexes 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 api.Graphik.Indexes parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Indexes 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(api.Graphik.Indexes 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>
     * Indexes is an array of Index
     * </pre>
     *
     * Protobuf type {@code api.Indexes}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Indexes)
        api.Graphik.IndexesOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Indexes_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Indexes_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Indexes.class, api.Graphik.Indexes.Builder.class);
      }

      // Construct using api.Graphik.Indexes.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Indexes_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Indexes getDefaultInstanceForType() {
        return api.Graphik.Indexes.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Indexes buildPartial() {
        api.Graphik.Indexes result = new api.Graphik.Indexes(this);
        int from_bitField0_ = bitField0_;
        if (indexesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            indexes_ = java.util.Collections.unmodifiableList(indexes_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.indexes_ = indexes_;
        } else {
          result.indexes_ = indexesBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Indexes other) {
        if (other == api.Graphik.Indexes.getDefaultInstance()) return this;
        if (indexesBuilder_ == null) {
          if (!other.indexes_.isEmpty()) {
            if (indexes_.isEmpty()) {
              indexes_ = other.indexes_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureIndexesIsMutable();
              indexes_.addAll(other.indexes_);
            }
            onChanged();
          }
        } else {
          if (!other.indexes_.isEmpty()) {
            if (indexesBuilder_.isEmpty()) {
              indexesBuilder_.dispose();
              indexesBuilder_ = null;
              indexes_ = other.indexes_;
              bitField0_ = (bitField0_ & ~0x00000001);
              indexesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getIndexesFieldBuilder() : null;
            } else {
              indexesBuilder_.addAllMessages(other.indexes_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Indexes parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Indexes) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<api.Graphik.Index> indexes_ =
        java.util.Collections.emptyList();
      private void ensureIndexesIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          indexes_ = new java.util.ArrayList<api.Graphik.Index>(indexes_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Index, api.Graphik.Index.Builder, api.Graphik.IndexOrBuilder> indexesBuilder_;

      /**
       * <code>repeated .api.Index indexes = 1;</code>
       */
      public java.util.List<api.Graphik.Index> getIndexesList() {
        if (indexesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(indexes_);
        } else {
          return indexesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .api.Index indexes = 1;</code>
       */
      public int getIndexesCount() {
        if (indexesBuilder_ == null) {
          return indexes_.size();
        } else {
          return indexesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .api.Index indexes = 1;</code>
       */
      public api.Graphik.Index getIndexes(int index) {
        if (indexesBuilder_ == null) {
          return indexes_.get(index);
        } else {
          return indexesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .api.Index indexes = 1;</code>
       */
      public Builder setIndexes(
          int index, api.Graphik.Index value) {
        if (indexesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIndexesIsMutable();
          indexes_.set(index, value);
          onChanged();
        } else {
          indexesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Index indexes = 1;</code>
       */
      public Builder setIndexes(
          int index, api.Graphik.Index.Builder builderForValue) {
        if (indexesBuilder_ == null) {
          ensureIndexesIsMutable();
          indexes_.set(index, builderForValue.build());
          onChanged();
        } else {
          indexesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Index indexes = 1;</code>
       */
      public Builder addIndexes(api.Graphik.Index value) {
        if (indexesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIndexesIsMutable();
          indexes_.add(value);
          onChanged();
        } else {
          indexesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Index indexes = 1;</code>
       */
      public Builder addIndexes(
          int index, api.Graphik.Index value) {
        if (indexesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIndexesIsMutable();
          indexes_.add(index, value);
          onChanged();
        } else {
          indexesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Index indexes = 1;</code>
       */
      public Builder addIndexes(
          api.Graphik.Index.Builder builderForValue) {
        if (indexesBuilder_ == null) {
          ensureIndexesIsMutable();
          indexes_.add(builderForValue.build());
          onChanged();
        } else {
          indexesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Index indexes = 1;</code>
       */
      public Builder addIndexes(
          int index, api.Graphik.Index.Builder builderForValue) {
        if (indexesBuilder_ == null) {
          ensureIndexesIsMutable();
          indexes_.add(index, builderForValue.build());
          onChanged();
        } else {
          indexesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Index indexes = 1;</code>
       */
      public Builder addAllIndexes(
          java.lang.Iterable<? extends api.Graphik.Index> values) {
        if (indexesBuilder_ == null) {
          ensureIndexesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, indexes_);
          onChanged();
        } else {
          indexesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .api.Index indexes = 1;</code>
       */
      public Builder clearIndexes() {
        if (indexesBuilder_ == null) {
          indexes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          indexesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .api.Index indexes = 1;</code>
       */
      public Builder removeIndexes(int index) {
        if (indexesBuilder_ == null) {
          ensureIndexesIsMutable();
          indexes_.remove(index);
          onChanged();
        } else {
          indexesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .api.Index indexes = 1;</code>
       */
      public api.Graphik.Index.Builder getIndexesBuilder(
          int index) {
        return getIndexesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .api.Index indexes = 1;</code>
       */
      public api.Graphik.IndexOrBuilder getIndexesOrBuilder(
          int index) {
        if (indexesBuilder_ == null) {
          return indexes_.get(index);  } else {
          return indexesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .api.Index indexes = 1;</code>
       */
      public java.util.List<? extends api.Graphik.IndexOrBuilder> 
           getIndexesOrBuilderList() {
        if (indexesBuilder_ != null) {
          return indexesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(indexes_);
        }
      }
      /**
       * <code>repeated .api.Index indexes = 1;</code>
       */
      public api.Graphik.Index.Builder addIndexesBuilder() {
        return getIndexesFieldBuilder().addBuilder(
            api.Graphik.Index.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Index indexes = 1;</code>
       */
      public api.Graphik.Index.Builder addIndexesBuilder(
          int index) {
        return getIndexesFieldBuilder().addBuilder(
            index, api.Graphik.Index.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Index indexes = 1;</code>
       */
      public java.util.List<api.Graphik.Index.Builder> 
           getIndexesBuilderList() {
        return getIndexesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Index, api.Graphik.Index.Builder, api.Graphik.IndexOrBuilder> 
          getIndexesFieldBuilder() {
        if (indexesBuilder_ == null) {
          indexesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              api.Graphik.Index, api.Graphik.Index.Builder, api.Graphik.IndexOrBuilder>(
                  indexes_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          indexes_ = null;
        }
        return indexesBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Indexes)
    }

    // @@protoc_insertion_point(class_scope:api.Indexes)
    private static final api.Graphik.Indexes DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Indexes();
    }

    public static api.Graphik.Indexes getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Indexes>
        PARSER = new com.google.protobuf.AbstractParser<Indexes>() {
      @java.lang.Override
      public Indexes parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Indexes(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Indexes getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface TriggerOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Trigger)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * name is the unique name of the authorizer
     * </pre>
     *
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    java.lang.String getName();
    /**
     * <pre>
     * name is the unique name of the authorizer
     * </pre>
     *
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <pre>
     * gtype is the type of doc/connection will invoke the trigger
     * </pre>
     *
     * <code>string gtype = 2 [(.validator.field) = { ... }</code>
     */
    java.lang.String getGtype();
    /**
     * <pre>
     * gtype is the type of doc/connection will invoke the trigger
     * </pre>
     *
     * <code>string gtype = 2 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getGtypeBytes();

    /**
     * <pre>
     * trigger is the arrow syntax expression that mutates the doc/connection before it is stored ref: https://github.com/graphikDB/trigger
     * </pre>
     *
     * <code>string trigger = 4 [(.validator.field) = { ... }</code>
     */
    java.lang.String getTrigger();
    /**
     * <pre>
     * trigger is the arrow syntax expression that mutates the doc/connection before it is stored ref: https://github.com/graphikDB/trigger
     * </pre>
     *
     * <code>string trigger = 4 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getTriggerBytes();

    /**
     * <pre>
     * if target_docs is true, this trigger will be applied to documents.
     * </pre>
     *
     * <code>bool target_docs = 5;</code>
     */
    boolean getTargetDocs();

    /**
     * <pre>
     * if target_connections is true, this trigger will be applied to connections.
     * </pre>
     *
     * <code>bool target_connections = 6;</code>
     */
    boolean getTargetConnections();
  }
  /**
   * <pre>
   * Trigger may be used to automatically mutate the attributes of documents/connections before they are commited to the database
   * </pre>
   *
   * Protobuf type {@code api.Trigger}
   */
  public  static final class Trigger extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Trigger)
      TriggerOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Trigger.newBuilder() to construct.
    private Trigger(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Trigger() {
      name_ = "";
      gtype_ = "";
      trigger_ = "";
      targetDocs_ = false;
      targetConnections_ = false;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Trigger(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              name_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              gtype_ = s;
              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();

              trigger_ = s;
              break;
            }
            case 40: {

              targetDocs_ = input.readBool();
              break;
            }
            case 48: {

              targetConnections_ = input.readBool();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Trigger_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Trigger_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Trigger.class, api.Graphik.Trigger.Builder.class);
    }

    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     * <pre>
     * name is the unique name of the authorizer
     * </pre>
     *
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * name is the unique name of the authorizer
     * </pre>
     *
     * <code>string name = 1 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int GTYPE_FIELD_NUMBER = 2;
    private volatile java.lang.Object gtype_;
    /**
     * <pre>
     * gtype is the type of doc/connection will invoke the trigger
     * </pre>
     *
     * <code>string gtype = 2 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getGtype() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        gtype_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * gtype is the type of doc/connection will invoke the trigger
     * </pre>
     *
     * <code>string gtype = 2 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getGtypeBytes() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gtype_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TRIGGER_FIELD_NUMBER = 4;
    private volatile java.lang.Object trigger_;
    /**
     * <pre>
     * trigger is the arrow syntax expression that mutates the doc/connection before it is stored ref: https://github.com/graphikDB/trigger
     * </pre>
     *
     * <code>string trigger = 4 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getTrigger() {
      java.lang.Object ref = trigger_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        trigger_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * trigger is the arrow syntax expression that mutates the doc/connection before it is stored ref: https://github.com/graphikDB/trigger
     * </pre>
     *
     * <code>string trigger = 4 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getTriggerBytes() {
      java.lang.Object ref = trigger_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        trigger_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TARGET_DOCS_FIELD_NUMBER = 5;
    private boolean targetDocs_;
    /**
     * <pre>
     * if target_docs is true, this trigger will be applied to documents.
     * </pre>
     *
     * <code>bool target_docs = 5;</code>
     */
    public boolean getTargetDocs() {
      return targetDocs_;
    }

    public static final int TARGET_CONNECTIONS_FIELD_NUMBER = 6;
    private boolean targetConnections_;
    /**
     * <pre>
     * if target_connections is true, this trigger will be applied to connections.
     * </pre>
     *
     * <code>bool target_connections = 6;</code>
     */
    public boolean getTargetConnections() {
      return targetConnections_;
    }

    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 (!getNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
      }
      if (!getGtypeBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, gtype_);
      }
      if (!getTriggerBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, trigger_);
      }
      if (targetDocs_ != false) {
        output.writeBool(5, targetDocs_);
      }
      if (targetConnections_ != false) {
        output.writeBool(6, targetConnections_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
      }
      if (!getGtypeBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, gtype_);
      }
      if (!getTriggerBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, trigger_);
      }
      if (targetDocs_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, targetDocs_);
      }
      if (targetConnections_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, targetConnections_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getName()
          .equals(other.getName());
      result = result && getGtype()
          .equals(other.getGtype());
      result = result && getTrigger()
          .equals(other.getTrigger());
      result = result && (getTargetDocs()
          == other.getTargetDocs());
      result = result && (getTargetConnections()
          == other.getTargetConnections());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      hash = (37 * hash) + GTYPE_FIELD_NUMBER;
      hash = (53 * hash) + getGtype().hashCode();
      hash = (37 * hash) + TRIGGER_FIELD_NUMBER;
      hash = (53 * hash) + getTrigger().hashCode();
      hash = (37 * hash) + TARGET_DOCS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getTargetDocs());
      hash = (37 * hash) + TARGET_CONNECTIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getTargetConnections());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Trigger parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Trigger parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Trigger parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Trigger parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Trigger parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Trigger parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Trigger parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Trigger 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 api.Graphik.Trigger parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Trigger 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 api.Graphik.Trigger parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Trigger 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(api.Graphik.Trigger 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>
     * Trigger may be used to automatically mutate the attributes of documents/connections before they are commited to the database
     * </pre>
     *
     * Protobuf type {@code api.Trigger}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Trigger)
        api.Graphik.TriggerOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Trigger_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Trigger_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Trigger.class, api.Graphik.Trigger.Builder.class);
      }

      // Construct using api.Graphik.Trigger.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        name_ = "";

        gtype_ = "";

        trigger_ = "";

        targetDocs_ = false;

        targetConnections_ = false;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Trigger_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Trigger getDefaultInstanceForType() {
        return api.Graphik.Trigger.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Trigger buildPartial() {
        api.Graphik.Trigger result = new api.Graphik.Trigger(this);
        result.name_ = name_;
        result.gtype_ = gtype_;
        result.trigger_ = trigger_;
        result.targetDocs_ = targetDocs_;
        result.targetConnections_ = targetConnections_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Trigger other) {
        if (other == api.Graphik.Trigger.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (!other.getGtype().isEmpty()) {
          gtype_ = other.gtype_;
          onChanged();
        }
        if (!other.getTrigger().isEmpty()) {
          trigger_ = other.trigger_;
          onChanged();
        }
        if (other.getTargetDocs() != false) {
          setTargetDocs(other.getTargetDocs());
        }
        if (other.getTargetConnections() != false) {
          setTargetConnections(other.getTargetConnections());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Trigger parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Trigger) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <pre>
       * name is the unique name of the authorizer
       * </pre>
       *
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * name is the unique name of the authorizer
       * </pre>
       *
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * name is the unique name of the authorizer
       * </pre>
       *
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * name is the unique name of the authorizer
       * </pre>
       *
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearName() {
        
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * name is the unique name of the authorizer
       * </pre>
       *
       * <code>string name = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        name_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object gtype_ = "";
      /**
       * <pre>
       * gtype is the type of doc/connection will invoke the trigger
       * </pre>
       *
       * <code>string gtype = 2 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getGtype() {
        java.lang.Object ref = gtype_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          gtype_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * gtype is the type of doc/connection will invoke the trigger
       * </pre>
       *
       * <code>string gtype = 2 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getGtypeBytes() {
        java.lang.Object ref = gtype_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gtype_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * gtype is the type of doc/connection will invoke the trigger
       * </pre>
       *
       * <code>string gtype = 2 [(.validator.field) = { ... }</code>
       */
      public Builder setGtype(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        gtype_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * gtype is the type of doc/connection will invoke the trigger
       * </pre>
       *
       * <code>string gtype = 2 [(.validator.field) = { ... }</code>
       */
      public Builder clearGtype() {
        
        gtype_ = getDefaultInstance().getGtype();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * gtype is the type of doc/connection will invoke the trigger
       * </pre>
       *
       * <code>string gtype = 2 [(.validator.field) = { ... }</code>
       */
      public Builder setGtypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        gtype_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object trigger_ = "";
      /**
       * <pre>
       * trigger is the arrow syntax expression that mutates the doc/connection before it is stored ref: https://github.com/graphikDB/trigger
       * </pre>
       *
       * <code>string trigger = 4 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getTrigger() {
        java.lang.Object ref = trigger_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          trigger_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * trigger is the arrow syntax expression that mutates the doc/connection before it is stored ref: https://github.com/graphikDB/trigger
       * </pre>
       *
       * <code>string trigger = 4 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getTriggerBytes() {
        java.lang.Object ref = trigger_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          trigger_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * trigger is the arrow syntax expression that mutates the doc/connection before it is stored ref: https://github.com/graphikDB/trigger
       * </pre>
       *
       * <code>string trigger = 4 [(.validator.field) = { ... }</code>
       */
      public Builder setTrigger(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        trigger_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * trigger is the arrow syntax expression that mutates the doc/connection before it is stored ref: https://github.com/graphikDB/trigger
       * </pre>
       *
       * <code>string trigger = 4 [(.validator.field) = { ... }</code>
       */
      public Builder clearTrigger() {
        
        trigger_ = getDefaultInstance().getTrigger();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * trigger is the arrow syntax expression that mutates the doc/connection before it is stored ref: https://github.com/graphikDB/trigger
       * </pre>
       *
       * <code>string trigger = 4 [(.validator.field) = { ... }</code>
       */
      public Builder setTriggerBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        trigger_ = value;
        onChanged();
        return this;
      }

      private boolean targetDocs_ ;
      /**
       * <pre>
       * if target_docs is true, this trigger will be applied to documents.
       * </pre>
       *
       * <code>bool target_docs = 5;</code>
       */
      public boolean getTargetDocs() {
        return targetDocs_;
      }
      /**
       * <pre>
       * if target_docs is true, this trigger will be applied to documents.
       * </pre>
       *
       * <code>bool target_docs = 5;</code>
       */
      public Builder setTargetDocs(boolean value) {
        
        targetDocs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * if target_docs is true, this trigger will be applied to documents.
       * </pre>
       *
       * <code>bool target_docs = 5;</code>
       */
      public Builder clearTargetDocs() {
        
        targetDocs_ = false;
        onChanged();
        return this;
      }

      private boolean targetConnections_ ;
      /**
       * <pre>
       * if target_connections is true, this trigger will be applied to connections.
       * </pre>
       *
       * <code>bool target_connections = 6;</code>
       */
      public boolean getTargetConnections() {
        return targetConnections_;
      }
      /**
       * <pre>
       * if target_connections is true, this trigger will be applied to connections.
       * </pre>
       *
       * <code>bool target_connections = 6;</code>
       */
      public Builder setTargetConnections(boolean value) {
        
        targetConnections_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * if target_connections is true, this trigger will be applied to connections.
       * </pre>
       *
       * <code>bool target_connections = 6;</code>
       */
      public Builder clearTargetConnections() {
        
        targetConnections_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Trigger)
    }

    // @@protoc_insertion_point(class_scope:api.Trigger)
    private static final api.Graphik.Trigger DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Trigger();
    }

    public static api.Graphik.Trigger getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Trigger>
        PARSER = new com.google.protobuf.AbstractParser<Trigger>() {
      @java.lang.Override
      public Trigger parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Trigger(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Trigger getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface TriggersOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Triggers)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .api.Trigger triggers = 1;</code>
     */
    java.util.List<api.Graphik.Trigger> 
        getTriggersList();
    /**
     * <code>repeated .api.Trigger triggers = 1;</code>
     */
    api.Graphik.Trigger getTriggers(int index);
    /**
     * <code>repeated .api.Trigger triggers = 1;</code>
     */
    int getTriggersCount();
    /**
     * <code>repeated .api.Trigger triggers = 1;</code>
     */
    java.util.List<? extends api.Graphik.TriggerOrBuilder> 
        getTriggersOrBuilderList();
    /**
     * <code>repeated .api.Trigger triggers = 1;</code>
     */
    api.Graphik.TriggerOrBuilder getTriggersOrBuilder(
        int index);
  }
  /**
   * <pre>
   * Triggers is an array of Trigger
   * </pre>
   *
   * Protobuf type {@code api.Triggers}
   */
  public  static final class Triggers extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Triggers)
      TriggersOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Triggers.newBuilder() to construct.
    private Triggers(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Triggers() {
      triggers_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Triggers(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                triggers_ = new java.util.ArrayList<api.Graphik.Trigger>();
                mutable_bitField0_ |= 0x00000001;
              }
              triggers_.add(
                  input.readMessage(api.Graphik.Trigger.parser(), extensionRegistry));
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          triggers_ = java.util.Collections.unmodifiableList(triggers_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Triggers_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Triggers_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Triggers.class, api.Graphik.Triggers.Builder.class);
    }

    public static final int TRIGGERS_FIELD_NUMBER = 1;
    private java.util.List<api.Graphik.Trigger> triggers_;
    /**
     * <code>repeated .api.Trigger triggers = 1;</code>
     */
    public java.util.List<api.Graphik.Trigger> getTriggersList() {
      return triggers_;
    }
    /**
     * <code>repeated .api.Trigger triggers = 1;</code>
     */
    public java.util.List<? extends api.Graphik.TriggerOrBuilder> 
        getTriggersOrBuilderList() {
      return triggers_;
    }
    /**
     * <code>repeated .api.Trigger triggers = 1;</code>
     */
    public int getTriggersCount() {
      return triggers_.size();
    }
    /**
     * <code>repeated .api.Trigger triggers = 1;</code>
     */
    public api.Graphik.Trigger getTriggers(int index) {
      return triggers_.get(index);
    }
    /**
     * <code>repeated .api.Trigger triggers = 1;</code>
     */
    public api.Graphik.TriggerOrBuilder getTriggersOrBuilder(
        int index) {
      return triggers_.get(index);
    }

    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 {
      for (int i = 0; i < triggers_.size(); i++) {
        output.writeMessage(1, triggers_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < triggers_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, triggers_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getTriggersList()
          .equals(other.getTriggersList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getTriggersCount() > 0) {
        hash = (37 * hash) + TRIGGERS_FIELD_NUMBER;
        hash = (53 * hash) + getTriggersList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Triggers parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Triggers parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Triggers parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Triggers parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Triggers parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Triggers parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Triggers parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Triggers 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 api.Graphik.Triggers parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Triggers 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 api.Graphik.Triggers parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Triggers 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(api.Graphik.Triggers 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>
     * Triggers is an array of Trigger
     * </pre>
     *
     * Protobuf type {@code api.Triggers}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Triggers)
        api.Graphik.TriggersOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Triggers_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Triggers_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Triggers.class, api.Graphik.Triggers.Builder.class);
      }

      // Construct using api.Graphik.Triggers.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Triggers_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Triggers getDefaultInstanceForType() {
        return api.Graphik.Triggers.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Triggers buildPartial() {
        api.Graphik.Triggers result = new api.Graphik.Triggers(this);
        int from_bitField0_ = bitField0_;
        if (triggersBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            triggers_ = java.util.Collections.unmodifiableList(triggers_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.triggers_ = triggers_;
        } else {
          result.triggers_ = triggersBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Triggers other) {
        if (other == api.Graphik.Triggers.getDefaultInstance()) return this;
        if (triggersBuilder_ == null) {
          if (!other.triggers_.isEmpty()) {
            if (triggers_.isEmpty()) {
              triggers_ = other.triggers_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureTriggersIsMutable();
              triggers_.addAll(other.triggers_);
            }
            onChanged();
          }
        } else {
          if (!other.triggers_.isEmpty()) {
            if (triggersBuilder_.isEmpty()) {
              triggersBuilder_.dispose();
              triggersBuilder_ = null;
              triggers_ = other.triggers_;
              bitField0_ = (bitField0_ & ~0x00000001);
              triggersBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getTriggersFieldBuilder() : null;
            } else {
              triggersBuilder_.addAllMessages(other.triggers_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Triggers parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Triggers) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<api.Graphik.Trigger> triggers_ =
        java.util.Collections.emptyList();
      private void ensureTriggersIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          triggers_ = new java.util.ArrayList<api.Graphik.Trigger>(triggers_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Trigger, api.Graphik.Trigger.Builder, api.Graphik.TriggerOrBuilder> triggersBuilder_;

      /**
       * <code>repeated .api.Trigger triggers = 1;</code>
       */
      public java.util.List<api.Graphik.Trigger> getTriggersList() {
        if (triggersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(triggers_);
        } else {
          return triggersBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .api.Trigger triggers = 1;</code>
       */
      public int getTriggersCount() {
        if (triggersBuilder_ == null) {
          return triggers_.size();
        } else {
          return triggersBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .api.Trigger triggers = 1;</code>
       */
      public api.Graphik.Trigger getTriggers(int index) {
        if (triggersBuilder_ == null) {
          return triggers_.get(index);
        } else {
          return triggersBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .api.Trigger triggers = 1;</code>
       */
      public Builder setTriggers(
          int index, api.Graphik.Trigger value) {
        if (triggersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTriggersIsMutable();
          triggers_.set(index, value);
          onChanged();
        } else {
          triggersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Trigger triggers = 1;</code>
       */
      public Builder setTriggers(
          int index, api.Graphik.Trigger.Builder builderForValue) {
        if (triggersBuilder_ == null) {
          ensureTriggersIsMutable();
          triggers_.set(index, builderForValue.build());
          onChanged();
        } else {
          triggersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Trigger triggers = 1;</code>
       */
      public Builder addTriggers(api.Graphik.Trigger value) {
        if (triggersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTriggersIsMutable();
          triggers_.add(value);
          onChanged();
        } else {
          triggersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Trigger triggers = 1;</code>
       */
      public Builder addTriggers(
          int index, api.Graphik.Trigger value) {
        if (triggersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTriggersIsMutable();
          triggers_.add(index, value);
          onChanged();
        } else {
          triggersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Trigger triggers = 1;</code>
       */
      public Builder addTriggers(
          api.Graphik.Trigger.Builder builderForValue) {
        if (triggersBuilder_ == null) {
          ensureTriggersIsMutable();
          triggers_.add(builderForValue.build());
          onChanged();
        } else {
          triggersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Trigger triggers = 1;</code>
       */
      public Builder addTriggers(
          int index, api.Graphik.Trigger.Builder builderForValue) {
        if (triggersBuilder_ == null) {
          ensureTriggersIsMutable();
          triggers_.add(index, builderForValue.build());
          onChanged();
        } else {
          triggersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Trigger triggers = 1;</code>
       */
      public Builder addAllTriggers(
          java.lang.Iterable<? extends api.Graphik.Trigger> values) {
        if (triggersBuilder_ == null) {
          ensureTriggersIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, triggers_);
          onChanged();
        } else {
          triggersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .api.Trigger triggers = 1;</code>
       */
      public Builder clearTriggers() {
        if (triggersBuilder_ == null) {
          triggers_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          triggersBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .api.Trigger triggers = 1;</code>
       */
      public Builder removeTriggers(int index) {
        if (triggersBuilder_ == null) {
          ensureTriggersIsMutable();
          triggers_.remove(index);
          onChanged();
        } else {
          triggersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .api.Trigger triggers = 1;</code>
       */
      public api.Graphik.Trigger.Builder getTriggersBuilder(
          int index) {
        return getTriggersFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .api.Trigger triggers = 1;</code>
       */
      public api.Graphik.TriggerOrBuilder getTriggersOrBuilder(
          int index) {
        if (triggersBuilder_ == null) {
          return triggers_.get(index);  } else {
          return triggersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .api.Trigger triggers = 1;</code>
       */
      public java.util.List<? extends api.Graphik.TriggerOrBuilder> 
           getTriggersOrBuilderList() {
        if (triggersBuilder_ != null) {
          return triggersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(triggers_);
        }
      }
      /**
       * <code>repeated .api.Trigger triggers = 1;</code>
       */
      public api.Graphik.Trigger.Builder addTriggersBuilder() {
        return getTriggersFieldBuilder().addBuilder(
            api.Graphik.Trigger.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Trigger triggers = 1;</code>
       */
      public api.Graphik.Trigger.Builder addTriggersBuilder(
          int index) {
        return getTriggersFieldBuilder().addBuilder(
            index, api.Graphik.Trigger.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Trigger triggers = 1;</code>
       */
      public java.util.List<api.Graphik.Trigger.Builder> 
           getTriggersBuilderList() {
        return getTriggersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Trigger, api.Graphik.Trigger.Builder, api.Graphik.TriggerOrBuilder> 
          getTriggersFieldBuilder() {
        if (triggersBuilder_ == null) {
          triggersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              api.Graphik.Trigger, api.Graphik.Trigger.Builder, api.Graphik.TriggerOrBuilder>(
                  triggers_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          triggers_ = null;
        }
        return triggersBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Triggers)
    }

    // @@protoc_insertion_point(class_scope:api.Triggers)
    private static final api.Graphik.Triggers DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Triggers();
    }

    public static api.Graphik.Triggers getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Triggers>
        PARSER = new com.google.protobuf.AbstractParser<Triggers>() {
      @java.lang.Override
      public Triggers parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Triggers(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Triggers getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface StreamFilterOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.StreamFilter)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * channel is the target channel to filter from
     * </pre>
     *
     * <code>string channel = 1 [(.validator.field) = { ... }</code>
     */
    java.lang.String getChannel();
    /**
     * <pre>
     * channel is the target channel to filter from
     * </pre>
     *
     * <code>string channel = 1 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getChannelBytes();

    /**
     * <pre>
     * expression is CEL expression used to filter messages
     * </pre>
     *
     * <code>string expression = 2;</code>
     */
    java.lang.String getExpression();
    /**
     * <pre>
     * expression is CEL expression used to filter messages
     * </pre>
     *
     * <code>string expression = 2;</code>
     */
    com.google.protobuf.ByteString
        getExpressionBytes();

    /**
     * <pre>
     * minimum message timestamp to stream (optional)
     * </pre>
     *
     * <code>.google.protobuf.Timestamp min = 3;</code>
     */
    boolean hasMin();
    /**
     * <pre>
     * minimum message timestamp to stream (optional)
     * </pre>
     *
     * <code>.google.protobuf.Timestamp min = 3;</code>
     */
    com.google.protobuf.Timestamp getMin();
    /**
     * <pre>
     * minimum message timestamp to stream (optional)
     * </pre>
     *
     * <code>.google.protobuf.Timestamp min = 3;</code>
     */
    com.google.protobuf.TimestampOrBuilder getMinOrBuilder();

    /**
     * <pre>
     * maximum message timestamp to stream (optional)
     * </pre>
     *
     * <code>.google.protobuf.Timestamp max = 4;</code>
     */
    boolean hasMax();
    /**
     * <pre>
     * maximum message timestamp to stream (optional)
     * </pre>
     *
     * <code>.google.protobuf.Timestamp max = 4;</code>
     */
    com.google.protobuf.Timestamp getMax();
    /**
     * <pre>
     * maximum message timestamp to stream (optional)
     * </pre>
     *
     * <code>.google.protobuf.Timestamp max = 4;</code>
     */
    com.google.protobuf.TimestampOrBuilder getMaxOrBuilder();
  }
  /**
   * <pre>
   * StreamFilter is used to filter messages in a pubsub channel
   * </pre>
   *
   * Protobuf type {@code api.StreamFilter}
   */
  public  static final class StreamFilter extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.StreamFilter)
      StreamFilterOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use StreamFilter.newBuilder() to construct.
    private StreamFilter(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private StreamFilter() {
      channel_ = "";
      expression_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private StreamFilter(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              channel_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              expression_ = s;
              break;
            }
            case 26: {
              com.google.protobuf.Timestamp.Builder subBuilder = null;
              if (min_ != null) {
                subBuilder = min_.toBuilder();
              }
              min_ = input.readMessage(com.google.protobuf.Timestamp.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(min_);
                min_ = subBuilder.buildPartial();
              }

              break;
            }
            case 34: {
              com.google.protobuf.Timestamp.Builder subBuilder = null;
              if (max_ != null) {
                subBuilder = max_.toBuilder();
              }
              max_ = input.readMessage(com.google.protobuf.Timestamp.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(max_);
                max_ = subBuilder.buildPartial();
              }

              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_StreamFilter_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_StreamFilter_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.StreamFilter.class, api.Graphik.StreamFilter.Builder.class);
    }

    public static final int CHANNEL_FIELD_NUMBER = 1;
    private volatile java.lang.Object channel_;
    /**
     * <pre>
     * channel is the target channel to filter from
     * </pre>
     *
     * <code>string channel = 1 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getChannel() {
      java.lang.Object ref = channel_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        channel_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * channel is the target channel to filter from
     * </pre>
     *
     * <code>string channel = 1 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getChannelBytes() {
      java.lang.Object ref = channel_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        channel_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int EXPRESSION_FIELD_NUMBER = 2;
    private volatile java.lang.Object expression_;
    /**
     * <pre>
     * expression is CEL expression used to filter messages
     * </pre>
     *
     * <code>string expression = 2;</code>
     */
    public java.lang.String getExpression() {
      java.lang.Object ref = expression_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        expression_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * expression is CEL expression used to filter messages
     * </pre>
     *
     * <code>string expression = 2;</code>
     */
    public com.google.protobuf.ByteString
        getExpressionBytes() {
      java.lang.Object ref = expression_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        expression_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MIN_FIELD_NUMBER = 3;
    private com.google.protobuf.Timestamp min_;
    /**
     * <pre>
     * minimum message timestamp to stream (optional)
     * </pre>
     *
     * <code>.google.protobuf.Timestamp min = 3;</code>
     */
    public boolean hasMin() {
      return min_ != null;
    }
    /**
     * <pre>
     * minimum message timestamp to stream (optional)
     * </pre>
     *
     * <code>.google.protobuf.Timestamp min = 3;</code>
     */
    public com.google.protobuf.Timestamp getMin() {
      return min_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : min_;
    }
    /**
     * <pre>
     * minimum message timestamp to stream (optional)
     * </pre>
     *
     * <code>.google.protobuf.Timestamp min = 3;</code>
     */
    public com.google.protobuf.TimestampOrBuilder getMinOrBuilder() {
      return getMin();
    }

    public static final int MAX_FIELD_NUMBER = 4;
    private com.google.protobuf.Timestamp max_;
    /**
     * <pre>
     * maximum message timestamp to stream (optional)
     * </pre>
     *
     * <code>.google.protobuf.Timestamp max = 4;</code>
     */
    public boolean hasMax() {
      return max_ != null;
    }
    /**
     * <pre>
     * maximum message timestamp to stream (optional)
     * </pre>
     *
     * <code>.google.protobuf.Timestamp max = 4;</code>
     */
    public com.google.protobuf.Timestamp getMax() {
      return max_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : max_;
    }
    /**
     * <pre>
     * maximum message timestamp to stream (optional)
     * </pre>
     *
     * <code>.google.protobuf.Timestamp max = 4;</code>
     */
    public com.google.protobuf.TimestampOrBuilder getMaxOrBuilder() {
      return getMax();
    }

    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 (!getChannelBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, channel_);
      }
      if (!getExpressionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, expression_);
      }
      if (min_ != null) {
        output.writeMessage(3, getMin());
      }
      if (max_ != null) {
        output.writeMessage(4, getMax());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getChannelBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, channel_);
      }
      if (!getExpressionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, expression_);
      }
      if (min_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getMin());
      }
      if (max_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getMax());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getChannel()
          .equals(other.getChannel());
      result = result && getExpression()
          .equals(other.getExpression());
      result = result && (hasMin() == other.hasMin());
      if (hasMin()) {
        result = result && getMin()
            .equals(other.getMin());
      }
      result = result && (hasMax() == other.hasMax());
      if (hasMax()) {
        result = result && getMax()
            .equals(other.getMax());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + CHANNEL_FIELD_NUMBER;
      hash = (53 * hash) + getChannel().hashCode();
      hash = (37 * hash) + EXPRESSION_FIELD_NUMBER;
      hash = (53 * hash) + getExpression().hashCode();
      if (hasMin()) {
        hash = (37 * hash) + MIN_FIELD_NUMBER;
        hash = (53 * hash) + getMin().hashCode();
      }
      if (hasMax()) {
        hash = (37 * hash) + MAX_FIELD_NUMBER;
        hash = (53 * hash) + getMax().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.StreamFilter parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.StreamFilter parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.StreamFilter parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.StreamFilter parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.StreamFilter parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.StreamFilter parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.StreamFilter parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.StreamFilter 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 api.Graphik.StreamFilter parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.StreamFilter 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 api.Graphik.StreamFilter parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.StreamFilter 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(api.Graphik.StreamFilter 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>
     * StreamFilter is used to filter messages in a pubsub channel
     * </pre>
     *
     * Protobuf type {@code api.StreamFilter}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.StreamFilter)
        api.Graphik.StreamFilterOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_StreamFilter_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_StreamFilter_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.StreamFilter.class, api.Graphik.StreamFilter.Builder.class);
      }

      // Construct using api.Graphik.StreamFilter.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        channel_ = "";

        expression_ = "";

        if (minBuilder_ == null) {
          min_ = null;
        } else {
          min_ = null;
          minBuilder_ = null;
        }
        if (maxBuilder_ == null) {
          max_ = null;
        } else {
          max_ = null;
          maxBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_StreamFilter_descriptor;
      }

      @java.lang.Override
      public api.Graphik.StreamFilter getDefaultInstanceForType() {
        return api.Graphik.StreamFilter.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.StreamFilter buildPartial() {
        api.Graphik.StreamFilter result = new api.Graphik.StreamFilter(this);
        result.channel_ = channel_;
        result.expression_ = expression_;
        if (minBuilder_ == null) {
          result.min_ = min_;
        } else {
          result.min_ = minBuilder_.build();
        }
        if (maxBuilder_ == null) {
          result.max_ = max_;
        } else {
          result.max_ = maxBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.StreamFilter other) {
        if (other == api.Graphik.StreamFilter.getDefaultInstance()) return this;
        if (!other.getChannel().isEmpty()) {
          channel_ = other.channel_;
          onChanged();
        }
        if (!other.getExpression().isEmpty()) {
          expression_ = other.expression_;
          onChanged();
        }
        if (other.hasMin()) {
          mergeMin(other.getMin());
        }
        if (other.hasMax()) {
          mergeMax(other.getMax());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.StreamFilter parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.StreamFilter) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object channel_ = "";
      /**
       * <pre>
       * channel is the target channel to filter from
       * </pre>
       *
       * <code>string channel = 1 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getChannel() {
        java.lang.Object ref = channel_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          channel_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * channel is the target channel to filter from
       * </pre>
       *
       * <code>string channel = 1 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getChannelBytes() {
        java.lang.Object ref = channel_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          channel_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * channel is the target channel to filter from
       * </pre>
       *
       * <code>string channel = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setChannel(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        channel_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * channel is the target channel to filter from
       * </pre>
       *
       * <code>string channel = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearChannel() {
        
        channel_ = getDefaultInstance().getChannel();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * channel is the target channel to filter from
       * </pre>
       *
       * <code>string channel = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setChannelBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        channel_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object expression_ = "";
      /**
       * <pre>
       * expression is CEL expression used to filter messages
       * </pre>
       *
       * <code>string expression = 2;</code>
       */
      public java.lang.String getExpression() {
        java.lang.Object ref = expression_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          expression_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * expression is CEL expression used to filter messages
       * </pre>
       *
       * <code>string expression = 2;</code>
       */
      public com.google.protobuf.ByteString
          getExpressionBytes() {
        java.lang.Object ref = expression_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          expression_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * expression is CEL expression used to filter messages
       * </pre>
       *
       * <code>string expression = 2;</code>
       */
      public Builder setExpression(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        expression_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * expression is CEL expression used to filter messages
       * </pre>
       *
       * <code>string expression = 2;</code>
       */
      public Builder clearExpression() {
        
        expression_ = getDefaultInstance().getExpression();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * expression is CEL expression used to filter messages
       * </pre>
       *
       * <code>string expression = 2;</code>
       */
      public Builder setExpressionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        expression_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.Timestamp min_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> minBuilder_;
      /**
       * <pre>
       * minimum message timestamp to stream (optional)
       * </pre>
       *
       * <code>.google.protobuf.Timestamp min = 3;</code>
       */
      public boolean hasMin() {
        return minBuilder_ != null || min_ != null;
      }
      /**
       * <pre>
       * minimum message timestamp to stream (optional)
       * </pre>
       *
       * <code>.google.protobuf.Timestamp min = 3;</code>
       */
      public com.google.protobuf.Timestamp getMin() {
        if (minBuilder_ == null) {
          return min_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : min_;
        } else {
          return minBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * minimum message timestamp to stream (optional)
       * </pre>
       *
       * <code>.google.protobuf.Timestamp min = 3;</code>
       */
      public Builder setMin(com.google.protobuf.Timestamp value) {
        if (minBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          min_ = value;
          onChanged();
        } else {
          minBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * minimum message timestamp to stream (optional)
       * </pre>
       *
       * <code>.google.protobuf.Timestamp min = 3;</code>
       */
      public Builder setMin(
          com.google.protobuf.Timestamp.Builder builderForValue) {
        if (minBuilder_ == null) {
          min_ = builderForValue.build();
          onChanged();
        } else {
          minBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * minimum message timestamp to stream (optional)
       * </pre>
       *
       * <code>.google.protobuf.Timestamp min = 3;</code>
       */
      public Builder mergeMin(com.google.protobuf.Timestamp value) {
        if (minBuilder_ == null) {
          if (min_ != null) {
            min_ =
              com.google.protobuf.Timestamp.newBuilder(min_).mergeFrom(value).buildPartial();
          } else {
            min_ = value;
          }
          onChanged();
        } else {
          minBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * minimum message timestamp to stream (optional)
       * </pre>
       *
       * <code>.google.protobuf.Timestamp min = 3;</code>
       */
      public Builder clearMin() {
        if (minBuilder_ == null) {
          min_ = null;
          onChanged();
        } else {
          min_ = null;
          minBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * minimum message timestamp to stream (optional)
       * </pre>
       *
       * <code>.google.protobuf.Timestamp min = 3;</code>
       */
      public com.google.protobuf.Timestamp.Builder getMinBuilder() {
        
        onChanged();
        return getMinFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * minimum message timestamp to stream (optional)
       * </pre>
       *
       * <code>.google.protobuf.Timestamp min = 3;</code>
       */
      public com.google.protobuf.TimestampOrBuilder getMinOrBuilder() {
        if (minBuilder_ != null) {
          return minBuilder_.getMessageOrBuilder();
        } else {
          return min_ == null ?
              com.google.protobuf.Timestamp.getDefaultInstance() : min_;
        }
      }
      /**
       * <pre>
       * minimum message timestamp to stream (optional)
       * </pre>
       *
       * <code>.google.protobuf.Timestamp min = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
          getMinFieldBuilder() {
        if (minBuilder_ == null) {
          minBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                  getMin(),
                  getParentForChildren(),
                  isClean());
          min_ = null;
        }
        return minBuilder_;
      }

      private com.google.protobuf.Timestamp max_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> maxBuilder_;
      /**
       * <pre>
       * maximum message timestamp to stream (optional)
       * </pre>
       *
       * <code>.google.protobuf.Timestamp max = 4;</code>
       */
      public boolean hasMax() {
        return maxBuilder_ != null || max_ != null;
      }
      /**
       * <pre>
       * maximum message timestamp to stream (optional)
       * </pre>
       *
       * <code>.google.protobuf.Timestamp max = 4;</code>
       */
      public com.google.protobuf.Timestamp getMax() {
        if (maxBuilder_ == null) {
          return max_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : max_;
        } else {
          return maxBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * maximum message timestamp to stream (optional)
       * </pre>
       *
       * <code>.google.protobuf.Timestamp max = 4;</code>
       */
      public Builder setMax(com.google.protobuf.Timestamp value) {
        if (maxBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          max_ = value;
          onChanged();
        } else {
          maxBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * maximum message timestamp to stream (optional)
       * </pre>
       *
       * <code>.google.protobuf.Timestamp max = 4;</code>
       */
      public Builder setMax(
          com.google.protobuf.Timestamp.Builder builderForValue) {
        if (maxBuilder_ == null) {
          max_ = builderForValue.build();
          onChanged();
        } else {
          maxBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * maximum message timestamp to stream (optional)
       * </pre>
       *
       * <code>.google.protobuf.Timestamp max = 4;</code>
       */
      public Builder mergeMax(com.google.protobuf.Timestamp value) {
        if (maxBuilder_ == null) {
          if (max_ != null) {
            max_ =
              com.google.protobuf.Timestamp.newBuilder(max_).mergeFrom(value).buildPartial();
          } else {
            max_ = value;
          }
          onChanged();
        } else {
          maxBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * maximum message timestamp to stream (optional)
       * </pre>
       *
       * <code>.google.protobuf.Timestamp max = 4;</code>
       */
      public Builder clearMax() {
        if (maxBuilder_ == null) {
          max_ = null;
          onChanged();
        } else {
          max_ = null;
          maxBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * maximum message timestamp to stream (optional)
       * </pre>
       *
       * <code>.google.protobuf.Timestamp max = 4;</code>
       */
      public com.google.protobuf.Timestamp.Builder getMaxBuilder() {
        
        onChanged();
        return getMaxFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * maximum message timestamp to stream (optional)
       * </pre>
       *
       * <code>.google.protobuf.Timestamp max = 4;</code>
       */
      public com.google.protobuf.TimestampOrBuilder getMaxOrBuilder() {
        if (maxBuilder_ != null) {
          return maxBuilder_.getMessageOrBuilder();
        } else {
          return max_ == null ?
              com.google.protobuf.Timestamp.getDefaultInstance() : max_;
        }
      }
      /**
       * <pre>
       * maximum message timestamp to stream (optional)
       * </pre>
       *
       * <code>.google.protobuf.Timestamp max = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
          getMaxFieldBuilder() {
        if (maxBuilder_ == null) {
          maxBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                  getMax(),
                  getParentForChildren(),
                  isClean());
          max_ = null;
        }
        return maxBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.StreamFilter)
    }

    // @@protoc_insertion_point(class_scope:api.StreamFilter)
    private static final api.Graphik.StreamFilter DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.StreamFilter();
    }

    public static api.Graphik.StreamFilter getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<StreamFilter>
        PARSER = new com.google.protobuf.AbstractParser<StreamFilter>() {
      @java.lang.Override
      public StreamFilter parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new StreamFilter(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.StreamFilter getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface GraphOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Graph)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * docs are docs present in the graph
     * </pre>
     *
     * <code>.api.Docs docs = 1;</code>
     */
    boolean hasDocs();
    /**
     * <pre>
     * docs are docs present in the graph
     * </pre>
     *
     * <code>.api.Docs docs = 1;</code>
     */
    api.Graphik.Docs getDocs();
    /**
     * <pre>
     * docs are docs present in the graph
     * </pre>
     *
     * <code>.api.Docs docs = 1;</code>
     */
    api.Graphik.DocsOrBuilder getDocsOrBuilder();

    /**
     * <pre>
     * connections are connections present in the graph
     * </pre>
     *
     * <code>.api.Connections connections = 2;</code>
     */
    boolean hasConnections();
    /**
     * <pre>
     * connections are connections present in the graph
     * </pre>
     *
     * <code>.api.Connections connections = 2;</code>
     */
    api.Graphik.Connections getConnections();
    /**
     * <pre>
     * connections are connections present in the graph
     * </pre>
     *
     * <code>.api.Connections connections = 2;</code>
     */
    api.Graphik.ConnectionsOrBuilder getConnectionsOrBuilder();
  }
  /**
   * <pre>
   * Graph is an array of docs and connections
   * </pre>
   *
   * Protobuf type {@code api.Graph}
   */
  public  static final class Graph extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Graph)
      GraphOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Graph.newBuilder() to construct.
    private Graph(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Graph() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Graph(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              api.Graphik.Docs.Builder subBuilder = null;
              if (docs_ != null) {
                subBuilder = docs_.toBuilder();
              }
              docs_ = input.readMessage(api.Graphik.Docs.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(docs_);
                docs_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              api.Graphik.Connections.Builder subBuilder = null;
              if (connections_ != null) {
                subBuilder = connections_.toBuilder();
              }
              connections_ = input.readMessage(api.Graphik.Connections.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(connections_);
                connections_ = subBuilder.buildPartial();
              }

              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Graph_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Graph_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Graph.class, api.Graphik.Graph.Builder.class);
    }

    public static final int DOCS_FIELD_NUMBER = 1;
    private api.Graphik.Docs docs_;
    /**
     * <pre>
     * docs are docs present in the graph
     * </pre>
     *
     * <code>.api.Docs docs = 1;</code>
     */
    public boolean hasDocs() {
      return docs_ != null;
    }
    /**
     * <pre>
     * docs are docs present in the graph
     * </pre>
     *
     * <code>.api.Docs docs = 1;</code>
     */
    public api.Graphik.Docs getDocs() {
      return docs_ == null ? api.Graphik.Docs.getDefaultInstance() : docs_;
    }
    /**
     * <pre>
     * docs are docs present in the graph
     * </pre>
     *
     * <code>.api.Docs docs = 1;</code>
     */
    public api.Graphik.DocsOrBuilder getDocsOrBuilder() {
      return getDocs();
    }

    public static final int CONNECTIONS_FIELD_NUMBER = 2;
    private api.Graphik.Connections connections_;
    /**
     * <pre>
     * connections are connections present in the graph
     * </pre>
     *
     * <code>.api.Connections connections = 2;</code>
     */
    public boolean hasConnections() {
      return connections_ != null;
    }
    /**
     * <pre>
     * connections are connections present in the graph
     * </pre>
     *
     * <code>.api.Connections connections = 2;</code>
     */
    public api.Graphik.Connections getConnections() {
      return connections_ == null ? api.Graphik.Connections.getDefaultInstance() : connections_;
    }
    /**
     * <pre>
     * connections are connections present in the graph
     * </pre>
     *
     * <code>.api.Connections connections = 2;</code>
     */
    public api.Graphik.ConnectionsOrBuilder getConnectionsOrBuilder() {
      return getConnections();
    }

    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 (docs_ != null) {
        output.writeMessage(1, getDocs());
      }
      if (connections_ != null) {
        output.writeMessage(2, getConnections());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (docs_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getDocs());
      }
      if (connections_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getConnections());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && (hasDocs() == other.hasDocs());
      if (hasDocs()) {
        result = result && getDocs()
            .equals(other.getDocs());
      }
      result = result && (hasConnections() == other.hasConnections());
      if (hasConnections()) {
        result = result && getConnections()
            .equals(other.getConnections());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasDocs()) {
        hash = (37 * hash) + DOCS_FIELD_NUMBER;
        hash = (53 * hash) + getDocs().hashCode();
      }
      if (hasConnections()) {
        hash = (37 * hash) + CONNECTIONS_FIELD_NUMBER;
        hash = (53 * hash) + getConnections().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Graph parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Graph parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Graph parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Graph parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Graph parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Graph parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Graph parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Graph 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 api.Graphik.Graph parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Graph 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 api.Graphik.Graph parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Graph 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(api.Graphik.Graph 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>
     * Graph is an array of docs and connections
     * </pre>
     *
     * Protobuf type {@code api.Graph}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Graph)
        api.Graphik.GraphOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Graph_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Graph_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Graph.class, api.Graphik.Graph.Builder.class);
      }

      // Construct using api.Graphik.Graph.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (docsBuilder_ == null) {
          docs_ = null;
        } else {
          docs_ = null;
          docsBuilder_ = null;
        }
        if (connectionsBuilder_ == null) {
          connections_ = null;
        } else {
          connections_ = null;
          connectionsBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Graph_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Graph getDefaultInstanceForType() {
        return api.Graphik.Graph.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Graph buildPartial() {
        api.Graphik.Graph result = new api.Graphik.Graph(this);
        if (docsBuilder_ == null) {
          result.docs_ = docs_;
        } else {
          result.docs_ = docsBuilder_.build();
        }
        if (connectionsBuilder_ == null) {
          result.connections_ = connections_;
        } else {
          result.connections_ = connectionsBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Graph other) {
        if (other == api.Graphik.Graph.getDefaultInstance()) return this;
        if (other.hasDocs()) {
          mergeDocs(other.getDocs());
        }
        if (other.hasConnections()) {
          mergeConnections(other.getConnections());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Graph parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Graph) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private api.Graphik.Docs docs_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Docs, api.Graphik.Docs.Builder, api.Graphik.DocsOrBuilder> docsBuilder_;
      /**
       * <pre>
       * docs are docs present in the graph
       * </pre>
       *
       * <code>.api.Docs docs = 1;</code>
       */
      public boolean hasDocs() {
        return docsBuilder_ != null || docs_ != null;
      }
      /**
       * <pre>
       * docs are docs present in the graph
       * </pre>
       *
       * <code>.api.Docs docs = 1;</code>
       */
      public api.Graphik.Docs getDocs() {
        if (docsBuilder_ == null) {
          return docs_ == null ? api.Graphik.Docs.getDefaultInstance() : docs_;
        } else {
          return docsBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * docs are docs present in the graph
       * </pre>
       *
       * <code>.api.Docs docs = 1;</code>
       */
      public Builder setDocs(api.Graphik.Docs value) {
        if (docsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          docs_ = value;
          onChanged();
        } else {
          docsBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * docs are docs present in the graph
       * </pre>
       *
       * <code>.api.Docs docs = 1;</code>
       */
      public Builder setDocs(
          api.Graphik.Docs.Builder builderForValue) {
        if (docsBuilder_ == null) {
          docs_ = builderForValue.build();
          onChanged();
        } else {
          docsBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * docs are docs present in the graph
       * </pre>
       *
       * <code>.api.Docs docs = 1;</code>
       */
      public Builder mergeDocs(api.Graphik.Docs value) {
        if (docsBuilder_ == null) {
          if (docs_ != null) {
            docs_ =
              api.Graphik.Docs.newBuilder(docs_).mergeFrom(value).buildPartial();
          } else {
            docs_ = value;
          }
          onChanged();
        } else {
          docsBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * docs are docs present in the graph
       * </pre>
       *
       * <code>.api.Docs docs = 1;</code>
       */
      public Builder clearDocs() {
        if (docsBuilder_ == null) {
          docs_ = null;
          onChanged();
        } else {
          docs_ = null;
          docsBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * docs are docs present in the graph
       * </pre>
       *
       * <code>.api.Docs docs = 1;</code>
       */
      public api.Graphik.Docs.Builder getDocsBuilder() {
        
        onChanged();
        return getDocsFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * docs are docs present in the graph
       * </pre>
       *
       * <code>.api.Docs docs = 1;</code>
       */
      public api.Graphik.DocsOrBuilder getDocsOrBuilder() {
        if (docsBuilder_ != null) {
          return docsBuilder_.getMessageOrBuilder();
        } else {
          return docs_ == null ?
              api.Graphik.Docs.getDefaultInstance() : docs_;
        }
      }
      /**
       * <pre>
       * docs are docs present in the graph
       * </pre>
       *
       * <code>.api.Docs docs = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Docs, api.Graphik.Docs.Builder, api.Graphik.DocsOrBuilder> 
          getDocsFieldBuilder() {
        if (docsBuilder_ == null) {
          docsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Docs, api.Graphik.Docs.Builder, api.Graphik.DocsOrBuilder>(
                  getDocs(),
                  getParentForChildren(),
                  isClean());
          docs_ = null;
        }
        return docsBuilder_;
      }

      private api.Graphik.Connections connections_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Connections, api.Graphik.Connections.Builder, api.Graphik.ConnectionsOrBuilder> connectionsBuilder_;
      /**
       * <pre>
       * connections are connections present in the graph
       * </pre>
       *
       * <code>.api.Connections connections = 2;</code>
       */
      public boolean hasConnections() {
        return connectionsBuilder_ != null || connections_ != null;
      }
      /**
       * <pre>
       * connections are connections present in the graph
       * </pre>
       *
       * <code>.api.Connections connections = 2;</code>
       */
      public api.Graphik.Connections getConnections() {
        if (connectionsBuilder_ == null) {
          return connections_ == null ? api.Graphik.Connections.getDefaultInstance() : connections_;
        } else {
          return connectionsBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * connections are connections present in the graph
       * </pre>
       *
       * <code>.api.Connections connections = 2;</code>
       */
      public Builder setConnections(api.Graphik.Connections value) {
        if (connectionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          connections_ = value;
          onChanged();
        } else {
          connectionsBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * connections are connections present in the graph
       * </pre>
       *
       * <code>.api.Connections connections = 2;</code>
       */
      public Builder setConnections(
          api.Graphik.Connections.Builder builderForValue) {
        if (connectionsBuilder_ == null) {
          connections_ = builderForValue.build();
          onChanged();
        } else {
          connectionsBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * connections are connections present in the graph
       * </pre>
       *
       * <code>.api.Connections connections = 2;</code>
       */
      public Builder mergeConnections(api.Graphik.Connections value) {
        if (connectionsBuilder_ == null) {
          if (connections_ != null) {
            connections_ =
              api.Graphik.Connections.newBuilder(connections_).mergeFrom(value).buildPartial();
          } else {
            connections_ = value;
          }
          onChanged();
        } else {
          connectionsBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * connections are connections present in the graph
       * </pre>
       *
       * <code>.api.Connections connections = 2;</code>
       */
      public Builder clearConnections() {
        if (connectionsBuilder_ == null) {
          connections_ = null;
          onChanged();
        } else {
          connections_ = null;
          connectionsBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * connections are connections present in the graph
       * </pre>
       *
       * <code>.api.Connections connections = 2;</code>
       */
      public api.Graphik.Connections.Builder getConnectionsBuilder() {
        
        onChanged();
        return getConnectionsFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * connections are connections present in the graph
       * </pre>
       *
       * <code>.api.Connections connections = 2;</code>
       */
      public api.Graphik.ConnectionsOrBuilder getConnectionsOrBuilder() {
        if (connectionsBuilder_ != null) {
          return connectionsBuilder_.getMessageOrBuilder();
        } else {
          return connections_ == null ?
              api.Graphik.Connections.getDefaultInstance() : connections_;
        }
      }
      /**
       * <pre>
       * connections are connections present in the graph
       * </pre>
       *
       * <code>.api.Connections connections = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Connections, api.Graphik.Connections.Builder, api.Graphik.ConnectionsOrBuilder> 
          getConnectionsFieldBuilder() {
        if (connectionsBuilder_ == null) {
          connectionsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Connections, api.Graphik.Connections.Builder, api.Graphik.ConnectionsOrBuilder>(
                  getConnections(),
                  getParentForChildren(),
                  isClean());
          connections_ = null;
        }
        return connectionsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Graph)
    }

    // @@protoc_insertion_point(class_scope:api.Graph)
    private static final api.Graphik.Graph DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Graph();
    }

    public static api.Graphik.Graph getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Graph>
        PARSER = new com.google.protobuf.AbstractParser<Graph>() {
      @java.lang.Override
      public Graph parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Graph(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Graph getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface FlagsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Flags)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * open id connect discovery uri ex: https://accounts.google.com/.well-known/openid-configuration (env: GRAPHIK_OPEN_ID)
     * </pre>
     *
     * <code>string open_id_discovery = 1;</code>
     */
    java.lang.String getOpenIdDiscovery();
    /**
     * <pre>
     * open id connect discovery uri ex: https://accounts.google.com/.well-known/openid-configuration (env: GRAPHIK_OPEN_ID)
     * </pre>
     *
     * <code>string open_id_discovery = 1;</code>
     */
    com.google.protobuf.ByteString
        getOpenIdDiscoveryBytes();

    /**
     * <pre>
     * persistant storage ref (env: GRAPHIK_STORAGE_PATH)
     * </pre>
     *
     * <code>string storage_path = 2;</code>
     */
    java.lang.String getStoragePath();
    /**
     * <pre>
     * persistant storage ref (env: GRAPHIK_STORAGE_PATH)
     * </pre>
     *
     * <code>string storage_path = 2;</code>
     */
    com.google.protobuf.ByteString
        getStoragePathBytes();

    /**
     * <pre>
     * cors allow headers (env: GRAPHIK_ALLOW_HEADERS)
     * </pre>
     *
     * <code>repeated string allow_headers = 5;</code>
     */
    java.util.List<java.lang.String>
        getAllowHeadersList();
    /**
     * <pre>
     * cors allow headers (env: GRAPHIK_ALLOW_HEADERS)
     * </pre>
     *
     * <code>repeated string allow_headers = 5;</code>
     */
    int getAllowHeadersCount();
    /**
     * <pre>
     * cors allow headers (env: GRAPHIK_ALLOW_HEADERS)
     * </pre>
     *
     * <code>repeated string allow_headers = 5;</code>
     */
    java.lang.String getAllowHeaders(int index);
    /**
     * <pre>
     * cors allow headers (env: GRAPHIK_ALLOW_HEADERS)
     * </pre>
     *
     * <code>repeated string allow_headers = 5;</code>
     */
    com.google.protobuf.ByteString
        getAllowHeadersBytes(int index);

    /**
     * <pre>
     * cors allow methods (env: GRAPHIK_ALLOW_METHODS)
     * </pre>
     *
     * <code>repeated string allow_methods = 6;</code>
     */
    java.util.List<java.lang.String>
        getAllowMethodsList();
    /**
     * <pre>
     * cors allow methods (env: GRAPHIK_ALLOW_METHODS)
     * </pre>
     *
     * <code>repeated string allow_methods = 6;</code>
     */
    int getAllowMethodsCount();
    /**
     * <pre>
     * cors allow methods (env: GRAPHIK_ALLOW_METHODS)
     * </pre>
     *
     * <code>repeated string allow_methods = 6;</code>
     */
    java.lang.String getAllowMethods(int index);
    /**
     * <pre>
     * cors allow methods (env: GRAPHIK_ALLOW_METHODS)
     * </pre>
     *
     * <code>repeated string allow_methods = 6;</code>
     */
    com.google.protobuf.ByteString
        getAllowMethodsBytes(int index);

    /**
     * <pre>
     * cors allow origins (env: GRAPHIK_ALLOW_ORIGINS)
     * </pre>
     *
     * <code>repeated string allow_origins = 7;</code>
     */
    java.util.List<java.lang.String>
        getAllowOriginsList();
    /**
     * <pre>
     * cors allow origins (env: GRAPHIK_ALLOW_ORIGINS)
     * </pre>
     *
     * <code>repeated string allow_origins = 7;</code>
     */
    int getAllowOriginsCount();
    /**
     * <pre>
     * cors allow origins (env: GRAPHIK_ALLOW_ORIGINS)
     * </pre>
     *
     * <code>repeated string allow_origins = 7;</code>
     */
    java.lang.String getAllowOrigins(int index);
    /**
     * <pre>
     * cors allow origins (env: GRAPHIK_ALLOW_ORIGINS)
     * </pre>
     *
     * <code>repeated string allow_origins = 7;</code>
     */
    com.google.protobuf.ByteString
        getAllowOriginsBytes(int index);

    /**
     * <pre>
     * root user is a list of email addresses that bypass authorizers. (env: GRAPHIK_ROOT_USERS)
     * </pre>
     *
     * <code>repeated string root_users = 8;</code>
     */
    java.util.List<java.lang.String>
        getRootUsersList();
    /**
     * <pre>
     * root user is a list of email addresses that bypass authorizers. (env: GRAPHIK_ROOT_USERS)
     * </pre>
     *
     * <code>repeated string root_users = 8;</code>
     */
    int getRootUsersCount();
    /**
     * <pre>
     * root user is a list of email addresses that bypass authorizers. (env: GRAPHIK_ROOT_USERS)
     * </pre>
     *
     * <code>repeated string root_users = 8;</code>
     */
    java.lang.String getRootUsers(int index);
    /**
     * <pre>
     * root user is a list of email addresses that bypass authorizers. (env: GRAPHIK_ROOT_USERS)
     * </pre>
     *
     * <code>repeated string root_users = 8;</code>
     */
    com.google.protobuf.ByteString
        getRootUsersBytes(int index);

    /**
     * <code>string tls_cert = 9;</code>
     */
    java.lang.String getTlsCert();
    /**
     * <code>string tls_cert = 9;</code>
     */
    com.google.protobuf.ByteString
        getTlsCertBytes();

    /**
     * <code>string tls_key = 10;</code>
     */
    java.lang.String getTlsKey();
    /**
     * <code>string tls_key = 10;</code>
     */
    com.google.protobuf.ByteString
        getTlsKeyBytes();

    /**
     * <code>bool require_request_authorizers = 15;</code>
     */
    boolean getRequireRequestAuthorizers();

    /**
     * <code>bool require_response_authorizers = 16;</code>
     */
    boolean getRequireResponseAuthorizers();

    /**
     * <code>string join_raft = 17;</code>
     */
    java.lang.String getJoinRaft();
    /**
     * <code>string join_raft = 17;</code>
     */
    com.google.protobuf.ByteString
        getJoinRaftBytes();

    /**
     * <code>string raft_peer_id = 18;</code>
     */
    java.lang.String getRaftPeerId();
    /**
     * <code>string raft_peer_id = 18;</code>
     */
    com.google.protobuf.ByteString
        getRaftPeerIdBytes();

    /**
     * <code>int64 listen_port = 19;</code>
     */
    long getListenPort();

    /**
     * <code>string raft_secret = 20;</code>
     */
    java.lang.String getRaftSecret();
    /**
     * <code>string raft_secret = 20;</code>
     */
    com.google.protobuf.ByteString
        getRaftSecretBytes();

    /**
     * <code>bool debug = 21;</code>
     */
    boolean getDebug();

    /**
     * <code>string environment = 22;</code>
     */
    java.lang.String getEnvironment();
    /**
     * <code>string environment = 22;</code>
     */
    com.google.protobuf.ByteString
        getEnvironmentBytes();

    /**
     * <code>string raft_advertise = 23;</code>
     */
    java.lang.String getRaftAdvertise();
    /**
     * <code>string raft_advertise = 23;</code>
     */
    com.google.protobuf.ByteString
        getRaftAdvertiseBytes();

    /**
     * <code>int64 raft_max_pool = 24;</code>
     */
    long getRaftMaxPool();

    /**
     * <code>bool mutual_tls = 25;</code>
     */
    boolean getMutualTls();

    /**
     * <code>string ca_cert = 26;</code>
     */
    java.lang.String getCaCert();
    /**
     * <code>string ca_cert = 26;</code>
     */
    com.google.protobuf.ByteString
        getCaCertBytes();

    /**
     * <code>bool enable_ui = 27;</code>
     */
    boolean getEnableUi();
  }
  /**
   * Protobuf type {@code api.Flags}
   */
  public  static final class Flags extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Flags)
      FlagsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Flags.newBuilder() to construct.
    private Flags(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Flags() {
      openIdDiscovery_ = "";
      storagePath_ = "";
      allowHeaders_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      allowMethods_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      allowOrigins_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      rootUsers_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      tlsCert_ = "";
      tlsKey_ = "";
      requireRequestAuthorizers_ = false;
      requireResponseAuthorizers_ = false;
      joinRaft_ = "";
      raftPeerId_ = "";
      listenPort_ = 0L;
      raftSecret_ = "";
      debug_ = false;
      environment_ = "";
      raftAdvertise_ = "";
      raftMaxPool_ = 0L;
      mutualTls_ = false;
      caCert_ = "";
      enableUi_ = false;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Flags(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              openIdDiscovery_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              storagePath_ = s;
              break;
            }
            case 42: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                allowHeaders_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000004;
              }
              allowHeaders_.add(s);
              break;
            }
            case 50: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                allowMethods_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000008;
              }
              allowMethods_.add(s);
              break;
            }
            case 58: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                allowOrigins_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000010;
              }
              allowOrigins_.add(s);
              break;
            }
            case 66: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                rootUsers_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000020;
              }
              rootUsers_.add(s);
              break;
            }
            case 74: {
              java.lang.String s = input.readStringRequireUtf8();

              tlsCert_ = s;
              break;
            }
            case 82: {
              java.lang.String s = input.readStringRequireUtf8();

              tlsKey_ = s;
              break;
            }
            case 120: {

              requireRequestAuthorizers_ = input.readBool();
              break;
            }
            case 128: {

              requireResponseAuthorizers_ = input.readBool();
              break;
            }
            case 138: {
              java.lang.String s = input.readStringRequireUtf8();

              joinRaft_ = s;
              break;
            }
            case 146: {
              java.lang.String s = input.readStringRequireUtf8();

              raftPeerId_ = s;
              break;
            }
            case 152: {

              listenPort_ = input.readInt64();
              break;
            }
            case 162: {
              java.lang.String s = input.readStringRequireUtf8();

              raftSecret_ = s;
              break;
            }
            case 168: {

              debug_ = input.readBool();
              break;
            }
            case 178: {
              java.lang.String s = input.readStringRequireUtf8();

              environment_ = s;
              break;
            }
            case 186: {
              java.lang.String s = input.readStringRequireUtf8();

              raftAdvertise_ = s;
              break;
            }
            case 192: {

              raftMaxPool_ = input.readInt64();
              break;
            }
            case 200: {

              mutualTls_ = input.readBool();
              break;
            }
            case 210: {
              java.lang.String s = input.readStringRequireUtf8();

              caCert_ = s;
              break;
            }
            case 216: {

              enableUi_ = input.readBool();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          allowHeaders_ = allowHeaders_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          allowMethods_ = allowMethods_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          allowOrigins_ = allowOrigins_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          rootUsers_ = rootUsers_.getUnmodifiableView();
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Flags_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Flags_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Flags.class, api.Graphik.Flags.Builder.class);
    }

    private int bitField0_;
    public static final int OPEN_ID_DISCOVERY_FIELD_NUMBER = 1;
    private volatile java.lang.Object openIdDiscovery_;
    /**
     * <pre>
     * open id connect discovery uri ex: https://accounts.google.com/.well-known/openid-configuration (env: GRAPHIK_OPEN_ID)
     * </pre>
     *
     * <code>string open_id_discovery = 1;</code>
     */
    public java.lang.String getOpenIdDiscovery() {
      java.lang.Object ref = openIdDiscovery_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        openIdDiscovery_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * open id connect discovery uri ex: https://accounts.google.com/.well-known/openid-configuration (env: GRAPHIK_OPEN_ID)
     * </pre>
     *
     * <code>string open_id_discovery = 1;</code>
     */
    public com.google.protobuf.ByteString
        getOpenIdDiscoveryBytes() {
      java.lang.Object ref = openIdDiscovery_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        openIdDiscovery_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int STORAGE_PATH_FIELD_NUMBER = 2;
    private volatile java.lang.Object storagePath_;
    /**
     * <pre>
     * persistant storage ref (env: GRAPHIK_STORAGE_PATH)
     * </pre>
     *
     * <code>string storage_path = 2;</code>
     */
    public java.lang.String getStoragePath() {
      java.lang.Object ref = storagePath_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        storagePath_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * persistant storage ref (env: GRAPHIK_STORAGE_PATH)
     * </pre>
     *
     * <code>string storage_path = 2;</code>
     */
    public com.google.protobuf.ByteString
        getStoragePathBytes() {
      java.lang.Object ref = storagePath_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        storagePath_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ALLOW_HEADERS_FIELD_NUMBER = 5;
    private com.google.protobuf.LazyStringList allowHeaders_;
    /**
     * <pre>
     * cors allow headers (env: GRAPHIK_ALLOW_HEADERS)
     * </pre>
     *
     * <code>repeated string allow_headers = 5;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getAllowHeadersList() {
      return allowHeaders_;
    }
    /**
     * <pre>
     * cors allow headers (env: GRAPHIK_ALLOW_HEADERS)
     * </pre>
     *
     * <code>repeated string allow_headers = 5;</code>
     */
    public int getAllowHeadersCount() {
      return allowHeaders_.size();
    }
    /**
     * <pre>
     * cors allow headers (env: GRAPHIK_ALLOW_HEADERS)
     * </pre>
     *
     * <code>repeated string allow_headers = 5;</code>
     */
    public java.lang.String getAllowHeaders(int index) {
      return allowHeaders_.get(index);
    }
    /**
     * <pre>
     * cors allow headers (env: GRAPHIK_ALLOW_HEADERS)
     * </pre>
     *
     * <code>repeated string allow_headers = 5;</code>
     */
    public com.google.protobuf.ByteString
        getAllowHeadersBytes(int index) {
      return allowHeaders_.getByteString(index);
    }

    public static final int ALLOW_METHODS_FIELD_NUMBER = 6;
    private com.google.protobuf.LazyStringList allowMethods_;
    /**
     * <pre>
     * cors allow methods (env: GRAPHIK_ALLOW_METHODS)
     * </pre>
     *
     * <code>repeated string allow_methods = 6;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getAllowMethodsList() {
      return allowMethods_;
    }
    /**
     * <pre>
     * cors allow methods (env: GRAPHIK_ALLOW_METHODS)
     * </pre>
     *
     * <code>repeated string allow_methods = 6;</code>
     */
    public int getAllowMethodsCount() {
      return allowMethods_.size();
    }
    /**
     * <pre>
     * cors allow methods (env: GRAPHIK_ALLOW_METHODS)
     * </pre>
     *
     * <code>repeated string allow_methods = 6;</code>
     */
    public java.lang.String getAllowMethods(int index) {
      return allowMethods_.get(index);
    }
    /**
     * <pre>
     * cors allow methods (env: GRAPHIK_ALLOW_METHODS)
     * </pre>
     *
     * <code>repeated string allow_methods = 6;</code>
     */
    public com.google.protobuf.ByteString
        getAllowMethodsBytes(int index) {
      return allowMethods_.getByteString(index);
    }

    public static final int ALLOW_ORIGINS_FIELD_NUMBER = 7;
    private com.google.protobuf.LazyStringList allowOrigins_;
    /**
     * <pre>
     * cors allow origins (env: GRAPHIK_ALLOW_ORIGINS)
     * </pre>
     *
     * <code>repeated string allow_origins = 7;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getAllowOriginsList() {
      return allowOrigins_;
    }
    /**
     * <pre>
     * cors allow origins (env: GRAPHIK_ALLOW_ORIGINS)
     * </pre>
     *
     * <code>repeated string allow_origins = 7;</code>
     */
    public int getAllowOriginsCount() {
      return allowOrigins_.size();
    }
    /**
     * <pre>
     * cors allow origins (env: GRAPHIK_ALLOW_ORIGINS)
     * </pre>
     *
     * <code>repeated string allow_origins = 7;</code>
     */
    public java.lang.String getAllowOrigins(int index) {
      return allowOrigins_.get(index);
    }
    /**
     * <pre>
     * cors allow origins (env: GRAPHIK_ALLOW_ORIGINS)
     * </pre>
     *
     * <code>repeated string allow_origins = 7;</code>
     */
    public com.google.protobuf.ByteString
        getAllowOriginsBytes(int index) {
      return allowOrigins_.getByteString(index);
    }

    public static final int ROOT_USERS_FIELD_NUMBER = 8;
    private com.google.protobuf.LazyStringList rootUsers_;
    /**
     * <pre>
     * root user is a list of email addresses that bypass authorizers. (env: GRAPHIK_ROOT_USERS)
     * </pre>
     *
     * <code>repeated string root_users = 8;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getRootUsersList() {
      return rootUsers_;
    }
    /**
     * <pre>
     * root user is a list of email addresses that bypass authorizers. (env: GRAPHIK_ROOT_USERS)
     * </pre>
     *
     * <code>repeated string root_users = 8;</code>
     */
    public int getRootUsersCount() {
      return rootUsers_.size();
    }
    /**
     * <pre>
     * root user is a list of email addresses that bypass authorizers. (env: GRAPHIK_ROOT_USERS)
     * </pre>
     *
     * <code>repeated string root_users = 8;</code>
     */
    public java.lang.String getRootUsers(int index) {
      return rootUsers_.get(index);
    }
    /**
     * <pre>
     * root user is a list of email addresses that bypass authorizers. (env: GRAPHIK_ROOT_USERS)
     * </pre>
     *
     * <code>repeated string root_users = 8;</code>
     */
    public com.google.protobuf.ByteString
        getRootUsersBytes(int index) {
      return rootUsers_.getByteString(index);
    }

    public static final int TLS_CERT_FIELD_NUMBER = 9;
    private volatile java.lang.Object tlsCert_;
    /**
     * <code>string tls_cert = 9;</code>
     */
    public java.lang.String getTlsCert() {
      java.lang.Object ref = tlsCert_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        tlsCert_ = s;
        return s;
      }
    }
    /**
     * <code>string tls_cert = 9;</code>
     */
    public com.google.protobuf.ByteString
        getTlsCertBytes() {
      java.lang.Object ref = tlsCert_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        tlsCert_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TLS_KEY_FIELD_NUMBER = 10;
    private volatile java.lang.Object tlsKey_;
    /**
     * <code>string tls_key = 10;</code>
     */
    public java.lang.String getTlsKey() {
      java.lang.Object ref = tlsKey_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        tlsKey_ = s;
        return s;
      }
    }
    /**
     * <code>string tls_key = 10;</code>
     */
    public com.google.protobuf.ByteString
        getTlsKeyBytes() {
      java.lang.Object ref = tlsKey_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        tlsKey_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int REQUIRE_REQUEST_AUTHORIZERS_FIELD_NUMBER = 15;
    private boolean requireRequestAuthorizers_;
    /**
     * <code>bool require_request_authorizers = 15;</code>
     */
    public boolean getRequireRequestAuthorizers() {
      return requireRequestAuthorizers_;
    }

    public static final int REQUIRE_RESPONSE_AUTHORIZERS_FIELD_NUMBER = 16;
    private boolean requireResponseAuthorizers_;
    /**
     * <code>bool require_response_authorizers = 16;</code>
     */
    public boolean getRequireResponseAuthorizers() {
      return requireResponseAuthorizers_;
    }

    public static final int JOIN_RAFT_FIELD_NUMBER = 17;
    private volatile java.lang.Object joinRaft_;
    /**
     * <code>string join_raft = 17;</code>
     */
    public java.lang.String getJoinRaft() {
      java.lang.Object ref = joinRaft_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        joinRaft_ = s;
        return s;
      }
    }
    /**
     * <code>string join_raft = 17;</code>
     */
    public com.google.protobuf.ByteString
        getJoinRaftBytes() {
      java.lang.Object ref = joinRaft_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        joinRaft_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int RAFT_PEER_ID_FIELD_NUMBER = 18;
    private volatile java.lang.Object raftPeerId_;
    /**
     * <code>string raft_peer_id = 18;</code>
     */
    public java.lang.String getRaftPeerId() {
      java.lang.Object ref = raftPeerId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        raftPeerId_ = s;
        return s;
      }
    }
    /**
     * <code>string raft_peer_id = 18;</code>
     */
    public com.google.protobuf.ByteString
        getRaftPeerIdBytes() {
      java.lang.Object ref = raftPeerId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        raftPeerId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int LISTEN_PORT_FIELD_NUMBER = 19;
    private long listenPort_;
    /**
     * <code>int64 listen_port = 19;</code>
     */
    public long getListenPort() {
      return listenPort_;
    }

    public static final int RAFT_SECRET_FIELD_NUMBER = 20;
    private volatile java.lang.Object raftSecret_;
    /**
     * <code>string raft_secret = 20;</code>
     */
    public java.lang.String getRaftSecret() {
      java.lang.Object ref = raftSecret_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        raftSecret_ = s;
        return s;
      }
    }
    /**
     * <code>string raft_secret = 20;</code>
     */
    public com.google.protobuf.ByteString
        getRaftSecretBytes() {
      java.lang.Object ref = raftSecret_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        raftSecret_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DEBUG_FIELD_NUMBER = 21;
    private boolean debug_;
    /**
     * <code>bool debug = 21;</code>
     */
    public boolean getDebug() {
      return debug_;
    }

    public static final int ENVIRONMENT_FIELD_NUMBER = 22;
    private volatile java.lang.Object environment_;
    /**
     * <code>string environment = 22;</code>
     */
    public java.lang.String getEnvironment() {
      java.lang.Object ref = environment_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        environment_ = s;
        return s;
      }
    }
    /**
     * <code>string environment = 22;</code>
     */
    public com.google.protobuf.ByteString
        getEnvironmentBytes() {
      java.lang.Object ref = environment_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        environment_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int RAFT_ADVERTISE_FIELD_NUMBER = 23;
    private volatile java.lang.Object raftAdvertise_;
    /**
     * <code>string raft_advertise = 23;</code>
     */
    public java.lang.String getRaftAdvertise() {
      java.lang.Object ref = raftAdvertise_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        raftAdvertise_ = s;
        return s;
      }
    }
    /**
     * <code>string raft_advertise = 23;</code>
     */
    public com.google.protobuf.ByteString
        getRaftAdvertiseBytes() {
      java.lang.Object ref = raftAdvertise_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        raftAdvertise_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int RAFT_MAX_POOL_FIELD_NUMBER = 24;
    private long raftMaxPool_;
    /**
     * <code>int64 raft_max_pool = 24;</code>
     */
    public long getRaftMaxPool() {
      return raftMaxPool_;
    }

    public static final int MUTUAL_TLS_FIELD_NUMBER = 25;
    private boolean mutualTls_;
    /**
     * <code>bool mutual_tls = 25;</code>
     */
    public boolean getMutualTls() {
      return mutualTls_;
    }

    public static final int CA_CERT_FIELD_NUMBER = 26;
    private volatile java.lang.Object caCert_;
    /**
     * <code>string ca_cert = 26;</code>
     */
    public java.lang.String getCaCert() {
      java.lang.Object ref = caCert_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        caCert_ = s;
        return s;
      }
    }
    /**
     * <code>string ca_cert = 26;</code>
     */
    public com.google.protobuf.ByteString
        getCaCertBytes() {
      java.lang.Object ref = caCert_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        caCert_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ENABLE_UI_FIELD_NUMBER = 27;
    private boolean enableUi_;
    /**
     * <code>bool enable_ui = 27;</code>
     */
    public boolean getEnableUi() {
      return enableUi_;
    }

    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 (!getOpenIdDiscoveryBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, openIdDiscovery_);
      }
      if (!getStoragePathBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, storagePath_);
      }
      for (int i = 0; i < allowHeaders_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, allowHeaders_.getRaw(i));
      }
      for (int i = 0; i < allowMethods_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, allowMethods_.getRaw(i));
      }
      for (int i = 0; i < allowOrigins_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, allowOrigins_.getRaw(i));
      }
      for (int i = 0; i < rootUsers_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 8, rootUsers_.getRaw(i));
      }
      if (!getTlsCertBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 9, tlsCert_);
      }
      if (!getTlsKeyBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 10, tlsKey_);
      }
      if (requireRequestAuthorizers_ != false) {
        output.writeBool(15, requireRequestAuthorizers_);
      }
      if (requireResponseAuthorizers_ != false) {
        output.writeBool(16, requireResponseAuthorizers_);
      }
      if (!getJoinRaftBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 17, joinRaft_);
      }
      if (!getRaftPeerIdBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 18, raftPeerId_);
      }
      if (listenPort_ != 0L) {
        output.writeInt64(19, listenPort_);
      }
      if (!getRaftSecretBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 20, raftSecret_);
      }
      if (debug_ != false) {
        output.writeBool(21, debug_);
      }
      if (!getEnvironmentBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 22, environment_);
      }
      if (!getRaftAdvertiseBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 23, raftAdvertise_);
      }
      if (raftMaxPool_ != 0L) {
        output.writeInt64(24, raftMaxPool_);
      }
      if (mutualTls_ != false) {
        output.writeBool(25, mutualTls_);
      }
      if (!getCaCertBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 26, caCert_);
      }
      if (enableUi_ != false) {
        output.writeBool(27, enableUi_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getOpenIdDiscoveryBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, openIdDiscovery_);
      }
      if (!getStoragePathBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, storagePath_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < allowHeaders_.size(); i++) {
          dataSize += computeStringSizeNoTag(allowHeaders_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getAllowHeadersList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < allowMethods_.size(); i++) {
          dataSize += computeStringSizeNoTag(allowMethods_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getAllowMethodsList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < allowOrigins_.size(); i++) {
          dataSize += computeStringSizeNoTag(allowOrigins_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getAllowOriginsList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < rootUsers_.size(); i++) {
          dataSize += computeStringSizeNoTag(rootUsers_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getRootUsersList().size();
      }
      if (!getTlsCertBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(9, tlsCert_);
      }
      if (!getTlsKeyBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(10, tlsKey_);
      }
      if (requireRequestAuthorizers_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(15, requireRequestAuthorizers_);
      }
      if (requireResponseAuthorizers_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(16, requireResponseAuthorizers_);
      }
      if (!getJoinRaftBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(17, joinRaft_);
      }
      if (!getRaftPeerIdBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(18, raftPeerId_);
      }
      if (listenPort_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(19, listenPort_);
      }
      if (!getRaftSecretBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(20, raftSecret_);
      }
      if (debug_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(21, debug_);
      }
      if (!getEnvironmentBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(22, environment_);
      }
      if (!getRaftAdvertiseBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(23, raftAdvertise_);
      }
      if (raftMaxPool_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(24, raftMaxPool_);
      }
      if (mutualTls_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(25, mutualTls_);
      }
      if (!getCaCertBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(26, caCert_);
      }
      if (enableUi_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(27, enableUi_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getOpenIdDiscovery()
          .equals(other.getOpenIdDiscovery());
      result = result && getStoragePath()
          .equals(other.getStoragePath());
      result = result && getAllowHeadersList()
          .equals(other.getAllowHeadersList());
      result = result && getAllowMethodsList()
          .equals(other.getAllowMethodsList());
      result = result && getAllowOriginsList()
          .equals(other.getAllowOriginsList());
      result = result && getRootUsersList()
          .equals(other.getRootUsersList());
      result = result && getTlsCert()
          .equals(other.getTlsCert());
      result = result && getTlsKey()
          .equals(other.getTlsKey());
      result = result && (getRequireRequestAuthorizers()
          == other.getRequireRequestAuthorizers());
      result = result && (getRequireResponseAuthorizers()
          == other.getRequireResponseAuthorizers());
      result = result && getJoinRaft()
          .equals(other.getJoinRaft());
      result = result && getRaftPeerId()
          .equals(other.getRaftPeerId());
      result = result && (getListenPort()
          == other.getListenPort());
      result = result && getRaftSecret()
          .equals(other.getRaftSecret());
      result = result && (getDebug()
          == other.getDebug());
      result = result && getEnvironment()
          .equals(other.getEnvironment());
      result = result && getRaftAdvertise()
          .equals(other.getRaftAdvertise());
      result = result && (getRaftMaxPool()
          == other.getRaftMaxPool());
      result = result && (getMutualTls()
          == other.getMutualTls());
      result = result && getCaCert()
          .equals(other.getCaCert());
      result = result && (getEnableUi()
          == other.getEnableUi());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + OPEN_ID_DISCOVERY_FIELD_NUMBER;
      hash = (53 * hash) + getOpenIdDiscovery().hashCode();
      hash = (37 * hash) + STORAGE_PATH_FIELD_NUMBER;
      hash = (53 * hash) + getStoragePath().hashCode();
      if (getAllowHeadersCount() > 0) {
        hash = (37 * hash) + ALLOW_HEADERS_FIELD_NUMBER;
        hash = (53 * hash) + getAllowHeadersList().hashCode();
      }
      if (getAllowMethodsCount() > 0) {
        hash = (37 * hash) + ALLOW_METHODS_FIELD_NUMBER;
        hash = (53 * hash) + getAllowMethodsList().hashCode();
      }
      if (getAllowOriginsCount() > 0) {
        hash = (37 * hash) + ALLOW_ORIGINS_FIELD_NUMBER;
        hash = (53 * hash) + getAllowOriginsList().hashCode();
      }
      if (getRootUsersCount() > 0) {
        hash = (37 * hash) + ROOT_USERS_FIELD_NUMBER;
        hash = (53 * hash) + getRootUsersList().hashCode();
      }
      hash = (37 * hash) + TLS_CERT_FIELD_NUMBER;
      hash = (53 * hash) + getTlsCert().hashCode();
      hash = (37 * hash) + TLS_KEY_FIELD_NUMBER;
      hash = (53 * hash) + getTlsKey().hashCode();
      hash = (37 * hash) + REQUIRE_REQUEST_AUTHORIZERS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getRequireRequestAuthorizers());
      hash = (37 * hash) + REQUIRE_RESPONSE_AUTHORIZERS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getRequireResponseAuthorizers());
      hash = (37 * hash) + JOIN_RAFT_FIELD_NUMBER;
      hash = (53 * hash) + getJoinRaft().hashCode();
      hash = (37 * hash) + RAFT_PEER_ID_FIELD_NUMBER;
      hash = (53 * hash) + getRaftPeerId().hashCode();
      hash = (37 * hash) + LISTEN_PORT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getListenPort());
      hash = (37 * hash) + RAFT_SECRET_FIELD_NUMBER;
      hash = (53 * hash) + getRaftSecret().hashCode();
      hash = (37 * hash) + DEBUG_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getDebug());
      hash = (37 * hash) + ENVIRONMENT_FIELD_NUMBER;
      hash = (53 * hash) + getEnvironment().hashCode();
      hash = (37 * hash) + RAFT_ADVERTISE_FIELD_NUMBER;
      hash = (53 * hash) + getRaftAdvertise().hashCode();
      hash = (37 * hash) + RAFT_MAX_POOL_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getRaftMaxPool());
      hash = (37 * hash) + MUTUAL_TLS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getMutualTls());
      hash = (37 * hash) + CA_CERT_FIELD_NUMBER;
      hash = (53 * hash) + getCaCert().hashCode();
      hash = (37 * hash) + ENABLE_UI_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getEnableUi());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

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

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Flags_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Flags.class, api.Graphik.Flags.Builder.class);
      }

      // Construct using api.Graphik.Flags.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        openIdDiscovery_ = "";

        storagePath_ = "";

        allowHeaders_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        allowMethods_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        allowOrigins_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000010);
        rootUsers_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        tlsCert_ = "";

        tlsKey_ = "";

        requireRequestAuthorizers_ = false;

        requireResponseAuthorizers_ = false;

        joinRaft_ = "";

        raftPeerId_ = "";

        listenPort_ = 0L;

        raftSecret_ = "";

        debug_ = false;

        environment_ = "";

        raftAdvertise_ = "";

        raftMaxPool_ = 0L;

        mutualTls_ = false;

        caCert_ = "";

        enableUi_ = false;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Flags_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Flags getDefaultInstanceForType() {
        return api.Graphik.Flags.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Flags buildPartial() {
        api.Graphik.Flags result = new api.Graphik.Flags(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.openIdDiscovery_ = openIdDiscovery_;
        result.storagePath_ = storagePath_;
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          allowHeaders_ = allowHeaders_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.allowHeaders_ = allowHeaders_;
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          allowMethods_ = allowMethods_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.allowMethods_ = allowMethods_;
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          allowOrigins_ = allowOrigins_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.allowOrigins_ = allowOrigins_;
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          rootUsers_ = rootUsers_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000020);
        }
        result.rootUsers_ = rootUsers_;
        result.tlsCert_ = tlsCert_;
        result.tlsKey_ = tlsKey_;
        result.requireRequestAuthorizers_ = requireRequestAuthorizers_;
        result.requireResponseAuthorizers_ = requireResponseAuthorizers_;
        result.joinRaft_ = joinRaft_;
        result.raftPeerId_ = raftPeerId_;
        result.listenPort_ = listenPort_;
        result.raftSecret_ = raftSecret_;
        result.debug_ = debug_;
        result.environment_ = environment_;
        result.raftAdvertise_ = raftAdvertise_;
        result.raftMaxPool_ = raftMaxPool_;
        result.mutualTls_ = mutualTls_;
        result.caCert_ = caCert_;
        result.enableUi_ = enableUi_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Flags other) {
        if (other == api.Graphik.Flags.getDefaultInstance()) return this;
        if (!other.getOpenIdDiscovery().isEmpty()) {
          openIdDiscovery_ = other.openIdDiscovery_;
          onChanged();
        }
        if (!other.getStoragePath().isEmpty()) {
          storagePath_ = other.storagePath_;
          onChanged();
        }
        if (!other.allowHeaders_.isEmpty()) {
          if (allowHeaders_.isEmpty()) {
            allowHeaders_ = other.allowHeaders_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureAllowHeadersIsMutable();
            allowHeaders_.addAll(other.allowHeaders_);
          }
          onChanged();
        }
        if (!other.allowMethods_.isEmpty()) {
          if (allowMethods_.isEmpty()) {
            allowMethods_ = other.allowMethods_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureAllowMethodsIsMutable();
            allowMethods_.addAll(other.allowMethods_);
          }
          onChanged();
        }
        if (!other.allowOrigins_.isEmpty()) {
          if (allowOrigins_.isEmpty()) {
            allowOrigins_ = other.allowOrigins_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureAllowOriginsIsMutable();
            allowOrigins_.addAll(other.allowOrigins_);
          }
          onChanged();
        }
        if (!other.rootUsers_.isEmpty()) {
          if (rootUsers_.isEmpty()) {
            rootUsers_ = other.rootUsers_;
            bitField0_ = (bitField0_ & ~0x00000020);
          } else {
            ensureRootUsersIsMutable();
            rootUsers_.addAll(other.rootUsers_);
          }
          onChanged();
        }
        if (!other.getTlsCert().isEmpty()) {
          tlsCert_ = other.tlsCert_;
          onChanged();
        }
        if (!other.getTlsKey().isEmpty()) {
          tlsKey_ = other.tlsKey_;
          onChanged();
        }
        if (other.getRequireRequestAuthorizers() != false) {
          setRequireRequestAuthorizers(other.getRequireRequestAuthorizers());
        }
        if (other.getRequireResponseAuthorizers() != false) {
          setRequireResponseAuthorizers(other.getRequireResponseAuthorizers());
        }
        if (!other.getJoinRaft().isEmpty()) {
          joinRaft_ = other.joinRaft_;
          onChanged();
        }
        if (!other.getRaftPeerId().isEmpty()) {
          raftPeerId_ = other.raftPeerId_;
          onChanged();
        }
        if (other.getListenPort() != 0L) {
          setListenPort(other.getListenPort());
        }
        if (!other.getRaftSecret().isEmpty()) {
          raftSecret_ = other.raftSecret_;
          onChanged();
        }
        if (other.getDebug() != false) {
          setDebug(other.getDebug());
        }
        if (!other.getEnvironment().isEmpty()) {
          environment_ = other.environment_;
          onChanged();
        }
        if (!other.getRaftAdvertise().isEmpty()) {
          raftAdvertise_ = other.raftAdvertise_;
          onChanged();
        }
        if (other.getRaftMaxPool() != 0L) {
          setRaftMaxPool(other.getRaftMaxPool());
        }
        if (other.getMutualTls() != false) {
          setMutualTls(other.getMutualTls());
        }
        if (!other.getCaCert().isEmpty()) {
          caCert_ = other.caCert_;
          onChanged();
        }
        if (other.getEnableUi() != false) {
          setEnableUi(other.getEnableUi());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Flags parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Flags) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object openIdDiscovery_ = "";
      /**
       * <pre>
       * open id connect discovery uri ex: https://accounts.google.com/.well-known/openid-configuration (env: GRAPHIK_OPEN_ID)
       * </pre>
       *
       * <code>string open_id_discovery = 1;</code>
       */
      public java.lang.String getOpenIdDiscovery() {
        java.lang.Object ref = openIdDiscovery_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          openIdDiscovery_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * open id connect discovery uri ex: https://accounts.google.com/.well-known/openid-configuration (env: GRAPHIK_OPEN_ID)
       * </pre>
       *
       * <code>string open_id_discovery = 1;</code>
       */
      public com.google.protobuf.ByteString
          getOpenIdDiscoveryBytes() {
        java.lang.Object ref = openIdDiscovery_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          openIdDiscovery_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * open id connect discovery uri ex: https://accounts.google.com/.well-known/openid-configuration (env: GRAPHIK_OPEN_ID)
       * </pre>
       *
       * <code>string open_id_discovery = 1;</code>
       */
      public Builder setOpenIdDiscovery(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        openIdDiscovery_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * open id connect discovery uri ex: https://accounts.google.com/.well-known/openid-configuration (env: GRAPHIK_OPEN_ID)
       * </pre>
       *
       * <code>string open_id_discovery = 1;</code>
       */
      public Builder clearOpenIdDiscovery() {
        
        openIdDiscovery_ = getDefaultInstance().getOpenIdDiscovery();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * open id connect discovery uri ex: https://accounts.google.com/.well-known/openid-configuration (env: GRAPHIK_OPEN_ID)
       * </pre>
       *
       * <code>string open_id_discovery = 1;</code>
       */
      public Builder setOpenIdDiscoveryBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        openIdDiscovery_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object storagePath_ = "";
      /**
       * <pre>
       * persistant storage ref (env: GRAPHIK_STORAGE_PATH)
       * </pre>
       *
       * <code>string storage_path = 2;</code>
       */
      public java.lang.String getStoragePath() {
        java.lang.Object ref = storagePath_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          storagePath_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * persistant storage ref (env: GRAPHIK_STORAGE_PATH)
       * </pre>
       *
       * <code>string storage_path = 2;</code>
       */
      public com.google.protobuf.ByteString
          getStoragePathBytes() {
        java.lang.Object ref = storagePath_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          storagePath_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * persistant storage ref (env: GRAPHIK_STORAGE_PATH)
       * </pre>
       *
       * <code>string storage_path = 2;</code>
       */
      public Builder setStoragePath(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        storagePath_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * persistant storage ref (env: GRAPHIK_STORAGE_PATH)
       * </pre>
       *
       * <code>string storage_path = 2;</code>
       */
      public Builder clearStoragePath() {
        
        storagePath_ = getDefaultInstance().getStoragePath();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * persistant storage ref (env: GRAPHIK_STORAGE_PATH)
       * </pre>
       *
       * <code>string storage_path = 2;</code>
       */
      public Builder setStoragePathBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        storagePath_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList allowHeaders_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureAllowHeadersIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          allowHeaders_ = new com.google.protobuf.LazyStringArrayList(allowHeaders_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <pre>
       * cors allow headers (env: GRAPHIK_ALLOW_HEADERS)
       * </pre>
       *
       * <code>repeated string allow_headers = 5;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getAllowHeadersList() {
        return allowHeaders_.getUnmodifiableView();
      }
      /**
       * <pre>
       * cors allow headers (env: GRAPHIK_ALLOW_HEADERS)
       * </pre>
       *
       * <code>repeated string allow_headers = 5;</code>
       */
      public int getAllowHeadersCount() {
        return allowHeaders_.size();
      }
      /**
       * <pre>
       * cors allow headers (env: GRAPHIK_ALLOW_HEADERS)
       * </pre>
       *
       * <code>repeated string allow_headers = 5;</code>
       */
      public java.lang.String getAllowHeaders(int index) {
        return allowHeaders_.get(index);
      }
      /**
       * <pre>
       * cors allow headers (env: GRAPHIK_ALLOW_HEADERS)
       * </pre>
       *
       * <code>repeated string allow_headers = 5;</code>
       */
      public com.google.protobuf.ByteString
          getAllowHeadersBytes(int index) {
        return allowHeaders_.getByteString(index);
      }
      /**
       * <pre>
       * cors allow headers (env: GRAPHIK_ALLOW_HEADERS)
       * </pre>
       *
       * <code>repeated string allow_headers = 5;</code>
       */
      public Builder setAllowHeaders(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAllowHeadersIsMutable();
        allowHeaders_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * cors allow headers (env: GRAPHIK_ALLOW_HEADERS)
       * </pre>
       *
       * <code>repeated string allow_headers = 5;</code>
       */
      public Builder addAllowHeaders(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAllowHeadersIsMutable();
        allowHeaders_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * cors allow headers (env: GRAPHIK_ALLOW_HEADERS)
       * </pre>
       *
       * <code>repeated string allow_headers = 5;</code>
       */
      public Builder addAllAllowHeaders(
          java.lang.Iterable<java.lang.String> values) {
        ensureAllowHeadersIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, allowHeaders_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * cors allow headers (env: GRAPHIK_ALLOW_HEADERS)
       * </pre>
       *
       * <code>repeated string allow_headers = 5;</code>
       */
      public Builder clearAllowHeaders() {
        allowHeaders_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * cors allow headers (env: GRAPHIK_ALLOW_HEADERS)
       * </pre>
       *
       * <code>repeated string allow_headers = 5;</code>
       */
      public Builder addAllowHeadersBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureAllowHeadersIsMutable();
        allowHeaders_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList allowMethods_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureAllowMethodsIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          allowMethods_ = new com.google.protobuf.LazyStringArrayList(allowMethods_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <pre>
       * cors allow methods (env: GRAPHIK_ALLOW_METHODS)
       * </pre>
       *
       * <code>repeated string allow_methods = 6;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getAllowMethodsList() {
        return allowMethods_.getUnmodifiableView();
      }
      /**
       * <pre>
       * cors allow methods (env: GRAPHIK_ALLOW_METHODS)
       * </pre>
       *
       * <code>repeated string allow_methods = 6;</code>
       */
      public int getAllowMethodsCount() {
        return allowMethods_.size();
      }
      /**
       * <pre>
       * cors allow methods (env: GRAPHIK_ALLOW_METHODS)
       * </pre>
       *
       * <code>repeated string allow_methods = 6;</code>
       */
      public java.lang.String getAllowMethods(int index) {
        return allowMethods_.get(index);
      }
      /**
       * <pre>
       * cors allow methods (env: GRAPHIK_ALLOW_METHODS)
       * </pre>
       *
       * <code>repeated string allow_methods = 6;</code>
       */
      public com.google.protobuf.ByteString
          getAllowMethodsBytes(int index) {
        return allowMethods_.getByteString(index);
      }
      /**
       * <pre>
       * cors allow methods (env: GRAPHIK_ALLOW_METHODS)
       * </pre>
       *
       * <code>repeated string allow_methods = 6;</code>
       */
      public Builder setAllowMethods(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAllowMethodsIsMutable();
        allowMethods_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * cors allow methods (env: GRAPHIK_ALLOW_METHODS)
       * </pre>
       *
       * <code>repeated string allow_methods = 6;</code>
       */
      public Builder addAllowMethods(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAllowMethodsIsMutable();
        allowMethods_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * cors allow methods (env: GRAPHIK_ALLOW_METHODS)
       * </pre>
       *
       * <code>repeated string allow_methods = 6;</code>
       */
      public Builder addAllAllowMethods(
          java.lang.Iterable<java.lang.String> values) {
        ensureAllowMethodsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, allowMethods_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * cors allow methods (env: GRAPHIK_ALLOW_METHODS)
       * </pre>
       *
       * <code>repeated string allow_methods = 6;</code>
       */
      public Builder clearAllowMethods() {
        allowMethods_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * cors allow methods (env: GRAPHIK_ALLOW_METHODS)
       * </pre>
       *
       * <code>repeated string allow_methods = 6;</code>
       */
      public Builder addAllowMethodsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureAllowMethodsIsMutable();
        allowMethods_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList allowOrigins_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureAllowOriginsIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          allowOrigins_ = new com.google.protobuf.LazyStringArrayList(allowOrigins_);
          bitField0_ |= 0x00000010;
         }
      }
      /**
       * <pre>
       * cors allow origins (env: GRAPHIK_ALLOW_ORIGINS)
       * </pre>
       *
       * <code>repeated string allow_origins = 7;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getAllowOriginsList() {
        return allowOrigins_.getUnmodifiableView();
      }
      /**
       * <pre>
       * cors allow origins (env: GRAPHIK_ALLOW_ORIGINS)
       * </pre>
       *
       * <code>repeated string allow_origins = 7;</code>
       */
      public int getAllowOriginsCount() {
        return allowOrigins_.size();
      }
      /**
       * <pre>
       * cors allow origins (env: GRAPHIK_ALLOW_ORIGINS)
       * </pre>
       *
       * <code>repeated string allow_origins = 7;</code>
       */
      public java.lang.String getAllowOrigins(int index) {
        return allowOrigins_.get(index);
      }
      /**
       * <pre>
       * cors allow origins (env: GRAPHIK_ALLOW_ORIGINS)
       * </pre>
       *
       * <code>repeated string allow_origins = 7;</code>
       */
      public com.google.protobuf.ByteString
          getAllowOriginsBytes(int index) {
        return allowOrigins_.getByteString(index);
      }
      /**
       * <pre>
       * cors allow origins (env: GRAPHIK_ALLOW_ORIGINS)
       * </pre>
       *
       * <code>repeated string allow_origins = 7;</code>
       */
      public Builder setAllowOrigins(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAllowOriginsIsMutable();
        allowOrigins_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * cors allow origins (env: GRAPHIK_ALLOW_ORIGINS)
       * </pre>
       *
       * <code>repeated string allow_origins = 7;</code>
       */
      public Builder addAllowOrigins(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAllowOriginsIsMutable();
        allowOrigins_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * cors allow origins (env: GRAPHIK_ALLOW_ORIGINS)
       * </pre>
       *
       * <code>repeated string allow_origins = 7;</code>
       */
      public Builder addAllAllowOrigins(
          java.lang.Iterable<java.lang.String> values) {
        ensureAllowOriginsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, allowOrigins_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * cors allow origins (env: GRAPHIK_ALLOW_ORIGINS)
       * </pre>
       *
       * <code>repeated string allow_origins = 7;</code>
       */
      public Builder clearAllowOrigins() {
        allowOrigins_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000010);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * cors allow origins (env: GRAPHIK_ALLOW_ORIGINS)
       * </pre>
       *
       * <code>repeated string allow_origins = 7;</code>
       */
      public Builder addAllowOriginsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureAllowOriginsIsMutable();
        allowOrigins_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList rootUsers_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureRootUsersIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          rootUsers_ = new com.google.protobuf.LazyStringArrayList(rootUsers_);
          bitField0_ |= 0x00000020;
         }
      }
      /**
       * <pre>
       * root user is a list of email addresses that bypass authorizers. (env: GRAPHIK_ROOT_USERS)
       * </pre>
       *
       * <code>repeated string root_users = 8;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getRootUsersList() {
        return rootUsers_.getUnmodifiableView();
      }
      /**
       * <pre>
       * root user is a list of email addresses that bypass authorizers. (env: GRAPHIK_ROOT_USERS)
       * </pre>
       *
       * <code>repeated string root_users = 8;</code>
       */
      public int getRootUsersCount() {
        return rootUsers_.size();
      }
      /**
       * <pre>
       * root user is a list of email addresses that bypass authorizers. (env: GRAPHIK_ROOT_USERS)
       * </pre>
       *
       * <code>repeated string root_users = 8;</code>
       */
      public java.lang.String getRootUsers(int index) {
        return rootUsers_.get(index);
      }
      /**
       * <pre>
       * root user is a list of email addresses that bypass authorizers. (env: GRAPHIK_ROOT_USERS)
       * </pre>
       *
       * <code>repeated string root_users = 8;</code>
       */
      public com.google.protobuf.ByteString
          getRootUsersBytes(int index) {
        return rootUsers_.getByteString(index);
      }
      /**
       * <pre>
       * root user is a list of email addresses that bypass authorizers. (env: GRAPHIK_ROOT_USERS)
       * </pre>
       *
       * <code>repeated string root_users = 8;</code>
       */
      public Builder setRootUsers(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureRootUsersIsMutable();
        rootUsers_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * root user is a list of email addresses that bypass authorizers. (env: GRAPHIK_ROOT_USERS)
       * </pre>
       *
       * <code>repeated string root_users = 8;</code>
       */
      public Builder addRootUsers(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureRootUsersIsMutable();
        rootUsers_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * root user is a list of email addresses that bypass authorizers. (env: GRAPHIK_ROOT_USERS)
       * </pre>
       *
       * <code>repeated string root_users = 8;</code>
       */
      public Builder addAllRootUsers(
          java.lang.Iterable<java.lang.String> values) {
        ensureRootUsersIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, rootUsers_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * root user is a list of email addresses that bypass authorizers. (env: GRAPHIK_ROOT_USERS)
       * </pre>
       *
       * <code>repeated string root_users = 8;</code>
       */
      public Builder clearRootUsers() {
        rootUsers_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * root user is a list of email addresses that bypass authorizers. (env: GRAPHIK_ROOT_USERS)
       * </pre>
       *
       * <code>repeated string root_users = 8;</code>
       */
      public Builder addRootUsersBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureRootUsersIsMutable();
        rootUsers_.add(value);
        onChanged();
        return this;
      }

      private java.lang.Object tlsCert_ = "";
      /**
       * <code>string tls_cert = 9;</code>
       */
      public java.lang.String getTlsCert() {
        java.lang.Object ref = tlsCert_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          tlsCert_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string tls_cert = 9;</code>
       */
      public com.google.protobuf.ByteString
          getTlsCertBytes() {
        java.lang.Object ref = tlsCert_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          tlsCert_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string tls_cert = 9;</code>
       */
      public Builder setTlsCert(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        tlsCert_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string tls_cert = 9;</code>
       */
      public Builder clearTlsCert() {
        
        tlsCert_ = getDefaultInstance().getTlsCert();
        onChanged();
        return this;
      }
      /**
       * <code>string tls_cert = 9;</code>
       */
      public Builder setTlsCertBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        tlsCert_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object tlsKey_ = "";
      /**
       * <code>string tls_key = 10;</code>
       */
      public java.lang.String getTlsKey() {
        java.lang.Object ref = tlsKey_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          tlsKey_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string tls_key = 10;</code>
       */
      public com.google.protobuf.ByteString
          getTlsKeyBytes() {
        java.lang.Object ref = tlsKey_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          tlsKey_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string tls_key = 10;</code>
       */
      public Builder setTlsKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        tlsKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string tls_key = 10;</code>
       */
      public Builder clearTlsKey() {
        
        tlsKey_ = getDefaultInstance().getTlsKey();
        onChanged();
        return this;
      }
      /**
       * <code>string tls_key = 10;</code>
       */
      public Builder setTlsKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        tlsKey_ = value;
        onChanged();
        return this;
      }

      private boolean requireRequestAuthorizers_ ;
      /**
       * <code>bool require_request_authorizers = 15;</code>
       */
      public boolean getRequireRequestAuthorizers() {
        return requireRequestAuthorizers_;
      }
      /**
       * <code>bool require_request_authorizers = 15;</code>
       */
      public Builder setRequireRequestAuthorizers(boolean value) {
        
        requireRequestAuthorizers_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool require_request_authorizers = 15;</code>
       */
      public Builder clearRequireRequestAuthorizers() {
        
        requireRequestAuthorizers_ = false;
        onChanged();
        return this;
      }

      private boolean requireResponseAuthorizers_ ;
      /**
       * <code>bool require_response_authorizers = 16;</code>
       */
      public boolean getRequireResponseAuthorizers() {
        return requireResponseAuthorizers_;
      }
      /**
       * <code>bool require_response_authorizers = 16;</code>
       */
      public Builder setRequireResponseAuthorizers(boolean value) {
        
        requireResponseAuthorizers_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool require_response_authorizers = 16;</code>
       */
      public Builder clearRequireResponseAuthorizers() {
        
        requireResponseAuthorizers_ = false;
        onChanged();
        return this;
      }

      private java.lang.Object joinRaft_ = "";
      /**
       * <code>string join_raft = 17;</code>
       */
      public java.lang.String getJoinRaft() {
        java.lang.Object ref = joinRaft_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          joinRaft_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string join_raft = 17;</code>
       */
      public com.google.protobuf.ByteString
          getJoinRaftBytes() {
        java.lang.Object ref = joinRaft_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          joinRaft_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string join_raft = 17;</code>
       */
      public Builder setJoinRaft(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        joinRaft_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string join_raft = 17;</code>
       */
      public Builder clearJoinRaft() {
        
        joinRaft_ = getDefaultInstance().getJoinRaft();
        onChanged();
        return this;
      }
      /**
       * <code>string join_raft = 17;</code>
       */
      public Builder setJoinRaftBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        joinRaft_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object raftPeerId_ = "";
      /**
       * <code>string raft_peer_id = 18;</code>
       */
      public java.lang.String getRaftPeerId() {
        java.lang.Object ref = raftPeerId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          raftPeerId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string raft_peer_id = 18;</code>
       */
      public com.google.protobuf.ByteString
          getRaftPeerIdBytes() {
        java.lang.Object ref = raftPeerId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          raftPeerId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string raft_peer_id = 18;</code>
       */
      public Builder setRaftPeerId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        raftPeerId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string raft_peer_id = 18;</code>
       */
      public Builder clearRaftPeerId() {
        
        raftPeerId_ = getDefaultInstance().getRaftPeerId();
        onChanged();
        return this;
      }
      /**
       * <code>string raft_peer_id = 18;</code>
       */
      public Builder setRaftPeerIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        raftPeerId_ = value;
        onChanged();
        return this;
      }

      private long listenPort_ ;
      /**
       * <code>int64 listen_port = 19;</code>
       */
      public long getListenPort() {
        return listenPort_;
      }
      /**
       * <code>int64 listen_port = 19;</code>
       */
      public Builder setListenPort(long value) {
        
        listenPort_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int64 listen_port = 19;</code>
       */
      public Builder clearListenPort() {
        
        listenPort_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object raftSecret_ = "";
      /**
       * <code>string raft_secret = 20;</code>
       */
      public java.lang.String getRaftSecret() {
        java.lang.Object ref = raftSecret_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          raftSecret_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string raft_secret = 20;</code>
       */
      public com.google.protobuf.ByteString
          getRaftSecretBytes() {
        java.lang.Object ref = raftSecret_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          raftSecret_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string raft_secret = 20;</code>
       */
      public Builder setRaftSecret(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        raftSecret_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string raft_secret = 20;</code>
       */
      public Builder clearRaftSecret() {
        
        raftSecret_ = getDefaultInstance().getRaftSecret();
        onChanged();
        return this;
      }
      /**
       * <code>string raft_secret = 20;</code>
       */
      public Builder setRaftSecretBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        raftSecret_ = value;
        onChanged();
        return this;
      }

      private boolean debug_ ;
      /**
       * <code>bool debug = 21;</code>
       */
      public boolean getDebug() {
        return debug_;
      }
      /**
       * <code>bool debug = 21;</code>
       */
      public Builder setDebug(boolean value) {
        
        debug_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool debug = 21;</code>
       */
      public Builder clearDebug() {
        
        debug_ = false;
        onChanged();
        return this;
      }

      private java.lang.Object environment_ = "";
      /**
       * <code>string environment = 22;</code>
       */
      public java.lang.String getEnvironment() {
        java.lang.Object ref = environment_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          environment_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string environment = 22;</code>
       */
      public com.google.protobuf.ByteString
          getEnvironmentBytes() {
        java.lang.Object ref = environment_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          environment_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string environment = 22;</code>
       */
      public Builder setEnvironment(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        environment_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string environment = 22;</code>
       */
      public Builder clearEnvironment() {
        
        environment_ = getDefaultInstance().getEnvironment();
        onChanged();
        return this;
      }
      /**
       * <code>string environment = 22;</code>
       */
      public Builder setEnvironmentBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        environment_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object raftAdvertise_ = "";
      /**
       * <code>string raft_advertise = 23;</code>
       */
      public java.lang.String getRaftAdvertise() {
        java.lang.Object ref = raftAdvertise_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          raftAdvertise_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string raft_advertise = 23;</code>
       */
      public com.google.protobuf.ByteString
          getRaftAdvertiseBytes() {
        java.lang.Object ref = raftAdvertise_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          raftAdvertise_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string raft_advertise = 23;</code>
       */
      public Builder setRaftAdvertise(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        raftAdvertise_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string raft_advertise = 23;</code>
       */
      public Builder clearRaftAdvertise() {
        
        raftAdvertise_ = getDefaultInstance().getRaftAdvertise();
        onChanged();
        return this;
      }
      /**
       * <code>string raft_advertise = 23;</code>
       */
      public Builder setRaftAdvertiseBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        raftAdvertise_ = value;
        onChanged();
        return this;
      }

      private long raftMaxPool_ ;
      /**
       * <code>int64 raft_max_pool = 24;</code>
       */
      public long getRaftMaxPool() {
        return raftMaxPool_;
      }
      /**
       * <code>int64 raft_max_pool = 24;</code>
       */
      public Builder setRaftMaxPool(long value) {
        
        raftMaxPool_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int64 raft_max_pool = 24;</code>
       */
      public Builder clearRaftMaxPool() {
        
        raftMaxPool_ = 0L;
        onChanged();
        return this;
      }

      private boolean mutualTls_ ;
      /**
       * <code>bool mutual_tls = 25;</code>
       */
      public boolean getMutualTls() {
        return mutualTls_;
      }
      /**
       * <code>bool mutual_tls = 25;</code>
       */
      public Builder setMutualTls(boolean value) {
        
        mutualTls_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool mutual_tls = 25;</code>
       */
      public Builder clearMutualTls() {
        
        mutualTls_ = false;
        onChanged();
        return this;
      }

      private java.lang.Object caCert_ = "";
      /**
       * <code>string ca_cert = 26;</code>
       */
      public java.lang.String getCaCert() {
        java.lang.Object ref = caCert_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          caCert_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string ca_cert = 26;</code>
       */
      public com.google.protobuf.ByteString
          getCaCertBytes() {
        java.lang.Object ref = caCert_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          caCert_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string ca_cert = 26;</code>
       */
      public Builder setCaCert(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        caCert_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string ca_cert = 26;</code>
       */
      public Builder clearCaCert() {
        
        caCert_ = getDefaultInstance().getCaCert();
        onChanged();
        return this;
      }
      /**
       * <code>string ca_cert = 26;</code>
       */
      public Builder setCaCertBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        caCert_ = value;
        onChanged();
        return this;
      }

      private boolean enableUi_ ;
      /**
       * <code>bool enable_ui = 27;</code>
       */
      public boolean getEnableUi() {
        return enableUi_;
      }
      /**
       * <code>bool enable_ui = 27;</code>
       */
      public Builder setEnableUi(boolean value) {
        
        enableUi_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool enable_ui = 27;</code>
       */
      public Builder clearEnableUi() {
        
        enableUi_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Flags)
    }

    // @@protoc_insertion_point(class_scope:api.Flags)
    private static final api.Graphik.Flags DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Flags();
    }

    public static api.Graphik.Flags getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Flags>
        PARSER = new com.google.protobuf.AbstractParser<Flags>() {
      @java.lang.Override
      public Flags parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Flags(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Flags getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface UIFlagsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.UIFlags)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string oauth_client_id = 1;</code>
     */
    java.lang.String getOauthClientId();
    /**
     * <code>string oauth_client_id = 1;</code>
     */
    com.google.protobuf.ByteString
        getOauthClientIdBytes();

    /**
     * <code>string oauth_client_secret = 2;</code>
     */
    java.lang.String getOauthClientSecret();
    /**
     * <code>string oauth_client_secret = 2;</code>
     */
    com.google.protobuf.ByteString
        getOauthClientSecretBytes();

    /**
     * <code>string oauth_authorization_url = 3;</code>
     */
    java.lang.String getOauthAuthorizationUrl();
    /**
     * <code>string oauth_authorization_url = 3;</code>
     */
    com.google.protobuf.ByteString
        getOauthAuthorizationUrlBytes();

    /**
     * <code>string oauth_token_url = 4;</code>
     */
    java.lang.String getOauthTokenUrl();
    /**
     * <code>string oauth_token_url = 4;</code>
     */
    com.google.protobuf.ByteString
        getOauthTokenUrlBytes();

    /**
     * <code>string oauth_redirect_url = 5;</code>
     */
    java.lang.String getOauthRedirectUrl();
    /**
     * <code>string oauth_redirect_url = 5;</code>
     */
    com.google.protobuf.ByteString
        getOauthRedirectUrlBytes();

    /**
     * <code>repeated string oauth_scopes = 6;</code>
     */
    java.util.List<java.lang.String>
        getOauthScopesList();
    /**
     * <code>repeated string oauth_scopes = 6;</code>
     */
    int getOauthScopesCount();
    /**
     * <code>repeated string oauth_scopes = 6;</code>
     */
    java.lang.String getOauthScopes(int index);
    /**
     * <code>repeated string oauth_scopes = 6;</code>
     */
    com.google.protobuf.ByteString
        getOauthScopesBytes(int index);

    /**
     * <code>string session_secret = 7;</code>
     */
    java.lang.String getSessionSecret();
    /**
     * <code>string session_secret = 7;</code>
     */
    com.google.protobuf.ByteString
        getSessionSecretBytes();
  }
  /**
   * Protobuf type {@code api.UIFlags}
   */
  public  static final class UIFlags extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.UIFlags)
      UIFlagsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use UIFlags.newBuilder() to construct.
    private UIFlags(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private UIFlags() {
      oauthClientId_ = "";
      oauthClientSecret_ = "";
      oauthAuthorizationUrl_ = "";
      oauthTokenUrl_ = "";
      oauthRedirectUrl_ = "";
      oauthScopes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      sessionSecret_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private UIFlags(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              oauthClientId_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              oauthClientSecret_ = s;
              break;
            }
            case 26: {
              java.lang.String s = input.readStringRequireUtf8();

              oauthAuthorizationUrl_ = s;
              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();

              oauthTokenUrl_ = s;
              break;
            }
            case 42: {
              java.lang.String s = input.readStringRequireUtf8();

              oauthRedirectUrl_ = s;
              break;
            }
            case 50: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                oauthScopes_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000020;
              }
              oauthScopes_.add(s);
              break;
            }
            case 58: {
              java.lang.String s = input.readStringRequireUtf8();

              sessionSecret_ = s;
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          oauthScopes_ = oauthScopes_.getUnmodifiableView();
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_UIFlags_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_UIFlags_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.UIFlags.class, api.Graphik.UIFlags.Builder.class);
    }

    private int bitField0_;
    public static final int OAUTH_CLIENT_ID_FIELD_NUMBER = 1;
    private volatile java.lang.Object oauthClientId_;
    /**
     * <code>string oauth_client_id = 1;</code>
     */
    public java.lang.String getOauthClientId() {
      java.lang.Object ref = oauthClientId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        oauthClientId_ = s;
        return s;
      }
    }
    /**
     * <code>string oauth_client_id = 1;</code>
     */
    public com.google.protobuf.ByteString
        getOauthClientIdBytes() {
      java.lang.Object ref = oauthClientId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        oauthClientId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int OAUTH_CLIENT_SECRET_FIELD_NUMBER = 2;
    private volatile java.lang.Object oauthClientSecret_;
    /**
     * <code>string oauth_client_secret = 2;</code>
     */
    public java.lang.String getOauthClientSecret() {
      java.lang.Object ref = oauthClientSecret_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        oauthClientSecret_ = s;
        return s;
      }
    }
    /**
     * <code>string oauth_client_secret = 2;</code>
     */
    public com.google.protobuf.ByteString
        getOauthClientSecretBytes() {
      java.lang.Object ref = oauthClientSecret_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        oauthClientSecret_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int OAUTH_AUTHORIZATION_URL_FIELD_NUMBER = 3;
    private volatile java.lang.Object oauthAuthorizationUrl_;
    /**
     * <code>string oauth_authorization_url = 3;</code>
     */
    public java.lang.String getOauthAuthorizationUrl() {
      java.lang.Object ref = oauthAuthorizationUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        oauthAuthorizationUrl_ = s;
        return s;
      }
    }
    /**
     * <code>string oauth_authorization_url = 3;</code>
     */
    public com.google.protobuf.ByteString
        getOauthAuthorizationUrlBytes() {
      java.lang.Object ref = oauthAuthorizationUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        oauthAuthorizationUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int OAUTH_TOKEN_URL_FIELD_NUMBER = 4;
    private volatile java.lang.Object oauthTokenUrl_;
    /**
     * <code>string oauth_token_url = 4;</code>
     */
    public java.lang.String getOauthTokenUrl() {
      java.lang.Object ref = oauthTokenUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        oauthTokenUrl_ = s;
        return s;
      }
    }
    /**
     * <code>string oauth_token_url = 4;</code>
     */
    public com.google.protobuf.ByteString
        getOauthTokenUrlBytes() {
      java.lang.Object ref = oauthTokenUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        oauthTokenUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int OAUTH_REDIRECT_URL_FIELD_NUMBER = 5;
    private volatile java.lang.Object oauthRedirectUrl_;
    /**
     * <code>string oauth_redirect_url = 5;</code>
     */
    public java.lang.String getOauthRedirectUrl() {
      java.lang.Object ref = oauthRedirectUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        oauthRedirectUrl_ = s;
        return s;
      }
    }
    /**
     * <code>string oauth_redirect_url = 5;</code>
     */
    public com.google.protobuf.ByteString
        getOauthRedirectUrlBytes() {
      java.lang.Object ref = oauthRedirectUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        oauthRedirectUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int OAUTH_SCOPES_FIELD_NUMBER = 6;
    private com.google.protobuf.LazyStringList oauthScopes_;
    /**
     * <code>repeated string oauth_scopes = 6;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getOauthScopesList() {
      return oauthScopes_;
    }
    /**
     * <code>repeated string oauth_scopes = 6;</code>
     */
    public int getOauthScopesCount() {
      return oauthScopes_.size();
    }
    /**
     * <code>repeated string oauth_scopes = 6;</code>
     */
    public java.lang.String getOauthScopes(int index) {
      return oauthScopes_.get(index);
    }
    /**
     * <code>repeated string oauth_scopes = 6;</code>
     */
    public com.google.protobuf.ByteString
        getOauthScopesBytes(int index) {
      return oauthScopes_.getByteString(index);
    }

    public static final int SESSION_SECRET_FIELD_NUMBER = 7;
    private volatile java.lang.Object sessionSecret_;
    /**
     * <code>string session_secret = 7;</code>
     */
    public java.lang.String getSessionSecret() {
      java.lang.Object ref = sessionSecret_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        sessionSecret_ = s;
        return s;
      }
    }
    /**
     * <code>string session_secret = 7;</code>
     */
    public com.google.protobuf.ByteString
        getSessionSecretBytes() {
      java.lang.Object ref = sessionSecret_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        sessionSecret_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    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 (!getOauthClientIdBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, oauthClientId_);
      }
      if (!getOauthClientSecretBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, oauthClientSecret_);
      }
      if (!getOauthAuthorizationUrlBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, oauthAuthorizationUrl_);
      }
      if (!getOauthTokenUrlBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, oauthTokenUrl_);
      }
      if (!getOauthRedirectUrlBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, oauthRedirectUrl_);
      }
      for (int i = 0; i < oauthScopes_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, oauthScopes_.getRaw(i));
      }
      if (!getSessionSecretBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, sessionSecret_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getOauthClientIdBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, oauthClientId_);
      }
      if (!getOauthClientSecretBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, oauthClientSecret_);
      }
      if (!getOauthAuthorizationUrlBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, oauthAuthorizationUrl_);
      }
      if (!getOauthTokenUrlBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, oauthTokenUrl_);
      }
      if (!getOauthRedirectUrlBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, oauthRedirectUrl_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < oauthScopes_.size(); i++) {
          dataSize += computeStringSizeNoTag(oauthScopes_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getOauthScopesList().size();
      }
      if (!getSessionSecretBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, sessionSecret_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getOauthClientId()
          .equals(other.getOauthClientId());
      result = result && getOauthClientSecret()
          .equals(other.getOauthClientSecret());
      result = result && getOauthAuthorizationUrl()
          .equals(other.getOauthAuthorizationUrl());
      result = result && getOauthTokenUrl()
          .equals(other.getOauthTokenUrl());
      result = result && getOauthRedirectUrl()
          .equals(other.getOauthRedirectUrl());
      result = result && getOauthScopesList()
          .equals(other.getOauthScopesList());
      result = result && getSessionSecret()
          .equals(other.getSessionSecret());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + OAUTH_CLIENT_ID_FIELD_NUMBER;
      hash = (53 * hash) + getOauthClientId().hashCode();
      hash = (37 * hash) + OAUTH_CLIENT_SECRET_FIELD_NUMBER;
      hash = (53 * hash) + getOauthClientSecret().hashCode();
      hash = (37 * hash) + OAUTH_AUTHORIZATION_URL_FIELD_NUMBER;
      hash = (53 * hash) + getOauthAuthorizationUrl().hashCode();
      hash = (37 * hash) + OAUTH_TOKEN_URL_FIELD_NUMBER;
      hash = (53 * hash) + getOauthTokenUrl().hashCode();
      hash = (37 * hash) + OAUTH_REDIRECT_URL_FIELD_NUMBER;
      hash = (53 * hash) + getOauthRedirectUrl().hashCode();
      if (getOauthScopesCount() > 0) {
        hash = (37 * hash) + OAUTH_SCOPES_FIELD_NUMBER;
        hash = (53 * hash) + getOauthScopesList().hashCode();
      }
      hash = (37 * hash) + SESSION_SECRET_FIELD_NUMBER;
      hash = (53 * hash) + getSessionSecret().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

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

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_UIFlags_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.UIFlags.class, api.Graphik.UIFlags.Builder.class);
      }

      // Construct using api.Graphik.UIFlags.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        oauthClientId_ = "";

        oauthClientSecret_ = "";

        oauthAuthorizationUrl_ = "";

        oauthTokenUrl_ = "";

        oauthRedirectUrl_ = "";

        oauthScopes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        sessionSecret_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_UIFlags_descriptor;
      }

      @java.lang.Override
      public api.Graphik.UIFlags getDefaultInstanceForType() {
        return api.Graphik.UIFlags.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.UIFlags buildPartial() {
        api.Graphik.UIFlags result = new api.Graphik.UIFlags(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.oauthClientId_ = oauthClientId_;
        result.oauthClientSecret_ = oauthClientSecret_;
        result.oauthAuthorizationUrl_ = oauthAuthorizationUrl_;
        result.oauthTokenUrl_ = oauthTokenUrl_;
        result.oauthRedirectUrl_ = oauthRedirectUrl_;
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          oauthScopes_ = oauthScopes_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000020);
        }
        result.oauthScopes_ = oauthScopes_;
        result.sessionSecret_ = sessionSecret_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.UIFlags other) {
        if (other == api.Graphik.UIFlags.getDefaultInstance()) return this;
        if (!other.getOauthClientId().isEmpty()) {
          oauthClientId_ = other.oauthClientId_;
          onChanged();
        }
        if (!other.getOauthClientSecret().isEmpty()) {
          oauthClientSecret_ = other.oauthClientSecret_;
          onChanged();
        }
        if (!other.getOauthAuthorizationUrl().isEmpty()) {
          oauthAuthorizationUrl_ = other.oauthAuthorizationUrl_;
          onChanged();
        }
        if (!other.getOauthTokenUrl().isEmpty()) {
          oauthTokenUrl_ = other.oauthTokenUrl_;
          onChanged();
        }
        if (!other.getOauthRedirectUrl().isEmpty()) {
          oauthRedirectUrl_ = other.oauthRedirectUrl_;
          onChanged();
        }
        if (!other.oauthScopes_.isEmpty()) {
          if (oauthScopes_.isEmpty()) {
            oauthScopes_ = other.oauthScopes_;
            bitField0_ = (bitField0_ & ~0x00000020);
          } else {
            ensureOauthScopesIsMutable();
            oauthScopes_.addAll(other.oauthScopes_);
          }
          onChanged();
        }
        if (!other.getSessionSecret().isEmpty()) {
          sessionSecret_ = other.sessionSecret_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.UIFlags parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.UIFlags) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object oauthClientId_ = "";
      /**
       * <code>string oauth_client_id = 1;</code>
       */
      public java.lang.String getOauthClientId() {
        java.lang.Object ref = oauthClientId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          oauthClientId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string oauth_client_id = 1;</code>
       */
      public com.google.protobuf.ByteString
          getOauthClientIdBytes() {
        java.lang.Object ref = oauthClientId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          oauthClientId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string oauth_client_id = 1;</code>
       */
      public Builder setOauthClientId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        oauthClientId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string oauth_client_id = 1;</code>
       */
      public Builder clearOauthClientId() {
        
        oauthClientId_ = getDefaultInstance().getOauthClientId();
        onChanged();
        return this;
      }
      /**
       * <code>string oauth_client_id = 1;</code>
       */
      public Builder setOauthClientIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        oauthClientId_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object oauthClientSecret_ = "";
      /**
       * <code>string oauth_client_secret = 2;</code>
       */
      public java.lang.String getOauthClientSecret() {
        java.lang.Object ref = oauthClientSecret_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          oauthClientSecret_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string oauth_client_secret = 2;</code>
       */
      public com.google.protobuf.ByteString
          getOauthClientSecretBytes() {
        java.lang.Object ref = oauthClientSecret_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          oauthClientSecret_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string oauth_client_secret = 2;</code>
       */
      public Builder setOauthClientSecret(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        oauthClientSecret_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string oauth_client_secret = 2;</code>
       */
      public Builder clearOauthClientSecret() {
        
        oauthClientSecret_ = getDefaultInstance().getOauthClientSecret();
        onChanged();
        return this;
      }
      /**
       * <code>string oauth_client_secret = 2;</code>
       */
      public Builder setOauthClientSecretBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        oauthClientSecret_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object oauthAuthorizationUrl_ = "";
      /**
       * <code>string oauth_authorization_url = 3;</code>
       */
      public java.lang.String getOauthAuthorizationUrl() {
        java.lang.Object ref = oauthAuthorizationUrl_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          oauthAuthorizationUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string oauth_authorization_url = 3;</code>
       */
      public com.google.protobuf.ByteString
          getOauthAuthorizationUrlBytes() {
        java.lang.Object ref = oauthAuthorizationUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          oauthAuthorizationUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string oauth_authorization_url = 3;</code>
       */
      public Builder setOauthAuthorizationUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        oauthAuthorizationUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string oauth_authorization_url = 3;</code>
       */
      public Builder clearOauthAuthorizationUrl() {
        
        oauthAuthorizationUrl_ = getDefaultInstance().getOauthAuthorizationUrl();
        onChanged();
        return this;
      }
      /**
       * <code>string oauth_authorization_url = 3;</code>
       */
      public Builder setOauthAuthorizationUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        oauthAuthorizationUrl_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object oauthTokenUrl_ = "";
      /**
       * <code>string oauth_token_url = 4;</code>
       */
      public java.lang.String getOauthTokenUrl() {
        java.lang.Object ref = oauthTokenUrl_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          oauthTokenUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string oauth_token_url = 4;</code>
       */
      public com.google.protobuf.ByteString
          getOauthTokenUrlBytes() {
        java.lang.Object ref = oauthTokenUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          oauthTokenUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string oauth_token_url = 4;</code>
       */
      public Builder setOauthTokenUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        oauthTokenUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string oauth_token_url = 4;</code>
       */
      public Builder clearOauthTokenUrl() {
        
        oauthTokenUrl_ = getDefaultInstance().getOauthTokenUrl();
        onChanged();
        return this;
      }
      /**
       * <code>string oauth_token_url = 4;</code>
       */
      public Builder setOauthTokenUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        oauthTokenUrl_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object oauthRedirectUrl_ = "";
      /**
       * <code>string oauth_redirect_url = 5;</code>
       */
      public java.lang.String getOauthRedirectUrl() {
        java.lang.Object ref = oauthRedirectUrl_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          oauthRedirectUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string oauth_redirect_url = 5;</code>
       */
      public com.google.protobuf.ByteString
          getOauthRedirectUrlBytes() {
        java.lang.Object ref = oauthRedirectUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          oauthRedirectUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string oauth_redirect_url = 5;</code>
       */
      public Builder setOauthRedirectUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        oauthRedirectUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string oauth_redirect_url = 5;</code>
       */
      public Builder clearOauthRedirectUrl() {
        
        oauthRedirectUrl_ = getDefaultInstance().getOauthRedirectUrl();
        onChanged();
        return this;
      }
      /**
       * <code>string oauth_redirect_url = 5;</code>
       */
      public Builder setOauthRedirectUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        oauthRedirectUrl_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList oauthScopes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureOauthScopesIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          oauthScopes_ = new com.google.protobuf.LazyStringArrayList(oauthScopes_);
          bitField0_ |= 0x00000020;
         }
      }
      /**
       * <code>repeated string oauth_scopes = 6;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getOauthScopesList() {
        return oauthScopes_.getUnmodifiableView();
      }
      /**
       * <code>repeated string oauth_scopes = 6;</code>
       */
      public int getOauthScopesCount() {
        return oauthScopes_.size();
      }
      /**
       * <code>repeated string oauth_scopes = 6;</code>
       */
      public java.lang.String getOauthScopes(int index) {
        return oauthScopes_.get(index);
      }
      /**
       * <code>repeated string oauth_scopes = 6;</code>
       */
      public com.google.protobuf.ByteString
          getOauthScopesBytes(int index) {
        return oauthScopes_.getByteString(index);
      }
      /**
       * <code>repeated string oauth_scopes = 6;</code>
       */
      public Builder setOauthScopes(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureOauthScopesIsMutable();
        oauthScopes_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string oauth_scopes = 6;</code>
       */
      public Builder addOauthScopes(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureOauthScopesIsMutable();
        oauthScopes_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string oauth_scopes = 6;</code>
       */
      public Builder addAllOauthScopes(
          java.lang.Iterable<java.lang.String> values) {
        ensureOauthScopesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, oauthScopes_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string oauth_scopes = 6;</code>
       */
      public Builder clearOauthScopes() {
        oauthScopes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string oauth_scopes = 6;</code>
       */
      public Builder addOauthScopesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureOauthScopesIsMutable();
        oauthScopes_.add(value);
        onChanged();
        return this;
      }

      private java.lang.Object sessionSecret_ = "";
      /**
       * <code>string session_secret = 7;</code>
       */
      public java.lang.String getSessionSecret() {
        java.lang.Object ref = sessionSecret_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          sessionSecret_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string session_secret = 7;</code>
       */
      public com.google.protobuf.ByteString
          getSessionSecretBytes() {
        java.lang.Object ref = sessionSecret_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          sessionSecret_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string session_secret = 7;</code>
       */
      public Builder setSessionSecret(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        sessionSecret_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string session_secret = 7;</code>
       */
      public Builder clearSessionSecret() {
        
        sessionSecret_ = getDefaultInstance().getSessionSecret();
        onChanged();
        return this;
      }
      /**
       * <code>string session_secret = 7;</code>
       */
      public Builder setSessionSecretBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        sessionSecret_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.UIFlags)
    }

    // @@protoc_insertion_point(class_scope:api.UIFlags)
    private static final api.Graphik.UIFlags DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.UIFlags();
    }

    public static api.Graphik.UIFlags getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<UIFlags>
        PARSER = new com.google.protobuf.AbstractParser<UIFlags>() {
      @java.lang.Override
      public UIFlags parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new UIFlags(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.UIFlags getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface BooleanOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Boolean)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>bool value = 1;</code>
     */
    boolean getValue();
  }
  /**
   * <pre>
   * Boolean is a simple boolean value
   * </pre>
   *
   * Protobuf type {@code api.Boolean}
   */
  public  static final class Boolean extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Boolean)
      BooleanOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Boolean.newBuilder() to construct.
    private Boolean(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Boolean() {
      value_ = false;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Boolean(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 8: {

              value_ = input.readBool();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Boolean_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Boolean_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Boolean.class, api.Graphik.Boolean.Builder.class);
    }

    public static final int VALUE_FIELD_NUMBER = 1;
    private boolean value_;
    /**
     * <code>bool value = 1;</code>
     */
    public boolean getValue() {
      return value_;
    }

    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 (value_ != false) {
        output.writeBool(1, value_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (value_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, value_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && (getValue()
          == other.getValue());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + VALUE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getValue());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Boolean parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Boolean parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Boolean parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Boolean parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Boolean parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Boolean parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Boolean parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Boolean 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 api.Graphik.Boolean parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Boolean 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 api.Graphik.Boolean parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Boolean 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(api.Graphik.Boolean 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>
     * Boolean is a simple boolean value
     * </pre>
     *
     * Protobuf type {@code api.Boolean}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Boolean)
        api.Graphik.BooleanOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Boolean_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Boolean_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Boolean.class, api.Graphik.Boolean.Builder.class);
      }

      // Construct using api.Graphik.Boolean.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        value_ = false;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Boolean_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Boolean getDefaultInstanceForType() {
        return api.Graphik.Boolean.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Boolean buildPartial() {
        api.Graphik.Boolean result = new api.Graphik.Boolean(this);
        result.value_ = value_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Boolean other) {
        if (other == api.Graphik.Boolean.getDefaultInstance()) return this;
        if (other.getValue() != false) {
          setValue(other.getValue());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Boolean parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Boolean) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private boolean value_ ;
      /**
       * <code>bool value = 1;</code>
       */
      public boolean getValue() {
        return value_;
      }
      /**
       * <code>bool value = 1;</code>
       */
      public Builder setValue(boolean value) {
        
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool value = 1;</code>
       */
      public Builder clearValue() {
        
        value_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Boolean)
    }

    // @@protoc_insertion_point(class_scope:api.Boolean)
    private static final api.Graphik.Boolean DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Boolean();
    }

    public static api.Graphik.Boolean getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Boolean>
        PARSER = new com.google.protobuf.AbstractParser<Boolean>() {
      @java.lang.Override
      public Boolean parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Boolean(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Boolean getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface NumberOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Number)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>double value = 1;</code>
     */
    double getValue();
  }
  /**
   * <pre>
   * Number is a simple double/float64 value
   * </pre>
   *
   * Protobuf type {@code api.Number}
   */
  public  static final class Number extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Number)
      NumberOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Number.newBuilder() to construct.
    private Number(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Number() {
      value_ = 0D;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Number(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 9: {

              value_ = input.readDouble();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Number_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Number_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Number.class, api.Graphik.Number.Builder.class);
    }

    public static final int VALUE_FIELD_NUMBER = 1;
    private double value_;
    /**
     * <code>double value = 1;</code>
     */
    public double getValue() {
      return value_;
    }

    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 (value_ != 0D) {
        output.writeDouble(1, value_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (value_ != 0D) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(1, value_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && (
          java.lang.Double.doubleToLongBits(getValue())
          == java.lang.Double.doubleToLongBits(
              other.getValue()));
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

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

    public static api.Graphik.Number parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Number parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Number parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Number parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Number parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Number parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Number parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Number 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 api.Graphik.Number parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Number 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 api.Graphik.Number parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Number 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(api.Graphik.Number 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>
     * Number is a simple double/float64 value
     * </pre>
     *
     * Protobuf type {@code api.Number}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Number)
        api.Graphik.NumberOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Number_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Number_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Number.class, api.Graphik.Number.Builder.class);
      }

      // Construct using api.Graphik.Number.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        value_ = 0D;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Number_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Number getDefaultInstanceForType() {
        return api.Graphik.Number.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Number buildPartial() {
        api.Graphik.Number result = new api.Graphik.Number(this);
        result.value_ = value_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Number other) {
        if (other == api.Graphik.Number.getDefaultInstance()) return this;
        if (other.getValue() != 0D) {
          setValue(other.getValue());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Number parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Number) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private double value_ ;
      /**
       * <code>double value = 1;</code>
       */
      public double getValue() {
        return value_;
      }
      /**
       * <code>double value = 1;</code>
       */
      public Builder setValue(double value) {
        
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double value = 1;</code>
       */
      public Builder clearValue() {
        
        value_ = 0D;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Number)
    }

    // @@protoc_insertion_point(class_scope:api.Number)
    private static final api.Graphik.Number DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Number();
    }

    public static api.Graphik.Number getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Number>
        PARSER = new com.google.protobuf.AbstractParser<Number>() {
      @java.lang.Override
      public Number parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Number(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Number getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ExistsFilterOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.ExistsFilter)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string gtype = 1 [(.validator.field) = { ... }</code>
     */
    java.lang.String getGtype();
    /**
     * <code>string gtype = 1 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getGtypeBytes();

    /**
     * <code>string expression = 2 [(.validator.field) = { ... }</code>
     */
    java.lang.String getExpression();
    /**
     * <code>string expression = 2 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getExpressionBytes();

    /**
     * <pre>
     * seek to a specific key for pagination
     * </pre>
     *
     * <code>string seek = 3;</code>
     */
    java.lang.String getSeek();
    /**
     * <pre>
     * seek to a specific key for pagination
     * </pre>
     *
     * <code>string seek = 3;</code>
     */
    com.google.protobuf.ByteString
        getSeekBytes();

    /**
     * <pre>
     * reverse the results
     * </pre>
     *
     * <code>bool reverse = 4;</code>
     */
    boolean getReverse();

    /**
     * <pre>
     * search in a specific index
     * </pre>
     *
     * <code>string index = 5;</code>
     */
    java.lang.String getIndex();
    /**
     * <pre>
     * search in a specific index
     * </pre>
     *
     * <code>string index = 5;</code>
     */
    com.google.protobuf.ByteString
        getIndexBytes();
  }
  /**
   * <pre>
   * ExistsFilter is used as input into all Exists(boolean) related queries.
   * </pre>
   *
   * Protobuf type {@code api.ExistsFilter}
   */
  public  static final class ExistsFilter extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.ExistsFilter)
      ExistsFilterOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ExistsFilter.newBuilder() to construct.
    private ExistsFilter(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ExistsFilter() {
      gtype_ = "";
      expression_ = "";
      seek_ = "";
      reverse_ = false;
      index_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ExistsFilter(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              gtype_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              expression_ = s;
              break;
            }
            case 26: {
              java.lang.String s = input.readStringRequireUtf8();

              seek_ = s;
              break;
            }
            case 32: {

              reverse_ = input.readBool();
              break;
            }
            case 42: {
              java.lang.String s = input.readStringRequireUtf8();

              index_ = s;
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_ExistsFilter_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_ExistsFilter_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.ExistsFilter.class, api.Graphik.ExistsFilter.Builder.class);
    }

    public static final int GTYPE_FIELD_NUMBER = 1;
    private volatile java.lang.Object gtype_;
    /**
     * <code>string gtype = 1 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getGtype() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        gtype_ = s;
        return s;
      }
    }
    /**
     * <code>string gtype = 1 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getGtypeBytes() {
      java.lang.Object ref = gtype_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gtype_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int EXPRESSION_FIELD_NUMBER = 2;
    private volatile java.lang.Object expression_;
    /**
     * <code>string expression = 2 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getExpression() {
      java.lang.Object ref = expression_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        expression_ = s;
        return s;
      }
    }
    /**
     * <code>string expression = 2 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getExpressionBytes() {
      java.lang.Object ref = expression_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        expression_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SEEK_FIELD_NUMBER = 3;
    private volatile java.lang.Object seek_;
    /**
     * <pre>
     * seek to a specific key for pagination
     * </pre>
     *
     * <code>string seek = 3;</code>
     */
    public java.lang.String getSeek() {
      java.lang.Object ref = seek_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        seek_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * seek to a specific key for pagination
     * </pre>
     *
     * <code>string seek = 3;</code>
     */
    public com.google.protobuf.ByteString
        getSeekBytes() {
      java.lang.Object ref = seek_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        seek_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int REVERSE_FIELD_NUMBER = 4;
    private boolean reverse_;
    /**
     * <pre>
     * reverse the results
     * </pre>
     *
     * <code>bool reverse = 4;</code>
     */
    public boolean getReverse() {
      return reverse_;
    }

    public static final int INDEX_FIELD_NUMBER = 5;
    private volatile java.lang.Object index_;
    /**
     * <pre>
     * search in a specific index
     * </pre>
     *
     * <code>string index = 5;</code>
     */
    public java.lang.String getIndex() {
      java.lang.Object ref = index_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        index_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * search in a specific index
     * </pre>
     *
     * <code>string index = 5;</code>
     */
    public com.google.protobuf.ByteString
        getIndexBytes() {
      java.lang.Object ref = index_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        index_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    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 (!getGtypeBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, gtype_);
      }
      if (!getExpressionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, expression_);
      }
      if (!getSeekBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, seek_);
      }
      if (reverse_ != false) {
        output.writeBool(4, reverse_);
      }
      if (!getIndexBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, index_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getGtypeBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, gtype_);
      }
      if (!getExpressionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, expression_);
      }
      if (!getSeekBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, seek_);
      }
      if (reverse_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, reverse_);
      }
      if (!getIndexBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, index_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getGtype()
          .equals(other.getGtype());
      result = result && getExpression()
          .equals(other.getExpression());
      result = result && getSeek()
          .equals(other.getSeek());
      result = result && (getReverse()
          == other.getReverse());
      result = result && getIndex()
          .equals(other.getIndex());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + GTYPE_FIELD_NUMBER;
      hash = (53 * hash) + getGtype().hashCode();
      hash = (37 * hash) + EXPRESSION_FIELD_NUMBER;
      hash = (53 * hash) + getExpression().hashCode();
      hash = (37 * hash) + SEEK_FIELD_NUMBER;
      hash = (53 * hash) + getSeek().hashCode();
      hash = (37 * hash) + REVERSE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getReverse());
      hash = (37 * hash) + INDEX_FIELD_NUMBER;
      hash = (53 * hash) + getIndex().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.ExistsFilter parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.ExistsFilter parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.ExistsFilter parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.ExistsFilter parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.ExistsFilter parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.ExistsFilter parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.ExistsFilter parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.ExistsFilter 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 api.Graphik.ExistsFilter parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.ExistsFilter 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 api.Graphik.ExistsFilter parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.ExistsFilter 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(api.Graphik.ExistsFilter 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>
     * ExistsFilter is used as input into all Exists(boolean) related queries.
     * </pre>
     *
     * Protobuf type {@code api.ExistsFilter}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.ExistsFilter)
        api.Graphik.ExistsFilterOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_ExistsFilter_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_ExistsFilter_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.ExistsFilter.class, api.Graphik.ExistsFilter.Builder.class);
      }

      // Construct using api.Graphik.ExistsFilter.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        gtype_ = "";

        expression_ = "";

        seek_ = "";

        reverse_ = false;

        index_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_ExistsFilter_descriptor;
      }

      @java.lang.Override
      public api.Graphik.ExistsFilter getDefaultInstanceForType() {
        return api.Graphik.ExistsFilter.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.ExistsFilter buildPartial() {
        api.Graphik.ExistsFilter result = new api.Graphik.ExistsFilter(this);
        result.gtype_ = gtype_;
        result.expression_ = expression_;
        result.seek_ = seek_;
        result.reverse_ = reverse_;
        result.index_ = index_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.ExistsFilter other) {
        if (other == api.Graphik.ExistsFilter.getDefaultInstance()) return this;
        if (!other.getGtype().isEmpty()) {
          gtype_ = other.gtype_;
          onChanged();
        }
        if (!other.getExpression().isEmpty()) {
          expression_ = other.expression_;
          onChanged();
        }
        if (!other.getSeek().isEmpty()) {
          seek_ = other.seek_;
          onChanged();
        }
        if (other.getReverse() != false) {
          setReverse(other.getReverse());
        }
        if (!other.getIndex().isEmpty()) {
          index_ = other.index_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.ExistsFilter parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.ExistsFilter) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object gtype_ = "";
      /**
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getGtype() {
        java.lang.Object ref = gtype_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          gtype_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getGtypeBytes() {
        java.lang.Object ref = gtype_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gtype_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setGtype(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        gtype_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearGtype() {
        
        gtype_ = getDefaultInstance().getGtype();
        onChanged();
        return this;
      }
      /**
       * <code>string gtype = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setGtypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        gtype_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object expression_ = "";
      /**
       * <code>string expression = 2 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getExpression() {
        java.lang.Object ref = expression_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          expression_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string expression = 2 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getExpressionBytes() {
        java.lang.Object ref = expression_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          expression_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string expression = 2 [(.validator.field) = { ... }</code>
       */
      public Builder setExpression(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        expression_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string expression = 2 [(.validator.field) = { ... }</code>
       */
      public Builder clearExpression() {
        
        expression_ = getDefaultInstance().getExpression();
        onChanged();
        return this;
      }
      /**
       * <code>string expression = 2 [(.validator.field) = { ... }</code>
       */
      public Builder setExpressionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        expression_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object seek_ = "";
      /**
       * <pre>
       * seek to a specific key for pagination
       * </pre>
       *
       * <code>string seek = 3;</code>
       */
      public java.lang.String getSeek() {
        java.lang.Object ref = seek_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          seek_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * seek to a specific key for pagination
       * </pre>
       *
       * <code>string seek = 3;</code>
       */
      public com.google.protobuf.ByteString
          getSeekBytes() {
        java.lang.Object ref = seek_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          seek_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * seek to a specific key for pagination
       * </pre>
       *
       * <code>string seek = 3;</code>
       */
      public Builder setSeek(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        seek_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * seek to a specific key for pagination
       * </pre>
       *
       * <code>string seek = 3;</code>
       */
      public Builder clearSeek() {
        
        seek_ = getDefaultInstance().getSeek();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * seek to a specific key for pagination
       * </pre>
       *
       * <code>string seek = 3;</code>
       */
      public Builder setSeekBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        seek_ = value;
        onChanged();
        return this;
      }

      private boolean reverse_ ;
      /**
       * <pre>
       * reverse the results
       * </pre>
       *
       * <code>bool reverse = 4;</code>
       */
      public boolean getReverse() {
        return reverse_;
      }
      /**
       * <pre>
       * reverse the results
       * </pre>
       *
       * <code>bool reverse = 4;</code>
       */
      public Builder setReverse(boolean value) {
        
        reverse_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * reverse the results
       * </pre>
       *
       * <code>bool reverse = 4;</code>
       */
      public Builder clearReverse() {
        
        reverse_ = false;
        onChanged();
        return this;
      }

      private java.lang.Object index_ = "";
      /**
       * <pre>
       * search in a specific index
       * </pre>
       *
       * <code>string index = 5;</code>
       */
      public java.lang.String getIndex() {
        java.lang.Object ref = index_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          index_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * search in a specific index
       * </pre>
       *
       * <code>string index = 5;</code>
       */
      public com.google.protobuf.ByteString
          getIndexBytes() {
        java.lang.Object ref = index_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          index_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * search in a specific index
       * </pre>
       *
       * <code>string index = 5;</code>
       */
      public Builder setIndex(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        index_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * search in a specific index
       * </pre>
       *
       * <code>string index = 5;</code>
       */
      public Builder clearIndex() {
        
        index_ = getDefaultInstance().getIndex();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * search in a specific index
       * </pre>
       *
       * <code>string index = 5;</code>
       */
      public Builder setIndexBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        index_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.ExistsFilter)
    }

    // @@protoc_insertion_point(class_scope:api.ExistsFilter)
    private static final api.Graphik.ExistsFilter DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.ExistsFilter();
    }

    public static api.Graphik.ExistsFilter getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ExistsFilter>
        PARSER = new com.google.protobuf.AbstractParser<ExistsFilter>() {
      @java.lang.Override
      public ExistsFilter parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ExistsFilter(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.ExistsFilter getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface EditOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Edit)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ref is the ref to the target doc/connection to patch
     * </pre>
     *
     * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
     */
    boolean hasRef();
    /**
     * <pre>
     * ref is the ref to the target doc/connection to patch
     * </pre>
     *
     * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
     */
    api.Graphik.Ref getRef();
    /**
     * <pre>
     * ref is the ref to the target doc/connection to patch
     * </pre>
     *
     * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
     */
    api.Graphik.RefOrBuilder getRefOrBuilder();

    /**
     * <pre>
     * attributes are k/v pairs used to overwrite k/v pairs on a doc/connection
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    boolean hasAttributes();
    /**
     * <pre>
     * attributes are k/v pairs used to overwrite k/v pairs on a doc/connection
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    com.google.protobuf.Struct getAttributes();
    /**
     * <pre>
     * attributes are k/v pairs used to overwrite k/v pairs on a doc/connection
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    com.google.protobuf.StructOrBuilder getAttributesOrBuilder();
  }
  /**
   * <pre>
   * Edit patches the attributes of a Doc or Connection
   * </pre>
   *
   * Protobuf type {@code api.Edit}
   */
  public  static final class Edit extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Edit)
      EditOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Edit.newBuilder() to construct.
    private Edit(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Edit() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Edit(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              api.Graphik.Ref.Builder subBuilder = null;
              if (ref_ != null) {
                subBuilder = ref_.toBuilder();
              }
              ref_ = input.readMessage(api.Graphik.Ref.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(ref_);
                ref_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              com.google.protobuf.Struct.Builder subBuilder = null;
              if (attributes_ != null) {
                subBuilder = attributes_.toBuilder();
              }
              attributes_ = input.readMessage(com.google.protobuf.Struct.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(attributes_);
                attributes_ = subBuilder.buildPartial();
              }

              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Edit_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Edit_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Edit.class, api.Graphik.Edit.Builder.class);
    }

    public static final int REF_FIELD_NUMBER = 1;
    private api.Graphik.Ref ref_;
    /**
     * <pre>
     * ref is the ref to the target doc/connection to patch
     * </pre>
     *
     * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
     */
    public boolean hasRef() {
      return ref_ != null;
    }
    /**
     * <pre>
     * ref is the ref to the target doc/connection to patch
     * </pre>
     *
     * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.Ref getRef() {
      return ref_ == null ? api.Graphik.Ref.getDefaultInstance() : ref_;
    }
    /**
     * <pre>
     * ref is the ref to the target doc/connection to patch
     * </pre>
     *
     * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.RefOrBuilder getRefOrBuilder() {
      return getRef();
    }

    public static final int ATTRIBUTES_FIELD_NUMBER = 2;
    private com.google.protobuf.Struct attributes_;
    /**
     * <pre>
     * attributes are k/v pairs used to overwrite k/v pairs on a doc/connection
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    public boolean hasAttributes() {
      return attributes_ != null;
    }
    /**
     * <pre>
     * attributes are k/v pairs used to overwrite k/v pairs on a doc/connection
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    public com.google.protobuf.Struct getAttributes() {
      return attributes_ == null ? com.google.protobuf.Struct.getDefaultInstance() : attributes_;
    }
    /**
     * <pre>
     * attributes are k/v pairs used to overwrite k/v pairs on a doc/connection
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    public com.google.protobuf.StructOrBuilder getAttributesOrBuilder() {
      return getAttributes();
    }

    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 (ref_ != null) {
        output.writeMessage(1, getRef());
      }
      if (attributes_ != null) {
        output.writeMessage(2, getAttributes());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (ref_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getRef());
      }
      if (attributes_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getAttributes());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && (hasRef() == other.hasRef());
      if (hasRef()) {
        result = result && getRef()
            .equals(other.getRef());
      }
      result = result && (hasAttributes() == other.hasAttributes());
      if (hasAttributes()) {
        result = result && getAttributes()
            .equals(other.getAttributes());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRef()) {
        hash = (37 * hash) + REF_FIELD_NUMBER;
        hash = (53 * hash) + getRef().hashCode();
      }
      if (hasAttributes()) {
        hash = (37 * hash) + ATTRIBUTES_FIELD_NUMBER;
        hash = (53 * hash) + getAttributes().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Edit parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Edit parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Edit parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Edit parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Edit parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Edit parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Edit parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Edit 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 api.Graphik.Edit parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Edit 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 api.Graphik.Edit parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Edit 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(api.Graphik.Edit 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>
     * Edit patches the attributes of a Doc or Connection
     * </pre>
     *
     * Protobuf type {@code api.Edit}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Edit)
        api.Graphik.EditOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Edit_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Edit_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Edit.class, api.Graphik.Edit.Builder.class);
      }

      // Construct using api.Graphik.Edit.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (refBuilder_ == null) {
          ref_ = null;
        } else {
          ref_ = null;
          refBuilder_ = null;
        }
        if (attributesBuilder_ == null) {
          attributes_ = null;
        } else {
          attributes_ = null;
          attributesBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Edit_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Edit getDefaultInstanceForType() {
        return api.Graphik.Edit.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Edit buildPartial() {
        api.Graphik.Edit result = new api.Graphik.Edit(this);
        if (refBuilder_ == null) {
          result.ref_ = ref_;
        } else {
          result.ref_ = refBuilder_.build();
        }
        if (attributesBuilder_ == null) {
          result.attributes_ = attributes_;
        } else {
          result.attributes_ = attributesBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Edit other) {
        if (other == api.Graphik.Edit.getDefaultInstance()) return this;
        if (other.hasRef()) {
          mergeRef(other.getRef());
        }
        if (other.hasAttributes()) {
          mergeAttributes(other.getAttributes());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Edit parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Edit) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private api.Graphik.Ref ref_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> refBuilder_;
      /**
       * <pre>
       * ref is the ref to the target doc/connection to patch
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public boolean hasRef() {
        return refBuilder_ != null || ref_ != null;
      }
      /**
       * <pre>
       * ref is the ref to the target doc/connection to patch
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref getRef() {
        if (refBuilder_ == null) {
          return ref_ == null ? api.Graphik.Ref.getDefaultInstance() : ref_;
        } else {
          return refBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * ref is the ref to the target doc/connection to patch
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setRef(api.Graphik.Ref value) {
        if (refBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ref_ = value;
          onChanged();
        } else {
          refBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the target doc/connection to patch
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setRef(
          api.Graphik.Ref.Builder builderForValue) {
        if (refBuilder_ == null) {
          ref_ = builderForValue.build();
          onChanged();
        } else {
          refBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the target doc/connection to patch
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder mergeRef(api.Graphik.Ref value) {
        if (refBuilder_ == null) {
          if (ref_ != null) {
            ref_ =
              api.Graphik.Ref.newBuilder(ref_).mergeFrom(value).buildPartial();
          } else {
            ref_ = value;
          }
          onChanged();
        } else {
          refBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the target doc/connection to patch
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearRef() {
        if (refBuilder_ == null) {
          ref_ = null;
          onChanged();
        } else {
          ref_ = null;
          refBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * ref is the ref to the target doc/connection to patch
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref.Builder getRefBuilder() {
        
        onChanged();
        return getRefFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * ref is the ref to the target doc/connection to patch
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.RefOrBuilder getRefOrBuilder() {
        if (refBuilder_ != null) {
          return refBuilder_.getMessageOrBuilder();
        } else {
          return ref_ == null ?
              api.Graphik.Ref.getDefaultInstance() : ref_;
        }
      }
      /**
       * <pre>
       * ref is the ref to the target doc/connection to patch
       * </pre>
       *
       * <code>.api.Ref ref = 1 [(.validator.field) = { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> 
          getRefFieldBuilder() {
        if (refBuilder_ == null) {
          refBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder>(
                  getRef(),
                  getParentForChildren(),
                  isClean());
          ref_ = null;
        }
        return refBuilder_;
      }

      private com.google.protobuf.Struct attributes_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> attributesBuilder_;
      /**
       * <pre>
       * attributes are k/v pairs used to overwrite k/v pairs on a doc/connection
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public boolean hasAttributes() {
        return attributesBuilder_ != null || attributes_ != null;
      }
      /**
       * <pre>
       * attributes are k/v pairs used to overwrite k/v pairs on a doc/connection
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public com.google.protobuf.Struct getAttributes() {
        if (attributesBuilder_ == null) {
          return attributes_ == null ? com.google.protobuf.Struct.getDefaultInstance() : attributes_;
        } else {
          return attributesBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * attributes are k/v pairs used to overwrite k/v pairs on a doc/connection
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder setAttributes(com.google.protobuf.Struct value) {
        if (attributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          attributes_ = value;
          onChanged();
        } else {
          attributesBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs used to overwrite k/v pairs on a doc/connection
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder setAttributes(
          com.google.protobuf.Struct.Builder builderForValue) {
        if (attributesBuilder_ == null) {
          attributes_ = builderForValue.build();
          onChanged();
        } else {
          attributesBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs used to overwrite k/v pairs on a doc/connection
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder mergeAttributes(com.google.protobuf.Struct value) {
        if (attributesBuilder_ == null) {
          if (attributes_ != null) {
            attributes_ =
              com.google.protobuf.Struct.newBuilder(attributes_).mergeFrom(value).buildPartial();
          } else {
            attributes_ = value;
          }
          onChanged();
        } else {
          attributesBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs used to overwrite k/v pairs on a doc/connection
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder clearAttributes() {
        if (attributesBuilder_ == null) {
          attributes_ = null;
          onChanged();
        } else {
          attributes_ = null;
          attributesBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs used to overwrite k/v pairs on a doc/connection
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public com.google.protobuf.Struct.Builder getAttributesBuilder() {
        
        onChanged();
        return getAttributesFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * attributes are k/v pairs used to overwrite k/v pairs on a doc/connection
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public com.google.protobuf.StructOrBuilder getAttributesOrBuilder() {
        if (attributesBuilder_ != null) {
          return attributesBuilder_.getMessageOrBuilder();
        } else {
          return attributes_ == null ?
              com.google.protobuf.Struct.getDefaultInstance() : attributes_;
        }
      }
      /**
       * <pre>
       * attributes are k/v pairs used to overwrite k/v pairs on a doc/connection
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> 
          getAttributesFieldBuilder() {
        if (attributesBuilder_ == null) {
          attributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder>(
                  getAttributes(),
                  getParentForChildren(),
                  isClean());
          attributes_ = null;
        }
        return attributesBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Edit)
    }

    // @@protoc_insertion_point(class_scope:api.Edit)
    private static final api.Graphik.Edit DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Edit();
    }

    public static api.Graphik.Edit getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Edit>
        PARSER = new com.google.protobuf.AbstractParser<Edit>() {
      @java.lang.Override
      public Edit parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Edit(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Edit getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface EditFilterOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.EditFilter)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * filter is used to filter docs/connections to patch
     * </pre>
     *
     * <code>.api.Filter filter = 1;</code>
     */
    boolean hasFilter();
    /**
     * <pre>
     * filter is used to filter docs/connections to patch
     * </pre>
     *
     * <code>.api.Filter filter = 1;</code>
     */
    api.Graphik.Filter getFilter();
    /**
     * <pre>
     * filter is used to filter docs/connections to patch
     * </pre>
     *
     * <code>.api.Filter filter = 1;</code>
     */
    api.Graphik.FilterOrBuilder getFilterOrBuilder();

    /**
     * <pre>
     * attributes are k/v pairs used to overwrite k/v pairs on all docs/connections that pass the filter
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    boolean hasAttributes();
    /**
     * <pre>
     * attributes are k/v pairs used to overwrite k/v pairs on all docs/connections that pass the filter
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    com.google.protobuf.Struct getAttributes();
    /**
     * <pre>
     * attributes are k/v pairs used to overwrite k/v pairs on all docs/connections that pass the filter
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    com.google.protobuf.StructOrBuilder getAttributesOrBuilder();
  }
  /**
   * <pre>
   * EditFilter is used to patch/edit docs/connections
   * </pre>
   *
   * Protobuf type {@code api.EditFilter}
   */
  public  static final class EditFilter extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.EditFilter)
      EditFilterOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use EditFilter.newBuilder() to construct.
    private EditFilter(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private EditFilter() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private EditFilter(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              api.Graphik.Filter.Builder subBuilder = null;
              if (filter_ != null) {
                subBuilder = filter_.toBuilder();
              }
              filter_ = input.readMessage(api.Graphik.Filter.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(filter_);
                filter_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              com.google.protobuf.Struct.Builder subBuilder = null;
              if (attributes_ != null) {
                subBuilder = attributes_.toBuilder();
              }
              attributes_ = input.readMessage(com.google.protobuf.Struct.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(attributes_);
                attributes_ = subBuilder.buildPartial();
              }

              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_EditFilter_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_EditFilter_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.EditFilter.class, api.Graphik.EditFilter.Builder.class);
    }

    public static final int FILTER_FIELD_NUMBER = 1;
    private api.Graphik.Filter filter_;
    /**
     * <pre>
     * filter is used to filter docs/connections to patch
     * </pre>
     *
     * <code>.api.Filter filter = 1;</code>
     */
    public boolean hasFilter() {
      return filter_ != null;
    }
    /**
     * <pre>
     * filter is used to filter docs/connections to patch
     * </pre>
     *
     * <code>.api.Filter filter = 1;</code>
     */
    public api.Graphik.Filter getFilter() {
      return filter_ == null ? api.Graphik.Filter.getDefaultInstance() : filter_;
    }
    /**
     * <pre>
     * filter is used to filter docs/connections to patch
     * </pre>
     *
     * <code>.api.Filter filter = 1;</code>
     */
    public api.Graphik.FilterOrBuilder getFilterOrBuilder() {
      return getFilter();
    }

    public static final int ATTRIBUTES_FIELD_NUMBER = 2;
    private com.google.protobuf.Struct attributes_;
    /**
     * <pre>
     * attributes are k/v pairs used to overwrite k/v pairs on all docs/connections that pass the filter
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    public boolean hasAttributes() {
      return attributes_ != null;
    }
    /**
     * <pre>
     * attributes are k/v pairs used to overwrite k/v pairs on all docs/connections that pass the filter
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    public com.google.protobuf.Struct getAttributes() {
      return attributes_ == null ? com.google.protobuf.Struct.getDefaultInstance() : attributes_;
    }
    /**
     * <pre>
     * attributes are k/v pairs used to overwrite k/v pairs on all docs/connections that pass the filter
     * </pre>
     *
     * <code>.google.protobuf.Struct attributes = 2;</code>
     */
    public com.google.protobuf.StructOrBuilder getAttributesOrBuilder() {
      return getAttributes();
    }

    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 (filter_ != null) {
        output.writeMessage(1, getFilter());
      }
      if (attributes_ != null) {
        output.writeMessage(2, getAttributes());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (filter_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getFilter());
      }
      if (attributes_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getAttributes());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && (hasFilter() == other.hasFilter());
      if (hasFilter()) {
        result = result && getFilter()
            .equals(other.getFilter());
      }
      result = result && (hasAttributes() == other.hasAttributes());
      if (hasAttributes()) {
        result = result && getAttributes()
            .equals(other.getAttributes());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasFilter()) {
        hash = (37 * hash) + FILTER_FIELD_NUMBER;
        hash = (53 * hash) + getFilter().hashCode();
      }
      if (hasAttributes()) {
        hash = (37 * hash) + ATTRIBUTES_FIELD_NUMBER;
        hash = (53 * hash) + getAttributes().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.EditFilter parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.EditFilter parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.EditFilter parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.EditFilter parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.EditFilter parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.EditFilter parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.EditFilter parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.EditFilter 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 api.Graphik.EditFilter parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.EditFilter 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 api.Graphik.EditFilter parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.EditFilter 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(api.Graphik.EditFilter 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>
     * EditFilter is used to patch/edit docs/connections
     * </pre>
     *
     * Protobuf type {@code api.EditFilter}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.EditFilter)
        api.Graphik.EditFilterOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_EditFilter_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_EditFilter_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.EditFilter.class, api.Graphik.EditFilter.Builder.class);
      }

      // Construct using api.Graphik.EditFilter.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (filterBuilder_ == null) {
          filter_ = null;
        } else {
          filter_ = null;
          filterBuilder_ = null;
        }
        if (attributesBuilder_ == null) {
          attributes_ = null;
        } else {
          attributes_ = null;
          attributesBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_EditFilter_descriptor;
      }

      @java.lang.Override
      public api.Graphik.EditFilter getDefaultInstanceForType() {
        return api.Graphik.EditFilter.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.EditFilter buildPartial() {
        api.Graphik.EditFilter result = new api.Graphik.EditFilter(this);
        if (filterBuilder_ == null) {
          result.filter_ = filter_;
        } else {
          result.filter_ = filterBuilder_.build();
        }
        if (attributesBuilder_ == null) {
          result.attributes_ = attributes_;
        } else {
          result.attributes_ = attributesBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.EditFilter other) {
        if (other == api.Graphik.EditFilter.getDefaultInstance()) return this;
        if (other.hasFilter()) {
          mergeFilter(other.getFilter());
        }
        if (other.hasAttributes()) {
          mergeAttributes(other.getAttributes());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.EditFilter parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.EditFilter) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private api.Graphik.Filter filter_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Filter, api.Graphik.Filter.Builder, api.Graphik.FilterOrBuilder> filterBuilder_;
      /**
       * <pre>
       * filter is used to filter docs/connections to patch
       * </pre>
       *
       * <code>.api.Filter filter = 1;</code>
       */
      public boolean hasFilter() {
        return filterBuilder_ != null || filter_ != null;
      }
      /**
       * <pre>
       * filter is used to filter docs/connections to patch
       * </pre>
       *
       * <code>.api.Filter filter = 1;</code>
       */
      public api.Graphik.Filter getFilter() {
        if (filterBuilder_ == null) {
          return filter_ == null ? api.Graphik.Filter.getDefaultInstance() : filter_;
        } else {
          return filterBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * filter is used to filter docs/connections to patch
       * </pre>
       *
       * <code>.api.Filter filter = 1;</code>
       */
      public Builder setFilter(api.Graphik.Filter value) {
        if (filterBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          filter_ = value;
          onChanged();
        } else {
          filterBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * filter is used to filter docs/connections to patch
       * </pre>
       *
       * <code>.api.Filter filter = 1;</code>
       */
      public Builder setFilter(
          api.Graphik.Filter.Builder builderForValue) {
        if (filterBuilder_ == null) {
          filter_ = builderForValue.build();
          onChanged();
        } else {
          filterBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * filter is used to filter docs/connections to patch
       * </pre>
       *
       * <code>.api.Filter filter = 1;</code>
       */
      public Builder mergeFilter(api.Graphik.Filter value) {
        if (filterBuilder_ == null) {
          if (filter_ != null) {
            filter_ =
              api.Graphik.Filter.newBuilder(filter_).mergeFrom(value).buildPartial();
          } else {
            filter_ = value;
          }
          onChanged();
        } else {
          filterBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * filter is used to filter docs/connections to patch
       * </pre>
       *
       * <code>.api.Filter filter = 1;</code>
       */
      public Builder clearFilter() {
        if (filterBuilder_ == null) {
          filter_ = null;
          onChanged();
        } else {
          filter_ = null;
          filterBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * filter is used to filter docs/connections to patch
       * </pre>
       *
       * <code>.api.Filter filter = 1;</code>
       */
      public api.Graphik.Filter.Builder getFilterBuilder() {
        
        onChanged();
        return getFilterFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * filter is used to filter docs/connections to patch
       * </pre>
       *
       * <code>.api.Filter filter = 1;</code>
       */
      public api.Graphik.FilterOrBuilder getFilterOrBuilder() {
        if (filterBuilder_ != null) {
          return filterBuilder_.getMessageOrBuilder();
        } else {
          return filter_ == null ?
              api.Graphik.Filter.getDefaultInstance() : filter_;
        }
      }
      /**
       * <pre>
       * filter is used to filter docs/connections to patch
       * </pre>
       *
       * <code>.api.Filter filter = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Filter, api.Graphik.Filter.Builder, api.Graphik.FilterOrBuilder> 
          getFilterFieldBuilder() {
        if (filterBuilder_ == null) {
          filterBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Filter, api.Graphik.Filter.Builder, api.Graphik.FilterOrBuilder>(
                  getFilter(),
                  getParentForChildren(),
                  isClean());
          filter_ = null;
        }
        return filterBuilder_;
      }

      private com.google.protobuf.Struct attributes_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> attributesBuilder_;
      /**
       * <pre>
       * attributes are k/v pairs used to overwrite k/v pairs on all docs/connections that pass the filter
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public boolean hasAttributes() {
        return attributesBuilder_ != null || attributes_ != null;
      }
      /**
       * <pre>
       * attributes are k/v pairs used to overwrite k/v pairs on all docs/connections that pass the filter
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public com.google.protobuf.Struct getAttributes() {
        if (attributesBuilder_ == null) {
          return attributes_ == null ? com.google.protobuf.Struct.getDefaultInstance() : attributes_;
        } else {
          return attributesBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * attributes are k/v pairs used to overwrite k/v pairs on all docs/connections that pass the filter
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder setAttributes(com.google.protobuf.Struct value) {
        if (attributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          attributes_ = value;
          onChanged();
        } else {
          attributesBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs used to overwrite k/v pairs on all docs/connections that pass the filter
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder setAttributes(
          com.google.protobuf.Struct.Builder builderForValue) {
        if (attributesBuilder_ == null) {
          attributes_ = builderForValue.build();
          onChanged();
        } else {
          attributesBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs used to overwrite k/v pairs on all docs/connections that pass the filter
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder mergeAttributes(com.google.protobuf.Struct value) {
        if (attributesBuilder_ == null) {
          if (attributes_ != null) {
            attributes_ =
              com.google.protobuf.Struct.newBuilder(attributes_).mergeFrom(value).buildPartial();
          } else {
            attributes_ = value;
          }
          onChanged();
        } else {
          attributesBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs used to overwrite k/v pairs on all docs/connections that pass the filter
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public Builder clearAttributes() {
        if (attributesBuilder_ == null) {
          attributes_ = null;
          onChanged();
        } else {
          attributes_ = null;
          attributesBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * attributes are k/v pairs used to overwrite k/v pairs on all docs/connections that pass the filter
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public com.google.protobuf.Struct.Builder getAttributesBuilder() {
        
        onChanged();
        return getAttributesFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * attributes are k/v pairs used to overwrite k/v pairs on all docs/connections that pass the filter
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      public com.google.protobuf.StructOrBuilder getAttributesOrBuilder() {
        if (attributesBuilder_ != null) {
          return attributesBuilder_.getMessageOrBuilder();
        } else {
          return attributes_ == null ?
              com.google.protobuf.Struct.getDefaultInstance() : attributes_;
        }
      }
      /**
       * <pre>
       * attributes are k/v pairs used to overwrite k/v pairs on all docs/connections that pass the filter
       * </pre>
       *
       * <code>.google.protobuf.Struct attributes = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> 
          getAttributesFieldBuilder() {
        if (attributesBuilder_ == null) {
          attributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder>(
                  getAttributes(),
                  getParentForChildren(),
                  isClean());
          attributes_ = null;
        }
        return attributesBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.EditFilter)
    }

    // @@protoc_insertion_point(class_scope:api.EditFilter)
    private static final api.Graphik.EditFilter DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.EditFilter();
    }

    public static api.Graphik.EditFilter getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<EditFilter>
        PARSER = new com.google.protobuf.AbstractParser<EditFilter>() {
      @java.lang.Override
      public EditFilter parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EditFilter(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.EditFilter getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface PongOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Pong)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * message returns PONG if healthy
     * </pre>
     *
     * <code>string message = 1;</code>
     */
    java.lang.String getMessage();
    /**
     * <pre>
     * message returns PONG if healthy
     * </pre>
     *
     * <code>string message = 1;</code>
     */
    com.google.protobuf.ByteString
        getMessageBytes();
  }
  /**
   * <pre>
   * Pong returns PONG if the server is healthy
   * </pre>
   *
   * Protobuf type {@code api.Pong}
   */
  public  static final class Pong extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Pong)
      PongOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Pong.newBuilder() to construct.
    private Pong(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Pong() {
      message_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Pong(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              message_ = s;
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Pong_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Pong_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Pong.class, api.Graphik.Pong.Builder.class);
    }

    public static final int MESSAGE_FIELD_NUMBER = 1;
    private volatile java.lang.Object message_;
    /**
     * <pre>
     * message returns PONG if healthy
     * </pre>
     *
     * <code>string message = 1;</code>
     */
    public java.lang.String getMessage() {
      java.lang.Object ref = message_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        message_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * message returns PONG if healthy
     * </pre>
     *
     * <code>string message = 1;</code>
     */
    public com.google.protobuf.ByteString
        getMessageBytes() {
      java.lang.Object ref = message_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        message_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    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 (!getMessageBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, message_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getMessageBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, message_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getMessage()
          .equals(other.getMessage());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + MESSAGE_FIELD_NUMBER;
      hash = (53 * hash) + getMessage().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Pong parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Pong parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Pong parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Pong parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Pong parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Pong parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Pong parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Pong 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 api.Graphik.Pong parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Pong 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 api.Graphik.Pong parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Pong 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(api.Graphik.Pong 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>
     * Pong returns PONG if the server is healthy
     * </pre>
     *
     * Protobuf type {@code api.Pong}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Pong)
        api.Graphik.PongOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Pong_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Pong_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Pong.class, api.Graphik.Pong.Builder.class);
      }

      // Construct using api.Graphik.Pong.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        message_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Pong_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Pong getDefaultInstanceForType() {
        return api.Graphik.Pong.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Pong buildPartial() {
        api.Graphik.Pong result = new api.Graphik.Pong(this);
        result.message_ = message_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Pong other) {
        if (other == api.Graphik.Pong.getDefaultInstance()) return this;
        if (!other.getMessage().isEmpty()) {
          message_ = other.message_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Pong parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Pong) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object message_ = "";
      /**
       * <pre>
       * message returns PONG if healthy
       * </pre>
       *
       * <code>string message = 1;</code>
       */
      public java.lang.String getMessage() {
        java.lang.Object ref = message_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          message_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * message returns PONG if healthy
       * </pre>
       *
       * <code>string message = 1;</code>
       */
      public com.google.protobuf.ByteString
          getMessageBytes() {
        java.lang.Object ref = message_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          message_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * message returns PONG if healthy
       * </pre>
       *
       * <code>string message = 1;</code>
       */
      public Builder setMessage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        message_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * message returns PONG if healthy
       * </pre>
       *
       * <code>string message = 1;</code>
       */
      public Builder clearMessage() {
        
        message_ = getDefaultInstance().getMessage();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * message returns PONG if healthy
       * </pre>
       *
       * <code>string message = 1;</code>
       */
      public Builder setMessageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        message_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Pong)
    }

    // @@protoc_insertion_point(class_scope:api.Pong)
    private static final api.Graphik.Pong DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Pong();
    }

    public static api.Graphik.Pong getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Pong>
        PARSER = new com.google.protobuf.AbstractParser<Pong>() {
      @java.lang.Override
      public Pong parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Pong(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Pong getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface OutboundMessageOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.OutboundMessage)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * channel is the target channel to send the message to
     * </pre>
     *
     * <code>string channel = 1 [(.validator.field) = { ... }</code>
     */
    java.lang.String getChannel();
    /**
     * <pre>
     * channel is the target channel to send the message to
     * </pre>
     *
     * <code>string channel = 1 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getChannelBytes();

    /**
     * <pre>
     * data is the data to send with the message
     * </pre>
     *
     * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
     */
    boolean hasData();
    /**
     * <pre>
     * data is the data to send with the message
     * </pre>
     *
     * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.Struct getData();
    /**
     * <pre>
     * data is the data to send with the message
     * </pre>
     *
     * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.StructOrBuilder getDataOrBuilder();
  }
  /**
   * <pre>
   * OutboundMessage is a message to be published to a pubsub channel
   * </pre>
   *
   * Protobuf type {@code api.OutboundMessage}
   */
  public  static final class OutboundMessage extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.OutboundMessage)
      OutboundMessageOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use OutboundMessage.newBuilder() to construct.
    private OutboundMessage(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private OutboundMessage() {
      channel_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private OutboundMessage(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              channel_ = s;
              break;
            }
            case 18: {
              com.google.protobuf.Struct.Builder subBuilder = null;
              if (data_ != null) {
                subBuilder = data_.toBuilder();
              }
              data_ = input.readMessage(com.google.protobuf.Struct.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(data_);
                data_ = subBuilder.buildPartial();
              }

              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_OutboundMessage_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_OutboundMessage_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.OutboundMessage.class, api.Graphik.OutboundMessage.Builder.class);
    }

    public static final int CHANNEL_FIELD_NUMBER = 1;
    private volatile java.lang.Object channel_;
    /**
     * <pre>
     * channel is the target channel to send the message to
     * </pre>
     *
     * <code>string channel = 1 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getChannel() {
      java.lang.Object ref = channel_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        channel_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * channel is the target channel to send the message to
     * </pre>
     *
     * <code>string channel = 1 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getChannelBytes() {
      java.lang.Object ref = channel_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        channel_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DATA_FIELD_NUMBER = 2;
    private com.google.protobuf.Struct data_;
    /**
     * <pre>
     * data is the data to send with the message
     * </pre>
     *
     * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
     */
    public boolean hasData() {
      return data_ != null;
    }
    /**
     * <pre>
     * data is the data to send with the message
     * </pre>
     *
     * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.Struct getData() {
      return data_ == null ? com.google.protobuf.Struct.getDefaultInstance() : data_;
    }
    /**
     * <pre>
     * data is the data to send with the message
     * </pre>
     *
     * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.StructOrBuilder getDataOrBuilder() {
      return getData();
    }

    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 (!getChannelBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, channel_);
      }
      if (data_ != null) {
        output.writeMessage(2, getData());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getChannelBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, channel_);
      }
      if (data_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getData());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getChannel()
          .equals(other.getChannel());
      result = result && (hasData() == other.hasData());
      if (hasData()) {
        result = result && getData()
            .equals(other.getData());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + CHANNEL_FIELD_NUMBER;
      hash = (53 * hash) + getChannel().hashCode();
      if (hasData()) {
        hash = (37 * hash) + DATA_FIELD_NUMBER;
        hash = (53 * hash) + getData().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.OutboundMessage parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.OutboundMessage parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.OutboundMessage parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.OutboundMessage parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.OutboundMessage parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.OutboundMessage parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.OutboundMessage parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.OutboundMessage 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 api.Graphik.OutboundMessage parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.OutboundMessage 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 api.Graphik.OutboundMessage parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.OutboundMessage 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(api.Graphik.OutboundMessage 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>
     * OutboundMessage is a message to be published to a pubsub channel
     * </pre>
     *
     * Protobuf type {@code api.OutboundMessage}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.OutboundMessage)
        api.Graphik.OutboundMessageOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_OutboundMessage_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_OutboundMessage_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.OutboundMessage.class, api.Graphik.OutboundMessage.Builder.class);
      }

      // Construct using api.Graphik.OutboundMessage.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        channel_ = "";

        if (dataBuilder_ == null) {
          data_ = null;
        } else {
          data_ = null;
          dataBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_OutboundMessage_descriptor;
      }

      @java.lang.Override
      public api.Graphik.OutboundMessage getDefaultInstanceForType() {
        return api.Graphik.OutboundMessage.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.OutboundMessage buildPartial() {
        api.Graphik.OutboundMessage result = new api.Graphik.OutboundMessage(this);
        result.channel_ = channel_;
        if (dataBuilder_ == null) {
          result.data_ = data_;
        } else {
          result.data_ = dataBuilder_.build();
        }
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.OutboundMessage other) {
        if (other == api.Graphik.OutboundMessage.getDefaultInstance()) return this;
        if (!other.getChannel().isEmpty()) {
          channel_ = other.channel_;
          onChanged();
        }
        if (other.hasData()) {
          mergeData(other.getData());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.OutboundMessage parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.OutboundMessage) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object channel_ = "";
      /**
       * <pre>
       * channel is the target channel to send the message to
       * </pre>
       *
       * <code>string channel = 1 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getChannel() {
        java.lang.Object ref = channel_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          channel_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * channel is the target channel to send the message to
       * </pre>
       *
       * <code>string channel = 1 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getChannelBytes() {
        java.lang.Object ref = channel_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          channel_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * channel is the target channel to send the message to
       * </pre>
       *
       * <code>string channel = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setChannel(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        channel_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * channel is the target channel to send the message to
       * </pre>
       *
       * <code>string channel = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearChannel() {
        
        channel_ = getDefaultInstance().getChannel();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * channel is the target channel to send the message to
       * </pre>
       *
       * <code>string channel = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setChannelBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        channel_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.Struct data_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> dataBuilder_;
      /**
       * <pre>
       * data is the data to send with the message
       * </pre>
       *
       * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
       */
      public boolean hasData() {
        return dataBuilder_ != null || data_ != null;
      }
      /**
       * <pre>
       * data is the data to send with the message
       * </pre>
       *
       * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.Struct getData() {
        if (dataBuilder_ == null) {
          return data_ == null ? com.google.protobuf.Struct.getDefaultInstance() : data_;
        } else {
          return dataBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * data is the data to send with the message
       * </pre>
       *
       * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
       */
      public Builder setData(com.google.protobuf.Struct value) {
        if (dataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          data_ = value;
          onChanged();
        } else {
          dataBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * data is the data to send with the message
       * </pre>
       *
       * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
       */
      public Builder setData(
          com.google.protobuf.Struct.Builder builderForValue) {
        if (dataBuilder_ == null) {
          data_ = builderForValue.build();
          onChanged();
        } else {
          dataBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * data is the data to send with the message
       * </pre>
       *
       * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
       */
      public Builder mergeData(com.google.protobuf.Struct value) {
        if (dataBuilder_ == null) {
          if (data_ != null) {
            data_ =
              com.google.protobuf.Struct.newBuilder(data_).mergeFrom(value).buildPartial();
          } else {
            data_ = value;
          }
          onChanged();
        } else {
          dataBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * data is the data to send with the message
       * </pre>
       *
       * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
       */
      public Builder clearData() {
        if (dataBuilder_ == null) {
          data_ = null;
          onChanged();
        } else {
          data_ = null;
          dataBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * data is the data to send with the message
       * </pre>
       *
       * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.Struct.Builder getDataBuilder() {
        
        onChanged();
        return getDataFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * data is the data to send with the message
       * </pre>
       *
       * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.StructOrBuilder getDataOrBuilder() {
        if (dataBuilder_ != null) {
          return dataBuilder_.getMessageOrBuilder();
        } else {
          return data_ == null ?
              com.google.protobuf.Struct.getDefaultInstance() : data_;
        }
      }
      /**
       * <pre>
       * data is the data to send with the message
       * </pre>
       *
       * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> 
          getDataFieldBuilder() {
        if (dataBuilder_ == null) {
          dataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder>(
                  getData(),
                  getParentForChildren(),
                  isClean());
          data_ = null;
        }
        return dataBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.OutboundMessage)
    }

    // @@protoc_insertion_point(class_scope:api.OutboundMessage)
    private static final api.Graphik.OutboundMessage DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.OutboundMessage();
    }

    public static api.Graphik.OutboundMessage getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<OutboundMessage>
        PARSER = new com.google.protobuf.AbstractParser<OutboundMessage>() {
      @java.lang.Override
      public OutboundMessage parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new OutboundMessage(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.OutboundMessage getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

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

    /**
     * <pre>
     * channel is the channel the message was sent to
     * </pre>
     *
     * <code>string channel = 1 [(.validator.field) = { ... }</code>
     */
    java.lang.String getChannel();
    /**
     * <pre>
     * channel is the channel the message was sent to
     * </pre>
     *
     * <code>string channel = 1 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getChannelBytes();

    /**
     * <pre>
     * data is the data sent with the message
     * </pre>
     *
     * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
     */
    boolean hasData();
    /**
     * <pre>
     * data is the data sent with the message
     * </pre>
     *
     * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.Struct getData();
    /**
     * <pre>
     * data is the data sent with the message
     * </pre>
     *
     * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.StructOrBuilder getDataOrBuilder();

    /**
     * <pre>
     * user is the sender that triggered/sent the message
     * </pre>
     *
     * <code>.api.Ref user = 3 [(.validator.field) = { ... }</code>
     */
    boolean hasUser();
    /**
     * <pre>
     * user is the sender that triggered/sent the message
     * </pre>
     *
     * <code>.api.Ref user = 3 [(.validator.field) = { ... }</code>
     */
    api.Graphik.Ref getUser();
    /**
     * <pre>
     * user is the sender that triggered/sent the message
     * </pre>
     *
     * <code>.api.Ref user = 3 [(.validator.field) = { ... }</code>
     */
    api.Graphik.RefOrBuilder getUserOrBuilder();

    /**
     * <pre>
     * timestamp is when the message was sent
     * </pre>
     *
     * <code>.google.protobuf.Timestamp timestamp = 4 [(.validator.field) = { ... }</code>
     */
    boolean hasTimestamp();
    /**
     * <pre>
     * timestamp is when the message was sent
     * </pre>
     *
     * <code>.google.protobuf.Timestamp timestamp = 4 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.Timestamp getTimestamp();
    /**
     * <pre>
     * timestamp is when the message was sent
     * </pre>
     *
     * <code>.google.protobuf.Timestamp timestamp = 4 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder();

    /**
     * <code>string method = 5 [(.validator.field) = { ... }</code>
     */
    java.lang.String getMethod();
    /**
     * <code>string method = 5 [(.validator.field) = { ... }</code>
     */
    com.google.protobuf.ByteString
        getMethodBytes();
  }
  /**
   * <pre>
   * Message is received on PubSub subscriptions
   * </pre>
   *
   * Protobuf type {@code api.Message}
   */
  public  static final class Message extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Message)
      MessageOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Message.newBuilder() to construct.
    private Message(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Message() {
      channel_ = "";
      method_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Message(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              channel_ = s;
              break;
            }
            case 18: {
              com.google.protobuf.Struct.Builder subBuilder = null;
              if (data_ != null) {
                subBuilder = data_.toBuilder();
              }
              data_ = input.readMessage(com.google.protobuf.Struct.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(data_);
                data_ = subBuilder.buildPartial();
              }

              break;
            }
            case 26: {
              api.Graphik.Ref.Builder subBuilder = null;
              if (user_ != null) {
                subBuilder = user_.toBuilder();
              }
              user_ = input.readMessage(api.Graphik.Ref.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(user_);
                user_ = subBuilder.buildPartial();
              }

              break;
            }
            case 34: {
              com.google.protobuf.Timestamp.Builder subBuilder = null;
              if (timestamp_ != null) {
                subBuilder = timestamp_.toBuilder();
              }
              timestamp_ = input.readMessage(com.google.protobuf.Timestamp.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(timestamp_);
                timestamp_ = subBuilder.buildPartial();
              }

              break;
            }
            case 42: {
              java.lang.String s = input.readStringRequireUtf8();

              method_ = s;
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Message_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Message_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Message.class, api.Graphik.Message.Builder.class);
    }

    public static final int CHANNEL_FIELD_NUMBER = 1;
    private volatile java.lang.Object channel_;
    /**
     * <pre>
     * channel is the channel the message was sent to
     * </pre>
     *
     * <code>string channel = 1 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getChannel() {
      java.lang.Object ref = channel_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        channel_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * channel is the channel the message was sent to
     * </pre>
     *
     * <code>string channel = 1 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getChannelBytes() {
      java.lang.Object ref = channel_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        channel_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DATA_FIELD_NUMBER = 2;
    private com.google.protobuf.Struct data_;
    /**
     * <pre>
     * data is the data sent with the message
     * </pre>
     *
     * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
     */
    public boolean hasData() {
      return data_ != null;
    }
    /**
     * <pre>
     * data is the data sent with the message
     * </pre>
     *
     * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.Struct getData() {
      return data_ == null ? com.google.protobuf.Struct.getDefaultInstance() : data_;
    }
    /**
     * <pre>
     * data is the data sent with the message
     * </pre>
     *
     * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.StructOrBuilder getDataOrBuilder() {
      return getData();
    }

    public static final int USER_FIELD_NUMBER = 3;
    private api.Graphik.Ref user_;
    /**
     * <pre>
     * user is the sender that triggered/sent the message
     * </pre>
     *
     * <code>.api.Ref user = 3 [(.validator.field) = { ... }</code>
     */
    public boolean hasUser() {
      return user_ != null;
    }
    /**
     * <pre>
     * user is the sender that triggered/sent the message
     * </pre>
     *
     * <code>.api.Ref user = 3 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.Ref getUser() {
      return user_ == null ? api.Graphik.Ref.getDefaultInstance() : user_;
    }
    /**
     * <pre>
     * user is the sender that triggered/sent the message
     * </pre>
     *
     * <code>.api.Ref user = 3 [(.validator.field) = { ... }</code>
     */
    public api.Graphik.RefOrBuilder getUserOrBuilder() {
      return getUser();
    }

    public static final int TIMESTAMP_FIELD_NUMBER = 4;
    private com.google.protobuf.Timestamp timestamp_;
    /**
     * <pre>
     * timestamp is when the message was sent
     * </pre>
     *
     * <code>.google.protobuf.Timestamp timestamp = 4 [(.validator.field) = { ... }</code>
     */
    public boolean hasTimestamp() {
      return timestamp_ != null;
    }
    /**
     * <pre>
     * timestamp is when the message was sent
     * </pre>
     *
     * <code>.google.protobuf.Timestamp timestamp = 4 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.Timestamp getTimestamp() {
      return timestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : timestamp_;
    }
    /**
     * <pre>
     * timestamp is when the message was sent
     * </pre>
     *
     * <code>.google.protobuf.Timestamp timestamp = 4 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder() {
      return getTimestamp();
    }

    public static final int METHOD_FIELD_NUMBER = 5;
    private volatile java.lang.Object method_;
    /**
     * <code>string method = 5 [(.validator.field) = { ... }</code>
     */
    public java.lang.String getMethod() {
      java.lang.Object ref = method_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        method_ = s;
        return s;
      }
    }
    /**
     * <code>string method = 5 [(.validator.field) = { ... }</code>
     */
    public com.google.protobuf.ByteString
        getMethodBytes() {
      java.lang.Object ref = method_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        method_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    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 (!getChannelBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, channel_);
      }
      if (data_ != null) {
        output.writeMessage(2, getData());
      }
      if (user_ != null) {
        output.writeMessage(3, getUser());
      }
      if (timestamp_ != null) {
        output.writeMessage(4, getTimestamp());
      }
      if (!getMethodBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, method_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getChannelBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, channel_);
      }
      if (data_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getData());
      }
      if (user_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getUser());
      }
      if (timestamp_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getTimestamp());
      }
      if (!getMethodBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, method_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getChannel()
          .equals(other.getChannel());
      result = result && (hasData() == other.hasData());
      if (hasData()) {
        result = result && getData()
            .equals(other.getData());
      }
      result = result && (hasUser() == other.hasUser());
      if (hasUser()) {
        result = result && getUser()
            .equals(other.getUser());
      }
      result = result && (hasTimestamp() == other.hasTimestamp());
      if (hasTimestamp()) {
        result = result && getTimestamp()
            .equals(other.getTimestamp());
      }
      result = result && getMethod()
          .equals(other.getMethod());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + CHANNEL_FIELD_NUMBER;
      hash = (53 * hash) + getChannel().hashCode();
      if (hasData()) {
        hash = (37 * hash) + DATA_FIELD_NUMBER;
        hash = (53 * hash) + getData().hashCode();
      }
      if (hasUser()) {
        hash = (37 * hash) + USER_FIELD_NUMBER;
        hash = (53 * hash) + getUser().hashCode();
      }
      if (hasTimestamp()) {
        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
        hash = (53 * hash) + getTimestamp().hashCode();
      }
      hash = (37 * hash) + METHOD_FIELD_NUMBER;
      hash = (53 * hash) + getMethod().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

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

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Message is received on PubSub subscriptions
     * </pre>
     *
     * Protobuf type {@code api.Message}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Message)
        api.Graphik.MessageOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Message_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Message_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Message.class, api.Graphik.Message.Builder.class);
      }

      // Construct using api.Graphik.Message.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        channel_ = "";

        if (dataBuilder_ == null) {
          data_ = null;
        } else {
          data_ = null;
          dataBuilder_ = null;
        }
        if (userBuilder_ == null) {
          user_ = null;
        } else {
          user_ = null;
          userBuilder_ = null;
        }
        if (timestampBuilder_ == null) {
          timestamp_ = null;
        } else {
          timestamp_ = null;
          timestampBuilder_ = null;
        }
        method_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Message_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Message getDefaultInstanceForType() {
        return api.Graphik.Message.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Message buildPartial() {
        api.Graphik.Message result = new api.Graphik.Message(this);
        result.channel_ = channel_;
        if (dataBuilder_ == null) {
          result.data_ = data_;
        } else {
          result.data_ = dataBuilder_.build();
        }
        if (userBuilder_ == null) {
          result.user_ = user_;
        } else {
          result.user_ = userBuilder_.build();
        }
        if (timestampBuilder_ == null) {
          result.timestamp_ = timestamp_;
        } else {
          result.timestamp_ = timestampBuilder_.build();
        }
        result.method_ = method_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Message other) {
        if (other == api.Graphik.Message.getDefaultInstance()) return this;
        if (!other.getChannel().isEmpty()) {
          channel_ = other.channel_;
          onChanged();
        }
        if (other.hasData()) {
          mergeData(other.getData());
        }
        if (other.hasUser()) {
          mergeUser(other.getUser());
        }
        if (other.hasTimestamp()) {
          mergeTimestamp(other.getTimestamp());
        }
        if (!other.getMethod().isEmpty()) {
          method_ = other.method_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Message parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Message) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object channel_ = "";
      /**
       * <pre>
       * channel is the channel the message was sent to
       * </pre>
       *
       * <code>string channel = 1 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getChannel() {
        java.lang.Object ref = channel_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          channel_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * channel is the channel the message was sent to
       * </pre>
       *
       * <code>string channel = 1 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getChannelBytes() {
        java.lang.Object ref = channel_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          channel_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * channel is the channel the message was sent to
       * </pre>
       *
       * <code>string channel = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setChannel(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        channel_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * channel is the channel the message was sent to
       * </pre>
       *
       * <code>string channel = 1 [(.validator.field) = { ... }</code>
       */
      public Builder clearChannel() {
        
        channel_ = getDefaultInstance().getChannel();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * channel is the channel the message was sent to
       * </pre>
       *
       * <code>string channel = 1 [(.validator.field) = { ... }</code>
       */
      public Builder setChannelBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        channel_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.Struct data_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> dataBuilder_;
      /**
       * <pre>
       * data is the data sent with the message
       * </pre>
       *
       * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
       */
      public boolean hasData() {
        return dataBuilder_ != null || data_ != null;
      }
      /**
       * <pre>
       * data is the data sent with the message
       * </pre>
       *
       * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.Struct getData() {
        if (dataBuilder_ == null) {
          return data_ == null ? com.google.protobuf.Struct.getDefaultInstance() : data_;
        } else {
          return dataBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * data is the data sent with the message
       * </pre>
       *
       * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
       */
      public Builder setData(com.google.protobuf.Struct value) {
        if (dataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          data_ = value;
          onChanged();
        } else {
          dataBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * data is the data sent with the message
       * </pre>
       *
       * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
       */
      public Builder setData(
          com.google.protobuf.Struct.Builder builderForValue) {
        if (dataBuilder_ == null) {
          data_ = builderForValue.build();
          onChanged();
        } else {
          dataBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * data is the data sent with the message
       * </pre>
       *
       * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
       */
      public Builder mergeData(com.google.protobuf.Struct value) {
        if (dataBuilder_ == null) {
          if (data_ != null) {
            data_ =
              com.google.protobuf.Struct.newBuilder(data_).mergeFrom(value).buildPartial();
          } else {
            data_ = value;
          }
          onChanged();
        } else {
          dataBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * data is the data sent with the message
       * </pre>
       *
       * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
       */
      public Builder clearData() {
        if (dataBuilder_ == null) {
          data_ = null;
          onChanged();
        } else {
          data_ = null;
          dataBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * data is the data sent with the message
       * </pre>
       *
       * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.Struct.Builder getDataBuilder() {
        
        onChanged();
        return getDataFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * data is the data sent with the message
       * </pre>
       *
       * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.StructOrBuilder getDataOrBuilder() {
        if (dataBuilder_ != null) {
          return dataBuilder_.getMessageOrBuilder();
        } else {
          return data_ == null ?
              com.google.protobuf.Struct.getDefaultInstance() : data_;
        }
      }
      /**
       * <pre>
       * data is the data sent with the message
       * </pre>
       *
       * <code>.google.protobuf.Struct data = 2 [(.validator.field) = { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> 
          getDataFieldBuilder() {
        if (dataBuilder_ == null) {
          dataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder>(
                  getData(),
                  getParentForChildren(),
                  isClean());
          data_ = null;
        }
        return dataBuilder_;
      }

      private api.Graphik.Ref user_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> userBuilder_;
      /**
       * <pre>
       * user is the sender that triggered/sent the message
       * </pre>
       *
       * <code>.api.Ref user = 3 [(.validator.field) = { ... }</code>
       */
      public boolean hasUser() {
        return userBuilder_ != null || user_ != null;
      }
      /**
       * <pre>
       * user is the sender that triggered/sent the message
       * </pre>
       *
       * <code>.api.Ref user = 3 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref getUser() {
        if (userBuilder_ == null) {
          return user_ == null ? api.Graphik.Ref.getDefaultInstance() : user_;
        } else {
          return userBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * user is the sender that triggered/sent the message
       * </pre>
       *
       * <code>.api.Ref user = 3 [(.validator.field) = { ... }</code>
       */
      public Builder setUser(api.Graphik.Ref value) {
        if (userBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          user_ = value;
          onChanged();
        } else {
          userBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * user is the sender that triggered/sent the message
       * </pre>
       *
       * <code>.api.Ref user = 3 [(.validator.field) = { ... }</code>
       */
      public Builder setUser(
          api.Graphik.Ref.Builder builderForValue) {
        if (userBuilder_ == null) {
          user_ = builderForValue.build();
          onChanged();
        } else {
          userBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * user is the sender that triggered/sent the message
       * </pre>
       *
       * <code>.api.Ref user = 3 [(.validator.field) = { ... }</code>
       */
      public Builder mergeUser(api.Graphik.Ref value) {
        if (userBuilder_ == null) {
          if (user_ != null) {
            user_ =
              api.Graphik.Ref.newBuilder(user_).mergeFrom(value).buildPartial();
          } else {
            user_ = value;
          }
          onChanged();
        } else {
          userBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * user is the sender that triggered/sent the message
       * </pre>
       *
       * <code>.api.Ref user = 3 [(.validator.field) = { ... }</code>
       */
      public Builder clearUser() {
        if (userBuilder_ == null) {
          user_ = null;
          onChanged();
        } else {
          user_ = null;
          userBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * user is the sender that triggered/sent the message
       * </pre>
       *
       * <code>.api.Ref user = 3 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.Ref.Builder getUserBuilder() {
        
        onChanged();
        return getUserFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * user is the sender that triggered/sent the message
       * </pre>
       *
       * <code>.api.Ref user = 3 [(.validator.field) = { ... }</code>
       */
      public api.Graphik.RefOrBuilder getUserOrBuilder() {
        if (userBuilder_ != null) {
          return userBuilder_.getMessageOrBuilder();
        } else {
          return user_ == null ?
              api.Graphik.Ref.getDefaultInstance() : user_;
        }
      }
      /**
       * <pre>
       * user is the sender that triggered/sent the message
       * </pre>
       *
       * <code>.api.Ref user = 3 [(.validator.field) = { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> 
          getUserFieldBuilder() {
        if (userBuilder_ == null) {
          userBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder>(
                  getUser(),
                  getParentForChildren(),
                  isClean());
          user_ = null;
        }
        return userBuilder_;
      }

      private com.google.protobuf.Timestamp timestamp_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> timestampBuilder_;
      /**
       * <pre>
       * timestamp is when the message was sent
       * </pre>
       *
       * <code>.google.protobuf.Timestamp timestamp = 4 [(.validator.field) = { ... }</code>
       */
      public boolean hasTimestamp() {
        return timestampBuilder_ != null || timestamp_ != null;
      }
      /**
       * <pre>
       * timestamp is when the message was sent
       * </pre>
       *
       * <code>.google.protobuf.Timestamp timestamp = 4 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.Timestamp getTimestamp() {
        if (timestampBuilder_ == null) {
          return timestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : timestamp_;
        } else {
          return timestampBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * timestamp is when the message was sent
       * </pre>
       *
       * <code>.google.protobuf.Timestamp timestamp = 4 [(.validator.field) = { ... }</code>
       */
      public Builder setTimestamp(com.google.protobuf.Timestamp value) {
        if (timestampBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          timestamp_ = value;
          onChanged();
        } else {
          timestampBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * timestamp is when the message was sent
       * </pre>
       *
       * <code>.google.protobuf.Timestamp timestamp = 4 [(.validator.field) = { ... }</code>
       */
      public Builder setTimestamp(
          com.google.protobuf.Timestamp.Builder builderForValue) {
        if (timestampBuilder_ == null) {
          timestamp_ = builderForValue.build();
          onChanged();
        } else {
          timestampBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * timestamp is when the message was sent
       * </pre>
       *
       * <code>.google.protobuf.Timestamp timestamp = 4 [(.validator.field) = { ... }</code>
       */
      public Builder mergeTimestamp(com.google.protobuf.Timestamp value) {
        if (timestampBuilder_ == null) {
          if (timestamp_ != null) {
            timestamp_ =
              com.google.protobuf.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
          } else {
            timestamp_ = value;
          }
          onChanged();
        } else {
          timestampBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * timestamp is when the message was sent
       * </pre>
       *
       * <code>.google.protobuf.Timestamp timestamp = 4 [(.validator.field) = { ... }</code>
       */
      public Builder clearTimestamp() {
        if (timestampBuilder_ == null) {
          timestamp_ = null;
          onChanged();
        } else {
          timestamp_ = null;
          timestampBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * timestamp is when the message was sent
       * </pre>
       *
       * <code>.google.protobuf.Timestamp timestamp = 4 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.Timestamp.Builder getTimestampBuilder() {
        
        onChanged();
        return getTimestampFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * timestamp is when the message was sent
       * </pre>
       *
       * <code>.google.protobuf.Timestamp timestamp = 4 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder() {
        if (timestampBuilder_ != null) {
          return timestampBuilder_.getMessageOrBuilder();
        } else {
          return timestamp_ == null ?
              com.google.protobuf.Timestamp.getDefaultInstance() : timestamp_;
        }
      }
      /**
       * <pre>
       * timestamp is when the message was sent
       * </pre>
       *
       * <code>.google.protobuf.Timestamp timestamp = 4 [(.validator.field) = { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
          getTimestampFieldBuilder() {
        if (timestampBuilder_ == null) {
          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                  getTimestamp(),
                  getParentForChildren(),
                  isClean());
          timestamp_ = null;
        }
        return timestampBuilder_;
      }

      private java.lang.Object method_ = "";
      /**
       * <code>string method = 5 [(.validator.field) = { ... }</code>
       */
      public java.lang.String getMethod() {
        java.lang.Object ref = method_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          method_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string method = 5 [(.validator.field) = { ... }</code>
       */
      public com.google.protobuf.ByteString
          getMethodBytes() {
        java.lang.Object ref = method_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          method_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string method = 5 [(.validator.field) = { ... }</code>
       */
      public Builder setMethod(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        method_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string method = 5 [(.validator.field) = { ... }</code>
       */
      public Builder clearMethod() {
        
        method_ = getDefaultInstance().getMethod();
        onChanged();
        return this;
      }
      /**
       * <code>string method = 5 [(.validator.field) = { ... }</code>
       */
      public Builder setMethodBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        method_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Message)
    }

    // @@protoc_insertion_point(class_scope:api.Message)
    private static final api.Graphik.Message DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Message();
    }

    public static api.Graphik.Message getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Message>
        PARSER = new com.google.protobuf.AbstractParser<Message>() {
      @java.lang.Override
      public Message parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Message(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Message getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SchemaOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Schema)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * connection_types are the types of connections in the graph
     * </pre>
     *
     * <code>repeated string connection_types = 1;</code>
     */
    java.util.List<java.lang.String>
        getConnectionTypesList();
    /**
     * <pre>
     * connection_types are the types of connections in the graph
     * </pre>
     *
     * <code>repeated string connection_types = 1;</code>
     */
    int getConnectionTypesCount();
    /**
     * <pre>
     * connection_types are the types of connections in the graph
     * </pre>
     *
     * <code>repeated string connection_types = 1;</code>
     */
    java.lang.String getConnectionTypes(int index);
    /**
     * <pre>
     * connection_types are the types of connections in the graph
     * </pre>
     *
     * <code>repeated string connection_types = 1;</code>
     */
    com.google.protobuf.ByteString
        getConnectionTypesBytes(int index);

    /**
     * <pre>
     * doc_types are the types of docs in the graph
     * </pre>
     *
     * <code>repeated string doc_types = 2;</code>
     */
    java.util.List<java.lang.String>
        getDocTypesList();
    /**
     * <pre>
     * doc_types are the types of docs in the graph
     * </pre>
     *
     * <code>repeated string doc_types = 2;</code>
     */
    int getDocTypesCount();
    /**
     * <pre>
     * doc_types are the types of docs in the graph
     * </pre>
     *
     * <code>repeated string doc_types = 2;</code>
     */
    java.lang.String getDocTypes(int index);
    /**
     * <pre>
     * doc_types are the types of docs in the graph
     * </pre>
     *
     * <code>repeated string doc_types = 2;</code>
     */
    com.google.protobuf.ByteString
        getDocTypesBytes(int index);

    /**
     * <code>.api.Authorizers authorizers = 3;</code>
     */
    boolean hasAuthorizers();
    /**
     * <code>.api.Authorizers authorizers = 3;</code>
     */
    api.Graphik.Authorizers getAuthorizers();
    /**
     * <code>.api.Authorizers authorizers = 3;</code>
     */
    api.Graphik.AuthorizersOrBuilder getAuthorizersOrBuilder();

    /**
     * <code>.api.Constraints constraints = 4;</code>
     */
    boolean hasConstraints();
    /**
     * <code>.api.Constraints constraints = 4;</code>
     */
    api.Graphik.Constraints getConstraints();
    /**
     * <code>.api.Constraints constraints = 4;</code>
     */
    api.Graphik.ConstraintsOrBuilder getConstraintsOrBuilder();

    /**
     * <code>.api.Indexes indexes = 5;</code>
     */
    boolean hasIndexes();
    /**
     * <code>.api.Indexes indexes = 5;</code>
     */
    api.Graphik.Indexes getIndexes();
    /**
     * <code>.api.Indexes indexes = 5;</code>
     */
    api.Graphik.IndexesOrBuilder getIndexesOrBuilder();

    /**
     * <code>.api.Triggers triggers = 6;</code>
     */
    boolean hasTriggers();
    /**
     * <code>.api.Triggers triggers = 6;</code>
     */
    api.Graphik.Triggers getTriggers();
    /**
     * <code>.api.Triggers triggers = 6;</code>
     */
    api.Graphik.TriggersOrBuilder getTriggersOrBuilder();
  }
  /**
   * <pre>
   * Schema returns registered connection &amp; doc types
   * </pre>
   *
   * Protobuf type {@code api.Schema}
   */
  public  static final class Schema extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Schema)
      SchemaOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Schema.newBuilder() to construct.
    private Schema(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Schema() {
      connectionTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      docTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Schema(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                connectionTypes_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              connectionTypes_.add(s);
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                docTypes_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000002;
              }
              docTypes_.add(s);
              break;
            }
            case 26: {
              api.Graphik.Authorizers.Builder subBuilder = null;
              if (authorizers_ != null) {
                subBuilder = authorizers_.toBuilder();
              }
              authorizers_ = input.readMessage(api.Graphik.Authorizers.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(authorizers_);
                authorizers_ = subBuilder.buildPartial();
              }

              break;
            }
            case 34: {
              api.Graphik.Constraints.Builder subBuilder = null;
              if (constraints_ != null) {
                subBuilder = constraints_.toBuilder();
              }
              constraints_ = input.readMessage(api.Graphik.Constraints.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(constraints_);
                constraints_ = subBuilder.buildPartial();
              }

              break;
            }
            case 42: {
              api.Graphik.Indexes.Builder subBuilder = null;
              if (indexes_ != null) {
                subBuilder = indexes_.toBuilder();
              }
              indexes_ = input.readMessage(api.Graphik.Indexes.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(indexes_);
                indexes_ = subBuilder.buildPartial();
              }

              break;
            }
            case 50: {
              api.Graphik.Triggers.Builder subBuilder = null;
              if (triggers_ != null) {
                subBuilder = triggers_.toBuilder();
              }
              triggers_ = input.readMessage(api.Graphik.Triggers.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(triggers_);
                triggers_ = subBuilder.buildPartial();
              }

              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          connectionTypes_ = connectionTypes_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          docTypes_ = docTypes_.getUnmodifiableView();
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Schema_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Schema_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Schema.class, api.Graphik.Schema.Builder.class);
    }

    private int bitField0_;
    public static final int CONNECTION_TYPES_FIELD_NUMBER = 1;
    private com.google.protobuf.LazyStringList connectionTypes_;
    /**
     * <pre>
     * connection_types are the types of connections in the graph
     * </pre>
     *
     * <code>repeated string connection_types = 1;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getConnectionTypesList() {
      return connectionTypes_;
    }
    /**
     * <pre>
     * connection_types are the types of connections in the graph
     * </pre>
     *
     * <code>repeated string connection_types = 1;</code>
     */
    public int getConnectionTypesCount() {
      return connectionTypes_.size();
    }
    /**
     * <pre>
     * connection_types are the types of connections in the graph
     * </pre>
     *
     * <code>repeated string connection_types = 1;</code>
     */
    public java.lang.String getConnectionTypes(int index) {
      return connectionTypes_.get(index);
    }
    /**
     * <pre>
     * connection_types are the types of connections in the graph
     * </pre>
     *
     * <code>repeated string connection_types = 1;</code>
     */
    public com.google.protobuf.ByteString
        getConnectionTypesBytes(int index) {
      return connectionTypes_.getByteString(index);
    }

    public static final int DOC_TYPES_FIELD_NUMBER = 2;
    private com.google.protobuf.LazyStringList docTypes_;
    /**
     * <pre>
     * doc_types are the types of docs in the graph
     * </pre>
     *
     * <code>repeated string doc_types = 2;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getDocTypesList() {
      return docTypes_;
    }
    /**
     * <pre>
     * doc_types are the types of docs in the graph
     * </pre>
     *
     * <code>repeated string doc_types = 2;</code>
     */
    public int getDocTypesCount() {
      return docTypes_.size();
    }
    /**
     * <pre>
     * doc_types are the types of docs in the graph
     * </pre>
     *
     * <code>repeated string doc_types = 2;</code>
     */
    public java.lang.String getDocTypes(int index) {
      return docTypes_.get(index);
    }
    /**
     * <pre>
     * doc_types are the types of docs in the graph
     * </pre>
     *
     * <code>repeated string doc_types = 2;</code>
     */
    public com.google.protobuf.ByteString
        getDocTypesBytes(int index) {
      return docTypes_.getByteString(index);
    }

    public static final int AUTHORIZERS_FIELD_NUMBER = 3;
    private api.Graphik.Authorizers authorizers_;
    /**
     * <code>.api.Authorizers authorizers = 3;</code>
     */
    public boolean hasAuthorizers() {
      return authorizers_ != null;
    }
    /**
     * <code>.api.Authorizers authorizers = 3;</code>
     */
    public api.Graphik.Authorizers getAuthorizers() {
      return authorizers_ == null ? api.Graphik.Authorizers.getDefaultInstance() : authorizers_;
    }
    /**
     * <code>.api.Authorizers authorizers = 3;</code>
     */
    public api.Graphik.AuthorizersOrBuilder getAuthorizersOrBuilder() {
      return getAuthorizers();
    }

    public static final int CONSTRAINTS_FIELD_NUMBER = 4;
    private api.Graphik.Constraints constraints_;
    /**
     * <code>.api.Constraints constraints = 4;</code>
     */
    public boolean hasConstraints() {
      return constraints_ != null;
    }
    /**
     * <code>.api.Constraints constraints = 4;</code>
     */
    public api.Graphik.Constraints getConstraints() {
      return constraints_ == null ? api.Graphik.Constraints.getDefaultInstance() : constraints_;
    }
    /**
     * <code>.api.Constraints constraints = 4;</code>
     */
    public api.Graphik.ConstraintsOrBuilder getConstraintsOrBuilder() {
      return getConstraints();
    }

    public static final int INDEXES_FIELD_NUMBER = 5;
    private api.Graphik.Indexes indexes_;
    /**
     * <code>.api.Indexes indexes = 5;</code>
     */
    public boolean hasIndexes() {
      return indexes_ != null;
    }
    /**
     * <code>.api.Indexes indexes = 5;</code>
     */
    public api.Graphik.Indexes getIndexes() {
      return indexes_ == null ? api.Graphik.Indexes.getDefaultInstance() : indexes_;
    }
    /**
     * <code>.api.Indexes indexes = 5;</code>
     */
    public api.Graphik.IndexesOrBuilder getIndexesOrBuilder() {
      return getIndexes();
    }

    public static final int TRIGGERS_FIELD_NUMBER = 6;
    private api.Graphik.Triggers triggers_;
    /**
     * <code>.api.Triggers triggers = 6;</code>
     */
    public boolean hasTriggers() {
      return triggers_ != null;
    }
    /**
     * <code>.api.Triggers triggers = 6;</code>
     */
    public api.Graphik.Triggers getTriggers() {
      return triggers_ == null ? api.Graphik.Triggers.getDefaultInstance() : triggers_;
    }
    /**
     * <code>.api.Triggers triggers = 6;</code>
     */
    public api.Graphik.TriggersOrBuilder getTriggersOrBuilder() {
      return getTriggers();
    }

    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 {
      for (int i = 0; i < connectionTypes_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, connectionTypes_.getRaw(i));
      }
      for (int i = 0; i < docTypes_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, docTypes_.getRaw(i));
      }
      if (authorizers_ != null) {
        output.writeMessage(3, getAuthorizers());
      }
      if (constraints_ != null) {
        output.writeMessage(4, getConstraints());
      }
      if (indexes_ != null) {
        output.writeMessage(5, getIndexes());
      }
      if (triggers_ != null) {
        output.writeMessage(6, getTriggers());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < connectionTypes_.size(); i++) {
          dataSize += computeStringSizeNoTag(connectionTypes_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getConnectionTypesList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < docTypes_.size(); i++) {
          dataSize += computeStringSizeNoTag(docTypes_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getDocTypesList().size();
      }
      if (authorizers_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getAuthorizers());
      }
      if (constraints_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getConstraints());
      }
      if (indexes_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getIndexes());
      }
      if (triggers_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, getTriggers());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getConnectionTypesList()
          .equals(other.getConnectionTypesList());
      result = result && getDocTypesList()
          .equals(other.getDocTypesList());
      result = result && (hasAuthorizers() == other.hasAuthorizers());
      if (hasAuthorizers()) {
        result = result && getAuthorizers()
            .equals(other.getAuthorizers());
      }
      result = result && (hasConstraints() == other.hasConstraints());
      if (hasConstraints()) {
        result = result && getConstraints()
            .equals(other.getConstraints());
      }
      result = result && (hasIndexes() == other.hasIndexes());
      if (hasIndexes()) {
        result = result && getIndexes()
            .equals(other.getIndexes());
      }
      result = result && (hasTriggers() == other.hasTriggers());
      if (hasTriggers()) {
        result = result && getTriggers()
            .equals(other.getTriggers());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getConnectionTypesCount() > 0) {
        hash = (37 * hash) + CONNECTION_TYPES_FIELD_NUMBER;
        hash = (53 * hash) + getConnectionTypesList().hashCode();
      }
      if (getDocTypesCount() > 0) {
        hash = (37 * hash) + DOC_TYPES_FIELD_NUMBER;
        hash = (53 * hash) + getDocTypesList().hashCode();
      }
      if (hasAuthorizers()) {
        hash = (37 * hash) + AUTHORIZERS_FIELD_NUMBER;
        hash = (53 * hash) + getAuthorizers().hashCode();
      }
      if (hasConstraints()) {
        hash = (37 * hash) + CONSTRAINTS_FIELD_NUMBER;
        hash = (53 * hash) + getConstraints().hashCode();
      }
      if (hasIndexes()) {
        hash = (37 * hash) + INDEXES_FIELD_NUMBER;
        hash = (53 * hash) + getIndexes().hashCode();
      }
      if (hasTriggers()) {
        hash = (37 * hash) + TRIGGERS_FIELD_NUMBER;
        hash = (53 * hash) + getTriggers().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static api.Graphik.Schema parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Schema parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Schema parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Schema parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Schema parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static api.Graphik.Schema parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static api.Graphik.Schema parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Schema 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 api.Graphik.Schema parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static api.Graphik.Schema 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 api.Graphik.Schema parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static api.Graphik.Schema 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(api.Graphik.Schema 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>
     * Schema returns registered connection &amp; doc types
     * </pre>
     *
     * Protobuf type {@code api.Schema}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:api.Schema)
        api.Graphik.SchemaOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return api.Graphik.internal_static_api_Schema_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Schema_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Schema.class, api.Graphik.Schema.Builder.class);
      }

      // Construct using api.Graphik.Schema.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        connectionTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        docTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (authorizersBuilder_ == null) {
          authorizers_ = null;
        } else {
          authorizers_ = null;
          authorizersBuilder_ = null;
        }
        if (constraintsBuilder_ == null) {
          constraints_ = null;
        } else {
          constraints_ = null;
          constraintsBuilder_ = null;
        }
        if (indexesBuilder_ == null) {
          indexes_ = null;
        } else {
          indexes_ = null;
          indexesBuilder_ = null;
        }
        if (triggersBuilder_ == null) {
          triggers_ = null;
        } else {
          triggers_ = null;
          triggersBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Schema_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Schema getDefaultInstanceForType() {
        return api.Graphik.Schema.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Schema buildPartial() {
        api.Graphik.Schema result = new api.Graphik.Schema(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          connectionTypes_ = connectionTypes_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.connectionTypes_ = connectionTypes_;
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          docTypes_ = docTypes_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.docTypes_ = docTypes_;
        if (authorizersBuilder_ == null) {
          result.authorizers_ = authorizers_;
        } else {
          result.authorizers_ = authorizersBuilder_.build();
        }
        if (constraintsBuilder_ == null) {
          result.constraints_ = constraints_;
        } else {
          result.constraints_ = constraintsBuilder_.build();
        }
        if (indexesBuilder_ == null) {
          result.indexes_ = indexes_;
        } else {
          result.indexes_ = indexesBuilder_.build();
        }
        if (triggersBuilder_ == null) {
          result.triggers_ = triggers_;
        } else {
          result.triggers_ = triggersBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Schema other) {
        if (other == api.Graphik.Schema.getDefaultInstance()) return this;
        if (!other.connectionTypes_.isEmpty()) {
          if (connectionTypes_.isEmpty()) {
            connectionTypes_ = other.connectionTypes_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureConnectionTypesIsMutable();
            connectionTypes_.addAll(other.connectionTypes_);
          }
          onChanged();
        }
        if (!other.docTypes_.isEmpty()) {
          if (docTypes_.isEmpty()) {
            docTypes_ = other.docTypes_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureDocTypesIsMutable();
            docTypes_.addAll(other.docTypes_);
          }
          onChanged();
        }
        if (other.hasAuthorizers()) {
          mergeAuthorizers(other.getAuthorizers());
        }
        if (other.hasConstraints()) {
          mergeConstraints(other.getConstraints());
        }
        if (other.hasIndexes()) {
          mergeIndexes(other.getIndexes());
        }
        if (other.hasTriggers()) {
          mergeTriggers(other.getTriggers());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Schema parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Schema) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.LazyStringList connectionTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureConnectionTypesIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          connectionTypes_ = new com.google.protobuf.LazyStringArrayList(connectionTypes_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       * connection_types are the types of connections in the graph
       * </pre>
       *
       * <code>repeated string connection_types = 1;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getConnectionTypesList() {
        return connectionTypes_.getUnmodifiableView();
      }
      /**
       * <pre>
       * connection_types are the types of connections in the graph
       * </pre>
       *
       * <code>repeated string connection_types = 1;</code>
       */
      public int getConnectionTypesCount() {
        return connectionTypes_.size();
      }
      /**
       * <pre>
       * connection_types are the types of connections in the graph
       * </pre>
       *
       * <code>repeated string connection_types = 1;</code>
       */
      public java.lang.String getConnectionTypes(int index) {
        return connectionTypes_.get(index);
      }
      /**
       * <pre>
       * connection_types are the types of connections in the graph
       * </pre>
       *
       * <code>repeated string connection_types = 1;</code>
       */
      public com.google.protobuf.ByteString
          getConnectionTypesBytes(int index) {
        return connectionTypes_.getByteString(index);
      }
      /**
       * <pre>
       * connection_types are the types of connections in the graph
       * </pre>
       *
       * <code>repeated string connection_types = 1;</code>
       */
      public Builder setConnectionTypes(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureConnectionTypesIsMutable();
        connectionTypes_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * connection_types are the types of connections in the graph
       * </pre>
       *
       * <code>repeated string connection_types = 1;</code>
       */
      public Builder addConnectionTypes(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureConnectionTypesIsMutable();
        connectionTypes_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * connection_types are the types of connections in the graph
       * </pre>
       *
       * <code>repeated string connection_types = 1;</code>
       */
      public Builder addAllConnectionTypes(
          java.lang.Iterable<java.lang.String> values) {
        ensureConnectionTypesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, connectionTypes_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * connection_types are the types of connections in the graph
       * </pre>
       *
       * <code>repeated string connection_types = 1;</code>
       */
      public Builder clearConnectionTypes() {
        connectionTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * connection_types are the types of connections in the graph
       * </pre>
       *
       * <code>repeated string connection_types = 1;</code>
       */
      public Builder addConnectionTypesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureConnectionTypesIsMutable();
        connectionTypes_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList docTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureDocTypesIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          docTypes_ = new com.google.protobuf.LazyStringArrayList(docTypes_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <pre>
       * doc_types are the types of docs in the graph
       * </pre>
       *
       * <code>repeated string doc_types = 2;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getDocTypesList() {
        return docTypes_.getUnmodifiableView();
      }
      /**
       * <pre>
       * doc_types are the types of docs in the graph
       * </pre>
       *
       * <code>repeated string doc_types = 2;</code>
       */
      public int getDocTypesCount() {
        return docTypes_.size();
      }
      /**
       * <pre>
       * doc_types are the types of docs in the graph
       * </pre>
       *
       * <code>repeated string doc_types = 2;</code>
       */
      public java.lang.String getDocTypes(int index) {
        return docTypes_.get(index);
      }
      /**
       * <pre>
       * doc_types are the types of docs in the graph
       * </pre>
       *
       * <code>repeated string doc_types = 2;</code>
       */
      public com.google.protobuf.ByteString
          getDocTypesBytes(int index) {
        return docTypes_.getByteString(index);
      }
      /**
       * <pre>
       * doc_types are the types of docs in the graph
       * </pre>
       *
       * <code>repeated string doc_types = 2;</code>
       */
      public Builder setDocTypes(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDocTypesIsMutable();
        docTypes_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * doc_types are the types of docs in the graph
       * </pre>
       *
       * <code>repeated string doc_types = 2;</code>
       */
      public Builder addDocTypes(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDocTypesIsMutable();
        docTypes_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * doc_types are the types of docs in the graph
       * </pre>
       *
       * <code>repeated string doc_types = 2;</code>
       */
      public Builder addAllDocTypes(
          java.lang.Iterable<java.lang.String> values) {
        ensureDocTypesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, docTypes_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * doc_types are the types of docs in the graph
       * </pre>
       *
       * <code>repeated string doc_types = 2;</code>
       */
      public Builder clearDocTypes() {
        docTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * doc_types are the types of docs in the graph
       * </pre>
       *
       * <code>repeated string doc_types = 2;</code>
       */
      public Builder addDocTypesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureDocTypesIsMutable();
        docTypes_.add(value);
        onChanged();
        return this;
      }

      private api.Graphik.Authorizers authorizers_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Authorizers, api.Graphik.Authorizers.Builder, api.Graphik.AuthorizersOrBuilder> authorizersBuilder_;
      /**
       * <code>.api.Authorizers authorizers = 3;</code>
       */
      public boolean hasAuthorizers() {
        return authorizersBuilder_ != null || authorizers_ != null;
      }
      /**
       * <code>.api.Authorizers authorizers = 3;</code>
       */
      public api.Graphik.Authorizers getAuthorizers() {
        if (authorizersBuilder_ == null) {
          return authorizers_ == null ? api.Graphik.Authorizers.getDefaultInstance() : authorizers_;
        } else {
          return authorizersBuilder_.getMessage();
        }
      }
      /**
       * <code>.api.Authorizers authorizers = 3;</code>
       */
      public Builder setAuthorizers(api.Graphik.Authorizers value) {
        if (authorizersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          authorizers_ = value;
          onChanged();
        } else {
          authorizersBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.api.Authorizers authorizers = 3;</code>
       */
      public Builder setAuthorizers(
          api.Graphik.Authorizers.Builder builderForValue) {
        if (authorizersBuilder_ == null) {
          authorizers_ = builderForValue.build();
          onChanged();
        } else {
          authorizersBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.api.Authorizers authorizers = 3;</code>
       */
      public Builder mergeAuthorizers(api.Graphik.Authorizers value) {
        if (authorizersBuilder_ == null) {
          if (authorizers_ != null) {
            authorizers_ =
              api.Graphik.Authorizers.newBuilder(authorizers_).mergeFrom(value).buildPartial();
          } else {
            authorizers_ = value;
          }
          onChanged();
        } else {
          authorizersBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.api.Authorizers authorizers = 3;</code>
       */
      public Builder clearAuthorizers() {
        if (authorizersBuilder_ == null) {
          authorizers_ = null;
          onChanged();
        } else {
          authorizers_ = null;
          authorizersBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.api.Authorizers authorizers = 3;</code>
       */
      public api.Graphik.Authorizers.Builder getAuthorizersBuilder() {
        
        onChanged();
        return getAuthorizersFieldBuilder().getBuilder();
      }
      /**
       * <code>.api.Authorizers authorizers = 3;</code>
       */
      public api.Graphik.AuthorizersOrBuilder getAuthorizersOrBuilder() {
        if (authorizersBuilder_ != null) {
          return authorizersBuilder_.getMessageOrBuilder();
        } else {
          return authorizers_ == null ?
              api.Graphik.Authorizers.getDefaultInstance() : authorizers_;
        }
      }
      /**
       * <code>.api.Authorizers authorizers = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Authorizers, api.Graphik.Authorizers.Builder, api.Graphik.AuthorizersOrBuilder> 
          getAuthorizersFieldBuilder() {
        if (authorizersBuilder_ == null) {
          authorizersBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Authorizers, api.Graphik.Authorizers.Builder, api.Graphik.AuthorizersOrBuilder>(
                  getAuthorizers(),
                  getParentForChildren(),
                  isClean());
          authorizers_ = null;
        }
        return authorizersBuilder_;
      }

      private api.Graphik.Constraints constraints_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Constraints, api.Graphik.Constraints.Builder, api.Graphik.ConstraintsOrBuilder> constraintsBuilder_;
      /**
       * <code>.api.Constraints constraints = 4;</code>
       */
      public boolean hasConstraints() {
        return constraintsBuilder_ != null || constraints_ != null;
      }
      /**
       * <code>.api.Constraints constraints = 4;</code>
       */
      public api.Graphik.Constraints getConstraints() {
        if (constraintsBuilder_ == null) {
          return constraints_ == null ? api.Graphik.Constraints.getDefaultInstance() : constraints_;
        } else {
          return constraintsBuilder_.getMessage();
        }
      }
      /**
       * <code>.api.Constraints constraints = 4;</code>
       */
      public Builder setConstraints(api.Graphik.Constraints value) {
        if (constraintsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          constraints_ = value;
          onChanged();
        } else {
          constraintsBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.api.Constraints constraints = 4;</code>
       */
      public Builder setConstraints(
          api.Graphik.Constraints.Builder builderForValue) {
        if (constraintsBuilder_ == null) {
          constraints_ = builderForValue.build();
          onChanged();
        } else {
          constraintsBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.api.Constraints constraints = 4;</code>
       */
      public Builder mergeConstraints(api.Graphik.Constraints value) {
        if (constraintsBuilder_ == null) {
          if (constraints_ != null) {
            constraints_ =
              api.Graphik.Constraints.newBuilder(constraints_).mergeFrom(value).buildPartial();
          } else {
            constraints_ = value;
          }
          onChanged();
        } else {
          constraintsBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.api.Constraints constraints = 4;</code>
       */
      public Builder clearConstraints() {
        if (constraintsBuilder_ == null) {
          constraints_ = null;
          onChanged();
        } else {
          constraints_ = null;
          constraintsBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.api.Constraints constraints = 4;</code>
       */
      public api.Graphik.Constraints.Builder getConstraintsBuilder() {
        
        onChanged();
        return getConstraintsFieldBuilder().getBuilder();
      }
      /**
       * <code>.api.Constraints constraints = 4;</code>
       */
      public api.Graphik.ConstraintsOrBuilder getConstraintsOrBuilder() {
        if (constraintsBuilder_ != null) {
          return constraintsBuilder_.getMessageOrBuilder();
        } else {
          return constraints_ == null ?
              api.Graphik.Constraints.getDefaultInstance() : constraints_;
        }
      }
      /**
       * <code>.api.Constraints constraints = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Constraints, api.Graphik.Constraints.Builder, api.Graphik.ConstraintsOrBuilder> 
          getConstraintsFieldBuilder() {
        if (constraintsBuilder_ == null) {
          constraintsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Constraints, api.Graphik.Constraints.Builder, api.Graphik.ConstraintsOrBuilder>(
                  getConstraints(),
                  getParentForChildren(),
                  isClean());
          constraints_ = null;
        }
        return constraintsBuilder_;
      }

      private api.Graphik.Indexes indexes_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Indexes, api.Graphik.Indexes.Builder, api.Graphik.IndexesOrBuilder> indexesBuilder_;
      /**
       * <code>.api.Indexes indexes = 5;</code>
       */
      public boolean hasIndexes() {
        return indexesBuilder_ != null || indexes_ != null;
      }
      /**
       * <code>.api.Indexes indexes = 5;</code>
       */
      public api.Graphik.Indexes getIndexes() {
        if (indexesBuilder_ == null) {
          return indexes_ == null ? api.Graphik.Indexes.getDefaultInstance() : indexes_;
        } else {
          return indexesBuilder_.getMessage();
        }
      }
      /**
       * <code>.api.Indexes indexes = 5;</code>
       */
      public Builder setIndexes(api.Graphik.Indexes value) {
        if (indexesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          indexes_ = value;
          onChanged();
        } else {
          indexesBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.api.Indexes indexes = 5;</code>
       */
      public Builder setIndexes(
          api.Graphik.Indexes.Builder builderForValue) {
        if (indexesBuilder_ == null) {
          indexes_ = builderForValue.build();
          onChanged();
        } else {
          indexesBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.api.Indexes indexes = 5;</code>
       */
      public Builder mergeIndexes(api.Graphik.Indexes value) {
        if (indexesBuilder_ == null) {
          if (indexes_ != null) {
            indexes_ =
              api.Graphik.Indexes.newBuilder(indexes_).mergeFrom(value).buildPartial();
          } else {
            indexes_ = value;
          }
          onChanged();
        } else {
          indexesBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.api.Indexes indexes = 5;</code>
       */
      public Builder clearIndexes() {
        if (indexesBuilder_ == null) {
          indexes_ = null;
          onChanged();
        } else {
          indexes_ = null;
          indexesBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.api.Indexes indexes = 5;</code>
       */
      public api.Graphik.Indexes.Builder getIndexesBuilder() {
        
        onChanged();
        return getIndexesFieldBuilder().getBuilder();
      }
      /**
       * <code>.api.Indexes indexes = 5;</code>
       */
      public api.Graphik.IndexesOrBuilder getIndexesOrBuilder() {
        if (indexesBuilder_ != null) {
          return indexesBuilder_.getMessageOrBuilder();
        } else {
          return indexes_ == null ?
              api.Graphik.Indexes.getDefaultInstance() : indexes_;
        }
      }
      /**
       * <code>.api.Indexes indexes = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Indexes, api.Graphik.Indexes.Builder, api.Graphik.IndexesOrBuilder> 
          getIndexesFieldBuilder() {
        if (indexesBuilder_ == null) {
          indexesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Indexes, api.Graphik.Indexes.Builder, api.Graphik.IndexesOrBuilder>(
                  getIndexes(),
                  getParentForChildren(),
                  isClean());
          indexes_ = null;
        }
        return indexesBuilder_;
      }

      private api.Graphik.Triggers triggers_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Triggers, api.Graphik.Triggers.Builder, api.Graphik.TriggersOrBuilder> triggersBuilder_;
      /**
       * <code>.api.Triggers triggers = 6;</code>
       */
      public boolean hasTriggers() {
        return triggersBuilder_ != null || triggers_ != null;
      }
      /**
       * <code>.api.Triggers triggers = 6;</code>
       */
      public api.Graphik.Triggers getTriggers() {
        if (triggersBuilder_ == null) {
          return triggers_ == null ? api.Graphik.Triggers.getDefaultInstance() : triggers_;
        } else {
          return triggersBuilder_.getMessage();
        }
      }
      /**
       * <code>.api.Triggers triggers = 6;</code>
       */
      public Builder setTriggers(api.Graphik.Triggers value) {
        if (triggersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          triggers_ = value;
          onChanged();
        } else {
          triggersBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.api.Triggers triggers = 6;</code>
       */
      public Builder setTriggers(
          api.Graphik.Triggers.Builder builderForValue) {
        if (triggersBuilder_ == null) {
          triggers_ = builderForValue.build();
          onChanged();
        } else {
          triggersBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.api.Triggers triggers = 6;</code>
       */
      public Builder mergeTriggers(api.Graphik.Triggers value) {
        if (triggersBuilder_ == null) {
          if (triggers_ != null) {
            triggers_ =
              api.Graphik.Triggers.newBuilder(triggers_).mergeFrom(value).buildPartial();
          } else {
            triggers_ = value;
          }
          onChanged();
        } else {
          triggersBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.api.Triggers triggers = 6;</code>
       */
      public Builder clearTriggers() {
        if (triggersBuilder_ == null) {
          triggers_ = null;
          onChanged();
        } else {
          triggers_ = null;
          triggersBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.api.Triggers triggers = 6;</code>
       */
      public api.Graphik.Triggers.Builder getTriggersBuilder() {
        
        onChanged();
        return getTriggersFieldBuilder().getBuilder();
      }
      /**
       * <code>.api.Triggers triggers = 6;</code>
       */
      public api.Graphik.TriggersOrBuilder getTriggersOrBuilder() {
        if (triggersBuilder_ != null) {
          return triggersBuilder_.getMessageOrBuilder();
        } else {
          return triggers_ == null ?
              api.Graphik.Triggers.getDefaultInstance() : triggers_;
        }
      }
      /**
       * <code>.api.Triggers triggers = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Triggers, api.Graphik.Triggers.Builder, api.Graphik.TriggersOrBuilder> 
          getTriggersFieldBuilder() {
        if (triggersBuilder_ == null) {
          triggersBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Triggers, api.Graphik.Triggers.Builder, api.Graphik.TriggersOrBuilder>(
                  getTriggers(),
                  getParentForChildren(),
                  isClean());
          triggers_ = null;
        }
        return triggersBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Schema)
    }

    // @@protoc_insertion_point(class_scope:api.Schema)
    private static final api.Graphik.Schema DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Schema();
    }

    public static api.Graphik.Schema getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Schema>
        PARSER = new com.google.protobuf.AbstractParser<Schema>() {
      @java.lang.Override
      public Schema parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Schema(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Schema getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ExprFilterOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.ExprFilter)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * expression is a CEL expression used to filter connections/nodes
     * </pre>
     *
     * <code>string expression = 1;</code>
     */
    java.lang.String getExpression();
    /**
     * <pre>
     * expression is a CEL expression used to filter connections/nodes
     * </pre>
     *
     * <code>string expression = 1;</code>
     */
    com.google.protobuf.ByteString
        getExpressionBytes();
  }
  /**
   * Protobuf type {@code api.ExprFilter}
   */
  public  static final class ExprFilter extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.ExprFilter)
      ExprFilterOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ExprFilter.newBuilder() to construct.
    private ExprFilter(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ExprFilter() {
      expression_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ExprFilter(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              expression_ = s;
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_ExprFilter_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_ExprFilter_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.ExprFilter.class, api.Graphik.ExprFilter.Builder.class);
    }

    public static final int EXPRESSION_FIELD_NUMBER = 1;
    private volatile java.lang.Object expression_;
    /**
     * <pre>
     * expression is a CEL expression used to filter connections/nodes
     * </pre>
     *
     * <code>string expression = 1;</code>
     */
    public java.lang.String getExpression() {
      java.lang.Object ref = expression_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        expression_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * expression is a CEL expression used to filter connections/nodes
     * </pre>
     *
     * <code>string expression = 1;</code>
     */
    public com.google.protobuf.ByteString
        getExpressionBytes() {
      java.lang.Object ref = expression_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        expression_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    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 (!getExpressionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, expression_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getExpressionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, expression_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getExpression()
          .equals(other.getExpression());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + EXPRESSION_FIELD_NUMBER;
      hash = (53 * hash) + getExpression().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

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

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_ExprFilter_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.ExprFilter.class, api.Graphik.ExprFilter.Builder.class);
      }

      // Construct using api.Graphik.ExprFilter.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        expression_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_ExprFilter_descriptor;
      }

      @java.lang.Override
      public api.Graphik.ExprFilter getDefaultInstanceForType() {
        return api.Graphik.ExprFilter.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.ExprFilter buildPartial() {
        api.Graphik.ExprFilter result = new api.Graphik.ExprFilter(this);
        result.expression_ = expression_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.ExprFilter other) {
        if (other == api.Graphik.ExprFilter.getDefaultInstance()) return this;
        if (!other.getExpression().isEmpty()) {
          expression_ = other.expression_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.ExprFilter parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.ExprFilter) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object expression_ = "";
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/nodes
       * </pre>
       *
       * <code>string expression = 1;</code>
       */
      public java.lang.String getExpression() {
        java.lang.Object ref = expression_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          expression_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/nodes
       * </pre>
       *
       * <code>string expression = 1;</code>
       */
      public com.google.protobuf.ByteString
          getExpressionBytes() {
        java.lang.Object ref = expression_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          expression_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/nodes
       * </pre>
       *
       * <code>string expression = 1;</code>
       */
      public Builder setExpression(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        expression_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/nodes
       * </pre>
       *
       * <code>string expression = 1;</code>
       */
      public Builder clearExpression() {
        
        expression_ = getDefaultInstance().getExpression();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * expression is a CEL expression used to filter connections/nodes
       * </pre>
       *
       * <code>string expression = 1;</code>
       */
      public Builder setExpressionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        expression_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.ExprFilter)
    }

    // @@protoc_insertion_point(class_scope:api.ExprFilter)
    private static final api.Graphik.ExprFilter DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.ExprFilter();
    }

    public static api.Graphik.ExprFilter getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ExprFilter>
        PARSER = new com.google.protobuf.AbstractParser<ExprFilter>() {
      @java.lang.Override
      public ExprFilter parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ExprFilter(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.ExprFilter getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RaftCommandOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.RaftCommand)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.api.Doc user = 1;</code>
     */
    boolean hasUser();
    /**
     * <code>.api.Doc user = 1;</code>
     */
    api.Graphik.Doc getUser();
    /**
     * <code>.api.Doc user = 1;</code>
     */
    api.Graphik.DocOrBuilder getUserOrBuilder();

    /**
     * <code>string method = 2;</code>
     */
    java.lang.String getMethod();
    /**
     * <code>string method = 2;</code>
     */
    com.google.protobuf.ByteString
        getMethodBytes();

    /**
     * <code>repeated .api.Doc set_docs = 3;</code>
     */
    java.util.List<api.Graphik.Doc> 
        getSetDocsList();
    /**
     * <code>repeated .api.Doc set_docs = 3;</code>
     */
    api.Graphik.Doc getSetDocs(int index);
    /**
     * <code>repeated .api.Doc set_docs = 3;</code>
     */
    int getSetDocsCount();
    /**
     * <code>repeated .api.Doc set_docs = 3;</code>
     */
    java.util.List<? extends api.Graphik.DocOrBuilder> 
        getSetDocsOrBuilderList();
    /**
     * <code>repeated .api.Doc set_docs = 3;</code>
     */
    api.Graphik.DocOrBuilder getSetDocsOrBuilder(
        int index);

    /**
     * <code>repeated .api.Connection set_connections = 4;</code>
     */
    java.util.List<api.Graphik.Connection> 
        getSetConnectionsList();
    /**
     * <code>repeated .api.Connection set_connections = 4;</code>
     */
    api.Graphik.Connection getSetConnections(int index);
    /**
     * <code>repeated .api.Connection set_connections = 4;</code>
     */
    int getSetConnectionsCount();
    /**
     * <code>repeated .api.Connection set_connections = 4;</code>
     */
    java.util.List<? extends api.Graphik.ConnectionOrBuilder> 
        getSetConnectionsOrBuilderList();
    /**
     * <code>repeated .api.Connection set_connections = 4;</code>
     */
    api.Graphik.ConnectionOrBuilder getSetConnectionsOrBuilder(
        int index);

    /**
     * <code>repeated .api.Ref del_docs = 5;</code>
     */
    java.util.List<api.Graphik.Ref> 
        getDelDocsList();
    /**
     * <code>repeated .api.Ref del_docs = 5;</code>
     */
    api.Graphik.Ref getDelDocs(int index);
    /**
     * <code>repeated .api.Ref del_docs = 5;</code>
     */
    int getDelDocsCount();
    /**
     * <code>repeated .api.Ref del_docs = 5;</code>
     */
    java.util.List<? extends api.Graphik.RefOrBuilder> 
        getDelDocsOrBuilderList();
    /**
     * <code>repeated .api.Ref del_docs = 5;</code>
     */
    api.Graphik.RefOrBuilder getDelDocsOrBuilder(
        int index);

    /**
     * <code>repeated .api.Ref del_connections = 6;</code>
     */
    java.util.List<api.Graphik.Ref> 
        getDelConnectionsList();
    /**
     * <code>repeated .api.Ref del_connections = 6;</code>
     */
    api.Graphik.Ref getDelConnections(int index);
    /**
     * <code>repeated .api.Ref del_connections = 6;</code>
     */
    int getDelConnectionsCount();
    /**
     * <code>repeated .api.Ref del_connections = 6;</code>
     */
    java.util.List<? extends api.Graphik.RefOrBuilder> 
        getDelConnectionsOrBuilderList();
    /**
     * <code>repeated .api.Ref del_connections = 6;</code>
     */
    api.Graphik.RefOrBuilder getDelConnectionsOrBuilder(
        int index);

    /**
     * <code>.api.Indexes set_indexes = 7;</code>
     */
    boolean hasSetIndexes();
    /**
     * <code>.api.Indexes set_indexes = 7;</code>
     */
    api.Graphik.Indexes getSetIndexes();
    /**
     * <code>.api.Indexes set_indexes = 7;</code>
     */
    api.Graphik.IndexesOrBuilder getSetIndexesOrBuilder();

    /**
     * <code>.api.Authorizers set_authorizers = 8;</code>
     */
    boolean hasSetAuthorizers();
    /**
     * <code>.api.Authorizers set_authorizers = 8;</code>
     */
    api.Graphik.Authorizers getSetAuthorizers();
    /**
     * <code>.api.Authorizers set_authorizers = 8;</code>
     */
    api.Graphik.AuthorizersOrBuilder getSetAuthorizersOrBuilder();

    /**
     * <code>.api.Constraints set_constraints = 9;</code>
     */
    boolean hasSetConstraints();
    /**
     * <code>.api.Constraints set_constraints = 9;</code>
     */
    api.Graphik.Constraints getSetConstraints();
    /**
     * <code>.api.Constraints set_constraints = 9;</code>
     */
    api.Graphik.ConstraintsOrBuilder getSetConstraintsOrBuilder();

    /**
     * <code>.api.Message send_message = 10;</code>
     */
    boolean hasSendMessage();
    /**
     * <code>.api.Message send_message = 10;</code>
     */
    api.Graphik.Message getSendMessage();
    /**
     * <code>.api.Message send_message = 10;</code>
     */
    api.Graphik.MessageOrBuilder getSendMessageOrBuilder();

    /**
     * <code>.api.Triggers set_triggers = 11;</code>
     */
    boolean hasSetTriggers();
    /**
     * <code>.api.Triggers set_triggers = 11;</code>
     */
    api.Graphik.Triggers getSetTriggers();
    /**
     * <code>.api.Triggers set_triggers = 11;</code>
     */
    api.Graphik.TriggersOrBuilder getSetTriggersOrBuilder();
  }
  /**
   * Protobuf type {@code api.RaftCommand}
   */
  public  static final class RaftCommand extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.RaftCommand)
      RaftCommandOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RaftCommand.newBuilder() to construct.
    private RaftCommand(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RaftCommand() {
      method_ = "";
      setDocs_ = java.util.Collections.emptyList();
      setConnections_ = java.util.Collections.emptyList();
      delDocs_ = java.util.Collections.emptyList();
      delConnections_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RaftCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              api.Graphik.Doc.Builder subBuilder = null;
              if (user_ != null) {
                subBuilder = user_.toBuilder();
              }
              user_ = input.readMessage(api.Graphik.Doc.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(user_);
                user_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              method_ = s;
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                setDocs_ = new java.util.ArrayList<api.Graphik.Doc>();
                mutable_bitField0_ |= 0x00000004;
              }
              setDocs_.add(
                  input.readMessage(api.Graphik.Doc.parser(), extensionRegistry));
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                setConnections_ = new java.util.ArrayList<api.Graphik.Connection>();
                mutable_bitField0_ |= 0x00000008;
              }
              setConnections_.add(
                  input.readMessage(api.Graphik.Connection.parser(), extensionRegistry));
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                delDocs_ = new java.util.ArrayList<api.Graphik.Ref>();
                mutable_bitField0_ |= 0x00000010;
              }
              delDocs_.add(
                  input.readMessage(api.Graphik.Ref.parser(), extensionRegistry));
              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                delConnections_ = new java.util.ArrayList<api.Graphik.Ref>();
                mutable_bitField0_ |= 0x00000020;
              }
              delConnections_.add(
                  input.readMessage(api.Graphik.Ref.parser(), extensionRegistry));
              break;
            }
            case 58: {
              api.Graphik.Indexes.Builder subBuilder = null;
              if (setIndexes_ != null) {
                subBuilder = setIndexes_.toBuilder();
              }
              setIndexes_ = input.readMessage(api.Graphik.Indexes.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(setIndexes_);
                setIndexes_ = subBuilder.buildPartial();
              }

              break;
            }
            case 66: {
              api.Graphik.Authorizers.Builder subBuilder = null;
              if (setAuthorizers_ != null) {
                subBuilder = setAuthorizers_.toBuilder();
              }
              setAuthorizers_ = input.readMessage(api.Graphik.Authorizers.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(setAuthorizers_);
                setAuthorizers_ = subBuilder.buildPartial();
              }

              break;
            }
            case 74: {
              api.Graphik.Constraints.Builder subBuilder = null;
              if (setConstraints_ != null) {
                subBuilder = setConstraints_.toBuilder();
              }
              setConstraints_ = input.readMessage(api.Graphik.Constraints.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(setConstraints_);
                setConstraints_ = subBuilder.buildPartial();
              }

              break;
            }
            case 82: {
              api.Graphik.Message.Builder subBuilder = null;
              if (sendMessage_ != null) {
                subBuilder = sendMessage_.toBuilder();
              }
              sendMessage_ = input.readMessage(api.Graphik.Message.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(sendMessage_);
                sendMessage_ = subBuilder.buildPartial();
              }

              break;
            }
            case 90: {
              api.Graphik.Triggers.Builder subBuilder = null;
              if (setTriggers_ != null) {
                subBuilder = setTriggers_.toBuilder();
              }
              setTriggers_ = input.readMessage(api.Graphik.Triggers.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(setTriggers_);
                setTriggers_ = subBuilder.buildPartial();
              }

              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          setDocs_ = java.util.Collections.unmodifiableList(setDocs_);
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          setConnections_ = java.util.Collections.unmodifiableList(setConnections_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          delDocs_ = java.util.Collections.unmodifiableList(delDocs_);
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          delConnections_ = java.util.Collections.unmodifiableList(delConnections_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_RaftCommand_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_RaftCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.RaftCommand.class, api.Graphik.RaftCommand.Builder.class);
    }

    private int bitField0_;
    public static final int USER_FIELD_NUMBER = 1;
    private api.Graphik.Doc user_;
    /**
     * <code>.api.Doc user = 1;</code>
     */
    public boolean hasUser() {
      return user_ != null;
    }
    /**
     * <code>.api.Doc user = 1;</code>
     */
    public api.Graphik.Doc getUser() {
      return user_ == null ? api.Graphik.Doc.getDefaultInstance() : user_;
    }
    /**
     * <code>.api.Doc user = 1;</code>
     */
    public api.Graphik.DocOrBuilder getUserOrBuilder() {
      return getUser();
    }

    public static final int METHOD_FIELD_NUMBER = 2;
    private volatile java.lang.Object method_;
    /**
     * <code>string method = 2;</code>
     */
    public java.lang.String getMethod() {
      java.lang.Object ref = method_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        method_ = s;
        return s;
      }
    }
    /**
     * <code>string method = 2;</code>
     */
    public com.google.protobuf.ByteString
        getMethodBytes() {
      java.lang.Object ref = method_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        method_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SET_DOCS_FIELD_NUMBER = 3;
    private java.util.List<api.Graphik.Doc> setDocs_;
    /**
     * <code>repeated .api.Doc set_docs = 3;</code>
     */
    public java.util.List<api.Graphik.Doc> getSetDocsList() {
      return setDocs_;
    }
    /**
     * <code>repeated .api.Doc set_docs = 3;</code>
     */
    public java.util.List<? extends api.Graphik.DocOrBuilder> 
        getSetDocsOrBuilderList() {
      return setDocs_;
    }
    /**
     * <code>repeated .api.Doc set_docs = 3;</code>
     */
    public int getSetDocsCount() {
      return setDocs_.size();
    }
    /**
     * <code>repeated .api.Doc set_docs = 3;</code>
     */
    public api.Graphik.Doc getSetDocs(int index) {
      return setDocs_.get(index);
    }
    /**
     * <code>repeated .api.Doc set_docs = 3;</code>
     */
    public api.Graphik.DocOrBuilder getSetDocsOrBuilder(
        int index) {
      return setDocs_.get(index);
    }

    public static final int SET_CONNECTIONS_FIELD_NUMBER = 4;
    private java.util.List<api.Graphik.Connection> setConnections_;
    /**
     * <code>repeated .api.Connection set_connections = 4;</code>
     */
    public java.util.List<api.Graphik.Connection> getSetConnectionsList() {
      return setConnections_;
    }
    /**
     * <code>repeated .api.Connection set_connections = 4;</code>
     */
    public java.util.List<? extends api.Graphik.ConnectionOrBuilder> 
        getSetConnectionsOrBuilderList() {
      return setConnections_;
    }
    /**
     * <code>repeated .api.Connection set_connections = 4;</code>
     */
    public int getSetConnectionsCount() {
      return setConnections_.size();
    }
    /**
     * <code>repeated .api.Connection set_connections = 4;</code>
     */
    public api.Graphik.Connection getSetConnections(int index) {
      return setConnections_.get(index);
    }
    /**
     * <code>repeated .api.Connection set_connections = 4;</code>
     */
    public api.Graphik.ConnectionOrBuilder getSetConnectionsOrBuilder(
        int index) {
      return setConnections_.get(index);
    }

    public static final int DEL_DOCS_FIELD_NUMBER = 5;
    private java.util.List<api.Graphik.Ref> delDocs_;
    /**
     * <code>repeated .api.Ref del_docs = 5;</code>
     */
    public java.util.List<api.Graphik.Ref> getDelDocsList() {
      return delDocs_;
    }
    /**
     * <code>repeated .api.Ref del_docs = 5;</code>
     */
    public java.util.List<? extends api.Graphik.RefOrBuilder> 
        getDelDocsOrBuilderList() {
      return delDocs_;
    }
    /**
     * <code>repeated .api.Ref del_docs = 5;</code>
     */
    public int getDelDocsCount() {
      return delDocs_.size();
    }
    /**
     * <code>repeated .api.Ref del_docs = 5;</code>
     */
    public api.Graphik.Ref getDelDocs(int index) {
      return delDocs_.get(index);
    }
    /**
     * <code>repeated .api.Ref del_docs = 5;</code>
     */
    public api.Graphik.RefOrBuilder getDelDocsOrBuilder(
        int index) {
      return delDocs_.get(index);
    }

    public static final int DEL_CONNECTIONS_FIELD_NUMBER = 6;
    private java.util.List<api.Graphik.Ref> delConnections_;
    /**
     * <code>repeated .api.Ref del_connections = 6;</code>
     */
    public java.util.List<api.Graphik.Ref> getDelConnectionsList() {
      return delConnections_;
    }
    /**
     * <code>repeated .api.Ref del_connections = 6;</code>
     */
    public java.util.List<? extends api.Graphik.RefOrBuilder> 
        getDelConnectionsOrBuilderList() {
      return delConnections_;
    }
    /**
     * <code>repeated .api.Ref del_connections = 6;</code>
     */
    public int getDelConnectionsCount() {
      return delConnections_.size();
    }
    /**
     * <code>repeated .api.Ref del_connections = 6;</code>
     */
    public api.Graphik.Ref getDelConnections(int index) {
      return delConnections_.get(index);
    }
    /**
     * <code>repeated .api.Ref del_connections = 6;</code>
     */
    public api.Graphik.RefOrBuilder getDelConnectionsOrBuilder(
        int index) {
      return delConnections_.get(index);
    }

    public static final int SET_INDEXES_FIELD_NUMBER = 7;
    private api.Graphik.Indexes setIndexes_;
    /**
     * <code>.api.Indexes set_indexes = 7;</code>
     */
    public boolean hasSetIndexes() {
      return setIndexes_ != null;
    }
    /**
     * <code>.api.Indexes set_indexes = 7;</code>
     */
    public api.Graphik.Indexes getSetIndexes() {
      return setIndexes_ == null ? api.Graphik.Indexes.getDefaultInstance() : setIndexes_;
    }
    /**
     * <code>.api.Indexes set_indexes = 7;</code>
     */
    public api.Graphik.IndexesOrBuilder getSetIndexesOrBuilder() {
      return getSetIndexes();
    }

    public static final int SET_AUTHORIZERS_FIELD_NUMBER = 8;
    private api.Graphik.Authorizers setAuthorizers_;
    /**
     * <code>.api.Authorizers set_authorizers = 8;</code>
     */
    public boolean hasSetAuthorizers() {
      return setAuthorizers_ != null;
    }
    /**
     * <code>.api.Authorizers set_authorizers = 8;</code>
     */
    public api.Graphik.Authorizers getSetAuthorizers() {
      return setAuthorizers_ == null ? api.Graphik.Authorizers.getDefaultInstance() : setAuthorizers_;
    }
    /**
     * <code>.api.Authorizers set_authorizers = 8;</code>
     */
    public api.Graphik.AuthorizersOrBuilder getSetAuthorizersOrBuilder() {
      return getSetAuthorizers();
    }

    public static final int SET_CONSTRAINTS_FIELD_NUMBER = 9;
    private api.Graphik.Constraints setConstraints_;
    /**
     * <code>.api.Constraints set_constraints = 9;</code>
     */
    public boolean hasSetConstraints() {
      return setConstraints_ != null;
    }
    /**
     * <code>.api.Constraints set_constraints = 9;</code>
     */
    public api.Graphik.Constraints getSetConstraints() {
      return setConstraints_ == null ? api.Graphik.Constraints.getDefaultInstance() : setConstraints_;
    }
    /**
     * <code>.api.Constraints set_constraints = 9;</code>
     */
    public api.Graphik.ConstraintsOrBuilder getSetConstraintsOrBuilder() {
      return getSetConstraints();
    }

    public static final int SEND_MESSAGE_FIELD_NUMBER = 10;
    private api.Graphik.Message sendMessage_;
    /**
     * <code>.api.Message send_message = 10;</code>
     */
    public boolean hasSendMessage() {
      return sendMessage_ != null;
    }
    /**
     * <code>.api.Message send_message = 10;</code>
     */
    public api.Graphik.Message getSendMessage() {
      return sendMessage_ == null ? api.Graphik.Message.getDefaultInstance() : sendMessage_;
    }
    /**
     * <code>.api.Message send_message = 10;</code>
     */
    public api.Graphik.MessageOrBuilder getSendMessageOrBuilder() {
      return getSendMessage();
    }

    public static final int SET_TRIGGERS_FIELD_NUMBER = 11;
    private api.Graphik.Triggers setTriggers_;
    /**
     * <code>.api.Triggers set_triggers = 11;</code>
     */
    public boolean hasSetTriggers() {
      return setTriggers_ != null;
    }
    /**
     * <code>.api.Triggers set_triggers = 11;</code>
     */
    public api.Graphik.Triggers getSetTriggers() {
      return setTriggers_ == null ? api.Graphik.Triggers.getDefaultInstance() : setTriggers_;
    }
    /**
     * <code>.api.Triggers set_triggers = 11;</code>
     */
    public api.Graphik.TriggersOrBuilder getSetTriggersOrBuilder() {
      return getSetTriggers();
    }

    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 (user_ != null) {
        output.writeMessage(1, getUser());
      }
      if (!getMethodBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, method_);
      }
      for (int i = 0; i < setDocs_.size(); i++) {
        output.writeMessage(3, setDocs_.get(i));
      }
      for (int i = 0; i < setConnections_.size(); i++) {
        output.writeMessage(4, setConnections_.get(i));
      }
      for (int i = 0; i < delDocs_.size(); i++) {
        output.writeMessage(5, delDocs_.get(i));
      }
      for (int i = 0; i < delConnections_.size(); i++) {
        output.writeMessage(6, delConnections_.get(i));
      }
      if (setIndexes_ != null) {
        output.writeMessage(7, getSetIndexes());
      }
      if (setAuthorizers_ != null) {
        output.writeMessage(8, getSetAuthorizers());
      }
      if (setConstraints_ != null) {
        output.writeMessage(9, getSetConstraints());
      }
      if (sendMessage_ != null) {
        output.writeMessage(10, getSendMessage());
      }
      if (setTriggers_ != null) {
        output.writeMessage(11, getSetTriggers());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (user_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getUser());
      }
      if (!getMethodBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, method_);
      }
      for (int i = 0; i < setDocs_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, setDocs_.get(i));
      }
      for (int i = 0; i < setConnections_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, setConnections_.get(i));
      }
      for (int i = 0; i < delDocs_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, delDocs_.get(i));
      }
      for (int i = 0; i < delConnections_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, delConnections_.get(i));
      }
      if (setIndexes_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, getSetIndexes());
      }
      if (setAuthorizers_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, getSetAuthorizers());
      }
      if (setConstraints_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, getSetConstraints());
      }
      if (sendMessage_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, getSendMessage());
      }
      if (setTriggers_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(11, getSetTriggers());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && (hasUser() == other.hasUser());
      if (hasUser()) {
        result = result && getUser()
            .equals(other.getUser());
      }
      result = result && getMethod()
          .equals(other.getMethod());
      result = result && getSetDocsList()
          .equals(other.getSetDocsList());
      result = result && getSetConnectionsList()
          .equals(other.getSetConnectionsList());
      result = result && getDelDocsList()
          .equals(other.getDelDocsList());
      result = result && getDelConnectionsList()
          .equals(other.getDelConnectionsList());
      result = result && (hasSetIndexes() == other.hasSetIndexes());
      if (hasSetIndexes()) {
        result = result && getSetIndexes()
            .equals(other.getSetIndexes());
      }
      result = result && (hasSetAuthorizers() == other.hasSetAuthorizers());
      if (hasSetAuthorizers()) {
        result = result && getSetAuthorizers()
            .equals(other.getSetAuthorizers());
      }
      result = result && (hasSetConstraints() == other.hasSetConstraints());
      if (hasSetConstraints()) {
        result = result && getSetConstraints()
            .equals(other.getSetConstraints());
      }
      result = result && (hasSendMessage() == other.hasSendMessage());
      if (hasSendMessage()) {
        result = result && getSendMessage()
            .equals(other.getSendMessage());
      }
      result = result && (hasSetTriggers() == other.hasSetTriggers());
      if (hasSetTriggers()) {
        result = result && getSetTriggers()
            .equals(other.getSetTriggers());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasUser()) {
        hash = (37 * hash) + USER_FIELD_NUMBER;
        hash = (53 * hash) + getUser().hashCode();
      }
      hash = (37 * hash) + METHOD_FIELD_NUMBER;
      hash = (53 * hash) + getMethod().hashCode();
      if (getSetDocsCount() > 0) {
        hash = (37 * hash) + SET_DOCS_FIELD_NUMBER;
        hash = (53 * hash) + getSetDocsList().hashCode();
      }
      if (getSetConnectionsCount() > 0) {
        hash = (37 * hash) + SET_CONNECTIONS_FIELD_NUMBER;
        hash = (53 * hash) + getSetConnectionsList().hashCode();
      }
      if (getDelDocsCount() > 0) {
        hash = (37 * hash) + DEL_DOCS_FIELD_NUMBER;
        hash = (53 * hash) + getDelDocsList().hashCode();
      }
      if (getDelConnectionsCount() > 0) {
        hash = (37 * hash) + DEL_CONNECTIONS_FIELD_NUMBER;
        hash = (53 * hash) + getDelConnectionsList().hashCode();
      }
      if (hasSetIndexes()) {
        hash = (37 * hash) + SET_INDEXES_FIELD_NUMBER;
        hash = (53 * hash) + getSetIndexes().hashCode();
      }
      if (hasSetAuthorizers()) {
        hash = (37 * hash) + SET_AUTHORIZERS_FIELD_NUMBER;
        hash = (53 * hash) + getSetAuthorizers().hashCode();
      }
      if (hasSetConstraints()) {
        hash = (37 * hash) + SET_CONSTRAINTS_FIELD_NUMBER;
        hash = (53 * hash) + getSetConstraints().hashCode();
      }
      if (hasSendMessage()) {
        hash = (37 * hash) + SEND_MESSAGE_FIELD_NUMBER;
        hash = (53 * hash) + getSendMessage().hashCode();
      }
      if (hasSetTriggers()) {
        hash = (37 * hash) + SET_TRIGGERS_FIELD_NUMBER;
        hash = (53 * hash) + getSetTriggers().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

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

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_RaftCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.RaftCommand.class, api.Graphik.RaftCommand.Builder.class);
      }

      // Construct using api.Graphik.RaftCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getSetDocsFieldBuilder();
          getSetConnectionsFieldBuilder();
          getDelDocsFieldBuilder();
          getDelConnectionsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (userBuilder_ == null) {
          user_ = null;
        } else {
          user_ = null;
          userBuilder_ = null;
        }
        method_ = "";

        if (setDocsBuilder_ == null) {
          setDocs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          setDocsBuilder_.clear();
        }
        if (setConnectionsBuilder_ == null) {
          setConnections_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          setConnectionsBuilder_.clear();
        }
        if (delDocsBuilder_ == null) {
          delDocs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          delDocsBuilder_.clear();
        }
        if (delConnectionsBuilder_ == null) {
          delConnections_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          delConnectionsBuilder_.clear();
        }
        if (setIndexesBuilder_ == null) {
          setIndexes_ = null;
        } else {
          setIndexes_ = null;
          setIndexesBuilder_ = null;
        }
        if (setAuthorizersBuilder_ == null) {
          setAuthorizers_ = null;
        } else {
          setAuthorizers_ = null;
          setAuthorizersBuilder_ = null;
        }
        if (setConstraintsBuilder_ == null) {
          setConstraints_ = null;
        } else {
          setConstraints_ = null;
          setConstraintsBuilder_ = null;
        }
        if (sendMessageBuilder_ == null) {
          sendMessage_ = null;
        } else {
          sendMessage_ = null;
          sendMessageBuilder_ = null;
        }
        if (setTriggersBuilder_ == null) {
          setTriggers_ = null;
        } else {
          setTriggers_ = null;
          setTriggersBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_RaftCommand_descriptor;
      }

      @java.lang.Override
      public api.Graphik.RaftCommand getDefaultInstanceForType() {
        return api.Graphik.RaftCommand.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.RaftCommand buildPartial() {
        api.Graphik.RaftCommand result = new api.Graphik.RaftCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (userBuilder_ == null) {
          result.user_ = user_;
        } else {
          result.user_ = userBuilder_.build();
        }
        result.method_ = method_;
        if (setDocsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            setDocs_ = java.util.Collections.unmodifiableList(setDocs_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.setDocs_ = setDocs_;
        } else {
          result.setDocs_ = setDocsBuilder_.build();
        }
        if (setConnectionsBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            setConnections_ = java.util.Collections.unmodifiableList(setConnections_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.setConnections_ = setConnections_;
        } else {
          result.setConnections_ = setConnectionsBuilder_.build();
        }
        if (delDocsBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            delDocs_ = java.util.Collections.unmodifiableList(delDocs_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.delDocs_ = delDocs_;
        } else {
          result.delDocs_ = delDocsBuilder_.build();
        }
        if (delConnectionsBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            delConnections_ = java.util.Collections.unmodifiableList(delConnections_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.delConnections_ = delConnections_;
        } else {
          result.delConnections_ = delConnectionsBuilder_.build();
        }
        if (setIndexesBuilder_ == null) {
          result.setIndexes_ = setIndexes_;
        } else {
          result.setIndexes_ = setIndexesBuilder_.build();
        }
        if (setAuthorizersBuilder_ == null) {
          result.setAuthorizers_ = setAuthorizers_;
        } else {
          result.setAuthorizers_ = setAuthorizersBuilder_.build();
        }
        if (setConstraintsBuilder_ == null) {
          result.setConstraints_ = setConstraints_;
        } else {
          result.setConstraints_ = setConstraintsBuilder_.build();
        }
        if (sendMessageBuilder_ == null) {
          result.sendMessage_ = sendMessage_;
        } else {
          result.sendMessage_ = sendMessageBuilder_.build();
        }
        if (setTriggersBuilder_ == null) {
          result.setTriggers_ = setTriggers_;
        } else {
          result.setTriggers_ = setTriggersBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.RaftCommand other) {
        if (other == api.Graphik.RaftCommand.getDefaultInstance()) return this;
        if (other.hasUser()) {
          mergeUser(other.getUser());
        }
        if (!other.getMethod().isEmpty()) {
          method_ = other.method_;
          onChanged();
        }
        if (setDocsBuilder_ == null) {
          if (!other.setDocs_.isEmpty()) {
            if (setDocs_.isEmpty()) {
              setDocs_ = other.setDocs_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureSetDocsIsMutable();
              setDocs_.addAll(other.setDocs_);
            }
            onChanged();
          }
        } else {
          if (!other.setDocs_.isEmpty()) {
            if (setDocsBuilder_.isEmpty()) {
              setDocsBuilder_.dispose();
              setDocsBuilder_ = null;
              setDocs_ = other.setDocs_;
              bitField0_ = (bitField0_ & ~0x00000004);
              setDocsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getSetDocsFieldBuilder() : null;
            } else {
              setDocsBuilder_.addAllMessages(other.setDocs_);
            }
          }
        }
        if (setConnectionsBuilder_ == null) {
          if (!other.setConnections_.isEmpty()) {
            if (setConnections_.isEmpty()) {
              setConnections_ = other.setConnections_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureSetConnectionsIsMutable();
              setConnections_.addAll(other.setConnections_);
            }
            onChanged();
          }
        } else {
          if (!other.setConnections_.isEmpty()) {
            if (setConnectionsBuilder_.isEmpty()) {
              setConnectionsBuilder_.dispose();
              setConnectionsBuilder_ = null;
              setConnections_ = other.setConnections_;
              bitField0_ = (bitField0_ & ~0x00000008);
              setConnectionsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getSetConnectionsFieldBuilder() : null;
            } else {
              setConnectionsBuilder_.addAllMessages(other.setConnections_);
            }
          }
        }
        if (delDocsBuilder_ == null) {
          if (!other.delDocs_.isEmpty()) {
            if (delDocs_.isEmpty()) {
              delDocs_ = other.delDocs_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureDelDocsIsMutable();
              delDocs_.addAll(other.delDocs_);
            }
            onChanged();
          }
        } else {
          if (!other.delDocs_.isEmpty()) {
            if (delDocsBuilder_.isEmpty()) {
              delDocsBuilder_.dispose();
              delDocsBuilder_ = null;
              delDocs_ = other.delDocs_;
              bitField0_ = (bitField0_ & ~0x00000010);
              delDocsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getDelDocsFieldBuilder() : null;
            } else {
              delDocsBuilder_.addAllMessages(other.delDocs_);
            }
          }
        }
        if (delConnectionsBuilder_ == null) {
          if (!other.delConnections_.isEmpty()) {
            if (delConnections_.isEmpty()) {
              delConnections_ = other.delConnections_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureDelConnectionsIsMutable();
              delConnections_.addAll(other.delConnections_);
            }
            onChanged();
          }
        } else {
          if (!other.delConnections_.isEmpty()) {
            if (delConnectionsBuilder_.isEmpty()) {
              delConnectionsBuilder_.dispose();
              delConnectionsBuilder_ = null;
              delConnections_ = other.delConnections_;
              bitField0_ = (bitField0_ & ~0x00000020);
              delConnectionsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getDelConnectionsFieldBuilder() : null;
            } else {
              delConnectionsBuilder_.addAllMessages(other.delConnections_);
            }
          }
        }
        if (other.hasSetIndexes()) {
          mergeSetIndexes(other.getSetIndexes());
        }
        if (other.hasSetAuthorizers()) {
          mergeSetAuthorizers(other.getSetAuthorizers());
        }
        if (other.hasSetConstraints()) {
          mergeSetConstraints(other.getSetConstraints());
        }
        if (other.hasSendMessage()) {
          mergeSendMessage(other.getSendMessage());
        }
        if (other.hasSetTriggers()) {
          mergeSetTriggers(other.getSetTriggers());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.RaftCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.RaftCommand) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private api.Graphik.Doc user_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Doc, api.Graphik.Doc.Builder, api.Graphik.DocOrBuilder> userBuilder_;
      /**
       * <code>.api.Doc user = 1;</code>
       */
      public boolean hasUser() {
        return userBuilder_ != null || user_ != null;
      }
      /**
       * <code>.api.Doc user = 1;</code>
       */
      public api.Graphik.Doc getUser() {
        if (userBuilder_ == null) {
          return user_ == null ? api.Graphik.Doc.getDefaultInstance() : user_;
        } else {
          return userBuilder_.getMessage();
        }
      }
      /**
       * <code>.api.Doc user = 1;</code>
       */
      public Builder setUser(api.Graphik.Doc value) {
        if (userBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          user_ = value;
          onChanged();
        } else {
          userBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.api.Doc user = 1;</code>
       */
      public Builder setUser(
          api.Graphik.Doc.Builder builderForValue) {
        if (userBuilder_ == null) {
          user_ = builderForValue.build();
          onChanged();
        } else {
          userBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.api.Doc user = 1;</code>
       */
      public Builder mergeUser(api.Graphik.Doc value) {
        if (userBuilder_ == null) {
          if (user_ != null) {
            user_ =
              api.Graphik.Doc.newBuilder(user_).mergeFrom(value).buildPartial();
          } else {
            user_ = value;
          }
          onChanged();
        } else {
          userBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.api.Doc user = 1;</code>
       */
      public Builder clearUser() {
        if (userBuilder_ == null) {
          user_ = null;
          onChanged();
        } else {
          user_ = null;
          userBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.api.Doc user = 1;</code>
       */
      public api.Graphik.Doc.Builder getUserBuilder() {
        
        onChanged();
        return getUserFieldBuilder().getBuilder();
      }
      /**
       * <code>.api.Doc user = 1;</code>
       */
      public api.Graphik.DocOrBuilder getUserOrBuilder() {
        if (userBuilder_ != null) {
          return userBuilder_.getMessageOrBuilder();
        } else {
          return user_ == null ?
              api.Graphik.Doc.getDefaultInstance() : user_;
        }
      }
      /**
       * <code>.api.Doc user = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Doc, api.Graphik.Doc.Builder, api.Graphik.DocOrBuilder> 
          getUserFieldBuilder() {
        if (userBuilder_ == null) {
          userBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Doc, api.Graphik.Doc.Builder, api.Graphik.DocOrBuilder>(
                  getUser(),
                  getParentForChildren(),
                  isClean());
          user_ = null;
        }
        return userBuilder_;
      }

      private java.lang.Object method_ = "";
      /**
       * <code>string method = 2;</code>
       */
      public java.lang.String getMethod() {
        java.lang.Object ref = method_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          method_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string method = 2;</code>
       */
      public com.google.protobuf.ByteString
          getMethodBytes() {
        java.lang.Object ref = method_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          method_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string method = 2;</code>
       */
      public Builder setMethod(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        method_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string method = 2;</code>
       */
      public Builder clearMethod() {
        
        method_ = getDefaultInstance().getMethod();
        onChanged();
        return this;
      }
      /**
       * <code>string method = 2;</code>
       */
      public Builder setMethodBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        method_ = value;
        onChanged();
        return this;
      }

      private java.util.List<api.Graphik.Doc> setDocs_ =
        java.util.Collections.emptyList();
      private void ensureSetDocsIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          setDocs_ = new java.util.ArrayList<api.Graphik.Doc>(setDocs_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Doc, api.Graphik.Doc.Builder, api.Graphik.DocOrBuilder> setDocsBuilder_;

      /**
       * <code>repeated .api.Doc set_docs = 3;</code>
       */
      public java.util.List<api.Graphik.Doc> getSetDocsList() {
        if (setDocsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(setDocs_);
        } else {
          return setDocsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .api.Doc set_docs = 3;</code>
       */
      public int getSetDocsCount() {
        if (setDocsBuilder_ == null) {
          return setDocs_.size();
        } else {
          return setDocsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .api.Doc set_docs = 3;</code>
       */
      public api.Graphik.Doc getSetDocs(int index) {
        if (setDocsBuilder_ == null) {
          return setDocs_.get(index);
        } else {
          return setDocsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .api.Doc set_docs = 3;</code>
       */
      public Builder setSetDocs(
          int index, api.Graphik.Doc value) {
        if (setDocsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSetDocsIsMutable();
          setDocs_.set(index, value);
          onChanged();
        } else {
          setDocsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Doc set_docs = 3;</code>
       */
      public Builder setSetDocs(
          int index, api.Graphik.Doc.Builder builderForValue) {
        if (setDocsBuilder_ == null) {
          ensureSetDocsIsMutable();
          setDocs_.set(index, builderForValue.build());
          onChanged();
        } else {
          setDocsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Doc set_docs = 3;</code>
       */
      public Builder addSetDocs(api.Graphik.Doc value) {
        if (setDocsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSetDocsIsMutable();
          setDocs_.add(value);
          onChanged();
        } else {
          setDocsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Doc set_docs = 3;</code>
       */
      public Builder addSetDocs(
          int index, api.Graphik.Doc value) {
        if (setDocsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSetDocsIsMutable();
          setDocs_.add(index, value);
          onChanged();
        } else {
          setDocsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Doc set_docs = 3;</code>
       */
      public Builder addSetDocs(
          api.Graphik.Doc.Builder builderForValue) {
        if (setDocsBuilder_ == null) {
          ensureSetDocsIsMutable();
          setDocs_.add(builderForValue.build());
          onChanged();
        } else {
          setDocsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Doc set_docs = 3;</code>
       */
      public Builder addSetDocs(
          int index, api.Graphik.Doc.Builder builderForValue) {
        if (setDocsBuilder_ == null) {
          ensureSetDocsIsMutable();
          setDocs_.add(index, builderForValue.build());
          onChanged();
        } else {
          setDocsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Doc set_docs = 3;</code>
       */
      public Builder addAllSetDocs(
          java.lang.Iterable<? extends api.Graphik.Doc> values) {
        if (setDocsBuilder_ == null) {
          ensureSetDocsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, setDocs_);
          onChanged();
        } else {
          setDocsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .api.Doc set_docs = 3;</code>
       */
      public Builder clearSetDocs() {
        if (setDocsBuilder_ == null) {
          setDocs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          setDocsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .api.Doc set_docs = 3;</code>
       */
      public Builder removeSetDocs(int index) {
        if (setDocsBuilder_ == null) {
          ensureSetDocsIsMutable();
          setDocs_.remove(index);
          onChanged();
        } else {
          setDocsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .api.Doc set_docs = 3;</code>
       */
      public api.Graphik.Doc.Builder getSetDocsBuilder(
          int index) {
        return getSetDocsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .api.Doc set_docs = 3;</code>
       */
      public api.Graphik.DocOrBuilder getSetDocsOrBuilder(
          int index) {
        if (setDocsBuilder_ == null) {
          return setDocs_.get(index);  } else {
          return setDocsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .api.Doc set_docs = 3;</code>
       */
      public java.util.List<? extends api.Graphik.DocOrBuilder> 
           getSetDocsOrBuilderList() {
        if (setDocsBuilder_ != null) {
          return setDocsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(setDocs_);
        }
      }
      /**
       * <code>repeated .api.Doc set_docs = 3;</code>
       */
      public api.Graphik.Doc.Builder addSetDocsBuilder() {
        return getSetDocsFieldBuilder().addBuilder(
            api.Graphik.Doc.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Doc set_docs = 3;</code>
       */
      public api.Graphik.Doc.Builder addSetDocsBuilder(
          int index) {
        return getSetDocsFieldBuilder().addBuilder(
            index, api.Graphik.Doc.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Doc set_docs = 3;</code>
       */
      public java.util.List<api.Graphik.Doc.Builder> 
           getSetDocsBuilderList() {
        return getSetDocsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Doc, api.Graphik.Doc.Builder, api.Graphik.DocOrBuilder> 
          getSetDocsFieldBuilder() {
        if (setDocsBuilder_ == null) {
          setDocsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              api.Graphik.Doc, api.Graphik.Doc.Builder, api.Graphik.DocOrBuilder>(
                  setDocs_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          setDocs_ = null;
        }
        return setDocsBuilder_;
      }

      private java.util.List<api.Graphik.Connection> setConnections_ =
        java.util.Collections.emptyList();
      private void ensureSetConnectionsIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          setConnections_ = new java.util.ArrayList<api.Graphik.Connection>(setConnections_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Connection, api.Graphik.Connection.Builder, api.Graphik.ConnectionOrBuilder> setConnectionsBuilder_;

      /**
       * <code>repeated .api.Connection set_connections = 4;</code>
       */
      public java.util.List<api.Graphik.Connection> getSetConnectionsList() {
        if (setConnectionsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(setConnections_);
        } else {
          return setConnectionsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .api.Connection set_connections = 4;</code>
       */
      public int getSetConnectionsCount() {
        if (setConnectionsBuilder_ == null) {
          return setConnections_.size();
        } else {
          return setConnectionsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .api.Connection set_connections = 4;</code>
       */
      public api.Graphik.Connection getSetConnections(int index) {
        if (setConnectionsBuilder_ == null) {
          return setConnections_.get(index);
        } else {
          return setConnectionsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .api.Connection set_connections = 4;</code>
       */
      public Builder setSetConnections(
          int index, api.Graphik.Connection value) {
        if (setConnectionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSetConnectionsIsMutable();
          setConnections_.set(index, value);
          onChanged();
        } else {
          setConnectionsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Connection set_connections = 4;</code>
       */
      public Builder setSetConnections(
          int index, api.Graphik.Connection.Builder builderForValue) {
        if (setConnectionsBuilder_ == null) {
          ensureSetConnectionsIsMutable();
          setConnections_.set(index, builderForValue.build());
          onChanged();
        } else {
          setConnectionsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Connection set_connections = 4;</code>
       */
      public Builder addSetConnections(api.Graphik.Connection value) {
        if (setConnectionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSetConnectionsIsMutable();
          setConnections_.add(value);
          onChanged();
        } else {
          setConnectionsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Connection set_connections = 4;</code>
       */
      public Builder addSetConnections(
          int index, api.Graphik.Connection value) {
        if (setConnectionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSetConnectionsIsMutable();
          setConnections_.add(index, value);
          onChanged();
        } else {
          setConnectionsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Connection set_connections = 4;</code>
       */
      public Builder addSetConnections(
          api.Graphik.Connection.Builder builderForValue) {
        if (setConnectionsBuilder_ == null) {
          ensureSetConnectionsIsMutable();
          setConnections_.add(builderForValue.build());
          onChanged();
        } else {
          setConnectionsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Connection set_connections = 4;</code>
       */
      public Builder addSetConnections(
          int index, api.Graphik.Connection.Builder builderForValue) {
        if (setConnectionsBuilder_ == null) {
          ensureSetConnectionsIsMutable();
          setConnections_.add(index, builderForValue.build());
          onChanged();
        } else {
          setConnectionsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Connection set_connections = 4;</code>
       */
      public Builder addAllSetConnections(
          java.lang.Iterable<? extends api.Graphik.Connection> values) {
        if (setConnectionsBuilder_ == null) {
          ensureSetConnectionsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, setConnections_);
          onChanged();
        } else {
          setConnectionsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .api.Connection set_connections = 4;</code>
       */
      public Builder clearSetConnections() {
        if (setConnectionsBuilder_ == null) {
          setConnections_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          setConnectionsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .api.Connection set_connections = 4;</code>
       */
      public Builder removeSetConnections(int index) {
        if (setConnectionsBuilder_ == null) {
          ensureSetConnectionsIsMutable();
          setConnections_.remove(index);
          onChanged();
        } else {
          setConnectionsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .api.Connection set_connections = 4;</code>
       */
      public api.Graphik.Connection.Builder getSetConnectionsBuilder(
          int index) {
        return getSetConnectionsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .api.Connection set_connections = 4;</code>
       */
      public api.Graphik.ConnectionOrBuilder getSetConnectionsOrBuilder(
          int index) {
        if (setConnectionsBuilder_ == null) {
          return setConnections_.get(index);  } else {
          return setConnectionsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .api.Connection set_connections = 4;</code>
       */
      public java.util.List<? extends api.Graphik.ConnectionOrBuilder> 
           getSetConnectionsOrBuilderList() {
        if (setConnectionsBuilder_ != null) {
          return setConnectionsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(setConnections_);
        }
      }
      /**
       * <code>repeated .api.Connection set_connections = 4;</code>
       */
      public api.Graphik.Connection.Builder addSetConnectionsBuilder() {
        return getSetConnectionsFieldBuilder().addBuilder(
            api.Graphik.Connection.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Connection set_connections = 4;</code>
       */
      public api.Graphik.Connection.Builder addSetConnectionsBuilder(
          int index) {
        return getSetConnectionsFieldBuilder().addBuilder(
            index, api.Graphik.Connection.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Connection set_connections = 4;</code>
       */
      public java.util.List<api.Graphik.Connection.Builder> 
           getSetConnectionsBuilderList() {
        return getSetConnectionsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Connection, api.Graphik.Connection.Builder, api.Graphik.ConnectionOrBuilder> 
          getSetConnectionsFieldBuilder() {
        if (setConnectionsBuilder_ == null) {
          setConnectionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              api.Graphik.Connection, api.Graphik.Connection.Builder, api.Graphik.ConnectionOrBuilder>(
                  setConnections_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          setConnections_ = null;
        }
        return setConnectionsBuilder_;
      }

      private java.util.List<api.Graphik.Ref> delDocs_ =
        java.util.Collections.emptyList();
      private void ensureDelDocsIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          delDocs_ = new java.util.ArrayList<api.Graphik.Ref>(delDocs_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> delDocsBuilder_;

      /**
       * <code>repeated .api.Ref del_docs = 5;</code>
       */
      public java.util.List<api.Graphik.Ref> getDelDocsList() {
        if (delDocsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(delDocs_);
        } else {
          return delDocsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .api.Ref del_docs = 5;</code>
       */
      public int getDelDocsCount() {
        if (delDocsBuilder_ == null) {
          return delDocs_.size();
        } else {
          return delDocsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .api.Ref del_docs = 5;</code>
       */
      public api.Graphik.Ref getDelDocs(int index) {
        if (delDocsBuilder_ == null) {
          return delDocs_.get(index);
        } else {
          return delDocsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .api.Ref del_docs = 5;</code>
       */
      public Builder setDelDocs(
          int index, api.Graphik.Ref value) {
        if (delDocsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDelDocsIsMutable();
          delDocs_.set(index, value);
          onChanged();
        } else {
          delDocsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref del_docs = 5;</code>
       */
      public Builder setDelDocs(
          int index, api.Graphik.Ref.Builder builderForValue) {
        if (delDocsBuilder_ == null) {
          ensureDelDocsIsMutable();
          delDocs_.set(index, builderForValue.build());
          onChanged();
        } else {
          delDocsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref del_docs = 5;</code>
       */
      public Builder addDelDocs(api.Graphik.Ref value) {
        if (delDocsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDelDocsIsMutable();
          delDocs_.add(value);
          onChanged();
        } else {
          delDocsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref del_docs = 5;</code>
       */
      public Builder addDelDocs(
          int index, api.Graphik.Ref value) {
        if (delDocsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDelDocsIsMutable();
          delDocs_.add(index, value);
          onChanged();
        } else {
          delDocsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref del_docs = 5;</code>
       */
      public Builder addDelDocs(
          api.Graphik.Ref.Builder builderForValue) {
        if (delDocsBuilder_ == null) {
          ensureDelDocsIsMutable();
          delDocs_.add(builderForValue.build());
          onChanged();
        } else {
          delDocsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref del_docs = 5;</code>
       */
      public Builder addDelDocs(
          int index, api.Graphik.Ref.Builder builderForValue) {
        if (delDocsBuilder_ == null) {
          ensureDelDocsIsMutable();
          delDocs_.add(index, builderForValue.build());
          onChanged();
        } else {
          delDocsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref del_docs = 5;</code>
       */
      public Builder addAllDelDocs(
          java.lang.Iterable<? extends api.Graphik.Ref> values) {
        if (delDocsBuilder_ == null) {
          ensureDelDocsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, delDocs_);
          onChanged();
        } else {
          delDocsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref del_docs = 5;</code>
       */
      public Builder clearDelDocs() {
        if (delDocsBuilder_ == null) {
          delDocs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          delDocsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref del_docs = 5;</code>
       */
      public Builder removeDelDocs(int index) {
        if (delDocsBuilder_ == null) {
          ensureDelDocsIsMutable();
          delDocs_.remove(index);
          onChanged();
        } else {
          delDocsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref del_docs = 5;</code>
       */
      public api.Graphik.Ref.Builder getDelDocsBuilder(
          int index) {
        return getDelDocsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .api.Ref del_docs = 5;</code>
       */
      public api.Graphik.RefOrBuilder getDelDocsOrBuilder(
          int index) {
        if (delDocsBuilder_ == null) {
          return delDocs_.get(index);  } else {
          return delDocsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .api.Ref del_docs = 5;</code>
       */
      public java.util.List<? extends api.Graphik.RefOrBuilder> 
           getDelDocsOrBuilderList() {
        if (delDocsBuilder_ != null) {
          return delDocsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(delDocs_);
        }
      }
      /**
       * <code>repeated .api.Ref del_docs = 5;</code>
       */
      public api.Graphik.Ref.Builder addDelDocsBuilder() {
        return getDelDocsFieldBuilder().addBuilder(
            api.Graphik.Ref.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Ref del_docs = 5;</code>
       */
      public api.Graphik.Ref.Builder addDelDocsBuilder(
          int index) {
        return getDelDocsFieldBuilder().addBuilder(
            index, api.Graphik.Ref.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Ref del_docs = 5;</code>
       */
      public java.util.List<api.Graphik.Ref.Builder> 
           getDelDocsBuilderList() {
        return getDelDocsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> 
          getDelDocsFieldBuilder() {
        if (delDocsBuilder_ == null) {
          delDocsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder>(
                  delDocs_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          delDocs_ = null;
        }
        return delDocsBuilder_;
      }

      private java.util.List<api.Graphik.Ref> delConnections_ =
        java.util.Collections.emptyList();
      private void ensureDelConnectionsIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          delConnections_ = new java.util.ArrayList<api.Graphik.Ref>(delConnections_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> delConnectionsBuilder_;

      /**
       * <code>repeated .api.Ref del_connections = 6;</code>
       */
      public java.util.List<api.Graphik.Ref> getDelConnectionsList() {
        if (delConnectionsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(delConnections_);
        } else {
          return delConnectionsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .api.Ref del_connections = 6;</code>
       */
      public int getDelConnectionsCount() {
        if (delConnectionsBuilder_ == null) {
          return delConnections_.size();
        } else {
          return delConnectionsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .api.Ref del_connections = 6;</code>
       */
      public api.Graphik.Ref getDelConnections(int index) {
        if (delConnectionsBuilder_ == null) {
          return delConnections_.get(index);
        } else {
          return delConnectionsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .api.Ref del_connections = 6;</code>
       */
      public Builder setDelConnections(
          int index, api.Graphik.Ref value) {
        if (delConnectionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDelConnectionsIsMutable();
          delConnections_.set(index, value);
          onChanged();
        } else {
          delConnectionsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref del_connections = 6;</code>
       */
      public Builder setDelConnections(
          int index, api.Graphik.Ref.Builder builderForValue) {
        if (delConnectionsBuilder_ == null) {
          ensureDelConnectionsIsMutable();
          delConnections_.set(index, builderForValue.build());
          onChanged();
        } else {
          delConnectionsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref del_connections = 6;</code>
       */
      public Builder addDelConnections(api.Graphik.Ref value) {
        if (delConnectionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDelConnectionsIsMutable();
          delConnections_.add(value);
          onChanged();
        } else {
          delConnectionsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref del_connections = 6;</code>
       */
      public Builder addDelConnections(
          int index, api.Graphik.Ref value) {
        if (delConnectionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDelConnectionsIsMutable();
          delConnections_.add(index, value);
          onChanged();
        } else {
          delConnectionsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref del_connections = 6;</code>
       */
      public Builder addDelConnections(
          api.Graphik.Ref.Builder builderForValue) {
        if (delConnectionsBuilder_ == null) {
          ensureDelConnectionsIsMutable();
          delConnections_.add(builderForValue.build());
          onChanged();
        } else {
          delConnectionsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref del_connections = 6;</code>
       */
      public Builder addDelConnections(
          int index, api.Graphik.Ref.Builder builderForValue) {
        if (delConnectionsBuilder_ == null) {
          ensureDelConnectionsIsMutable();
          delConnections_.add(index, builderForValue.build());
          onChanged();
        } else {
          delConnectionsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref del_connections = 6;</code>
       */
      public Builder addAllDelConnections(
          java.lang.Iterable<? extends api.Graphik.Ref> values) {
        if (delConnectionsBuilder_ == null) {
          ensureDelConnectionsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, delConnections_);
          onChanged();
        } else {
          delConnectionsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref del_connections = 6;</code>
       */
      public Builder clearDelConnections() {
        if (delConnectionsBuilder_ == null) {
          delConnections_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          delConnectionsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref del_connections = 6;</code>
       */
      public Builder removeDelConnections(int index) {
        if (delConnectionsBuilder_ == null) {
          ensureDelConnectionsIsMutable();
          delConnections_.remove(index);
          onChanged();
        } else {
          delConnectionsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .api.Ref del_connections = 6;</code>
       */
      public api.Graphik.Ref.Builder getDelConnectionsBuilder(
          int index) {
        return getDelConnectionsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .api.Ref del_connections = 6;</code>
       */
      public api.Graphik.RefOrBuilder getDelConnectionsOrBuilder(
          int index) {
        if (delConnectionsBuilder_ == null) {
          return delConnections_.get(index);  } else {
          return delConnectionsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .api.Ref del_connections = 6;</code>
       */
      public java.util.List<? extends api.Graphik.RefOrBuilder> 
           getDelConnectionsOrBuilderList() {
        if (delConnectionsBuilder_ != null) {
          return delConnectionsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(delConnections_);
        }
      }
      /**
       * <code>repeated .api.Ref del_connections = 6;</code>
       */
      public api.Graphik.Ref.Builder addDelConnectionsBuilder() {
        return getDelConnectionsFieldBuilder().addBuilder(
            api.Graphik.Ref.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Ref del_connections = 6;</code>
       */
      public api.Graphik.Ref.Builder addDelConnectionsBuilder(
          int index) {
        return getDelConnectionsFieldBuilder().addBuilder(
            index, api.Graphik.Ref.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Ref del_connections = 6;</code>
       */
      public java.util.List<api.Graphik.Ref.Builder> 
           getDelConnectionsBuilderList() {
        return getDelConnectionsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder> 
          getDelConnectionsFieldBuilder() {
        if (delConnectionsBuilder_ == null) {
          delConnectionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              api.Graphik.Ref, api.Graphik.Ref.Builder, api.Graphik.RefOrBuilder>(
                  delConnections_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          delConnections_ = null;
        }
        return delConnectionsBuilder_;
      }

      private api.Graphik.Indexes setIndexes_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Indexes, api.Graphik.Indexes.Builder, api.Graphik.IndexesOrBuilder> setIndexesBuilder_;
      /**
       * <code>.api.Indexes set_indexes = 7;</code>
       */
      public boolean hasSetIndexes() {
        return setIndexesBuilder_ != null || setIndexes_ != null;
      }
      /**
       * <code>.api.Indexes set_indexes = 7;</code>
       */
      public api.Graphik.Indexes getSetIndexes() {
        if (setIndexesBuilder_ == null) {
          return setIndexes_ == null ? api.Graphik.Indexes.getDefaultInstance() : setIndexes_;
        } else {
          return setIndexesBuilder_.getMessage();
        }
      }
      /**
       * <code>.api.Indexes set_indexes = 7;</code>
       */
      public Builder setSetIndexes(api.Graphik.Indexes value) {
        if (setIndexesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          setIndexes_ = value;
          onChanged();
        } else {
          setIndexesBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.api.Indexes set_indexes = 7;</code>
       */
      public Builder setSetIndexes(
          api.Graphik.Indexes.Builder builderForValue) {
        if (setIndexesBuilder_ == null) {
          setIndexes_ = builderForValue.build();
          onChanged();
        } else {
          setIndexesBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.api.Indexes set_indexes = 7;</code>
       */
      public Builder mergeSetIndexes(api.Graphik.Indexes value) {
        if (setIndexesBuilder_ == null) {
          if (setIndexes_ != null) {
            setIndexes_ =
              api.Graphik.Indexes.newBuilder(setIndexes_).mergeFrom(value).buildPartial();
          } else {
            setIndexes_ = value;
          }
          onChanged();
        } else {
          setIndexesBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.api.Indexes set_indexes = 7;</code>
       */
      public Builder clearSetIndexes() {
        if (setIndexesBuilder_ == null) {
          setIndexes_ = null;
          onChanged();
        } else {
          setIndexes_ = null;
          setIndexesBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.api.Indexes set_indexes = 7;</code>
       */
      public api.Graphik.Indexes.Builder getSetIndexesBuilder() {
        
        onChanged();
        return getSetIndexesFieldBuilder().getBuilder();
      }
      /**
       * <code>.api.Indexes set_indexes = 7;</code>
       */
      public api.Graphik.IndexesOrBuilder getSetIndexesOrBuilder() {
        if (setIndexesBuilder_ != null) {
          return setIndexesBuilder_.getMessageOrBuilder();
        } else {
          return setIndexes_ == null ?
              api.Graphik.Indexes.getDefaultInstance() : setIndexes_;
        }
      }
      /**
       * <code>.api.Indexes set_indexes = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Indexes, api.Graphik.Indexes.Builder, api.Graphik.IndexesOrBuilder> 
          getSetIndexesFieldBuilder() {
        if (setIndexesBuilder_ == null) {
          setIndexesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Indexes, api.Graphik.Indexes.Builder, api.Graphik.IndexesOrBuilder>(
                  getSetIndexes(),
                  getParentForChildren(),
                  isClean());
          setIndexes_ = null;
        }
        return setIndexesBuilder_;
      }

      private api.Graphik.Authorizers setAuthorizers_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Authorizers, api.Graphik.Authorizers.Builder, api.Graphik.AuthorizersOrBuilder> setAuthorizersBuilder_;
      /**
       * <code>.api.Authorizers set_authorizers = 8;</code>
       */
      public boolean hasSetAuthorizers() {
        return setAuthorizersBuilder_ != null || setAuthorizers_ != null;
      }
      /**
       * <code>.api.Authorizers set_authorizers = 8;</code>
       */
      public api.Graphik.Authorizers getSetAuthorizers() {
        if (setAuthorizersBuilder_ == null) {
          return setAuthorizers_ == null ? api.Graphik.Authorizers.getDefaultInstance() : setAuthorizers_;
        } else {
          return setAuthorizersBuilder_.getMessage();
        }
      }
      /**
       * <code>.api.Authorizers set_authorizers = 8;</code>
       */
      public Builder setSetAuthorizers(api.Graphik.Authorizers value) {
        if (setAuthorizersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          setAuthorizers_ = value;
          onChanged();
        } else {
          setAuthorizersBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.api.Authorizers set_authorizers = 8;</code>
       */
      public Builder setSetAuthorizers(
          api.Graphik.Authorizers.Builder builderForValue) {
        if (setAuthorizersBuilder_ == null) {
          setAuthorizers_ = builderForValue.build();
          onChanged();
        } else {
          setAuthorizersBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.api.Authorizers set_authorizers = 8;</code>
       */
      public Builder mergeSetAuthorizers(api.Graphik.Authorizers value) {
        if (setAuthorizersBuilder_ == null) {
          if (setAuthorizers_ != null) {
            setAuthorizers_ =
              api.Graphik.Authorizers.newBuilder(setAuthorizers_).mergeFrom(value).buildPartial();
          } else {
            setAuthorizers_ = value;
          }
          onChanged();
        } else {
          setAuthorizersBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.api.Authorizers set_authorizers = 8;</code>
       */
      public Builder clearSetAuthorizers() {
        if (setAuthorizersBuilder_ == null) {
          setAuthorizers_ = null;
          onChanged();
        } else {
          setAuthorizers_ = null;
          setAuthorizersBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.api.Authorizers set_authorizers = 8;</code>
       */
      public api.Graphik.Authorizers.Builder getSetAuthorizersBuilder() {
        
        onChanged();
        return getSetAuthorizersFieldBuilder().getBuilder();
      }
      /**
       * <code>.api.Authorizers set_authorizers = 8;</code>
       */
      public api.Graphik.AuthorizersOrBuilder getSetAuthorizersOrBuilder() {
        if (setAuthorizersBuilder_ != null) {
          return setAuthorizersBuilder_.getMessageOrBuilder();
        } else {
          return setAuthorizers_ == null ?
              api.Graphik.Authorizers.getDefaultInstance() : setAuthorizers_;
        }
      }
      /**
       * <code>.api.Authorizers set_authorizers = 8;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Authorizers, api.Graphik.Authorizers.Builder, api.Graphik.AuthorizersOrBuilder> 
          getSetAuthorizersFieldBuilder() {
        if (setAuthorizersBuilder_ == null) {
          setAuthorizersBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Authorizers, api.Graphik.Authorizers.Builder, api.Graphik.AuthorizersOrBuilder>(
                  getSetAuthorizers(),
                  getParentForChildren(),
                  isClean());
          setAuthorizers_ = null;
        }
        return setAuthorizersBuilder_;
      }

      private api.Graphik.Constraints setConstraints_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Constraints, api.Graphik.Constraints.Builder, api.Graphik.ConstraintsOrBuilder> setConstraintsBuilder_;
      /**
       * <code>.api.Constraints set_constraints = 9;</code>
       */
      public boolean hasSetConstraints() {
        return setConstraintsBuilder_ != null || setConstraints_ != null;
      }
      /**
       * <code>.api.Constraints set_constraints = 9;</code>
       */
      public api.Graphik.Constraints getSetConstraints() {
        if (setConstraintsBuilder_ == null) {
          return setConstraints_ == null ? api.Graphik.Constraints.getDefaultInstance() : setConstraints_;
        } else {
          return setConstraintsBuilder_.getMessage();
        }
      }
      /**
       * <code>.api.Constraints set_constraints = 9;</code>
       */
      public Builder setSetConstraints(api.Graphik.Constraints value) {
        if (setConstraintsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          setConstraints_ = value;
          onChanged();
        } else {
          setConstraintsBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.api.Constraints set_constraints = 9;</code>
       */
      public Builder setSetConstraints(
          api.Graphik.Constraints.Builder builderForValue) {
        if (setConstraintsBuilder_ == null) {
          setConstraints_ = builderForValue.build();
          onChanged();
        } else {
          setConstraintsBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.api.Constraints set_constraints = 9;</code>
       */
      public Builder mergeSetConstraints(api.Graphik.Constraints value) {
        if (setConstraintsBuilder_ == null) {
          if (setConstraints_ != null) {
            setConstraints_ =
              api.Graphik.Constraints.newBuilder(setConstraints_).mergeFrom(value).buildPartial();
          } else {
            setConstraints_ = value;
          }
          onChanged();
        } else {
          setConstraintsBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.api.Constraints set_constraints = 9;</code>
       */
      public Builder clearSetConstraints() {
        if (setConstraintsBuilder_ == null) {
          setConstraints_ = null;
          onChanged();
        } else {
          setConstraints_ = null;
          setConstraintsBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.api.Constraints set_constraints = 9;</code>
       */
      public api.Graphik.Constraints.Builder getSetConstraintsBuilder() {
        
        onChanged();
        return getSetConstraintsFieldBuilder().getBuilder();
      }
      /**
       * <code>.api.Constraints set_constraints = 9;</code>
       */
      public api.Graphik.ConstraintsOrBuilder getSetConstraintsOrBuilder() {
        if (setConstraintsBuilder_ != null) {
          return setConstraintsBuilder_.getMessageOrBuilder();
        } else {
          return setConstraints_ == null ?
              api.Graphik.Constraints.getDefaultInstance() : setConstraints_;
        }
      }
      /**
       * <code>.api.Constraints set_constraints = 9;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Constraints, api.Graphik.Constraints.Builder, api.Graphik.ConstraintsOrBuilder> 
          getSetConstraintsFieldBuilder() {
        if (setConstraintsBuilder_ == null) {
          setConstraintsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Constraints, api.Graphik.Constraints.Builder, api.Graphik.ConstraintsOrBuilder>(
                  getSetConstraints(),
                  getParentForChildren(),
                  isClean());
          setConstraints_ = null;
        }
        return setConstraintsBuilder_;
      }

      private api.Graphik.Message sendMessage_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Message, api.Graphik.Message.Builder, api.Graphik.MessageOrBuilder> sendMessageBuilder_;
      /**
       * <code>.api.Message send_message = 10;</code>
       */
      public boolean hasSendMessage() {
        return sendMessageBuilder_ != null || sendMessage_ != null;
      }
      /**
       * <code>.api.Message send_message = 10;</code>
       */
      public api.Graphik.Message getSendMessage() {
        if (sendMessageBuilder_ == null) {
          return sendMessage_ == null ? api.Graphik.Message.getDefaultInstance() : sendMessage_;
        } else {
          return sendMessageBuilder_.getMessage();
        }
      }
      /**
       * <code>.api.Message send_message = 10;</code>
       */
      public Builder setSendMessage(api.Graphik.Message value) {
        if (sendMessageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          sendMessage_ = value;
          onChanged();
        } else {
          sendMessageBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.api.Message send_message = 10;</code>
       */
      public Builder setSendMessage(
          api.Graphik.Message.Builder builderForValue) {
        if (sendMessageBuilder_ == null) {
          sendMessage_ = builderForValue.build();
          onChanged();
        } else {
          sendMessageBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.api.Message send_message = 10;</code>
       */
      public Builder mergeSendMessage(api.Graphik.Message value) {
        if (sendMessageBuilder_ == null) {
          if (sendMessage_ != null) {
            sendMessage_ =
              api.Graphik.Message.newBuilder(sendMessage_).mergeFrom(value).buildPartial();
          } else {
            sendMessage_ = value;
          }
          onChanged();
        } else {
          sendMessageBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.api.Message send_message = 10;</code>
       */
      public Builder clearSendMessage() {
        if (sendMessageBuilder_ == null) {
          sendMessage_ = null;
          onChanged();
        } else {
          sendMessage_ = null;
          sendMessageBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.api.Message send_message = 10;</code>
       */
      public api.Graphik.Message.Builder getSendMessageBuilder() {
        
        onChanged();
        return getSendMessageFieldBuilder().getBuilder();
      }
      /**
       * <code>.api.Message send_message = 10;</code>
       */
      public api.Graphik.MessageOrBuilder getSendMessageOrBuilder() {
        if (sendMessageBuilder_ != null) {
          return sendMessageBuilder_.getMessageOrBuilder();
        } else {
          return sendMessage_ == null ?
              api.Graphik.Message.getDefaultInstance() : sendMessage_;
        }
      }
      /**
       * <code>.api.Message send_message = 10;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Message, api.Graphik.Message.Builder, api.Graphik.MessageOrBuilder> 
          getSendMessageFieldBuilder() {
        if (sendMessageBuilder_ == null) {
          sendMessageBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Message, api.Graphik.Message.Builder, api.Graphik.MessageOrBuilder>(
                  getSendMessage(),
                  getParentForChildren(),
                  isClean());
          sendMessage_ = null;
        }
        return sendMessageBuilder_;
      }

      private api.Graphik.Triggers setTriggers_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Triggers, api.Graphik.Triggers.Builder, api.Graphik.TriggersOrBuilder> setTriggersBuilder_;
      /**
       * <code>.api.Triggers set_triggers = 11;</code>
       */
      public boolean hasSetTriggers() {
        return setTriggersBuilder_ != null || setTriggers_ != null;
      }
      /**
       * <code>.api.Triggers set_triggers = 11;</code>
       */
      public api.Graphik.Triggers getSetTriggers() {
        if (setTriggersBuilder_ == null) {
          return setTriggers_ == null ? api.Graphik.Triggers.getDefaultInstance() : setTriggers_;
        } else {
          return setTriggersBuilder_.getMessage();
        }
      }
      /**
       * <code>.api.Triggers set_triggers = 11;</code>
       */
      public Builder setSetTriggers(api.Graphik.Triggers value) {
        if (setTriggersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          setTriggers_ = value;
          onChanged();
        } else {
          setTriggersBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.api.Triggers set_triggers = 11;</code>
       */
      public Builder setSetTriggers(
          api.Graphik.Triggers.Builder builderForValue) {
        if (setTriggersBuilder_ == null) {
          setTriggers_ = builderForValue.build();
          onChanged();
        } else {
          setTriggersBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.api.Triggers set_triggers = 11;</code>
       */
      public Builder mergeSetTriggers(api.Graphik.Triggers value) {
        if (setTriggersBuilder_ == null) {
          if (setTriggers_ != null) {
            setTriggers_ =
              api.Graphik.Triggers.newBuilder(setTriggers_).mergeFrom(value).buildPartial();
          } else {
            setTriggers_ = value;
          }
          onChanged();
        } else {
          setTriggersBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.api.Triggers set_triggers = 11;</code>
       */
      public Builder clearSetTriggers() {
        if (setTriggersBuilder_ == null) {
          setTriggers_ = null;
          onChanged();
        } else {
          setTriggers_ = null;
          setTriggersBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.api.Triggers set_triggers = 11;</code>
       */
      public api.Graphik.Triggers.Builder getSetTriggersBuilder() {
        
        onChanged();
        return getSetTriggersFieldBuilder().getBuilder();
      }
      /**
       * <code>.api.Triggers set_triggers = 11;</code>
       */
      public api.Graphik.TriggersOrBuilder getSetTriggersOrBuilder() {
        if (setTriggersBuilder_ != null) {
          return setTriggersBuilder_.getMessageOrBuilder();
        } else {
          return setTriggers_ == null ?
              api.Graphik.Triggers.getDefaultInstance() : setTriggers_;
        }
      }
      /**
       * <code>.api.Triggers set_triggers = 11;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          api.Graphik.Triggers, api.Graphik.Triggers.Builder, api.Graphik.TriggersOrBuilder> 
          getSetTriggersFieldBuilder() {
        if (setTriggersBuilder_ == null) {
          setTriggersBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              api.Graphik.Triggers, api.Graphik.Triggers.Builder, api.Graphik.TriggersOrBuilder>(
                  getSetTriggers(),
                  getParentForChildren(),
                  isClean());
          setTriggers_ = null;
        }
        return setTriggersBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.RaftCommand)
    }

    // @@protoc_insertion_point(class_scope:api.RaftCommand)
    private static final api.Graphik.RaftCommand DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.RaftCommand();
    }

    public static api.Graphik.RaftCommand getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<RaftCommand>
        PARSER = new com.google.protobuf.AbstractParser<RaftCommand>() {
      @java.lang.Override
      public RaftCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RaftCommand(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.RaftCommand getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface PeerOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.Peer)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string node_id = 1;</code>
     */
    java.lang.String getNodeId();
    /**
     * <code>string node_id = 1;</code>
     */
    com.google.protobuf.ByteString
        getNodeIdBytes();

    /**
     * <code>string addr = 2;</code>
     */
    java.lang.String getAddr();
    /**
     * <code>string addr = 2;</code>
     */
    com.google.protobuf.ByteString
        getAddrBytes();
  }
  /**
   * Protobuf type {@code api.Peer}
   */
  public  static final class Peer extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.Peer)
      PeerOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Peer.newBuilder() to construct.
    private Peer(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Peer() {
      nodeId_ = "";
      addr_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Peer(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              nodeId_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              addr_ = s;
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_Peer_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_Peer_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.Peer.class, api.Graphik.Peer.Builder.class);
    }

    public static final int NODE_ID_FIELD_NUMBER = 1;
    private volatile java.lang.Object nodeId_;
    /**
     * <code>string node_id = 1;</code>
     */
    public java.lang.String getNodeId() {
      java.lang.Object ref = nodeId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        nodeId_ = s;
        return s;
      }
    }
    /**
     * <code>string node_id = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNodeIdBytes() {
      java.lang.Object ref = nodeId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        nodeId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ADDR_FIELD_NUMBER = 2;
    private volatile java.lang.Object addr_;
    /**
     * <code>string addr = 2;</code>
     */
    public java.lang.String getAddr() {
      java.lang.Object ref = addr_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        addr_ = s;
        return s;
      }
    }
    /**
     * <code>string addr = 2;</code>
     */
    public com.google.protobuf.ByteString
        getAddrBytes() {
      java.lang.Object ref = addr_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        addr_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    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 (!getNodeIdBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, nodeId_);
      }
      if (!getAddrBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, addr_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getNodeIdBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, nodeId_);
      }
      if (!getAddrBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, addr_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getNodeId()
          .equals(other.getNodeId());
      result = result && getAddr()
          .equals(other.getAddr());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + NODE_ID_FIELD_NUMBER;
      hash = (53 * hash) + getNodeId().hashCode();
      hash = (37 * hash) + ADDR_FIELD_NUMBER;
      hash = (53 * hash) + getAddr().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

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

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_Peer_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.Peer.class, api.Graphik.Peer.Builder.class);
      }

      // Construct using api.Graphik.Peer.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        nodeId_ = "";

        addr_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_Peer_descriptor;
      }

      @java.lang.Override
      public api.Graphik.Peer getDefaultInstanceForType() {
        return api.Graphik.Peer.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.Peer buildPartial() {
        api.Graphik.Peer result = new api.Graphik.Peer(this);
        result.nodeId_ = nodeId_;
        result.addr_ = addr_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.Peer other) {
        if (other == api.Graphik.Peer.getDefaultInstance()) return this;
        if (!other.getNodeId().isEmpty()) {
          nodeId_ = other.nodeId_;
          onChanged();
        }
        if (!other.getAddr().isEmpty()) {
          addr_ = other.addr_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.Peer parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.Peer) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object nodeId_ = "";
      /**
       * <code>string node_id = 1;</code>
       */
      public java.lang.String getNodeId() {
        java.lang.Object ref = nodeId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          nodeId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string node_id = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNodeIdBytes() {
        java.lang.Object ref = nodeId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          nodeId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string node_id = 1;</code>
       */
      public Builder setNodeId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        nodeId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string node_id = 1;</code>
       */
      public Builder clearNodeId() {
        
        nodeId_ = getDefaultInstance().getNodeId();
        onChanged();
        return this;
      }
      /**
       * <code>string node_id = 1;</code>
       */
      public Builder setNodeIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        nodeId_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object addr_ = "";
      /**
       * <code>string addr = 2;</code>
       */
      public java.lang.String getAddr() {
        java.lang.Object ref = addr_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          addr_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string addr = 2;</code>
       */
      public com.google.protobuf.ByteString
          getAddrBytes() {
        java.lang.Object ref = addr_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          addr_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string addr = 2;</code>
       */
      public Builder setAddr(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        addr_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string addr = 2;</code>
       */
      public Builder clearAddr() {
        
        addr_ = getDefaultInstance().getAddr();
        onChanged();
        return this;
      }
      /**
       * <code>string addr = 2;</code>
       */
      public Builder setAddrBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        addr_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.Peer)
    }

    // @@protoc_insertion_point(class_scope:api.Peer)
    private static final api.Graphik.Peer DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.Peer();
    }

    public static api.Graphik.Peer getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Peer>
        PARSER = new com.google.protobuf.AbstractParser<Peer>() {
      @java.lang.Override
      public Peer parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Peer(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.Peer getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RaftStateOrBuilder extends
      // @@protoc_insertion_point(interface_extends:api.RaftState)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string leader = 1;</code>
     */
    java.lang.String getLeader();
    /**
     * <code>string leader = 1;</code>
     */
    com.google.protobuf.ByteString
        getLeaderBytes();

    /**
     * <code>.api.Membership membership = 2;</code>
     */
    int getMembershipValue();
    /**
     * <code>.api.Membership membership = 2;</code>
     */
    api.Graphik.Membership getMembership();

    /**
     * <code>repeated .api.Peer peers = 3;</code>
     */
    java.util.List<api.Graphik.Peer> 
        getPeersList();
    /**
     * <code>repeated .api.Peer peers = 3;</code>
     */
    api.Graphik.Peer getPeers(int index);
    /**
     * <code>repeated .api.Peer peers = 3;</code>
     */
    int getPeersCount();
    /**
     * <code>repeated .api.Peer peers = 3;</code>
     */
    java.util.List<? extends api.Graphik.PeerOrBuilder> 
        getPeersOrBuilderList();
    /**
     * <code>repeated .api.Peer peers = 3;</code>
     */
    api.Graphik.PeerOrBuilder getPeersOrBuilder(
        int index);

    /**
     * <code>map&lt;string, string&gt; stats = 4;</code>
     */
    int getStatsCount();
    /**
     * <code>map&lt;string, string&gt; stats = 4;</code>
     */
    boolean containsStats(
        java.lang.String key);
    /**
     * Use {@link #getStatsMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.String, java.lang.String>
    getStats();
    /**
     * <code>map&lt;string, string&gt; stats = 4;</code>
     */
    java.util.Map<java.lang.String, java.lang.String>
    getStatsMap();
    /**
     * <code>map&lt;string, string&gt; stats = 4;</code>
     */

    java.lang.String getStatsOrDefault(
        java.lang.String key,
        java.lang.String defaultValue);
    /**
     * <code>map&lt;string, string&gt; stats = 4;</code>
     */

    java.lang.String getStatsOrThrow(
        java.lang.String key);
  }
  /**
   * Protobuf type {@code api.RaftState}
   */
  public  static final class RaftState extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:api.RaftState)
      RaftStateOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RaftState.newBuilder() to construct.
    private RaftState(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RaftState() {
      leader_ = "";
      membership_ = 0;
      peers_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RaftState(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              leader_ = s;
              break;
            }
            case 16: {
              int rawValue = input.readEnum();

              membership_ = rawValue;
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                peers_ = new java.util.ArrayList<api.Graphik.Peer>();
                mutable_bitField0_ |= 0x00000004;
              }
              peers_.add(
                  input.readMessage(api.Graphik.Peer.parser(), extensionRegistry));
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                stats_ = com.google.protobuf.MapField.newMapField(
                    StatsDefaultEntryHolder.defaultEntry);
                mutable_bitField0_ |= 0x00000008;
              }
              com.google.protobuf.MapEntry<java.lang.String, java.lang.String>
              stats__ = input.readMessage(
                  StatsDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
              stats_.getMutableMap().put(
                  stats__.getKey(), stats__.getValue());
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          peers_ = java.util.Collections.unmodifiableList(peers_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return api.Graphik.internal_static_api_RaftState_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    @java.lang.Override
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 4:
          return internalGetStats();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return api.Graphik.internal_static_api_RaftState_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              api.Graphik.RaftState.class, api.Graphik.RaftState.Builder.class);
    }

    private int bitField0_;
    public static final int LEADER_FIELD_NUMBER = 1;
    private volatile java.lang.Object leader_;
    /**
     * <code>string leader = 1;</code>
     */
    public java.lang.String getLeader() {
      java.lang.Object ref = leader_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        leader_ = s;
        return s;
      }
    }
    /**
     * <code>string leader = 1;</code>
     */
    public com.google.protobuf.ByteString
        getLeaderBytes() {
      java.lang.Object ref = leader_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        leader_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MEMBERSHIP_FIELD_NUMBER = 2;
    private int membership_;
    /**
     * <code>.api.Membership membership = 2;</code>
     */
    public int getMembershipValue() {
      return membership_;
    }
    /**
     * <code>.api.Membership membership = 2;</code>
     */
    public api.Graphik.Membership getMembership() {
      @SuppressWarnings("deprecation")
      api.Graphik.Membership result = api.Graphik.Membership.valueOf(membership_);
      return result == null ? api.Graphik.Membership.UNRECOGNIZED : result;
    }

    public static final int PEERS_FIELD_NUMBER = 3;
    private java.util.List<api.Graphik.Peer> peers_;
    /**
     * <code>repeated .api.Peer peers = 3;</code>
     */
    public java.util.List<api.Graphik.Peer> getPeersList() {
      return peers_;
    }
    /**
     * <code>repeated .api.Peer peers = 3;</code>
     */
    public java.util.List<? extends api.Graphik.PeerOrBuilder> 
        getPeersOrBuilderList() {
      return peers_;
    }
    /**
     * <code>repeated .api.Peer peers = 3;</code>
     */
    public int getPeersCount() {
      return peers_.size();
    }
    /**
     * <code>repeated .api.Peer peers = 3;</code>
     */
    public api.Graphik.Peer getPeers(int index) {
      return peers_.get(index);
    }
    /**
     * <code>repeated .api.Peer peers = 3;</code>
     */
    public api.Graphik.PeerOrBuilder getPeersOrBuilder(
        int index) {
      return peers_.get(index);
    }

    public static final int STATS_FIELD_NUMBER = 4;
    private static final class StatsDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.String, java.lang.String> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.String, java.lang.String>newDefaultInstance(
                  api.Graphik.internal_static_api_RaftState_StatsEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "",
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "");
    }
    private com.google.protobuf.MapField<
        java.lang.String, java.lang.String> stats_;
    private com.google.protobuf.MapField<java.lang.String, java.lang.String>
    internalGetStats() {
      if (stats_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            StatsDefaultEntryHolder.defaultEntry);
      }
      return stats_;
    }

    public int getStatsCount() {
      return internalGetStats().getMap().size();
    }
    /**
     * <code>map&lt;string, string&gt; stats = 4;</code>
     */

    public boolean containsStats(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      return internalGetStats().getMap().containsKey(key);
    }
    /**
     * Use {@link #getStatsMap()} instead.
     */
    @java.lang.Deprecated
    public java.util.Map<java.lang.String, java.lang.String> getStats() {
      return getStatsMap();
    }
    /**
     * <code>map&lt;string, string&gt; stats = 4;</code>
     */

    public java.util.Map<java.lang.String, java.lang.String> getStatsMap() {
      return internalGetStats().getMap();
    }
    /**
     * <code>map&lt;string, string&gt; stats = 4;</code>
     */

    public java.lang.String getStatsOrDefault(
        java.lang.String key,
        java.lang.String defaultValue) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, java.lang.String> map =
          internalGetStats().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <code>map&lt;string, string&gt; stats = 4;</code>
     */

    public java.lang.String getStatsOrThrow(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, java.lang.String> map =
          internalGetStats().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

    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 (!getLeaderBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, leader_);
      }
      if (membership_ != api.Graphik.Membership.UNKNOWN.getNumber()) {
        output.writeEnum(2, membership_);
      }
      for (int i = 0; i < peers_.size(); i++) {
        output.writeMessage(3, peers_.get(i));
      }
      com.google.protobuf.GeneratedMessageV3
        .serializeStringMapTo(
          output,
          internalGetStats(),
          StatsDefaultEntryHolder.defaultEntry,
          4);
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getLeaderBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, leader_);
      }
      if (membership_ != api.Graphik.Membership.UNKNOWN.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, membership_);
      }
      for (int i = 0; i < peers_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, peers_.get(i));
      }
      for (java.util.Map.Entry<java.lang.String, java.lang.String> entry
           : internalGetStats().getMap().entrySet()) {
        com.google.protobuf.MapEntry<java.lang.String, java.lang.String>
        stats__ = StatsDefaultEntryHolder.defaultEntry.newBuilderForType()
            .setKey(entry.getKey())
            .setValue(entry.getValue())
            .build();
        size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(4, stats__);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

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

      boolean result = true;
      result = result && getLeader()
          .equals(other.getLeader());
      result = result && membership_ == other.membership_;
      result = result && getPeersList()
          .equals(other.getPeersList());
      result = result && internalGetStats().equals(
          other.internalGetStats());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + LEADER_FIELD_NUMBER;
      hash = (53 * hash) + getLeader().hashCode();
      hash = (37 * hash) + MEMBERSHIP_FIELD_NUMBER;
      hash = (53 * hash) + membership_;
      if (getPeersCount() > 0) {
        hash = (37 * hash) + PEERS_FIELD_NUMBER;
        hash = (53 * hash) + getPeersList().hashCode();
      }
      if (!internalGetStats().getMap().isEmpty()) {
        hash = (37 * hash) + STATS_FIELD_NUMBER;
        hash = (53 * hash) + internalGetStats().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

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

      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMapField(
          int number) {
        switch (number) {
          case 4:
            return internalGetStats();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMutableMapField(
          int number) {
        switch (number) {
          case 4:
            return internalGetMutableStats();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return api.Graphik.internal_static_api_RaftState_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                api.Graphik.RaftState.class, api.Graphik.RaftState.Builder.class);
      }

      // Construct using api.Graphik.RaftState.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getPeersFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        leader_ = "";

        membership_ = 0;

        if (peersBuilder_ == null) {
          peers_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          peersBuilder_.clear();
        }
        internalGetMutableStats().clear();
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return api.Graphik.internal_static_api_RaftState_descriptor;
      }

      @java.lang.Override
      public api.Graphik.RaftState getDefaultInstanceForType() {
        return api.Graphik.RaftState.getDefaultInstance();
      }

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

      @java.lang.Override
      public api.Graphik.RaftState buildPartial() {
        api.Graphik.RaftState result = new api.Graphik.RaftState(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.leader_ = leader_;
        result.membership_ = membership_;
        if (peersBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            peers_ = java.util.Collections.unmodifiableList(peers_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.peers_ = peers_;
        } else {
          result.peers_ = peersBuilder_.build();
        }
        result.stats_ = internalGetStats();
        result.stats_.makeImmutable();
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(api.Graphik.RaftState other) {
        if (other == api.Graphik.RaftState.getDefaultInstance()) return this;
        if (!other.getLeader().isEmpty()) {
          leader_ = other.leader_;
          onChanged();
        }
        if (other.membership_ != 0) {
          setMembershipValue(other.getMembershipValue());
        }
        if (peersBuilder_ == null) {
          if (!other.peers_.isEmpty()) {
            if (peers_.isEmpty()) {
              peers_ = other.peers_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensurePeersIsMutable();
              peers_.addAll(other.peers_);
            }
            onChanged();
          }
        } else {
          if (!other.peers_.isEmpty()) {
            if (peersBuilder_.isEmpty()) {
              peersBuilder_.dispose();
              peersBuilder_ = null;
              peers_ = other.peers_;
              bitField0_ = (bitField0_ & ~0x00000004);
              peersBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getPeersFieldBuilder() : null;
            } else {
              peersBuilder_.addAllMessages(other.peers_);
            }
          }
        }
        internalGetMutableStats().mergeFrom(
            other.internalGetStats());
        this.mergeUnknownFields(other.unknownFields);
        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 {
        api.Graphik.RaftState parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (api.Graphik.RaftState) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object leader_ = "";
      /**
       * <code>string leader = 1;</code>
       */
      public java.lang.String getLeader() {
        java.lang.Object ref = leader_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          leader_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string leader = 1;</code>
       */
      public com.google.protobuf.ByteString
          getLeaderBytes() {
        java.lang.Object ref = leader_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          leader_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string leader = 1;</code>
       */
      public Builder setLeader(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        leader_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string leader = 1;</code>
       */
      public Builder clearLeader() {
        
        leader_ = getDefaultInstance().getLeader();
        onChanged();
        return this;
      }
      /**
       * <code>string leader = 1;</code>
       */
      public Builder setLeaderBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        leader_ = value;
        onChanged();
        return this;
      }

      private int membership_ = 0;
      /**
       * <code>.api.Membership membership = 2;</code>
       */
      public int getMembershipValue() {
        return membership_;
      }
      /**
       * <code>.api.Membership membership = 2;</code>
       */
      public Builder setMembershipValue(int value) {
        membership_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.api.Membership membership = 2;</code>
       */
      public api.Graphik.Membership getMembership() {
        @SuppressWarnings("deprecation")
        api.Graphik.Membership result = api.Graphik.Membership.valueOf(membership_);
        return result == null ? api.Graphik.Membership.UNRECOGNIZED : result;
      }
      /**
       * <code>.api.Membership membership = 2;</code>
       */
      public Builder setMembership(api.Graphik.Membership value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        membership_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.api.Membership membership = 2;</code>
       */
      public Builder clearMembership() {
        
        membership_ = 0;
        onChanged();
        return this;
      }

      private java.util.List<api.Graphik.Peer> peers_ =
        java.util.Collections.emptyList();
      private void ensurePeersIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          peers_ = new java.util.ArrayList<api.Graphik.Peer>(peers_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Peer, api.Graphik.Peer.Builder, api.Graphik.PeerOrBuilder> peersBuilder_;

      /**
       * <code>repeated .api.Peer peers = 3;</code>
       */
      public java.util.List<api.Graphik.Peer> getPeersList() {
        if (peersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(peers_);
        } else {
          return peersBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .api.Peer peers = 3;</code>
       */
      public int getPeersCount() {
        if (peersBuilder_ == null) {
          return peers_.size();
        } else {
          return peersBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .api.Peer peers = 3;</code>
       */
      public api.Graphik.Peer getPeers(int index) {
        if (peersBuilder_ == null) {
          return peers_.get(index);
        } else {
          return peersBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .api.Peer peers = 3;</code>
       */
      public Builder setPeers(
          int index, api.Graphik.Peer value) {
        if (peersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePeersIsMutable();
          peers_.set(index, value);
          onChanged();
        } else {
          peersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Peer peers = 3;</code>
       */
      public Builder setPeers(
          int index, api.Graphik.Peer.Builder builderForValue) {
        if (peersBuilder_ == null) {
          ensurePeersIsMutable();
          peers_.set(index, builderForValue.build());
          onChanged();
        } else {
          peersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Peer peers = 3;</code>
       */
      public Builder addPeers(api.Graphik.Peer value) {
        if (peersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePeersIsMutable();
          peers_.add(value);
          onChanged();
        } else {
          peersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Peer peers = 3;</code>
       */
      public Builder addPeers(
          int index, api.Graphik.Peer value) {
        if (peersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePeersIsMutable();
          peers_.add(index, value);
          onChanged();
        } else {
          peersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .api.Peer peers = 3;</code>
       */
      public Builder addPeers(
          api.Graphik.Peer.Builder builderForValue) {
        if (peersBuilder_ == null) {
          ensurePeersIsMutable();
          peers_.add(builderForValue.build());
          onChanged();
        } else {
          peersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Peer peers = 3;</code>
       */
      public Builder addPeers(
          int index, api.Graphik.Peer.Builder builderForValue) {
        if (peersBuilder_ == null) {
          ensurePeersIsMutable();
          peers_.add(index, builderForValue.build());
          onChanged();
        } else {
          peersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .api.Peer peers = 3;</code>
       */
      public Builder addAllPeers(
          java.lang.Iterable<? extends api.Graphik.Peer> values) {
        if (peersBuilder_ == null) {
          ensurePeersIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, peers_);
          onChanged();
        } else {
          peersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .api.Peer peers = 3;</code>
       */
      public Builder clearPeers() {
        if (peersBuilder_ == null) {
          peers_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          peersBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .api.Peer peers = 3;</code>
       */
      public Builder removePeers(int index) {
        if (peersBuilder_ == null) {
          ensurePeersIsMutable();
          peers_.remove(index);
          onChanged();
        } else {
          peersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .api.Peer peers = 3;</code>
       */
      public api.Graphik.Peer.Builder getPeersBuilder(
          int index) {
        return getPeersFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .api.Peer peers = 3;</code>
       */
      public api.Graphik.PeerOrBuilder getPeersOrBuilder(
          int index) {
        if (peersBuilder_ == null) {
          return peers_.get(index);  } else {
          return peersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .api.Peer peers = 3;</code>
       */
      public java.util.List<? extends api.Graphik.PeerOrBuilder> 
           getPeersOrBuilderList() {
        if (peersBuilder_ != null) {
          return peersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(peers_);
        }
      }
      /**
       * <code>repeated .api.Peer peers = 3;</code>
       */
      public api.Graphik.Peer.Builder addPeersBuilder() {
        return getPeersFieldBuilder().addBuilder(
            api.Graphik.Peer.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Peer peers = 3;</code>
       */
      public api.Graphik.Peer.Builder addPeersBuilder(
          int index) {
        return getPeersFieldBuilder().addBuilder(
            index, api.Graphik.Peer.getDefaultInstance());
      }
      /**
       * <code>repeated .api.Peer peers = 3;</code>
       */
      public java.util.List<api.Graphik.Peer.Builder> 
           getPeersBuilderList() {
        return getPeersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          api.Graphik.Peer, api.Graphik.Peer.Builder, api.Graphik.PeerOrBuilder> 
          getPeersFieldBuilder() {
        if (peersBuilder_ == null) {
          peersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              api.Graphik.Peer, api.Graphik.Peer.Builder, api.Graphik.PeerOrBuilder>(
                  peers_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          peers_ = null;
        }
        return peersBuilder_;
      }

      private com.google.protobuf.MapField<
          java.lang.String, java.lang.String> stats_;
      private com.google.protobuf.MapField<java.lang.String, java.lang.String>
      internalGetStats() {
        if (stats_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              StatsDefaultEntryHolder.defaultEntry);
        }
        return stats_;
      }
      private com.google.protobuf.MapField<java.lang.String, java.lang.String>
      internalGetMutableStats() {
        onChanged();;
        if (stats_ == null) {
          stats_ = com.google.protobuf.MapField.newMapField(
              StatsDefaultEntryHolder.defaultEntry);
        }
        if (!stats_.isMutable()) {
          stats_ = stats_.copy();
        }
        return stats_;
      }

      public int getStatsCount() {
        return internalGetStats().getMap().size();
      }
      /**
       * <code>map&lt;string, string&gt; stats = 4;</code>
       */

      public boolean containsStats(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        return internalGetStats().getMap().containsKey(key);
      }
      /**
       * Use {@link #getStatsMap()} instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, java.lang.String> getStats() {
        return getStatsMap();
      }
      /**
       * <code>map&lt;string, string&gt; stats = 4;</code>
       */

      public java.util.Map<java.lang.String, java.lang.String> getStatsMap() {
        return internalGetStats().getMap();
      }
      /**
       * <code>map&lt;string, string&gt; stats = 4;</code>
       */

      public java.lang.String getStatsOrDefault(
          java.lang.String key,
          java.lang.String defaultValue) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, java.lang.String> map =
            internalGetStats().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <code>map&lt;string, string&gt; stats = 4;</code>
       */

      public java.lang.String getStatsOrThrow(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, java.lang.String> map =
            internalGetStats().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearStats() {
        internalGetMutableStats().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <code>map&lt;string, string&gt; stats = 4;</code>
       */

      public Builder removeStats(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableStats().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, java.lang.String>
      getMutableStats() {
        return internalGetMutableStats().getMutableMap();
      }
      /**
       * <code>map&lt;string, string&gt; stats = 4;</code>
       */
      public Builder putStats(
          java.lang.String key,
          java.lang.String value) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        if (value == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableStats().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <code>map&lt;string, string&gt; stats = 4;</code>
       */

      public Builder putAllStats(
          java.util.Map<java.lang.String, java.lang.String> values) {
        internalGetMutableStats().getMutableMap()
            .putAll(values);
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:api.RaftState)
    }

    // @@protoc_insertion_point(class_scope:api.RaftState)
    private static final api.Graphik.RaftState DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new api.Graphik.RaftState();
    }

    public static api.Graphik.RaftState getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<RaftState>
        PARSER = new com.google.protobuf.AbstractParser<RaftState>() {
      @java.lang.Override
      public RaftState parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RaftState(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public api.Graphik.RaftState getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Ref_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Ref_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_RefConstructor_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_RefConstructor_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Refs_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Refs_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Doc_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Doc_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_DocConstructor_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_DocConstructor_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_DocConstructors_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_DocConstructors_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Traversal_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Traversal_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Traversals_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Traversals_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Docs_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Docs_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Connection_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Connection_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_ConnectionConstructor_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_ConnectionConstructor_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_SearchConnectFilter_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_SearchConnectFilter_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_SearchConnectMeFilter_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_SearchConnectMeFilter_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_ConnectionConstructors_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_ConnectionConstructors_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Connections_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Connections_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_ConnectFilter_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_ConnectFilter_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Filter_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Filter_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_AggFilter_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_AggFilter_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_TraverseFilter_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_TraverseFilter_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_TraverseMeFilter_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_TraverseMeFilter_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_IndexConstructor_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_IndexConstructor_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_AuthTarget_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_AuthTarget_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_AuthTarget_HeadersEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_AuthTarget_HeadersEntry_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Authorizer_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Authorizer_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Authorizers_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Authorizers_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Constraint_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Constraint_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Constraints_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Constraints_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Index_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Index_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Indexes_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Indexes_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Trigger_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Trigger_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Triggers_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Triggers_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_StreamFilter_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_StreamFilter_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Graph_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Graph_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Flags_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Flags_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_UIFlags_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_UIFlags_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Boolean_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Boolean_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Number_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Number_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_ExistsFilter_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_ExistsFilter_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Edit_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Edit_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_EditFilter_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_EditFilter_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Pong_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Pong_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_OutboundMessage_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_OutboundMessage_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Message_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Message_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Schema_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Schema_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_ExprFilter_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_ExprFilter_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_RaftCommand_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_RaftCommand_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_Peer_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_Peer_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_RaftState_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_RaftState_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_api_RaftState_StatsEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_api_RaftState_StatsEntry_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\rgraphik.proto\022\003api\032\034google/protobuf/st" +
      "ruct.proto\032\037google/protobuf/timestamp.pr" +
      "oto\032\031google/protobuf/any.proto\032\033google/p" +
      "rotobuf/empty.proto\0326github.com/mwitkow/" +
      "go-proto-validators/validator.proto\"E\n\003R" +
      "ef\022\037\n\005gtype\030\001 \001(\tB\020\342\337\037\014\n\n^.{1,225}$\022\035\n\003g" +
      "id\030\002 \001(\tB\020\342\337\037\014\n\n^.{1,225}$\">\n\016RefConstru" +
      "ctor\022\037\n\005gtype\030\001 \001(\tB\020\342\337\037\014\n\n^.{1,225}$\022\013\n" +
      "\003gid\030\002 \001(\t\"\036\n\004Refs\022\026\n\004refs\030\001 \003(\0132\010.api.R" +
      "ef\"Q\n\003Doc\022\035\n\003ref\030\001 \001(\0132\010.api.RefB\006\342\337\037\002 \001" +
      "\022+\n\nattributes\030\002 \001(\0132\027.google.protobuf.S" +
      "truct\"g\n\016DocConstructor\022(\n\003ref\030\001 \001(\0132\023.a" +
      "pi.RefConstructorB\006\342\337\037\002 \001\022+\n\nattributes\030" +
      "\002 \001(\0132\027.google.protobuf.Struct\"4\n\017DocCon" +
      "structors\022!\n\004docs\030\001 \003(\0132\023.api.DocConstru" +
      "ctor\"a\n\tTraversal\022\025\n\003doc\030\001 \001(\0132\010.api.Doc" +
      "\022 \n\016traversal_path\030\002 \003(\0132\010.api.Ref\022\r\n\005de" +
      "pth\030\003 \001(\004\022\014\n\004hops\030\004 \001(\004\"0\n\nTraversals\022\"\n" +
      "\ntraversals\030\001 \003(\0132\016.api.Traversal\"1\n\004Doc" +
      "s\022\026\n\004docs\030\001 \003(\0132\010.api.Doc\022\021\n\tseek_next\030\002" +
      " \001(\t\"\250\001\n\nConnection\022\035\n\003ref\030\001 \001(\0132\010.api.R" +
      "efB\006\342\337\037\002 \001\022+\n\nattributes\030\002 \001(\0132\027.google." +
      "protobuf.Struct\022\020\n\010directed\030\003 \001(\010\022\036\n\004fro" +
      "m\030\004 \001(\0132\010.api.RefB\006\342\337\037\002 \001\022\034\n\002to\030\005 \001(\0132\010." +
      "api.RefB\006\342\337\037\002 \001\"\276\001\n\025ConnectionConstructo" +
      "r\022(\n\003ref\030\001 \001(\0132\023.api.RefConstructorB\006\342\337\037" +
      "\002 \001\022+\n\nattributes\030\003 \001(\0132\027.google.protobu" +
      "f.Struct\022\020\n\010directed\030\004 \001(\010\022\036\n\004from\030\005 \001(\013" +
      "2\010.api.RefB\006\342\337\037\002 \001\022\034\n\002to\030\006 \001(\0132\010.api.Ref" +
      "B\006\342\337\037\002 \001\"\240\001\n\023SearchConnectFilter\022\033\n\006filt" +
      "er\030\001 \001(\0132\013.api.Filter\022\r\n\005gtype\030\002 \001(\t\022+\n\n" +
      "attributes\030\003 \001(\0132\027.google.protobuf.Struc" +
      "t\022\020\n\010directed\030\004 \001(\010\022\036\n\004from\030\005 \001(\0132\010.api." +
      "RefB\006\342\337\037\002 \001\"\202\001\n\025SearchConnectMeFilter\022\033\n" +
      "\006filter\030\001 \001(\0132\013.api.Filter\022\r\n\005gtype\030\002 \001(" +
      "\t\022+\n\nattributes\030\003 \001(\0132\027.google.protobuf." +
      "Struct\022\020\n\010directed\030\004 \001(\010\"I\n\026ConnectionCo" +
      "nstructors\022/\n\013connections\030\001 \003(\0132\032.api.Co" +
      "nnectionConstructor\"F\n\013Connections\022$\n\013co" +
      "nnections\030\001 \003(\0132\017.api.Connection\022\021\n\tseek" +
      "_next\030\002 \001(\t\"\342\001\n\rConnectFilter\022!\n\007doc_ref" +
      "\030\001 \001(\0132\010.api.RefB\006\342\337\037\002 \001\022\037\n\005gtype\030\002 \001(\tB" +
      "\020\342\337\037\014\n\n^.{1,225}$\022\022\n\nexpression\030\003 \001(\t\022\025\n" +
      "\005limit\030\004 \001(\004B\006\342\337\037\002\020\000\022C\n\004sort\030\005 \001(\tB5\342\337\0371" +
      "\n/((^|, )(|ref.gid|ref.gtype|^attributes" +
      ".(.*)))+$\022\014\n\004seek\030\006 \001(\t\022\017\n\007reverse\030\007 \001(\010" +
      "\"\307\001\n\006Filter\022\037\n\005gtype\030\001 \001(\tB\020\342\337\037\014\n\n^.{1,2" +
      "25}$\022\022\n\nexpression\030\002 \001(\t\022\025\n\005limit\030\003 \001(\004B" +
      "\006\342\337\037\002\020\000\022C\n\004sort\030\004 \001(\tB5\342\337\0371\n/((^|, )(|re" +
      "f.gid|ref.gtype|^attributes.(.*)))+$\022\014\n\004" +
      "seek\030\005 \001(\t\022\017\n\007reverse\030\006 \001(\010\022\r\n\005index\030\007 \001" +
      "(\t\"\207\001\n\tAggFilter\022#\n\006filter\030\001 \001(\0132\013.api.F" +
      "ilterB\006\342\337\037\002 \001\022!\n\taggregate\030\002 \001(\0162\016.api.A" +
      "ggregate\0222\n\005field\030\003 \001(\tB#\342\337\037\037\n\035((^|, )(|" +
      "^attributes.(.*)))+$\"\254\002\n\016TraverseFilter\022" +
      "\036\n\004root\030\001 \001(\0132\010.api.RefB\006\342\337\037\002 \001\022\026\n\016doc_e" +
      "xpression\030\002 \001(\t\022\035\n\025connection_expression" +
      "\030\003 \001(\t\022\025\n\005limit\030\004 \001(\004B\006\342\337\037\002\020\000\022C\n\004sort\030\005 " +
      "\001(\tB5\342\337\0371\n/((^|, )(|ref.gid|ref.gtype|^a" +
      "ttributes.(.*)))+$\022\017\n\007reverse\030\006 \001(\010\022!\n\ta" +
      "lgorithm\030\007 \001(\0162\016.api.Algorithm\022\031\n\tmax_de" +
      "pth\030\010 \001(\004B\006\342\337\037\002\020\000\022\030\n\010max_hops\030\t \001(\004B\006\342\337\037" +
      "\002\020\000\"\216\002\n\020TraverseMeFilter\022\026\n\016doc_expressi" +
      "on\030\001 \001(\t\022\035\n\025connection_expression\030\002 \001(\t\022" +
      "\025\n\005limit\030\003 \001(\004B\006\342\337\037\002\020\000\022C\n\004sort\030\004 \001(\tB5\342\337" +
      "\0371\n/((^|, )(|ref.gid|ref.gtype|^attribut" +
      "es.(.*)))+$\022\017\n\007reverse\030\005 \001(\010\022!\n\talgorith" +
      "m\030\006 \001(\0162\016.api.Algorithm\022\031\n\tmax_depth\030\007 \001" +
      "(\004B\006\342\337\037\002\020\000\022\030\n\010max_hops\030\010 \001(\004B\006\342\337\037\002\020\000\"\252\001\n" +
      "\020IndexConstructor\022\036\n\004name\030\001 \001(\tB\020\342\337\037\014\n\n^" +
      ".{1,225}$\022\037\n\005gtype\030\003 \001(\tB\020\342\337\037\014\n\n^.{1,225" +
      "}$\022$\n\nexpression\030\004 \001(\tB\020\342\337\037\014\n\n^.{1,225}$" +
      "\022\023\n\013target_docs\030\006 \001(\010\022\032\n\022target_connecti" +
      "ons\030\007 \001(\010\"\264\001\n\nAuthTarget\022\036\n\004user\030\001 \001(\0132\010" +
      ".api.DocB\006\342\337\037\002 \001\022\'\n\006target\030\002 \001(\0132\027.googl" +
      "e.protobuf.Struct\022-\n\007headers\030\003 \003(\0132\034.api" +
      ".AuthTarget.HeadersEntry\032.\n\014HeadersEntry" +
      "\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"\247\001\n\nAut" +
      "horizer\022\036\n\004name\030\001 \001(\tB\020\342\337\037\014\n\n^.{1,225}$\022" +
      " \n\006method\030\002 \001(\tB\020\342\337\037\014\n\n^.{1,225}$\022$\n\nexp" +
      "ression\030\003 \001(\tB\020\342\337\037\014\n\n^.{1,225}$\022\027\n\017targe" +
      "t_requests\030\004 \001(\010\022\030\n\020target_responses\030\005 \001" +
      "(\010\"3\n\013Authorizers\022$\n\013authorizers\030\001 \003(\0132\017" +
      ".api.Authorizer\"\244\001\n\nConstraint\022\036\n\004name\030\001" +
      " \001(\tB\020\342\337\037\014\n\n^.{1,225}$\022\037\n\005gtype\030\002 \001(\tB\020\342" +
      "\337\037\014\n\n^.{1,225}$\022$\n\nexpression\030\003 \001(\tB\020\342\337\037" +
      "\014\n\n^.{1,225}$\022\023\n\013target_docs\030\004 \001(\010\022\032\n\022ta" +
      "rget_connections\030\005 \001(\010\"3\n\013Constraints\022$\n" +
      "\013constraints\030\001 \003(\0132\017.api.Constraint\"\237\001\n\005" +
      "Index\022\036\n\004name\030\001 \001(\tB\020\342\337\037\014\n\n^.{1,225}$\022\037\n" +
      "\005gtype\030\003 \001(\tB\020\342\337\037\014\n\n^.{1,225}$\022$\n\nexpres" +
      "sion\030\004 \001(\tB\020\342\337\037\014\n\n^.{1,225}$\022\023\n\013target_d" +
      "ocs\030\005 \001(\010\022\032\n\022target_connections\030\006 \001(\010\"&\n" +
      "\007Indexes\022\033\n\007indexes\030\001 \003(\0132\n.api.Index\"\236\001" +
      "\n\007Trigger\022\036\n\004name\030\001 \001(\tB\020\342\337\037\014\n\n^.{1,225}" +
      "$\022\037\n\005gtype\030\002 \001(\tB\020\342\337\037\014\n\n^.{1,225}$\022!\n\007tr" +
      "igger\030\004 \001(\tB\020\342\337\037\014\n\n^.{1,225}$\022\023\n\013target_" +
      "docs\030\005 \001(\010\022\032\n\022target_connections\030\006 \001(\010\"*" +
      "\n\010Triggers\022\036\n\010triggers\030\001 \003(\0132\014.api.Trigg" +
      "er\"\227\001\n\014StreamFilter\022!\n\007channel\030\001 \001(\tB\020\342\337" +
      "\037\014\n\n^.{1,225}$\022\022\n\nexpression\030\002 \001(\t\022\'\n\003mi" +
      "n\030\003 \001(\0132\032.google.protobuf.Timestamp\022\'\n\003m" +
      "ax\030\004 \001(\0132\032.google.protobuf.Timestamp\"G\n\005" +
      "Graph\022\027\n\004docs\030\001 \001(\0132\t.api.Docs\022%\n\013connec" +
      "tions\030\002 \001(\0132\020.api.Connections\"\335\003\n\005Flags\022" +
      "\031\n\021open_id_discovery\030\001 \001(\t\022\024\n\014storage_pa" +
      "th\030\002 \001(\t\022\025\n\rallow_headers\030\005 \003(\t\022\025\n\rallow" +
      "_methods\030\006 \003(\t\022\025\n\rallow_origins\030\007 \003(\t\022\022\n" +
      "\nroot_users\030\010 \003(\t\022\020\n\010tls_cert\030\t \001(\t\022\017\n\007t" +
      "ls_key\030\n \001(\t\022#\n\033require_request_authoriz" +
      "ers\030\017 \001(\010\022$\n\034require_response_authorizer" +
      "s\030\020 \001(\010\022\021\n\tjoin_raft\030\021 \001(\t\022\024\n\014raft_peer_" +
      "id\030\022 \001(\t\022\023\n\013listen_port\030\023 \001(\003\022\023\n\013raft_se" +
      "cret\030\024 \001(\t\022\r\n\005debug\030\025 \001(\010\022\023\n\013environment" +
      "\030\026 \001(\t\022\026\n\016raft_advertise\030\027 \001(\t\022\025\n\rraft_m" +
      "ax_pool\030\030 \001(\003\022\022\n\nmutual_tls\030\031 \001(\010\022\017\n\007ca_" +
      "cert\030\032 \001(\t\022\021\n\tenable_ui\030\033 \001(\010\"\303\001\n\007UIFlag" +
      "s\022\027\n\017oauth_client_id\030\001 \001(\t\022\033\n\023oauth_clie" +
      "nt_secret\030\002 \001(\t\022\037\n\027oauth_authorization_u" +
      "rl\030\003 \001(\t\022\027\n\017oauth_token_url\030\004 \001(\t\022\032\n\022oau" +
      "th_redirect_url\030\005 \001(\t\022\024\n\014oauth_scopes\030\006 " +
      "\003(\t\022\026\n\016session_secret\030\007 \001(\t\"\030\n\007Boolean\022\r" +
      "\n\005value\030\001 \001(\010\"\027\n\006Number\022\r\n\005value\030\001 \001(\001\"\203" +
      "\001\n\014ExistsFilter\022\037\n\005gtype\030\001 \001(\tB\020\342\337\037\014\n\n^." +
      "{1,225}$\022$\n\nexpression\030\002 \001(\tB\020\342\337\037\014\n\n^.{1" +
      ",225}$\022\014\n\004seek\030\003 \001(\t\022\017\n\007reverse\030\004 \001(\010\022\r\n" +
      "\005index\030\005 \001(\t\"R\n\004Edit\022\035\n\003ref\030\001 \001(\0132\010.api." +
      "RefB\006\342\337\037\002 \001\022+\n\nattributes\030\002 \001(\0132\027.google" +
      ".protobuf.Struct\"V\n\nEditFilter\022\033\n\006filter" +
      "\030\001 \001(\0132\013.api.Filter\022+\n\nattributes\030\002 \001(\0132" +
      "\027.google.protobuf.Struct\"\027\n\004Pong\022\017\n\007mess" +
      "age\030\001 \001(\t\"c\n\017OutboundMessage\022!\n\007channel\030" +
      "\001 \001(\tB\020\342\337\037\014\n\n^.{1,225}$\022-\n\004data\030\002 \001(\0132\027." +
      "google.protobuf.StructB\006\342\337\037\002 \001\"\324\001\n\007Messa" +
      "ge\022!\n\007channel\030\001 \001(\tB\020\342\337\037\014\n\n^.{1,225}$\022-\n" +
      "\004data\030\002 \001(\0132\027.google.protobuf.StructB\006\342\337" +
      "\037\002 \001\022\036\n\004user\030\003 \001(\0132\010.api.RefB\006\342\337\037\002 \001\0225\n\t" +
      "timestamp\030\004 \001(\0132\032.google.protobuf.Timest" +
      "ampB\006\342\337\037\002 \001\022 \n\006method\030\005 \001(\tB\020\342\337\037\014\n\n^.{1," +
      "225}$\"\303\001\n\006Schema\022\030\n\020connection_types\030\001 \003" +
      "(\t\022\021\n\tdoc_types\030\002 \003(\t\022%\n\013authorizers\030\003 \001" +
      "(\0132\020.api.Authorizers\022%\n\013constraints\030\004 \001(" +
      "\0132\020.api.Constraints\022\035\n\007indexes\030\005 \001(\0132\014.a" +
      "pi.Indexes\022\037\n\010triggers\030\006 \001(\0132\r.api.Trigg" +
      "ers\" \n\nExprFilter\022\022\n\nexpression\030\001 \001(\t\"\374\002" +
      "\n\013RaftCommand\022\026\n\004user\030\001 \001(\0132\010.api.Doc\022\016\n" +
      "\006method\030\002 \001(\t\022\032\n\010set_docs\030\003 \003(\0132\010.api.Do" +
      "c\022(\n\017set_connections\030\004 \003(\0132\017.api.Connect" +
      "ion\022\032\n\010del_docs\030\005 \003(\0132\010.api.Ref\022!\n\017del_c" +
      "onnections\030\006 \003(\0132\010.api.Ref\022!\n\013set_indexe" +
      "s\030\007 \001(\0132\014.api.Indexes\022)\n\017set_authorizers" +
      "\030\010 \001(\0132\020.api.Authorizers\022)\n\017set_constrai" +
      "nts\030\t \001(\0132\020.api.Constraints\022\"\n\014send_mess" +
      "age\030\n \001(\0132\014.api.Message\022#\n\014set_triggers\030" +
      "\013 \001(\0132\r.api.Triggers\"%\n\004Peer\022\017\n\007node_id\030" +
      "\001 \001(\t\022\014\n\004addr\030\002 \001(\t\"\262\001\n\tRaftState\022\016\n\006lea" +
      "der\030\001 \001(\t\022#\n\nmembership\030\002 \001(\0162\017.api.Memb" +
      "ership\022\030\n\005peers\030\003 \003(\0132\t.api.Peer\022(\n\005stat" +
      "s\030\004 \003(\0132\031.api.RaftState.StatsEntry\032,\n\nSt" +
      "atsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001" +
      "*\035\n\tAlgorithm\022\007\n\003BFS\020\000\022\007\n\003DFS\020\001*D\n\tAggre" +
      "gate\022\t\n\005COUNT\020\000\022\007\n\003SUM\020\001\022\007\n\003AVG\020\002\022\007\n\003MAX" +
      "\020\003\022\007\n\003MIN\020\004\022\010\n\004PROD\020\005*P\n\nMembership\022\013\n\007U" +
      "NKNOWN\020\000\022\014\n\010FOLLOWER\020\001\022\r\n\tCANDIDATE\020\002\022\n\n" +
      "\006LEADER\020\003\022\014\n\010SHUTDOWN\020\0042\250\001\n\013RaftService\022" +
      "+\n\004Ping\022\026.google.protobuf.Empty\032\t.api.Po" +
      "ng\"\000\0222\n\013JoinCluster\022\t.api.Peer\032\026.google." +
      "protobuf.Empty\"\000\0228\n\014ClusterState\022\026.googl" +
      "e.protobuf.Empty\032\016.api.RaftState\"\0002\217\022\n\017D" +
      "atabaseService\0222\n\tGetSchema\022\026.google.pro" +
      "tobuf.Empty\032\013.api.Schema\"\000\022<\n\016SetAuthori" +
      "zers\022\020.api.Authorizers\032\026.google.protobuf" +
      ".Empty\"\000\0224\n\nSetIndexes\022\014.api.Indexes\032\026.g" +
      "oogle.protobuf.Empty\"\000\022<\n\016SetConstraints" +
      "\022\020.api.Constraints\032\026.google.protobuf.Emp" +
      "ty\"\000\0226\n\013SetTriggers\022\r.api.Triggers\032\026.goo" +
      "gle.protobuf.Empty\"\000\022(\n\002Me\022\026.google.prot" +
      "obuf.Empty\032\010.api.Doc\"\000\022,\n\tCreateDoc\022\023.ap" +
      "i.DocConstructor\032\010.api.Doc\"\000\022/\n\nCreateDo" +
      "cs\022\024.api.DocConstructors\032\t.api.Docs\"\000\022\036\n" +
      "\006PutDoc\022\010.api.Doc\032\010.api.Doc\"\000\022!\n\007PutDocs" +
      "\022\t.api.Docs\032\t.api.Docs\"\000\022\036\n\006GetDoc\022\010.api" +
      ".Ref\032\010.api.Doc\"\000\022&\n\nSearchDocs\022\013.api.Fil" +
      "ter\032\t.api.Docs\"\000\0222\n\010Traverse\022\023.api.Trave" +
      "rseFilter\032\017.api.Traversals\"\000\0226\n\nTraverse" +
      "Me\022\025.api.TraverseMeFilter\032\017.api.Traversa" +
      "ls\"\000\022 \n\007EditDoc\022\t.api.Edit\032\010.api.Doc\"\000\022(" +
      "\n\010EditDocs\022\017.api.EditFilter\032\t.api.Docs\"\000" +
      "\022,\n\006DelDoc\022\010.api.Ref\032\026.google.protobuf.E" +
      "mpty\"\000\0220\n\007DelDocs\022\013.api.Filter\032\026.google." +
      "protobuf.Empty\"\000\022.\n\tExistsDoc\022\021.api.Exis" +
      "tsFilter\032\014.api.Boolean\"\000\0225\n\020ExistsConnec" +
      "tion\022\021.api.ExistsFilter\032\014.api.Boolean\"\000\022" +
      "\"\n\006HasDoc\022\010.api.Ref\032\014.api.Boolean\"\000\022)\n\rH" +
      "asConnection\022\010.api.Ref\032\014.api.Boolean\"\000\022A" +
      "\n\020CreateConnection\022\032.api.ConnectionConst" +
      "ructor\032\017.api.Connection\"\000\022D\n\021CreateConne" +
      "ctions\022\033.api.ConnectionConstructors\032\020.ap" +
      "i.Connections\"\000\0223\n\rPutConnection\022\017.api.C" +
      "onnection\032\017.api.Connection\"\000\0226\n\016PutConne" +
      "ctions\022\020.api.Connections\032\020.api.Connectio" +
      "ns\"\000\022@\n\020SearchAndConnect\022\030.api.SearchCon" +
      "nectFilter\032\020.api.Connections\"\000\022D\n\022Search" +
      "AndConnectMe\022\032.api.SearchConnectMeFilter" +
      "\032\020.api.Connections\"\000\022,\n\rGetConnection\022\010." +
      "api.Ref\032\017.api.Connection\"\000\0224\n\021SearchConn" +
      "ections\022\013.api.Filter\032\020.api.Connections\"\000" +
      "\022.\n\016EditConnection\022\t.api.Edit\032\017.api.Conn" +
      "ection\"\000\0226\n\017EditConnections\022\017.api.EditFi" +
      "lter\032\020.api.Connections\"\000\0223\n\rDelConnectio" +
      "n\022\010.api.Ref\032\026.google.protobuf.Empty\"\000\0227\n" +
      "\016DelConnections\022\013.api.Filter\032\026.google.pr" +
      "otobuf.Empty\"\000\0229\n\017ConnectionsFrom\022\022.api." +
      "ConnectFilter\032\020.api.Connections\"\000\0227\n\rCon" +
      "nectionsTo\022\022.api.ConnectFilter\032\020.api.Con" +
      "nections\"\000\022.\n\rAggregateDocs\022\016.api.AggFil" +
      "ter\032\013.api.Number\"\000\0225\n\024AggregateConnectio" +
      "ns\022\016.api.AggFilter\032\013.api.Number\"\000\022;\n\tBro" +
      "adcast\022\024.api.OutboundMessage\032\026.google.pr" +
      "otobuf.Empty\"\000\022-\n\006Stream\022\021.api.StreamFil" +
      "ter\032\014.api.Message\"\0000\001\022:\n\023PushDocConstruc" +
      "tors\022\023.api.DocConstructor\032\010.api.Doc\"\000(\0010" +
      "\001\022O\n\032PushConnectionConstructors\022\032.api.Co" +
      "nnectionConstructor\032\017.api.Connection\"\000(\001" +
      "0\001\0220\n\010SeedDocs\022\010.api.Doc\032\026.google.protob" +
      "uf.Empty\"\000(\001\022>\n\017SeedConnections\022\017.api.Co" +
      "nnection\032\026.google.protobuf.Empty\"\000(\001B\007Z\005" +
      "apipbb\006proto3"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
        new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
          public com.google.protobuf.ExtensionRegistry assignDescriptors(
              com.google.protobuf.Descriptors.FileDescriptor root) {
            descriptor = root;
            return null;
          }
        };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
          com.google.protobuf.StructProto.getDescriptor(),
          com.google.protobuf.TimestampProto.getDescriptor(),
          com.google.protobuf.AnyProto.getDescriptor(),
          com.google.protobuf.EmptyProto.getDescriptor(),
          validator.Validator.getDescriptor(),
        }, assigner);
    internal_static_api_Ref_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_api_Ref_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Ref_descriptor,
        new java.lang.String[] { "Gtype", "Gid", });
    internal_static_api_RefConstructor_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_api_RefConstructor_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_RefConstructor_descriptor,
        new java.lang.String[] { "Gtype", "Gid", });
    internal_static_api_Refs_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_api_Refs_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Refs_descriptor,
        new java.lang.String[] { "Refs", });
    internal_static_api_Doc_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_api_Doc_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Doc_descriptor,
        new java.lang.String[] { "Ref", "Attributes", });
    internal_static_api_DocConstructor_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_api_DocConstructor_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_DocConstructor_descriptor,
        new java.lang.String[] { "Ref", "Attributes", });
    internal_static_api_DocConstructors_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_api_DocConstructors_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_DocConstructors_descriptor,
        new java.lang.String[] { "Docs", });
    internal_static_api_Traversal_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_api_Traversal_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Traversal_descriptor,
        new java.lang.String[] { "Doc", "TraversalPath", "Depth", "Hops", });
    internal_static_api_Traversals_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_api_Traversals_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Traversals_descriptor,
        new java.lang.String[] { "Traversals", });
    internal_static_api_Docs_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_api_Docs_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Docs_descriptor,
        new java.lang.String[] { "Docs", "SeekNext", });
    internal_static_api_Connection_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_api_Connection_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Connection_descriptor,
        new java.lang.String[] { "Ref", "Attributes", "Directed", "From", "To", });
    internal_static_api_ConnectionConstructor_descriptor =
      getDescriptor().getMessageTypes().get(10);
    internal_static_api_ConnectionConstructor_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_ConnectionConstructor_descriptor,
        new java.lang.String[] { "Ref", "Attributes", "Directed", "From", "To", });
    internal_static_api_SearchConnectFilter_descriptor =
      getDescriptor().getMessageTypes().get(11);
    internal_static_api_SearchConnectFilter_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_SearchConnectFilter_descriptor,
        new java.lang.String[] { "Filter", "Gtype", "Attributes", "Directed", "From", });
    internal_static_api_SearchConnectMeFilter_descriptor =
      getDescriptor().getMessageTypes().get(12);
    internal_static_api_SearchConnectMeFilter_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_SearchConnectMeFilter_descriptor,
        new java.lang.String[] { "Filter", "Gtype", "Attributes", "Directed", });
    internal_static_api_ConnectionConstructors_descriptor =
      getDescriptor().getMessageTypes().get(13);
    internal_static_api_ConnectionConstructors_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_ConnectionConstructors_descriptor,
        new java.lang.String[] { "Connections", });
    internal_static_api_Connections_descriptor =
      getDescriptor().getMessageTypes().get(14);
    internal_static_api_Connections_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Connections_descriptor,
        new java.lang.String[] { "Connections", "SeekNext", });
    internal_static_api_ConnectFilter_descriptor =
      getDescriptor().getMessageTypes().get(15);
    internal_static_api_ConnectFilter_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_ConnectFilter_descriptor,
        new java.lang.String[] { "DocRef", "Gtype", "Expression", "Limit", "Sort", "Seek", "Reverse", });
    internal_static_api_Filter_descriptor =
      getDescriptor().getMessageTypes().get(16);
    internal_static_api_Filter_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Filter_descriptor,
        new java.lang.String[] { "Gtype", "Expression", "Limit", "Sort", "Seek", "Reverse", "Index", });
    internal_static_api_AggFilter_descriptor =
      getDescriptor().getMessageTypes().get(17);
    internal_static_api_AggFilter_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_AggFilter_descriptor,
        new java.lang.String[] { "Filter", "Aggregate", "Field", });
    internal_static_api_TraverseFilter_descriptor =
      getDescriptor().getMessageTypes().get(18);
    internal_static_api_TraverseFilter_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_TraverseFilter_descriptor,
        new java.lang.String[] { "Root", "DocExpression", "ConnectionExpression", "Limit", "Sort", "Reverse", "Algorithm", "MaxDepth", "MaxHops", });
    internal_static_api_TraverseMeFilter_descriptor =
      getDescriptor().getMessageTypes().get(19);
    internal_static_api_TraverseMeFilter_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_TraverseMeFilter_descriptor,
        new java.lang.String[] { "DocExpression", "ConnectionExpression", "Limit", "Sort", "Reverse", "Algorithm", "MaxDepth", "MaxHops", });
    internal_static_api_IndexConstructor_descriptor =
      getDescriptor().getMessageTypes().get(20);
    internal_static_api_IndexConstructor_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_IndexConstructor_descriptor,
        new java.lang.String[] { "Name", "Gtype", "Expression", "TargetDocs", "TargetConnections", });
    internal_static_api_AuthTarget_descriptor =
      getDescriptor().getMessageTypes().get(21);
    internal_static_api_AuthTarget_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_AuthTarget_descriptor,
        new java.lang.String[] { "User", "Target", "Headers", });
    internal_static_api_AuthTarget_HeadersEntry_descriptor =
      internal_static_api_AuthTarget_descriptor.getNestedTypes().get(0);
    internal_static_api_AuthTarget_HeadersEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_AuthTarget_HeadersEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_api_Authorizer_descriptor =
      getDescriptor().getMessageTypes().get(22);
    internal_static_api_Authorizer_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Authorizer_descriptor,
        new java.lang.String[] { "Name", "Method", "Expression", "TargetRequests", "TargetResponses", });
    internal_static_api_Authorizers_descriptor =
      getDescriptor().getMessageTypes().get(23);
    internal_static_api_Authorizers_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Authorizers_descriptor,
        new java.lang.String[] { "Authorizers", });
    internal_static_api_Constraint_descriptor =
      getDescriptor().getMessageTypes().get(24);
    internal_static_api_Constraint_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Constraint_descriptor,
        new java.lang.String[] { "Name", "Gtype", "Expression", "TargetDocs", "TargetConnections", });
    internal_static_api_Constraints_descriptor =
      getDescriptor().getMessageTypes().get(25);
    internal_static_api_Constraints_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Constraints_descriptor,
        new java.lang.String[] { "Constraints", });
    internal_static_api_Index_descriptor =
      getDescriptor().getMessageTypes().get(26);
    internal_static_api_Index_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Index_descriptor,
        new java.lang.String[] { "Name", "Gtype", "Expression", "TargetDocs", "TargetConnections", });
    internal_static_api_Indexes_descriptor =
      getDescriptor().getMessageTypes().get(27);
    internal_static_api_Indexes_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Indexes_descriptor,
        new java.lang.String[] { "Indexes", });
    internal_static_api_Trigger_descriptor =
      getDescriptor().getMessageTypes().get(28);
    internal_static_api_Trigger_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Trigger_descriptor,
        new java.lang.String[] { "Name", "Gtype", "Trigger", "TargetDocs", "TargetConnections", });
    internal_static_api_Triggers_descriptor =
      getDescriptor().getMessageTypes().get(29);
    internal_static_api_Triggers_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Triggers_descriptor,
        new java.lang.String[] { "Triggers", });
    internal_static_api_StreamFilter_descriptor =
      getDescriptor().getMessageTypes().get(30);
    internal_static_api_StreamFilter_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_StreamFilter_descriptor,
        new java.lang.String[] { "Channel", "Expression", "Min", "Max", });
    internal_static_api_Graph_descriptor =
      getDescriptor().getMessageTypes().get(31);
    internal_static_api_Graph_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Graph_descriptor,
        new java.lang.String[] { "Docs", "Connections", });
    internal_static_api_Flags_descriptor =
      getDescriptor().getMessageTypes().get(32);
    internal_static_api_Flags_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Flags_descriptor,
        new java.lang.String[] { "OpenIdDiscovery", "StoragePath", "AllowHeaders", "AllowMethods", "AllowOrigins", "RootUsers", "TlsCert", "TlsKey", "RequireRequestAuthorizers", "RequireResponseAuthorizers", "JoinRaft", "RaftPeerId", "ListenPort", "RaftSecret", "Debug", "Environment", "RaftAdvertise", "RaftMaxPool", "MutualTls", "CaCert", "EnableUi", });
    internal_static_api_UIFlags_descriptor =
      getDescriptor().getMessageTypes().get(33);
    internal_static_api_UIFlags_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_UIFlags_descriptor,
        new java.lang.String[] { "OauthClientId", "OauthClientSecret", "OauthAuthorizationUrl", "OauthTokenUrl", "OauthRedirectUrl", "OauthScopes", "SessionSecret", });
    internal_static_api_Boolean_descriptor =
      getDescriptor().getMessageTypes().get(34);
    internal_static_api_Boolean_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Boolean_descriptor,
        new java.lang.String[] { "Value", });
    internal_static_api_Number_descriptor =
      getDescriptor().getMessageTypes().get(35);
    internal_static_api_Number_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Number_descriptor,
        new java.lang.String[] { "Value", });
    internal_static_api_ExistsFilter_descriptor =
      getDescriptor().getMessageTypes().get(36);
    internal_static_api_ExistsFilter_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_ExistsFilter_descriptor,
        new java.lang.String[] { "Gtype", "Expression", "Seek", "Reverse", "Index", });
    internal_static_api_Edit_descriptor =
      getDescriptor().getMessageTypes().get(37);
    internal_static_api_Edit_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Edit_descriptor,
        new java.lang.String[] { "Ref", "Attributes", });
    internal_static_api_EditFilter_descriptor =
      getDescriptor().getMessageTypes().get(38);
    internal_static_api_EditFilter_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_EditFilter_descriptor,
        new java.lang.String[] { "Filter", "Attributes", });
    internal_static_api_Pong_descriptor =
      getDescriptor().getMessageTypes().get(39);
    internal_static_api_Pong_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Pong_descriptor,
        new java.lang.String[] { "Message", });
    internal_static_api_OutboundMessage_descriptor =
      getDescriptor().getMessageTypes().get(40);
    internal_static_api_OutboundMessage_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_OutboundMessage_descriptor,
        new java.lang.String[] { "Channel", "Data", });
    internal_static_api_Message_descriptor =
      getDescriptor().getMessageTypes().get(41);
    internal_static_api_Message_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Message_descriptor,
        new java.lang.String[] { "Channel", "Data", "User", "Timestamp", "Method", });
    internal_static_api_Schema_descriptor =
      getDescriptor().getMessageTypes().get(42);
    internal_static_api_Schema_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Schema_descriptor,
        new java.lang.String[] { "ConnectionTypes", "DocTypes", "Authorizers", "Constraints", "Indexes", "Triggers", });
    internal_static_api_ExprFilter_descriptor =
      getDescriptor().getMessageTypes().get(43);
    internal_static_api_ExprFilter_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_ExprFilter_descriptor,
        new java.lang.String[] { "Expression", });
    internal_static_api_RaftCommand_descriptor =
      getDescriptor().getMessageTypes().get(44);
    internal_static_api_RaftCommand_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_RaftCommand_descriptor,
        new java.lang.String[] { "User", "Method", "SetDocs", "SetConnections", "DelDocs", "DelConnections", "SetIndexes", "SetAuthorizers", "SetConstraints", "SendMessage", "SetTriggers", });
    internal_static_api_Peer_descriptor =
      getDescriptor().getMessageTypes().get(45);
    internal_static_api_Peer_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_Peer_descriptor,
        new java.lang.String[] { "NodeId", "Addr", });
    internal_static_api_RaftState_descriptor =
      getDescriptor().getMessageTypes().get(46);
    internal_static_api_RaftState_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_RaftState_descriptor,
        new java.lang.String[] { "Leader", "Membership", "Peers", "Stats", });
    internal_static_api_RaftState_StatsEntry_descriptor =
      internal_static_api_RaftState_descriptor.getNestedTypes().get(0);
    internal_static_api_RaftState_StatsEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_api_RaftState_StatsEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
    com.google.protobuf.ExtensionRegistry registry =
        com.google.protobuf.ExtensionRegistry.newInstance();
    registry.add(validator.Validator.field);
    com.google.protobuf.Descriptors.FileDescriptor
        .internalUpdateFileDescriptor(descriptor, registry);
    com.google.protobuf.StructProto.getDescriptor();
    com.google.protobuf.TimestampProto.getDescriptor();
    com.google.protobuf.AnyProto.getDescriptor();
    com.google.protobuf.EmptyProto.getDescriptor();
    validator.Validator.getDescriptor();
  }

  // @@protoc_insertion_point(outer_class_scope)
}
