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

package proto;

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

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  public interface ModuleSourceOrBuilder extends
      // @@protoc_insertion_point(interface_extends:proto.ModuleSource)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.proto.AstNode node = 1;</code>
     */
    boolean hasNode();
    /**
     * <code>.proto.AstNode node = 1;</code>
     */
    proto.Ast.AstNode getNode();
    /**
     * <code>.proto.AstNode node = 1;</code>
     */
    proto.Ast.AstNodeOrBuilder getNodeOrBuilder();

    /**
     * <code>repeated .proto.AstNode reachable_sources = 2;</code>
     */
    java.util.List<proto.Ast.AstNode> 
        getReachableSourcesList();
    /**
     * <code>repeated .proto.AstNode reachable_sources = 2;</code>
     */
    proto.Ast.AstNode getReachableSources(int index);
    /**
     * <code>repeated .proto.AstNode reachable_sources = 2;</code>
     */
    int getReachableSourcesCount();
    /**
     * <code>repeated .proto.AstNode reachable_sources = 2;</code>
     */
    java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
        getReachableSourcesOrBuilderList();
    /**
     * <code>repeated .proto.AstNode reachable_sources = 2;</code>
     */
    proto.Ast.AstNodeOrBuilder getReachableSourcesOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code proto.ModuleSource}
   */
  public  static final class ModuleSource extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.ModuleSource)
      ModuleSourceOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ModuleSource.newBuilder() to construct.
    private ModuleSource(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ModuleSource() {
      reachableSources_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ModuleSource(
        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: {
              proto.Ast.AstNode.Builder subBuilder = null;
              if (node_ != null) {
                subBuilder = node_.toBuilder();
              }
              node_ = input.readMessage(proto.Ast.AstNode.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(node_);
                node_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                reachableSources_ = new java.util.ArrayList<proto.Ast.AstNode>();
                mutable_bitField0_ |= 0x00000002;
              }
              reachableSources_.add(
                  input.readMessage(proto.Ast.AstNode.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_ & 0x00000002) == 0x00000002)) {
          reachableSources_ = java.util.Collections.unmodifiableList(reachableSources_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.Module.internal_static_proto_ModuleSource_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.Module.internal_static_proto_ModuleSource_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.Module.ModuleSource.class, proto.Module.ModuleSource.Builder.class);
    }

    private int bitField0_;
    public static final int NODE_FIELD_NUMBER = 1;
    private proto.Ast.AstNode node_;
    /**
     * <code>.proto.AstNode node = 1;</code>
     */
    public boolean hasNode() {
      return node_ != null;
    }
    /**
     * <code>.proto.AstNode node = 1;</code>
     */
    public proto.Ast.AstNode getNode() {
      return node_ == null ? proto.Ast.AstNode.getDefaultInstance() : node_;
    }
    /**
     * <code>.proto.AstNode node = 1;</code>
     */
    public proto.Ast.AstNodeOrBuilder getNodeOrBuilder() {
      return getNode();
    }

    public static final int REACHABLE_SOURCES_FIELD_NUMBER = 2;
    private java.util.List<proto.Ast.AstNode> reachableSources_;
    /**
     * <code>repeated .proto.AstNode reachable_sources = 2;</code>
     */
    public java.util.List<proto.Ast.AstNode> getReachableSourcesList() {
      return reachableSources_;
    }
    /**
     * <code>repeated .proto.AstNode reachable_sources = 2;</code>
     */
    public java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
        getReachableSourcesOrBuilderList() {
      return reachableSources_;
    }
    /**
     * <code>repeated .proto.AstNode reachable_sources = 2;</code>
     */
    public int getReachableSourcesCount() {
      return reachableSources_.size();
    }
    /**
     * <code>repeated .proto.AstNode reachable_sources = 2;</code>
     */
    public proto.Ast.AstNode getReachableSources(int index) {
      return reachableSources_.get(index);
    }
    /**
     * <code>repeated .proto.AstNode reachable_sources = 2;</code>
     */
    public proto.Ast.AstNodeOrBuilder getReachableSourcesOrBuilder(
        int index) {
      return reachableSources_.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 {
      if (node_ != null) {
        output.writeMessage(1, getNode());
      }
      for (int i = 0; i < reachableSources_.size(); i++) {
        output.writeMessage(2, reachableSources_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (node_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getNode());
      }
      for (int i = 0; i < reachableSources_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, reachableSources_.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 proto.Module.ModuleSource)) {
        return super.equals(obj);
      }
      proto.Module.ModuleSource other = (proto.Module.ModuleSource) obj;

      boolean result = true;
      result = result && (hasNode() == other.hasNode());
      if (hasNode()) {
        result = result && getNode()
            .equals(other.getNode());
      }
      result = result && getReachableSourcesList()
          .equals(other.getReachableSourcesList());
      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 (hasNode()) {
        hash = (37 * hash) + NODE_FIELD_NUMBER;
        hash = (53 * hash) + getNode().hashCode();
      }
      if (getReachableSourcesCount() > 0) {
        hash = (37 * hash) + REACHABLE_SOURCES_FIELD_NUMBER;
        hash = (53 * hash) + getReachableSourcesList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

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

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.Module.internal_static_proto_ModuleSource_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.Module.ModuleSource.class, proto.Module.ModuleSource.Builder.class);
      }

      // Construct using proto.Module.ModuleSource.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getReachableSourcesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (nodeBuilder_ == null) {
          node_ = null;
        } else {
          node_ = null;
          nodeBuilder_ = null;
        }
        if (reachableSourcesBuilder_ == null) {
          reachableSources_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          reachableSourcesBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return proto.Module.internal_static_proto_ModuleSource_descriptor;
      }

      @java.lang.Override
      public proto.Module.ModuleSource getDefaultInstanceForType() {
        return proto.Module.ModuleSource.getDefaultInstance();
      }

      @java.lang.Override
      public proto.Module.ModuleSource build() {
        proto.Module.ModuleSource result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public proto.Module.ModuleSource buildPartial() {
        proto.Module.ModuleSource result = new proto.Module.ModuleSource(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (nodeBuilder_ == null) {
          result.node_ = node_;
        } else {
          result.node_ = nodeBuilder_.build();
        }
        if (reachableSourcesBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            reachableSources_ = java.util.Collections.unmodifiableList(reachableSources_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.reachableSources_ = reachableSources_;
        } else {
          result.reachableSources_ = reachableSourcesBuilder_.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 proto.Module.ModuleSource) {
          return mergeFrom((proto.Module.ModuleSource)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.Module.ModuleSource other) {
        if (other == proto.Module.ModuleSource.getDefaultInstance()) return this;
        if (other.hasNode()) {
          mergeNode(other.getNode());
        }
        if (reachableSourcesBuilder_ == null) {
          if (!other.reachableSources_.isEmpty()) {
            if (reachableSources_.isEmpty()) {
              reachableSources_ = other.reachableSources_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureReachableSourcesIsMutable();
              reachableSources_.addAll(other.reachableSources_);
            }
            onChanged();
          }
        } else {
          if (!other.reachableSources_.isEmpty()) {
            if (reachableSourcesBuilder_.isEmpty()) {
              reachableSourcesBuilder_.dispose();
              reachableSourcesBuilder_ = null;
              reachableSources_ = other.reachableSources_;
              bitField0_ = (bitField0_ & ~0x00000002);
              reachableSourcesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getReachableSourcesFieldBuilder() : null;
            } else {
              reachableSourcesBuilder_.addAllMessages(other.reachableSources_);
            }
          }
        }
        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 {
        proto.Module.ModuleSource parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.Module.ModuleSource) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private proto.Ast.AstNode node_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> nodeBuilder_;
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public boolean hasNode() {
        return nodeBuilder_ != null || node_ != null;
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public proto.Ast.AstNode getNode() {
        if (nodeBuilder_ == null) {
          return node_ == null ? proto.Ast.AstNode.getDefaultInstance() : node_;
        } else {
          return nodeBuilder_.getMessage();
        }
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public Builder setNode(proto.Ast.AstNode value) {
        if (nodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          node_ = value;
          onChanged();
        } else {
          nodeBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public Builder setNode(
          proto.Ast.AstNode.Builder builderForValue) {
        if (nodeBuilder_ == null) {
          node_ = builderForValue.build();
          onChanged();
        } else {
          nodeBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public Builder mergeNode(proto.Ast.AstNode value) {
        if (nodeBuilder_ == null) {
          if (node_ != null) {
            node_ =
              proto.Ast.AstNode.newBuilder(node_).mergeFrom(value).buildPartial();
          } else {
            node_ = value;
          }
          onChanged();
        } else {
          nodeBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public Builder clearNode() {
        if (nodeBuilder_ == null) {
          node_ = null;
          onChanged();
        } else {
          node_ = null;
          nodeBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public proto.Ast.AstNode.Builder getNodeBuilder() {
        
        onChanged();
        return getNodeFieldBuilder().getBuilder();
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public proto.Ast.AstNodeOrBuilder getNodeOrBuilder() {
        if (nodeBuilder_ != null) {
          return nodeBuilder_.getMessageOrBuilder();
        } else {
          return node_ == null ?
              proto.Ast.AstNode.getDefaultInstance() : node_;
        }
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> 
          getNodeFieldBuilder() {
        if (nodeBuilder_ == null) {
          nodeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder>(
                  getNode(),
                  getParentForChildren(),
                  isClean());
          node_ = null;
        }
        return nodeBuilder_;
      }

      private java.util.List<proto.Ast.AstNode> reachableSources_ =
        java.util.Collections.emptyList();
      private void ensureReachableSourcesIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          reachableSources_ = new java.util.ArrayList<proto.Ast.AstNode>(reachableSources_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> reachableSourcesBuilder_;

      /**
       * <code>repeated .proto.AstNode reachable_sources = 2;</code>
       */
      public java.util.List<proto.Ast.AstNode> getReachableSourcesList() {
        if (reachableSourcesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(reachableSources_);
        } else {
          return reachableSourcesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.AstNode reachable_sources = 2;</code>
       */
      public int getReachableSourcesCount() {
        if (reachableSourcesBuilder_ == null) {
          return reachableSources_.size();
        } else {
          return reachableSourcesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.AstNode reachable_sources = 2;</code>
       */
      public proto.Ast.AstNode getReachableSources(int index) {
        if (reachableSourcesBuilder_ == null) {
          return reachableSources_.get(index);
        } else {
          return reachableSourcesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.AstNode reachable_sources = 2;</code>
       */
      public Builder setReachableSources(
          int index, proto.Ast.AstNode value) {
        if (reachableSourcesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureReachableSourcesIsMutable();
          reachableSources_.set(index, value);
          onChanged();
        } else {
          reachableSourcesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode reachable_sources = 2;</code>
       */
      public Builder setReachableSources(
          int index, proto.Ast.AstNode.Builder builderForValue) {
        if (reachableSourcesBuilder_ == null) {
          ensureReachableSourcesIsMutable();
          reachableSources_.set(index, builderForValue.build());
          onChanged();
        } else {
          reachableSourcesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode reachable_sources = 2;</code>
       */
      public Builder addReachableSources(proto.Ast.AstNode value) {
        if (reachableSourcesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureReachableSourcesIsMutable();
          reachableSources_.add(value);
          onChanged();
        } else {
          reachableSourcesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode reachable_sources = 2;</code>
       */
      public Builder addReachableSources(
          int index, proto.Ast.AstNode value) {
        if (reachableSourcesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureReachableSourcesIsMutable();
          reachableSources_.add(index, value);
          onChanged();
        } else {
          reachableSourcesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode reachable_sources = 2;</code>
       */
      public Builder addReachableSources(
          proto.Ast.AstNode.Builder builderForValue) {
        if (reachableSourcesBuilder_ == null) {
          ensureReachableSourcesIsMutable();
          reachableSources_.add(builderForValue.build());
          onChanged();
        } else {
          reachableSourcesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode reachable_sources = 2;</code>
       */
      public Builder addReachableSources(
          int index, proto.Ast.AstNode.Builder builderForValue) {
        if (reachableSourcesBuilder_ == null) {
          ensureReachableSourcesIsMutable();
          reachableSources_.add(index, builderForValue.build());
          onChanged();
        } else {
          reachableSourcesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode reachable_sources = 2;</code>
       */
      public Builder addAllReachableSources(
          java.lang.Iterable<? extends proto.Ast.AstNode> values) {
        if (reachableSourcesBuilder_ == null) {
          ensureReachableSourcesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, reachableSources_);
          onChanged();
        } else {
          reachableSourcesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode reachable_sources = 2;</code>
       */
      public Builder clearReachableSources() {
        if (reachableSourcesBuilder_ == null) {
          reachableSources_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          reachableSourcesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode reachable_sources = 2;</code>
       */
      public Builder removeReachableSources(int index) {
        if (reachableSourcesBuilder_ == null) {
          ensureReachableSourcesIsMutable();
          reachableSources_.remove(index);
          onChanged();
        } else {
          reachableSourcesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode reachable_sources = 2;</code>
       */
      public proto.Ast.AstNode.Builder getReachableSourcesBuilder(
          int index) {
        return getReachableSourcesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.AstNode reachable_sources = 2;</code>
       */
      public proto.Ast.AstNodeOrBuilder getReachableSourcesOrBuilder(
          int index) {
        if (reachableSourcesBuilder_ == null) {
          return reachableSources_.get(index);  } else {
          return reachableSourcesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.AstNode reachable_sources = 2;</code>
       */
      public java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
           getReachableSourcesOrBuilderList() {
        if (reachableSourcesBuilder_ != null) {
          return reachableSourcesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(reachableSources_);
        }
      }
      /**
       * <code>repeated .proto.AstNode reachable_sources = 2;</code>
       */
      public proto.Ast.AstNode.Builder addReachableSourcesBuilder() {
        return getReachableSourcesFieldBuilder().addBuilder(
            proto.Ast.AstNode.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.AstNode reachable_sources = 2;</code>
       */
      public proto.Ast.AstNode.Builder addReachableSourcesBuilder(
          int index) {
        return getReachableSourcesFieldBuilder().addBuilder(
            index, proto.Ast.AstNode.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.AstNode reachable_sources = 2;</code>
       */
      public java.util.List<proto.Ast.AstNode.Builder> 
           getReachableSourcesBuilderList() {
        return getReachableSourcesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> 
          getReachableSourcesFieldBuilder() {
        if (reachableSourcesBuilder_ == null) {
          reachableSourcesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder>(
                  reachableSources_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          reachableSources_ = null;
        }
        return reachableSourcesBuilder_;
      }
      @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:proto.ModuleSource)
    }

    // @@protoc_insertion_point(class_scope:proto.ModuleSource)
    private static final proto.Module.ModuleSource DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new proto.Module.ModuleSource();
    }

    public static proto.Module.ModuleSource getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public proto.Module.ModuleSource getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ModuleSinkOrBuilder extends
      // @@protoc_insertion_point(interface_extends:proto.ModuleSink)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.proto.AstNode node = 1;</code>
     */
    boolean hasNode();
    /**
     * <code>.proto.AstNode node = 1;</code>
     */
    proto.Ast.AstNode getNode();
    /**
     * <code>.proto.AstNode node = 1;</code>
     */
    proto.Ast.AstNodeOrBuilder getNodeOrBuilder();

    /**
     * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
     */
    java.util.List<proto.Ast.AstNode> 
        getReachableSinksList();
    /**
     * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
     */
    proto.Ast.AstNode getReachableSinks(int index);
    /**
     * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
     */
    int getReachableSinksCount();
    /**
     * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
     */
    java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
        getReachableSinksOrBuilderList();
    /**
     * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
     */
    proto.Ast.AstNodeOrBuilder getReachableSinksOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code proto.ModuleSink}
   */
  public  static final class ModuleSink extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.ModuleSink)
      ModuleSinkOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ModuleSink.newBuilder() to construct.
    private ModuleSink(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ModuleSink() {
      reachableSinks_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ModuleSink(
        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: {
              proto.Ast.AstNode.Builder subBuilder = null;
              if (node_ != null) {
                subBuilder = node_.toBuilder();
              }
              node_ = input.readMessage(proto.Ast.AstNode.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(node_);
                node_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                reachableSinks_ = new java.util.ArrayList<proto.Ast.AstNode>();
                mutable_bitField0_ |= 0x00000002;
              }
              reachableSinks_.add(
                  input.readMessage(proto.Ast.AstNode.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_ & 0x00000002) == 0x00000002)) {
          reachableSinks_ = java.util.Collections.unmodifiableList(reachableSinks_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.Module.internal_static_proto_ModuleSink_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.Module.internal_static_proto_ModuleSink_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.Module.ModuleSink.class, proto.Module.ModuleSink.Builder.class);
    }

    private int bitField0_;
    public static final int NODE_FIELD_NUMBER = 1;
    private proto.Ast.AstNode node_;
    /**
     * <code>.proto.AstNode node = 1;</code>
     */
    public boolean hasNode() {
      return node_ != null;
    }
    /**
     * <code>.proto.AstNode node = 1;</code>
     */
    public proto.Ast.AstNode getNode() {
      return node_ == null ? proto.Ast.AstNode.getDefaultInstance() : node_;
    }
    /**
     * <code>.proto.AstNode node = 1;</code>
     */
    public proto.Ast.AstNodeOrBuilder getNodeOrBuilder() {
      return getNode();
    }

    public static final int REACHABLE_SINKS_FIELD_NUMBER = 2;
    private java.util.List<proto.Ast.AstNode> reachableSinks_;
    /**
     * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
     */
    public java.util.List<proto.Ast.AstNode> getReachableSinksList() {
      return reachableSinks_;
    }
    /**
     * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
     */
    public java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
        getReachableSinksOrBuilderList() {
      return reachableSinks_;
    }
    /**
     * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
     */
    public int getReachableSinksCount() {
      return reachableSinks_.size();
    }
    /**
     * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
     */
    public proto.Ast.AstNode getReachableSinks(int index) {
      return reachableSinks_.get(index);
    }
    /**
     * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
     */
    public proto.Ast.AstNodeOrBuilder getReachableSinksOrBuilder(
        int index) {
      return reachableSinks_.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 {
      if (node_ != null) {
        output.writeMessage(1, getNode());
      }
      for (int i = 0; i < reachableSinks_.size(); i++) {
        output.writeMessage(2, reachableSinks_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (node_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getNode());
      }
      for (int i = 0; i < reachableSinks_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, reachableSinks_.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 proto.Module.ModuleSink)) {
        return super.equals(obj);
      }
      proto.Module.ModuleSink other = (proto.Module.ModuleSink) obj;

      boolean result = true;
      result = result && (hasNode() == other.hasNode());
      if (hasNode()) {
        result = result && getNode()
            .equals(other.getNode());
      }
      result = result && getReachableSinksList()
          .equals(other.getReachableSinksList());
      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 (hasNode()) {
        hash = (37 * hash) + NODE_FIELD_NUMBER;
        hash = (53 * hash) + getNode().hashCode();
      }
      if (getReachableSinksCount() > 0) {
        hash = (37 * hash) + REACHABLE_SINKS_FIELD_NUMBER;
        hash = (53 * hash) + getReachableSinksList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

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

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.Module.internal_static_proto_ModuleSink_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.Module.ModuleSink.class, proto.Module.ModuleSink.Builder.class);
      }

      // Construct using proto.Module.ModuleSink.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getReachableSinksFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (nodeBuilder_ == null) {
          node_ = null;
        } else {
          node_ = null;
          nodeBuilder_ = null;
        }
        if (reachableSinksBuilder_ == null) {
          reachableSinks_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          reachableSinksBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return proto.Module.internal_static_proto_ModuleSink_descriptor;
      }

      @java.lang.Override
      public proto.Module.ModuleSink getDefaultInstanceForType() {
        return proto.Module.ModuleSink.getDefaultInstance();
      }

      @java.lang.Override
      public proto.Module.ModuleSink build() {
        proto.Module.ModuleSink result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public proto.Module.ModuleSink buildPartial() {
        proto.Module.ModuleSink result = new proto.Module.ModuleSink(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (nodeBuilder_ == null) {
          result.node_ = node_;
        } else {
          result.node_ = nodeBuilder_.build();
        }
        if (reachableSinksBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            reachableSinks_ = java.util.Collections.unmodifiableList(reachableSinks_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.reachableSinks_ = reachableSinks_;
        } else {
          result.reachableSinks_ = reachableSinksBuilder_.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 proto.Module.ModuleSink) {
          return mergeFrom((proto.Module.ModuleSink)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.Module.ModuleSink other) {
        if (other == proto.Module.ModuleSink.getDefaultInstance()) return this;
        if (other.hasNode()) {
          mergeNode(other.getNode());
        }
        if (reachableSinksBuilder_ == null) {
          if (!other.reachableSinks_.isEmpty()) {
            if (reachableSinks_.isEmpty()) {
              reachableSinks_ = other.reachableSinks_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureReachableSinksIsMutable();
              reachableSinks_.addAll(other.reachableSinks_);
            }
            onChanged();
          }
        } else {
          if (!other.reachableSinks_.isEmpty()) {
            if (reachableSinksBuilder_.isEmpty()) {
              reachableSinksBuilder_.dispose();
              reachableSinksBuilder_ = null;
              reachableSinks_ = other.reachableSinks_;
              bitField0_ = (bitField0_ & ~0x00000002);
              reachableSinksBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getReachableSinksFieldBuilder() : null;
            } else {
              reachableSinksBuilder_.addAllMessages(other.reachableSinks_);
            }
          }
        }
        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 {
        proto.Module.ModuleSink parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.Module.ModuleSink) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private proto.Ast.AstNode node_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> nodeBuilder_;
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public boolean hasNode() {
        return nodeBuilder_ != null || node_ != null;
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public proto.Ast.AstNode getNode() {
        if (nodeBuilder_ == null) {
          return node_ == null ? proto.Ast.AstNode.getDefaultInstance() : node_;
        } else {
          return nodeBuilder_.getMessage();
        }
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public Builder setNode(proto.Ast.AstNode value) {
        if (nodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          node_ = value;
          onChanged();
        } else {
          nodeBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public Builder setNode(
          proto.Ast.AstNode.Builder builderForValue) {
        if (nodeBuilder_ == null) {
          node_ = builderForValue.build();
          onChanged();
        } else {
          nodeBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public Builder mergeNode(proto.Ast.AstNode value) {
        if (nodeBuilder_ == null) {
          if (node_ != null) {
            node_ =
              proto.Ast.AstNode.newBuilder(node_).mergeFrom(value).buildPartial();
          } else {
            node_ = value;
          }
          onChanged();
        } else {
          nodeBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public Builder clearNode() {
        if (nodeBuilder_ == null) {
          node_ = null;
          onChanged();
        } else {
          node_ = null;
          nodeBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public proto.Ast.AstNode.Builder getNodeBuilder() {
        
        onChanged();
        return getNodeFieldBuilder().getBuilder();
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public proto.Ast.AstNodeOrBuilder getNodeOrBuilder() {
        if (nodeBuilder_ != null) {
          return nodeBuilder_.getMessageOrBuilder();
        } else {
          return node_ == null ?
              proto.Ast.AstNode.getDefaultInstance() : node_;
        }
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> 
          getNodeFieldBuilder() {
        if (nodeBuilder_ == null) {
          nodeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder>(
                  getNode(),
                  getParentForChildren(),
                  isClean());
          node_ = null;
        }
        return nodeBuilder_;
      }

      private java.util.List<proto.Ast.AstNode> reachableSinks_ =
        java.util.Collections.emptyList();
      private void ensureReachableSinksIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          reachableSinks_ = new java.util.ArrayList<proto.Ast.AstNode>(reachableSinks_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> reachableSinksBuilder_;

      /**
       * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
       */
      public java.util.List<proto.Ast.AstNode> getReachableSinksList() {
        if (reachableSinksBuilder_ == null) {
          return java.util.Collections.unmodifiableList(reachableSinks_);
        } else {
          return reachableSinksBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
       */
      public int getReachableSinksCount() {
        if (reachableSinksBuilder_ == null) {
          return reachableSinks_.size();
        } else {
          return reachableSinksBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
       */
      public proto.Ast.AstNode getReachableSinks(int index) {
        if (reachableSinksBuilder_ == null) {
          return reachableSinks_.get(index);
        } else {
          return reachableSinksBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
       */
      public Builder setReachableSinks(
          int index, proto.Ast.AstNode value) {
        if (reachableSinksBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureReachableSinksIsMutable();
          reachableSinks_.set(index, value);
          onChanged();
        } else {
          reachableSinksBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
       */
      public Builder setReachableSinks(
          int index, proto.Ast.AstNode.Builder builderForValue) {
        if (reachableSinksBuilder_ == null) {
          ensureReachableSinksIsMutable();
          reachableSinks_.set(index, builderForValue.build());
          onChanged();
        } else {
          reachableSinksBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
       */
      public Builder addReachableSinks(proto.Ast.AstNode value) {
        if (reachableSinksBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureReachableSinksIsMutable();
          reachableSinks_.add(value);
          onChanged();
        } else {
          reachableSinksBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
       */
      public Builder addReachableSinks(
          int index, proto.Ast.AstNode value) {
        if (reachableSinksBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureReachableSinksIsMutable();
          reachableSinks_.add(index, value);
          onChanged();
        } else {
          reachableSinksBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
       */
      public Builder addReachableSinks(
          proto.Ast.AstNode.Builder builderForValue) {
        if (reachableSinksBuilder_ == null) {
          ensureReachableSinksIsMutable();
          reachableSinks_.add(builderForValue.build());
          onChanged();
        } else {
          reachableSinksBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
       */
      public Builder addReachableSinks(
          int index, proto.Ast.AstNode.Builder builderForValue) {
        if (reachableSinksBuilder_ == null) {
          ensureReachableSinksIsMutable();
          reachableSinks_.add(index, builderForValue.build());
          onChanged();
        } else {
          reachableSinksBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
       */
      public Builder addAllReachableSinks(
          java.lang.Iterable<? extends proto.Ast.AstNode> values) {
        if (reachableSinksBuilder_ == null) {
          ensureReachableSinksIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, reachableSinks_);
          onChanged();
        } else {
          reachableSinksBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
       */
      public Builder clearReachableSinks() {
        if (reachableSinksBuilder_ == null) {
          reachableSinks_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          reachableSinksBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
       */
      public Builder removeReachableSinks(int index) {
        if (reachableSinksBuilder_ == null) {
          ensureReachableSinksIsMutable();
          reachableSinks_.remove(index);
          onChanged();
        } else {
          reachableSinksBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
       */
      public proto.Ast.AstNode.Builder getReachableSinksBuilder(
          int index) {
        return getReachableSinksFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
       */
      public proto.Ast.AstNodeOrBuilder getReachableSinksOrBuilder(
          int index) {
        if (reachableSinksBuilder_ == null) {
          return reachableSinks_.get(index);  } else {
          return reachableSinksBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
       */
      public java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
           getReachableSinksOrBuilderList() {
        if (reachableSinksBuilder_ != null) {
          return reachableSinksBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(reachableSinks_);
        }
      }
      /**
       * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
       */
      public proto.Ast.AstNode.Builder addReachableSinksBuilder() {
        return getReachableSinksFieldBuilder().addBuilder(
            proto.Ast.AstNode.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
       */
      public proto.Ast.AstNode.Builder addReachableSinksBuilder(
          int index) {
        return getReachableSinksFieldBuilder().addBuilder(
            index, proto.Ast.AstNode.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.AstNode reachable_sinks = 2;</code>
       */
      public java.util.List<proto.Ast.AstNode.Builder> 
           getReachableSinksBuilderList() {
        return getReachableSinksFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> 
          getReachableSinksFieldBuilder() {
        if (reachableSinksBuilder_ == null) {
          reachableSinksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder>(
                  reachableSinks_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          reachableSinks_ = null;
        }
        return reachableSinksBuilder_;
      }
      @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:proto.ModuleSink)
    }

    // @@protoc_insertion_point(class_scope:proto.ModuleSink)
    private static final proto.Module.ModuleSink DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new proto.Module.ModuleSink();
    }

    public static proto.Module.ModuleSink getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public proto.Module.ModuleSink getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ModuleTaintWrapperOrBuilder extends
      // @@protoc_insertion_point(interface_extends:proto.ModuleTaintWrapper)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.proto.AstNode node = 1;</code>
     */
    boolean hasNode();
    /**
     * <code>.proto.AstNode node = 1;</code>
     */
    proto.Ast.AstNode getNode();
    /**
     * <code>.proto.AstNode node = 1;</code>
     */
    proto.Ast.AstNodeOrBuilder getNodeOrBuilder();

    /**
     * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
     */
    java.util.List<proto.Module.ModuleTaintWrapper.TaintRule> 
        getRulesList();
    /**
     * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
     */
    proto.Module.ModuleTaintWrapper.TaintRule getRules(int index);
    /**
     * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
     */
    int getRulesCount();
    /**
     * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
     */
    java.util.List<? extends proto.Module.ModuleTaintWrapper.TaintRuleOrBuilder> 
        getRulesOrBuilderList();
    /**
     * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
     */
    proto.Module.ModuleTaintWrapper.TaintRuleOrBuilder getRulesOrBuilder(
        int index);
  }
  /**
   * <pre>
   **
   * Rule-based summaries proposed by StubDroid.
   * id = 0, means the this/self pointer of the object, or the first arg.
   * id = -1, means the return value of the function.
   * For example, if arg0 is tainted, then return value is tainted can be encoded as: {cause: id=0, effects: [id=-1]}
   * 
   * Reference: 
   * format of module summary
   * https://github.com/secure-software-engineering/FlowDroid/blob/develop/soot-infoflow-summaries/schema/ClassSummary.xsd
   * https://github.com/secure-software-engineering/FlowDroid/blob/develop/soot-infoflow-summaries/schema/SummaryMetaData.xsd
   * FIXME: convert xsd to proto and update the taint wrapper here.
   * http://tranchis.github.io/xsd2thrift/
   * </pre>
   *
   * Protobuf type {@code proto.ModuleTaintWrapper}
   */
  public  static final class ModuleTaintWrapper extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.ModuleTaintWrapper)
      ModuleTaintWrapperOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ModuleTaintWrapper.newBuilder() to construct.
    private ModuleTaintWrapper(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ModuleTaintWrapper() {
      rules_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ModuleTaintWrapper(
        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: {
              proto.Ast.AstNode.Builder subBuilder = null;
              if (node_ != null) {
                subBuilder = node_.toBuilder();
              }
              node_ = input.readMessage(proto.Ast.AstNode.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(node_);
                node_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                rules_ = new java.util.ArrayList<proto.Module.ModuleTaintWrapper.TaintRule>();
                mutable_bitField0_ |= 0x00000002;
              }
              rules_.add(
                  input.readMessage(proto.Module.ModuleTaintWrapper.TaintRule.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_ & 0x00000002) == 0x00000002)) {
          rules_ = java.util.Collections.unmodifiableList(rules_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.Module.internal_static_proto_ModuleTaintWrapper_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.Module.internal_static_proto_ModuleTaintWrapper_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.Module.ModuleTaintWrapper.class, proto.Module.ModuleTaintWrapper.Builder.class);
    }

    public interface TaintPointOrBuilder extends
        // @@protoc_insertion_point(interface_extends:proto.ModuleTaintWrapper.TaintPoint)
        com.google.protobuf.MessageOrBuilder {

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

      /**
       * <code>repeated string access_paths = 2;</code>
       */
      java.util.List<java.lang.String>
          getAccessPathsList();
      /**
       * <code>repeated string access_paths = 2;</code>
       */
      int getAccessPathsCount();
      /**
       * <code>repeated string access_paths = 2;</code>
       */
      java.lang.String getAccessPaths(int index);
      /**
       * <code>repeated string access_paths = 2;</code>
       */
      com.google.protobuf.ByteString
          getAccessPathsBytes(int index);
    }
    /**
     * Protobuf type {@code proto.ModuleTaintWrapper.TaintPoint}
     */
    public  static final class TaintPoint extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:proto.ModuleTaintWrapper.TaintPoint)
        TaintPointOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use TaintPoint.newBuilder() to construct.
      private TaintPoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private TaintPoint() {
        id_ = 0;
        accessPaths_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private TaintPoint(
          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: {

                id_ = input.readInt32();
                break;
              }
              case 18: {
                java.lang.String s = input.readStringRequireUtf8();
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  accessPaths_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000002;
                }
                accessPaths_.add(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_ & 0x00000002) == 0x00000002)) {
            accessPaths_ = accessPaths_.getUnmodifiableView();
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.Module.internal_static_proto_ModuleTaintWrapper_TaintPoint_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.Module.internal_static_proto_ModuleTaintWrapper_TaintPoint_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.Module.ModuleTaintWrapper.TaintPoint.class, proto.Module.ModuleTaintWrapper.TaintPoint.Builder.class);
      }

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

      public static final int ACCESS_PATHS_FIELD_NUMBER = 2;
      private com.google.protobuf.LazyStringList accessPaths_;
      /**
       * <code>repeated string access_paths = 2;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getAccessPathsList() {
        return accessPaths_;
      }
      /**
       * <code>repeated string access_paths = 2;</code>
       */
      public int getAccessPathsCount() {
        return accessPaths_.size();
      }
      /**
       * <code>repeated string access_paths = 2;</code>
       */
      public java.lang.String getAccessPaths(int index) {
        return accessPaths_.get(index);
      }
      /**
       * <code>repeated string access_paths = 2;</code>
       */
      public com.google.protobuf.ByteString
          getAccessPathsBytes(int index) {
        return accessPaths_.getByteString(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 {
        if (id_ != 0) {
          output.writeInt32(1, id_);
        }
        for (int i = 0; i < accessPaths_.size(); i++) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 2, accessPaths_.getRaw(i));
        }
        unknownFields.writeTo(output);
      }

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

        size = 0;
        if (id_ != 0) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(1, id_);
        }
        {
          int dataSize = 0;
          for (int i = 0; i < accessPaths_.size(); i++) {
            dataSize += computeStringSizeNoTag(accessPaths_.getRaw(i));
          }
          size += dataSize;
          size += 1 * getAccessPathsList().size();
        }
        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 proto.Module.ModuleTaintWrapper.TaintPoint)) {
          return super.equals(obj);
        }
        proto.Module.ModuleTaintWrapper.TaintPoint other = (proto.Module.ModuleTaintWrapper.TaintPoint) obj;

        boolean result = true;
        result = result && (getId()
            == other.getId());
        result = result && getAccessPathsList()
            .equals(other.getAccessPathsList());
        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) + ID_FIELD_NUMBER;
        hash = (53 * hash) + getId();
        if (getAccessPathsCount() > 0) {
          hash = (37 * hash) + ACCESS_PATHS_FIELD_NUMBER;
          hash = (53 * hash) + getAccessPathsList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

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

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return proto.Module.internal_static_proto_ModuleTaintWrapper_TaintPoint_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  proto.Module.ModuleTaintWrapper.TaintPoint.class, proto.Module.ModuleTaintWrapper.TaintPoint.Builder.class);
        }

        // Construct using proto.Module.ModuleTaintWrapper.TaintPoint.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();
          id_ = 0;

          accessPaths_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return proto.Module.internal_static_proto_ModuleTaintWrapper_TaintPoint_descriptor;
        }

        @java.lang.Override
        public proto.Module.ModuleTaintWrapper.TaintPoint getDefaultInstanceForType() {
          return proto.Module.ModuleTaintWrapper.TaintPoint.getDefaultInstance();
        }

        @java.lang.Override
        public proto.Module.ModuleTaintWrapper.TaintPoint build() {
          proto.Module.ModuleTaintWrapper.TaintPoint result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public proto.Module.ModuleTaintWrapper.TaintPoint buildPartial() {
          proto.Module.ModuleTaintWrapper.TaintPoint result = new proto.Module.ModuleTaintWrapper.TaintPoint(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          result.id_ = id_;
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            accessPaths_ = accessPaths_.getUnmodifiableView();
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.accessPaths_ = accessPaths_;
          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 proto.Module.ModuleTaintWrapper.TaintPoint) {
            return mergeFrom((proto.Module.ModuleTaintWrapper.TaintPoint)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(proto.Module.ModuleTaintWrapper.TaintPoint other) {
          if (other == proto.Module.ModuleTaintWrapper.TaintPoint.getDefaultInstance()) return this;
          if (other.getId() != 0) {
            setId(other.getId());
          }
          if (!other.accessPaths_.isEmpty()) {
            if (accessPaths_.isEmpty()) {
              accessPaths_ = other.accessPaths_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureAccessPathsIsMutable();
              accessPaths_.addAll(other.accessPaths_);
            }
            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 {
          proto.Module.ModuleTaintWrapper.TaintPoint parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (proto.Module.ModuleTaintWrapper.TaintPoint) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private int id_ ;
        /**
         * <code>int32 id = 1;</code>
         */
        public int getId() {
          return id_;
        }
        /**
         * <code>int32 id = 1;</code>
         */
        public Builder setId(int value) {
          
          id_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>int32 id = 1;</code>
         */
        public Builder clearId() {
          
          id_ = 0;
          onChanged();
          return this;
        }

        private com.google.protobuf.LazyStringList accessPaths_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        private void ensureAccessPathsIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            accessPaths_ = new com.google.protobuf.LazyStringArrayList(accessPaths_);
            bitField0_ |= 0x00000002;
           }
        }
        /**
         * <code>repeated string access_paths = 2;</code>
         */
        public com.google.protobuf.ProtocolStringList
            getAccessPathsList() {
          return accessPaths_.getUnmodifiableView();
        }
        /**
         * <code>repeated string access_paths = 2;</code>
         */
        public int getAccessPathsCount() {
          return accessPaths_.size();
        }
        /**
         * <code>repeated string access_paths = 2;</code>
         */
        public java.lang.String getAccessPaths(int index) {
          return accessPaths_.get(index);
        }
        /**
         * <code>repeated string access_paths = 2;</code>
         */
        public com.google.protobuf.ByteString
            getAccessPathsBytes(int index) {
          return accessPaths_.getByteString(index);
        }
        /**
         * <code>repeated string access_paths = 2;</code>
         */
        public Builder setAccessPaths(
            int index, java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureAccessPathsIsMutable();
          accessPaths_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string access_paths = 2;</code>
         */
        public Builder addAccessPaths(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureAccessPathsIsMutable();
          accessPaths_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string access_paths = 2;</code>
         */
        public Builder addAllAccessPaths(
            java.lang.Iterable<java.lang.String> values) {
          ensureAccessPathsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, accessPaths_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string access_paths = 2;</code>
         */
        public Builder clearAccessPaths() {
          accessPaths_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string access_paths = 2;</code>
         */
        public Builder addAccessPathsBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
          ensureAccessPathsIsMutable();
          accessPaths_.add(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:proto.ModuleTaintWrapper.TaintPoint)
      }

      // @@protoc_insertion_point(class_scope:proto.ModuleTaintWrapper.TaintPoint)
      private static final proto.Module.ModuleTaintWrapper.TaintPoint DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new proto.Module.ModuleTaintWrapper.TaintPoint();
      }

      public static proto.Module.ModuleTaintWrapper.TaintPoint getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

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

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

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

      @java.lang.Override
      public proto.Module.ModuleTaintWrapper.TaintPoint getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public interface TaintRuleOrBuilder extends
        // @@protoc_insertion_point(interface_extends:proto.ModuleTaintWrapper.TaintRule)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>.proto.ModuleTaintWrapper.TaintPoint cause = 1;</code>
       */
      boolean hasCause();
      /**
       * <code>.proto.ModuleTaintWrapper.TaintPoint cause = 1;</code>
       */
      proto.Module.ModuleTaintWrapper.TaintPoint getCause();
      /**
       * <code>.proto.ModuleTaintWrapper.TaintPoint cause = 1;</code>
       */
      proto.Module.ModuleTaintWrapper.TaintPointOrBuilder getCauseOrBuilder();

      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
       */
      java.util.List<proto.Module.ModuleTaintWrapper.TaintPoint> 
          getEffectsList();
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
       */
      proto.Module.ModuleTaintWrapper.TaintPoint getEffects(int index);
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
       */
      int getEffectsCount();
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
       */
      java.util.List<? extends proto.Module.ModuleTaintWrapper.TaintPointOrBuilder> 
          getEffectsOrBuilderList();
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
       */
      proto.Module.ModuleTaintWrapper.TaintPointOrBuilder getEffectsOrBuilder(
          int index);
    }
    /**
     * Protobuf type {@code proto.ModuleTaintWrapper.TaintRule}
     */
    public  static final class TaintRule extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:proto.ModuleTaintWrapper.TaintRule)
        TaintRuleOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use TaintRule.newBuilder() to construct.
      private TaintRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private TaintRule() {
        effects_ = java.util.Collections.emptyList();
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private TaintRule(
          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: {
                proto.Module.ModuleTaintWrapper.TaintPoint.Builder subBuilder = null;
                if (cause_ != null) {
                  subBuilder = cause_.toBuilder();
                }
                cause_ = input.readMessage(proto.Module.ModuleTaintWrapper.TaintPoint.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(cause_);
                  cause_ = subBuilder.buildPartial();
                }

                break;
              }
              case 18: {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  effects_ = new java.util.ArrayList<proto.Module.ModuleTaintWrapper.TaintPoint>();
                  mutable_bitField0_ |= 0x00000002;
                }
                effects_.add(
                    input.readMessage(proto.Module.ModuleTaintWrapper.TaintPoint.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_ & 0x00000002) == 0x00000002)) {
            effects_ = java.util.Collections.unmodifiableList(effects_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.Module.internal_static_proto_ModuleTaintWrapper_TaintRule_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.Module.internal_static_proto_ModuleTaintWrapper_TaintRule_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.Module.ModuleTaintWrapper.TaintRule.class, proto.Module.ModuleTaintWrapper.TaintRule.Builder.class);
      }

      private int bitField0_;
      public static final int CAUSE_FIELD_NUMBER = 1;
      private proto.Module.ModuleTaintWrapper.TaintPoint cause_;
      /**
       * <code>.proto.ModuleTaintWrapper.TaintPoint cause = 1;</code>
       */
      public boolean hasCause() {
        return cause_ != null;
      }
      /**
       * <code>.proto.ModuleTaintWrapper.TaintPoint cause = 1;</code>
       */
      public proto.Module.ModuleTaintWrapper.TaintPoint getCause() {
        return cause_ == null ? proto.Module.ModuleTaintWrapper.TaintPoint.getDefaultInstance() : cause_;
      }
      /**
       * <code>.proto.ModuleTaintWrapper.TaintPoint cause = 1;</code>
       */
      public proto.Module.ModuleTaintWrapper.TaintPointOrBuilder getCauseOrBuilder() {
        return getCause();
      }

      public static final int EFFECTS_FIELD_NUMBER = 2;
      private java.util.List<proto.Module.ModuleTaintWrapper.TaintPoint> effects_;
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
       */
      public java.util.List<proto.Module.ModuleTaintWrapper.TaintPoint> getEffectsList() {
        return effects_;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
       */
      public java.util.List<? extends proto.Module.ModuleTaintWrapper.TaintPointOrBuilder> 
          getEffectsOrBuilderList() {
        return effects_;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
       */
      public int getEffectsCount() {
        return effects_.size();
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
       */
      public proto.Module.ModuleTaintWrapper.TaintPoint getEffects(int index) {
        return effects_.get(index);
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
       */
      public proto.Module.ModuleTaintWrapper.TaintPointOrBuilder getEffectsOrBuilder(
          int index) {
        return effects_.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 {
        if (cause_ != null) {
          output.writeMessage(1, getCause());
        }
        for (int i = 0; i < effects_.size(); i++) {
          output.writeMessage(2, effects_.get(i));
        }
        unknownFields.writeTo(output);
      }

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

        size = 0;
        if (cause_ != null) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, getCause());
        }
        for (int i = 0; i < effects_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(2, effects_.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 proto.Module.ModuleTaintWrapper.TaintRule)) {
          return super.equals(obj);
        }
        proto.Module.ModuleTaintWrapper.TaintRule other = (proto.Module.ModuleTaintWrapper.TaintRule) obj;

        boolean result = true;
        result = result && (hasCause() == other.hasCause());
        if (hasCause()) {
          result = result && getCause()
              .equals(other.getCause());
        }
        result = result && getEffectsList()
            .equals(other.getEffectsList());
        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 (hasCause()) {
          hash = (37 * hash) + CAUSE_FIELD_NUMBER;
          hash = (53 * hash) + getCause().hashCode();
        }
        if (getEffectsCount() > 0) {
          hash = (37 * hash) + EFFECTS_FIELD_NUMBER;
          hash = (53 * hash) + getEffectsList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

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

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return proto.Module.internal_static_proto_ModuleTaintWrapper_TaintRule_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  proto.Module.ModuleTaintWrapper.TaintRule.class, proto.Module.ModuleTaintWrapper.TaintRule.Builder.class);
        }

        // Construct using proto.Module.ModuleTaintWrapper.TaintRule.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
            getEffectsFieldBuilder();
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          if (causeBuilder_ == null) {
            cause_ = null;
          } else {
            cause_ = null;
            causeBuilder_ = null;
          }
          if (effectsBuilder_ == null) {
            effects_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            effectsBuilder_.clear();
          }
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return proto.Module.internal_static_proto_ModuleTaintWrapper_TaintRule_descriptor;
        }

        @java.lang.Override
        public proto.Module.ModuleTaintWrapper.TaintRule getDefaultInstanceForType() {
          return proto.Module.ModuleTaintWrapper.TaintRule.getDefaultInstance();
        }

        @java.lang.Override
        public proto.Module.ModuleTaintWrapper.TaintRule build() {
          proto.Module.ModuleTaintWrapper.TaintRule result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public proto.Module.ModuleTaintWrapper.TaintRule buildPartial() {
          proto.Module.ModuleTaintWrapper.TaintRule result = new proto.Module.ModuleTaintWrapper.TaintRule(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (causeBuilder_ == null) {
            result.cause_ = cause_;
          } else {
            result.cause_ = causeBuilder_.build();
          }
          if (effectsBuilder_ == null) {
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
              effects_ = java.util.Collections.unmodifiableList(effects_);
              bitField0_ = (bitField0_ & ~0x00000002);
            }
            result.effects_ = effects_;
          } else {
            result.effects_ = effectsBuilder_.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 proto.Module.ModuleTaintWrapper.TaintRule) {
            return mergeFrom((proto.Module.ModuleTaintWrapper.TaintRule)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(proto.Module.ModuleTaintWrapper.TaintRule other) {
          if (other == proto.Module.ModuleTaintWrapper.TaintRule.getDefaultInstance()) return this;
          if (other.hasCause()) {
            mergeCause(other.getCause());
          }
          if (effectsBuilder_ == null) {
            if (!other.effects_.isEmpty()) {
              if (effects_.isEmpty()) {
                effects_ = other.effects_;
                bitField0_ = (bitField0_ & ~0x00000002);
              } else {
                ensureEffectsIsMutable();
                effects_.addAll(other.effects_);
              }
              onChanged();
            }
          } else {
            if (!other.effects_.isEmpty()) {
              if (effectsBuilder_.isEmpty()) {
                effectsBuilder_.dispose();
                effectsBuilder_ = null;
                effects_ = other.effects_;
                bitField0_ = (bitField0_ & ~0x00000002);
                effectsBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getEffectsFieldBuilder() : null;
              } else {
                effectsBuilder_.addAllMessages(other.effects_);
              }
            }
          }
          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 {
          proto.Module.ModuleTaintWrapper.TaintRule parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (proto.Module.ModuleTaintWrapper.TaintRule) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private proto.Module.ModuleTaintWrapper.TaintPoint cause_ = null;
        private com.google.protobuf.SingleFieldBuilderV3<
            proto.Module.ModuleTaintWrapper.TaintPoint, proto.Module.ModuleTaintWrapper.TaintPoint.Builder, proto.Module.ModuleTaintWrapper.TaintPointOrBuilder> causeBuilder_;
        /**
         * <code>.proto.ModuleTaintWrapper.TaintPoint cause = 1;</code>
         */
        public boolean hasCause() {
          return causeBuilder_ != null || cause_ != null;
        }
        /**
         * <code>.proto.ModuleTaintWrapper.TaintPoint cause = 1;</code>
         */
        public proto.Module.ModuleTaintWrapper.TaintPoint getCause() {
          if (causeBuilder_ == null) {
            return cause_ == null ? proto.Module.ModuleTaintWrapper.TaintPoint.getDefaultInstance() : cause_;
          } else {
            return causeBuilder_.getMessage();
          }
        }
        /**
         * <code>.proto.ModuleTaintWrapper.TaintPoint cause = 1;</code>
         */
        public Builder setCause(proto.Module.ModuleTaintWrapper.TaintPoint value) {
          if (causeBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            cause_ = value;
            onChanged();
          } else {
            causeBuilder_.setMessage(value);
          }

          return this;
        }
        /**
         * <code>.proto.ModuleTaintWrapper.TaintPoint cause = 1;</code>
         */
        public Builder setCause(
            proto.Module.ModuleTaintWrapper.TaintPoint.Builder builderForValue) {
          if (causeBuilder_ == null) {
            cause_ = builderForValue.build();
            onChanged();
          } else {
            causeBuilder_.setMessage(builderForValue.build());
          }

          return this;
        }
        /**
         * <code>.proto.ModuleTaintWrapper.TaintPoint cause = 1;</code>
         */
        public Builder mergeCause(proto.Module.ModuleTaintWrapper.TaintPoint value) {
          if (causeBuilder_ == null) {
            if (cause_ != null) {
              cause_ =
                proto.Module.ModuleTaintWrapper.TaintPoint.newBuilder(cause_).mergeFrom(value).buildPartial();
            } else {
              cause_ = value;
            }
            onChanged();
          } else {
            causeBuilder_.mergeFrom(value);
          }

          return this;
        }
        /**
         * <code>.proto.ModuleTaintWrapper.TaintPoint cause = 1;</code>
         */
        public Builder clearCause() {
          if (causeBuilder_ == null) {
            cause_ = null;
            onChanged();
          } else {
            cause_ = null;
            causeBuilder_ = null;
          }

          return this;
        }
        /**
         * <code>.proto.ModuleTaintWrapper.TaintPoint cause = 1;</code>
         */
        public proto.Module.ModuleTaintWrapper.TaintPoint.Builder getCauseBuilder() {
          
          onChanged();
          return getCauseFieldBuilder().getBuilder();
        }
        /**
         * <code>.proto.ModuleTaintWrapper.TaintPoint cause = 1;</code>
         */
        public proto.Module.ModuleTaintWrapper.TaintPointOrBuilder getCauseOrBuilder() {
          if (causeBuilder_ != null) {
            return causeBuilder_.getMessageOrBuilder();
          } else {
            return cause_ == null ?
                proto.Module.ModuleTaintWrapper.TaintPoint.getDefaultInstance() : cause_;
          }
        }
        /**
         * <code>.proto.ModuleTaintWrapper.TaintPoint cause = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            proto.Module.ModuleTaintWrapper.TaintPoint, proto.Module.ModuleTaintWrapper.TaintPoint.Builder, proto.Module.ModuleTaintWrapper.TaintPointOrBuilder> 
            getCauseFieldBuilder() {
          if (causeBuilder_ == null) {
            causeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                proto.Module.ModuleTaintWrapper.TaintPoint, proto.Module.ModuleTaintWrapper.TaintPoint.Builder, proto.Module.ModuleTaintWrapper.TaintPointOrBuilder>(
                    getCause(),
                    getParentForChildren(),
                    isClean());
            cause_ = null;
          }
          return causeBuilder_;
        }

        private java.util.List<proto.Module.ModuleTaintWrapper.TaintPoint> effects_ =
          java.util.Collections.emptyList();
        private void ensureEffectsIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            effects_ = new java.util.ArrayList<proto.Module.ModuleTaintWrapper.TaintPoint>(effects_);
            bitField0_ |= 0x00000002;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            proto.Module.ModuleTaintWrapper.TaintPoint, proto.Module.ModuleTaintWrapper.TaintPoint.Builder, proto.Module.ModuleTaintWrapper.TaintPointOrBuilder> effectsBuilder_;

        /**
         * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
         */
        public java.util.List<proto.Module.ModuleTaintWrapper.TaintPoint> getEffectsList() {
          if (effectsBuilder_ == null) {
            return java.util.Collections.unmodifiableList(effects_);
          } else {
            return effectsBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
         */
        public int getEffectsCount() {
          if (effectsBuilder_ == null) {
            return effects_.size();
          } else {
            return effectsBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
         */
        public proto.Module.ModuleTaintWrapper.TaintPoint getEffects(int index) {
          if (effectsBuilder_ == null) {
            return effects_.get(index);
          } else {
            return effectsBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
         */
        public Builder setEffects(
            int index, proto.Module.ModuleTaintWrapper.TaintPoint value) {
          if (effectsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureEffectsIsMutable();
            effects_.set(index, value);
            onChanged();
          } else {
            effectsBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
         */
        public Builder setEffects(
            int index, proto.Module.ModuleTaintWrapper.TaintPoint.Builder builderForValue) {
          if (effectsBuilder_ == null) {
            ensureEffectsIsMutable();
            effects_.set(index, builderForValue.build());
            onChanged();
          } else {
            effectsBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
         */
        public Builder addEffects(proto.Module.ModuleTaintWrapper.TaintPoint value) {
          if (effectsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureEffectsIsMutable();
            effects_.add(value);
            onChanged();
          } else {
            effectsBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
         */
        public Builder addEffects(
            int index, proto.Module.ModuleTaintWrapper.TaintPoint value) {
          if (effectsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureEffectsIsMutable();
            effects_.add(index, value);
            onChanged();
          } else {
            effectsBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
         */
        public Builder addEffects(
            proto.Module.ModuleTaintWrapper.TaintPoint.Builder builderForValue) {
          if (effectsBuilder_ == null) {
            ensureEffectsIsMutable();
            effects_.add(builderForValue.build());
            onChanged();
          } else {
            effectsBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
         */
        public Builder addEffects(
            int index, proto.Module.ModuleTaintWrapper.TaintPoint.Builder builderForValue) {
          if (effectsBuilder_ == null) {
            ensureEffectsIsMutable();
            effects_.add(index, builderForValue.build());
            onChanged();
          } else {
            effectsBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
         */
        public Builder addAllEffects(
            java.lang.Iterable<? extends proto.Module.ModuleTaintWrapper.TaintPoint> values) {
          if (effectsBuilder_ == null) {
            ensureEffectsIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, effects_);
            onChanged();
          } else {
            effectsBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
         */
        public Builder clearEffects() {
          if (effectsBuilder_ == null) {
            effects_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
            onChanged();
          } else {
            effectsBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
         */
        public Builder removeEffects(int index) {
          if (effectsBuilder_ == null) {
            ensureEffectsIsMutable();
            effects_.remove(index);
            onChanged();
          } else {
            effectsBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
         */
        public proto.Module.ModuleTaintWrapper.TaintPoint.Builder getEffectsBuilder(
            int index) {
          return getEffectsFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
         */
        public proto.Module.ModuleTaintWrapper.TaintPointOrBuilder getEffectsOrBuilder(
            int index) {
          if (effectsBuilder_ == null) {
            return effects_.get(index);  } else {
            return effectsBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
         */
        public java.util.List<? extends proto.Module.ModuleTaintWrapper.TaintPointOrBuilder> 
             getEffectsOrBuilderList() {
          if (effectsBuilder_ != null) {
            return effectsBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(effects_);
          }
        }
        /**
         * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
         */
        public proto.Module.ModuleTaintWrapper.TaintPoint.Builder addEffectsBuilder() {
          return getEffectsFieldBuilder().addBuilder(
              proto.Module.ModuleTaintWrapper.TaintPoint.getDefaultInstance());
        }
        /**
         * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
         */
        public proto.Module.ModuleTaintWrapper.TaintPoint.Builder addEffectsBuilder(
            int index) {
          return getEffectsFieldBuilder().addBuilder(
              index, proto.Module.ModuleTaintWrapper.TaintPoint.getDefaultInstance());
        }
        /**
         * <code>repeated .proto.ModuleTaintWrapper.TaintPoint effects = 2;</code>
         */
        public java.util.List<proto.Module.ModuleTaintWrapper.TaintPoint.Builder> 
             getEffectsBuilderList() {
          return getEffectsFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            proto.Module.ModuleTaintWrapper.TaintPoint, proto.Module.ModuleTaintWrapper.TaintPoint.Builder, proto.Module.ModuleTaintWrapper.TaintPointOrBuilder> 
            getEffectsFieldBuilder() {
          if (effectsBuilder_ == null) {
            effectsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                proto.Module.ModuleTaintWrapper.TaintPoint, proto.Module.ModuleTaintWrapper.TaintPoint.Builder, proto.Module.ModuleTaintWrapper.TaintPointOrBuilder>(
                    effects_,
                    ((bitField0_ & 0x00000002) == 0x00000002),
                    getParentForChildren(),
                    isClean());
            effects_ = null;
          }
          return effectsBuilder_;
        }
        @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:proto.ModuleTaintWrapper.TaintRule)
      }

      // @@protoc_insertion_point(class_scope:proto.ModuleTaintWrapper.TaintRule)
      private static final proto.Module.ModuleTaintWrapper.TaintRule DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new proto.Module.ModuleTaintWrapper.TaintRule();
      }

      public static proto.Module.ModuleTaintWrapper.TaintRule getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

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

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

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

      @java.lang.Override
      public proto.Module.ModuleTaintWrapper.TaintRule getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int NODE_FIELD_NUMBER = 1;
    private proto.Ast.AstNode node_;
    /**
     * <code>.proto.AstNode node = 1;</code>
     */
    public boolean hasNode() {
      return node_ != null;
    }
    /**
     * <code>.proto.AstNode node = 1;</code>
     */
    public proto.Ast.AstNode getNode() {
      return node_ == null ? proto.Ast.AstNode.getDefaultInstance() : node_;
    }
    /**
     * <code>.proto.AstNode node = 1;</code>
     */
    public proto.Ast.AstNodeOrBuilder getNodeOrBuilder() {
      return getNode();
    }

    public static final int RULES_FIELD_NUMBER = 2;
    private java.util.List<proto.Module.ModuleTaintWrapper.TaintRule> rules_;
    /**
     * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
     */
    public java.util.List<proto.Module.ModuleTaintWrapper.TaintRule> getRulesList() {
      return rules_;
    }
    /**
     * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
     */
    public java.util.List<? extends proto.Module.ModuleTaintWrapper.TaintRuleOrBuilder> 
        getRulesOrBuilderList() {
      return rules_;
    }
    /**
     * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
     */
    public int getRulesCount() {
      return rules_.size();
    }
    /**
     * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
     */
    public proto.Module.ModuleTaintWrapper.TaintRule getRules(int index) {
      return rules_.get(index);
    }
    /**
     * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
     */
    public proto.Module.ModuleTaintWrapper.TaintRuleOrBuilder getRulesOrBuilder(
        int index) {
      return rules_.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 {
      if (node_ != null) {
        output.writeMessage(1, getNode());
      }
      for (int i = 0; i < rules_.size(); i++) {
        output.writeMessage(2, rules_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (node_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getNode());
      }
      for (int i = 0; i < rules_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, rules_.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 proto.Module.ModuleTaintWrapper)) {
        return super.equals(obj);
      }
      proto.Module.ModuleTaintWrapper other = (proto.Module.ModuleTaintWrapper) obj;

      boolean result = true;
      result = result && (hasNode() == other.hasNode());
      if (hasNode()) {
        result = result && getNode()
            .equals(other.getNode());
      }
      result = result && getRulesList()
          .equals(other.getRulesList());
      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 (hasNode()) {
        hash = (37 * hash) + NODE_FIELD_NUMBER;
        hash = (53 * hash) + getNode().hashCode();
      }
      if (getRulesCount() > 0) {
        hash = (37 * hash) + RULES_FIELD_NUMBER;
        hash = (53 * hash) + getRulesList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.Module.ModuleTaintWrapper parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Module.ModuleTaintWrapper parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Module.ModuleTaintWrapper parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Module.ModuleTaintWrapper parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Module.ModuleTaintWrapper parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Module.ModuleTaintWrapper parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Module.ModuleTaintWrapper parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Module.ModuleTaintWrapper 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 proto.Module.ModuleTaintWrapper parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.Module.ModuleTaintWrapper 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 proto.Module.ModuleTaintWrapper parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Module.ModuleTaintWrapper 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(proto.Module.ModuleTaintWrapper 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>
     **
     * Rule-based summaries proposed by StubDroid.
     * id = 0, means the this/self pointer of the object, or the first arg.
     * id = -1, means the return value of the function.
     * For example, if arg0 is tainted, then return value is tainted can be encoded as: {cause: id=0, effects: [id=-1]}
     * 
     * Reference: 
     * format of module summary
     * https://github.com/secure-software-engineering/FlowDroid/blob/develop/soot-infoflow-summaries/schema/ClassSummary.xsd
     * https://github.com/secure-software-engineering/FlowDroid/blob/develop/soot-infoflow-summaries/schema/SummaryMetaData.xsd
     * FIXME: convert xsd to proto and update the taint wrapper here.
     * http://tranchis.github.io/xsd2thrift/
     * </pre>
     *
     * Protobuf type {@code proto.ModuleTaintWrapper}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.ModuleTaintWrapper)
        proto.Module.ModuleTaintWrapperOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.Module.internal_static_proto_ModuleTaintWrapper_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.Module.internal_static_proto_ModuleTaintWrapper_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.Module.ModuleTaintWrapper.class, proto.Module.ModuleTaintWrapper.Builder.class);
      }

      // Construct using proto.Module.ModuleTaintWrapper.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getRulesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (nodeBuilder_ == null) {
          node_ = null;
        } else {
          node_ = null;
          nodeBuilder_ = null;
        }
        if (rulesBuilder_ == null) {
          rules_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          rulesBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return proto.Module.internal_static_proto_ModuleTaintWrapper_descriptor;
      }

      @java.lang.Override
      public proto.Module.ModuleTaintWrapper getDefaultInstanceForType() {
        return proto.Module.ModuleTaintWrapper.getDefaultInstance();
      }

      @java.lang.Override
      public proto.Module.ModuleTaintWrapper build() {
        proto.Module.ModuleTaintWrapper result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public proto.Module.ModuleTaintWrapper buildPartial() {
        proto.Module.ModuleTaintWrapper result = new proto.Module.ModuleTaintWrapper(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (nodeBuilder_ == null) {
          result.node_ = node_;
        } else {
          result.node_ = nodeBuilder_.build();
        }
        if (rulesBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            rules_ = java.util.Collections.unmodifiableList(rules_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.rules_ = rules_;
        } else {
          result.rules_ = rulesBuilder_.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 proto.Module.ModuleTaintWrapper) {
          return mergeFrom((proto.Module.ModuleTaintWrapper)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.Module.ModuleTaintWrapper other) {
        if (other == proto.Module.ModuleTaintWrapper.getDefaultInstance()) return this;
        if (other.hasNode()) {
          mergeNode(other.getNode());
        }
        if (rulesBuilder_ == null) {
          if (!other.rules_.isEmpty()) {
            if (rules_.isEmpty()) {
              rules_ = other.rules_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureRulesIsMutable();
              rules_.addAll(other.rules_);
            }
            onChanged();
          }
        } else {
          if (!other.rules_.isEmpty()) {
            if (rulesBuilder_.isEmpty()) {
              rulesBuilder_.dispose();
              rulesBuilder_ = null;
              rules_ = other.rules_;
              bitField0_ = (bitField0_ & ~0x00000002);
              rulesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getRulesFieldBuilder() : null;
            } else {
              rulesBuilder_.addAllMessages(other.rules_);
            }
          }
        }
        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 {
        proto.Module.ModuleTaintWrapper parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.Module.ModuleTaintWrapper) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private proto.Ast.AstNode node_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> nodeBuilder_;
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public boolean hasNode() {
        return nodeBuilder_ != null || node_ != null;
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public proto.Ast.AstNode getNode() {
        if (nodeBuilder_ == null) {
          return node_ == null ? proto.Ast.AstNode.getDefaultInstance() : node_;
        } else {
          return nodeBuilder_.getMessage();
        }
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public Builder setNode(proto.Ast.AstNode value) {
        if (nodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          node_ = value;
          onChanged();
        } else {
          nodeBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public Builder setNode(
          proto.Ast.AstNode.Builder builderForValue) {
        if (nodeBuilder_ == null) {
          node_ = builderForValue.build();
          onChanged();
        } else {
          nodeBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public Builder mergeNode(proto.Ast.AstNode value) {
        if (nodeBuilder_ == null) {
          if (node_ != null) {
            node_ =
              proto.Ast.AstNode.newBuilder(node_).mergeFrom(value).buildPartial();
          } else {
            node_ = value;
          }
          onChanged();
        } else {
          nodeBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public Builder clearNode() {
        if (nodeBuilder_ == null) {
          node_ = null;
          onChanged();
        } else {
          node_ = null;
          nodeBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public proto.Ast.AstNode.Builder getNodeBuilder() {
        
        onChanged();
        return getNodeFieldBuilder().getBuilder();
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      public proto.Ast.AstNodeOrBuilder getNodeOrBuilder() {
        if (nodeBuilder_ != null) {
          return nodeBuilder_.getMessageOrBuilder();
        } else {
          return node_ == null ?
              proto.Ast.AstNode.getDefaultInstance() : node_;
        }
      }
      /**
       * <code>.proto.AstNode node = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> 
          getNodeFieldBuilder() {
        if (nodeBuilder_ == null) {
          nodeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder>(
                  getNode(),
                  getParentForChildren(),
                  isClean());
          node_ = null;
        }
        return nodeBuilder_;
      }

      private java.util.List<proto.Module.ModuleTaintWrapper.TaintRule> rules_ =
        java.util.Collections.emptyList();
      private void ensureRulesIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          rules_ = new java.util.ArrayList<proto.Module.ModuleTaintWrapper.TaintRule>(rules_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleTaintWrapper.TaintRule, proto.Module.ModuleTaintWrapper.TaintRule.Builder, proto.Module.ModuleTaintWrapper.TaintRuleOrBuilder> rulesBuilder_;

      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
       */
      public java.util.List<proto.Module.ModuleTaintWrapper.TaintRule> getRulesList() {
        if (rulesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(rules_);
        } else {
          return rulesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
       */
      public int getRulesCount() {
        if (rulesBuilder_ == null) {
          return rules_.size();
        } else {
          return rulesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
       */
      public proto.Module.ModuleTaintWrapper.TaintRule getRules(int index) {
        if (rulesBuilder_ == null) {
          return rules_.get(index);
        } else {
          return rulesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
       */
      public Builder setRules(
          int index, proto.Module.ModuleTaintWrapper.TaintRule value) {
        if (rulesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRulesIsMutable();
          rules_.set(index, value);
          onChanged();
        } else {
          rulesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
       */
      public Builder setRules(
          int index, proto.Module.ModuleTaintWrapper.TaintRule.Builder builderForValue) {
        if (rulesBuilder_ == null) {
          ensureRulesIsMutable();
          rules_.set(index, builderForValue.build());
          onChanged();
        } else {
          rulesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
       */
      public Builder addRules(proto.Module.ModuleTaintWrapper.TaintRule value) {
        if (rulesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRulesIsMutable();
          rules_.add(value);
          onChanged();
        } else {
          rulesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
       */
      public Builder addRules(
          int index, proto.Module.ModuleTaintWrapper.TaintRule value) {
        if (rulesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRulesIsMutable();
          rules_.add(index, value);
          onChanged();
        } else {
          rulesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
       */
      public Builder addRules(
          proto.Module.ModuleTaintWrapper.TaintRule.Builder builderForValue) {
        if (rulesBuilder_ == null) {
          ensureRulesIsMutable();
          rules_.add(builderForValue.build());
          onChanged();
        } else {
          rulesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
       */
      public Builder addRules(
          int index, proto.Module.ModuleTaintWrapper.TaintRule.Builder builderForValue) {
        if (rulesBuilder_ == null) {
          ensureRulesIsMutable();
          rules_.add(index, builderForValue.build());
          onChanged();
        } else {
          rulesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
       */
      public Builder addAllRules(
          java.lang.Iterable<? extends proto.Module.ModuleTaintWrapper.TaintRule> values) {
        if (rulesBuilder_ == null) {
          ensureRulesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, rules_);
          onChanged();
        } else {
          rulesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
       */
      public Builder clearRules() {
        if (rulesBuilder_ == null) {
          rules_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          rulesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
       */
      public Builder removeRules(int index) {
        if (rulesBuilder_ == null) {
          ensureRulesIsMutable();
          rules_.remove(index);
          onChanged();
        } else {
          rulesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
       */
      public proto.Module.ModuleTaintWrapper.TaintRule.Builder getRulesBuilder(
          int index) {
        return getRulesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
       */
      public proto.Module.ModuleTaintWrapper.TaintRuleOrBuilder getRulesOrBuilder(
          int index) {
        if (rulesBuilder_ == null) {
          return rules_.get(index);  } else {
          return rulesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
       */
      public java.util.List<? extends proto.Module.ModuleTaintWrapper.TaintRuleOrBuilder> 
           getRulesOrBuilderList() {
        if (rulesBuilder_ != null) {
          return rulesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(rules_);
        }
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
       */
      public proto.Module.ModuleTaintWrapper.TaintRule.Builder addRulesBuilder() {
        return getRulesFieldBuilder().addBuilder(
            proto.Module.ModuleTaintWrapper.TaintRule.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
       */
      public proto.Module.ModuleTaintWrapper.TaintRule.Builder addRulesBuilder(
          int index) {
        return getRulesFieldBuilder().addBuilder(
            index, proto.Module.ModuleTaintWrapper.TaintRule.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper.TaintRule rules = 2;</code>
       */
      public java.util.List<proto.Module.ModuleTaintWrapper.TaintRule.Builder> 
           getRulesBuilderList() {
        return getRulesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleTaintWrapper.TaintRule, proto.Module.ModuleTaintWrapper.TaintRule.Builder, proto.Module.ModuleTaintWrapper.TaintRuleOrBuilder> 
          getRulesFieldBuilder() {
        if (rulesBuilder_ == null) {
          rulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Module.ModuleTaintWrapper.TaintRule, proto.Module.ModuleTaintWrapper.TaintRule.Builder, proto.Module.ModuleTaintWrapper.TaintRuleOrBuilder>(
                  rules_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          rules_ = null;
        }
        return rulesBuilder_;
      }
      @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:proto.ModuleTaintWrapper)
    }

    // @@protoc_insertion_point(class_scope:proto.ModuleTaintWrapper)
    private static final proto.Module.ModuleTaintWrapper DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new proto.Module.ModuleTaintWrapper();
    }

    public static proto.Module.ModuleTaintWrapper getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public proto.Module.ModuleTaintWrapper getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ModuleFlowOrBuilder extends
      // @@protoc_insertion_point(interface_extends:proto.ModuleFlow)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.proto.AstNode source = 1;</code>
     */
    boolean hasSource();
    /**
     * <code>.proto.AstNode source = 1;</code>
     */
    proto.Ast.AstNode getSource();
    /**
     * <code>.proto.AstNode source = 1;</code>
     */
    proto.Ast.AstNodeOrBuilder getSourceOrBuilder();

    /**
     * <code>repeated .proto.AstNode hops = 2;</code>
     */
    java.util.List<proto.Ast.AstNode> 
        getHopsList();
    /**
     * <code>repeated .proto.AstNode hops = 2;</code>
     */
    proto.Ast.AstNode getHops(int index);
    /**
     * <code>repeated .proto.AstNode hops = 2;</code>
     */
    int getHopsCount();
    /**
     * <code>repeated .proto.AstNode hops = 2;</code>
     */
    java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
        getHopsOrBuilderList();
    /**
     * <code>repeated .proto.AstNode hops = 2;</code>
     */
    proto.Ast.AstNodeOrBuilder getHopsOrBuilder(
        int index);

    /**
     * <code>.proto.AstNode sink = 3;</code>
     */
    boolean hasSink();
    /**
     * <code>.proto.AstNode sink = 3;</code>
     */
    proto.Ast.AstNode getSink();
    /**
     * <code>.proto.AstNode sink = 3;</code>
     */
    proto.Ast.AstNodeOrBuilder getSinkOrBuilder();

    /**
     * <code>.proto.ModuleFlow.FlowInfo info = 4;</code>
     */
    boolean hasInfo();
    /**
     * <code>.proto.ModuleFlow.FlowInfo info = 4;</code>
     */
    proto.Module.ModuleFlow.FlowInfo getInfo();
    /**
     * <code>.proto.ModuleFlow.FlowInfo info = 4;</code>
     */
    proto.Module.ModuleFlow.FlowInfoOrBuilder getInfoOrBuilder();
  }
  /**
   * <pre>
   **
   * FIXME: label flows/dangers as stealer, backdoor and sabotage behaviors.
   * stealer can be: read from sensitive locations and send to internet
   * backdoor can be: read information from file or internet and evaluate/execute
   * sabotage can be: remove/encrypt files outside own folder
   * </pre>
   *
   * Protobuf type {@code proto.ModuleFlow}
   */
  public  static final class ModuleFlow extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.ModuleFlow)
      ModuleFlowOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ModuleFlow.newBuilder() to construct.
    private ModuleFlow(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ModuleFlow() {
      hops_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ModuleFlow(
        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: {
              proto.Ast.AstNode.Builder subBuilder = null;
              if (source_ != null) {
                subBuilder = source_.toBuilder();
              }
              source_ = input.readMessage(proto.Ast.AstNode.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(source_);
                source_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                hops_ = new java.util.ArrayList<proto.Ast.AstNode>();
                mutable_bitField0_ |= 0x00000002;
              }
              hops_.add(
                  input.readMessage(proto.Ast.AstNode.parser(), extensionRegistry));
              break;
            }
            case 26: {
              proto.Ast.AstNode.Builder subBuilder = null;
              if (sink_ != null) {
                subBuilder = sink_.toBuilder();
              }
              sink_ = input.readMessage(proto.Ast.AstNode.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(sink_);
                sink_ = subBuilder.buildPartial();
              }

              break;
            }
            case 34: {
              proto.Module.ModuleFlow.FlowInfo.Builder subBuilder = null;
              if (info_ != null) {
                subBuilder = info_.toBuilder();
              }
              info_ = input.readMessage(proto.Module.ModuleFlow.FlowInfo.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(info_);
                info_ = 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_ & 0x00000002) == 0x00000002)) {
          hops_ = java.util.Collections.unmodifiableList(hops_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.Module.internal_static_proto_ModuleFlow_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.Module.internal_static_proto_ModuleFlow_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.Module.ModuleFlow.class, proto.Module.ModuleFlow.Builder.class);
    }

    public interface FlowInfoOrBuilder extends
        // @@protoc_insertion_point(interface_extends:proto.ModuleFlow.FlowInfo)
        com.google.protobuf.MessageOrBuilder {

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

      /**
       * <code>string cwe = 2;</code>
       */
      java.lang.String getCwe();
      /**
       * <code>string cwe = 2;</code>
       */
      com.google.protobuf.ByteString
          getCweBytes();

      /**
       * <code>string type = 3;</code>
       */
      java.lang.String getType();
      /**
       * <code>string type = 3;</code>
       */
      com.google.protobuf.ByteString
          getTypeBytes();
    }
    /**
     * Protobuf type {@code proto.ModuleFlow.FlowInfo}
     */
    public  static final class FlowInfo extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:proto.ModuleFlow.FlowInfo)
        FlowInfoOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use FlowInfo.newBuilder() to construct.
      private FlowInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private FlowInfo() {
        name_ = "";
        cwe_ = "";
        type_ = "";
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private FlowInfo(
          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();

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

                type_ = 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 proto.Module.internal_static_proto_ModuleFlow_FlowInfo_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.Module.internal_static_proto_ModuleFlow_FlowInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.Module.ModuleFlow.FlowInfo.class, proto.Module.ModuleFlow.FlowInfo.Builder.class);
      }

      public static final int NAME_FIELD_NUMBER = 1;
      private volatile java.lang.Object name_;
      /**
       * <code>string name = 1;</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;</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 CWE_FIELD_NUMBER = 2;
      private volatile java.lang.Object cwe_;
      /**
       * <code>string cwe = 2;</code>
       */
      public java.lang.String getCwe() {
        java.lang.Object ref = cwe_;
        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();
          cwe_ = s;
          return s;
        }
      }
      /**
       * <code>string cwe = 2;</code>
       */
      public com.google.protobuf.ByteString
          getCweBytes() {
        java.lang.Object ref = cwe_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          cwe_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int TYPE_FIELD_NUMBER = 3;
      private volatile java.lang.Object type_;
      /**
       * <code>string type = 3;</code>
       */
      public java.lang.String getType() {
        java.lang.Object ref = type_;
        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();
          type_ = s;
          return s;
        }
      }
      /**
       * <code>string type = 3;</code>
       */
      public com.google.protobuf.ByteString
          getTypeBytes() {
        java.lang.Object ref = type_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          type_ = 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 (!getNameBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
        }
        if (!getCweBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 2, cwe_);
        }
        if (!getTypeBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 3, type_);
        }
        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 (!getCweBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, cwe_);
        }
        if (!getTypeBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, type_);
        }
        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 proto.Module.ModuleFlow.FlowInfo)) {
          return super.equals(obj);
        }
        proto.Module.ModuleFlow.FlowInfo other = (proto.Module.ModuleFlow.FlowInfo) obj;

        boolean result = true;
        result = result && getName()
            .equals(other.getName());
        result = result && getCwe()
            .equals(other.getCwe());
        result = result && getType()
            .equals(other.getType());
        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) + CWE_FIELD_NUMBER;
        hash = (53 * hash) + getCwe().hashCode();
        hash = (37 * hash) + TYPE_FIELD_NUMBER;
        hash = (53 * hash) + getType().hashCode();
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

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

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return proto.Module.internal_static_proto_ModuleFlow_FlowInfo_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  proto.Module.ModuleFlow.FlowInfo.class, proto.Module.ModuleFlow.FlowInfo.Builder.class);
        }

        // Construct using proto.Module.ModuleFlow.FlowInfo.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_ = "";

          cwe_ = "";

          type_ = "";

          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return proto.Module.internal_static_proto_ModuleFlow_FlowInfo_descriptor;
        }

        @java.lang.Override
        public proto.Module.ModuleFlow.FlowInfo getDefaultInstanceForType() {
          return proto.Module.ModuleFlow.FlowInfo.getDefaultInstance();
        }

        @java.lang.Override
        public proto.Module.ModuleFlow.FlowInfo build() {
          proto.Module.ModuleFlow.FlowInfo result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public proto.Module.ModuleFlow.FlowInfo buildPartial() {
          proto.Module.ModuleFlow.FlowInfo result = new proto.Module.ModuleFlow.FlowInfo(this);
          result.name_ = name_;
          result.cwe_ = cwe_;
          result.type_ = type_;
          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 proto.Module.ModuleFlow.FlowInfo) {
            return mergeFrom((proto.Module.ModuleFlow.FlowInfo)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(proto.Module.ModuleFlow.FlowInfo other) {
          if (other == proto.Module.ModuleFlow.FlowInfo.getDefaultInstance()) return this;
          if (!other.getName().isEmpty()) {
            name_ = other.name_;
            onChanged();
          }
          if (!other.getCwe().isEmpty()) {
            cwe_ = other.cwe_;
            onChanged();
          }
          if (!other.getType().isEmpty()) {
            type_ = other.type_;
            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 {
          proto.Module.ModuleFlow.FlowInfo parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (proto.Module.ModuleFlow.FlowInfo) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }

        private java.lang.Object name_ = "";
        /**
         * <code>string name = 1;</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;</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;</code>
         */
        public Builder setName(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          name_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>string name = 1;</code>
         */
        public Builder clearName() {
          
          name_ = getDefaultInstance().getName();
          onChanged();
          return this;
        }
        /**
         * <code>string name = 1;</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 cwe_ = "";
        /**
         * <code>string cwe = 2;</code>
         */
        public java.lang.String getCwe() {
          java.lang.Object ref = cwe_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            cwe_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>string cwe = 2;</code>
         */
        public com.google.protobuf.ByteString
            getCweBytes() {
          java.lang.Object ref = cwe_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            cwe_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>string cwe = 2;</code>
         */
        public Builder setCwe(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          cwe_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>string cwe = 2;</code>
         */
        public Builder clearCwe() {
          
          cwe_ = getDefaultInstance().getCwe();
          onChanged();
          return this;
        }
        /**
         * <code>string cwe = 2;</code>
         */
        public Builder setCweBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
          
          cwe_ = value;
          onChanged();
          return this;
        }

        private java.lang.Object type_ = "";
        /**
         * <code>string type = 3;</code>
         */
        public java.lang.String getType() {
          java.lang.Object ref = type_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            type_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>string type = 3;</code>
         */
        public com.google.protobuf.ByteString
            getTypeBytes() {
          java.lang.Object ref = type_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            type_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>string type = 3;</code>
         */
        public Builder setType(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          type_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>string type = 3;</code>
         */
        public Builder clearType() {
          
          type_ = getDefaultInstance().getType();
          onChanged();
          return this;
        }
        /**
         * <code>string type = 3;</code>
         */
        public Builder setTypeBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
          
          type_ = 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:proto.ModuleFlow.FlowInfo)
      }

      // @@protoc_insertion_point(class_scope:proto.ModuleFlow.FlowInfo)
      private static final proto.Module.ModuleFlow.FlowInfo DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new proto.Module.ModuleFlow.FlowInfo();
      }

      public static proto.Module.ModuleFlow.FlowInfo getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

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

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

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

      @java.lang.Override
      public proto.Module.ModuleFlow.FlowInfo getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int SOURCE_FIELD_NUMBER = 1;
    private proto.Ast.AstNode source_;
    /**
     * <code>.proto.AstNode source = 1;</code>
     */
    public boolean hasSource() {
      return source_ != null;
    }
    /**
     * <code>.proto.AstNode source = 1;</code>
     */
    public proto.Ast.AstNode getSource() {
      return source_ == null ? proto.Ast.AstNode.getDefaultInstance() : source_;
    }
    /**
     * <code>.proto.AstNode source = 1;</code>
     */
    public proto.Ast.AstNodeOrBuilder getSourceOrBuilder() {
      return getSource();
    }

    public static final int HOPS_FIELD_NUMBER = 2;
    private java.util.List<proto.Ast.AstNode> hops_;
    /**
     * <code>repeated .proto.AstNode hops = 2;</code>
     */
    public java.util.List<proto.Ast.AstNode> getHopsList() {
      return hops_;
    }
    /**
     * <code>repeated .proto.AstNode hops = 2;</code>
     */
    public java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
        getHopsOrBuilderList() {
      return hops_;
    }
    /**
     * <code>repeated .proto.AstNode hops = 2;</code>
     */
    public int getHopsCount() {
      return hops_.size();
    }
    /**
     * <code>repeated .proto.AstNode hops = 2;</code>
     */
    public proto.Ast.AstNode getHops(int index) {
      return hops_.get(index);
    }
    /**
     * <code>repeated .proto.AstNode hops = 2;</code>
     */
    public proto.Ast.AstNodeOrBuilder getHopsOrBuilder(
        int index) {
      return hops_.get(index);
    }

    public static final int SINK_FIELD_NUMBER = 3;
    private proto.Ast.AstNode sink_;
    /**
     * <code>.proto.AstNode sink = 3;</code>
     */
    public boolean hasSink() {
      return sink_ != null;
    }
    /**
     * <code>.proto.AstNode sink = 3;</code>
     */
    public proto.Ast.AstNode getSink() {
      return sink_ == null ? proto.Ast.AstNode.getDefaultInstance() : sink_;
    }
    /**
     * <code>.proto.AstNode sink = 3;</code>
     */
    public proto.Ast.AstNodeOrBuilder getSinkOrBuilder() {
      return getSink();
    }

    public static final int INFO_FIELD_NUMBER = 4;
    private proto.Module.ModuleFlow.FlowInfo info_;
    /**
     * <code>.proto.ModuleFlow.FlowInfo info = 4;</code>
     */
    public boolean hasInfo() {
      return info_ != null;
    }
    /**
     * <code>.proto.ModuleFlow.FlowInfo info = 4;</code>
     */
    public proto.Module.ModuleFlow.FlowInfo getInfo() {
      return info_ == null ? proto.Module.ModuleFlow.FlowInfo.getDefaultInstance() : info_;
    }
    /**
     * <code>.proto.ModuleFlow.FlowInfo info = 4;</code>
     */
    public proto.Module.ModuleFlow.FlowInfoOrBuilder getInfoOrBuilder() {
      return getInfo();
    }

    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 (source_ != null) {
        output.writeMessage(1, getSource());
      }
      for (int i = 0; i < hops_.size(); i++) {
        output.writeMessage(2, hops_.get(i));
      }
      if (sink_ != null) {
        output.writeMessage(3, getSink());
      }
      if (info_ != null) {
        output.writeMessage(4, getInfo());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (source_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getSource());
      }
      for (int i = 0; i < hops_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, hops_.get(i));
      }
      if (sink_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getSink());
      }
      if (info_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getInfo());
      }
      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 proto.Module.ModuleFlow)) {
        return super.equals(obj);
      }
      proto.Module.ModuleFlow other = (proto.Module.ModuleFlow) obj;

      boolean result = true;
      result = result && (hasSource() == other.hasSource());
      if (hasSource()) {
        result = result && getSource()
            .equals(other.getSource());
      }
      result = result && getHopsList()
          .equals(other.getHopsList());
      result = result && (hasSink() == other.hasSink());
      if (hasSink()) {
        result = result && getSink()
            .equals(other.getSink());
      }
      result = result && (hasInfo() == other.hasInfo());
      if (hasInfo()) {
        result = result && getInfo()
            .equals(other.getInfo());
      }
      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 (hasSource()) {
        hash = (37 * hash) + SOURCE_FIELD_NUMBER;
        hash = (53 * hash) + getSource().hashCode();
      }
      if (getHopsCount() > 0) {
        hash = (37 * hash) + HOPS_FIELD_NUMBER;
        hash = (53 * hash) + getHopsList().hashCode();
      }
      if (hasSink()) {
        hash = (37 * hash) + SINK_FIELD_NUMBER;
        hash = (53 * hash) + getSink().hashCode();
      }
      if (hasInfo()) {
        hash = (37 * hash) + INFO_FIELD_NUMBER;
        hash = (53 * hash) + getInfo().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.Module.ModuleFlow parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Module.ModuleFlow parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Module.ModuleFlow parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Module.ModuleFlow parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Module.ModuleFlow parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Module.ModuleFlow parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Module.ModuleFlow parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Module.ModuleFlow 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 proto.Module.ModuleFlow parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.Module.ModuleFlow 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 proto.Module.ModuleFlow parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Module.ModuleFlow 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(proto.Module.ModuleFlow 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>
     **
     * FIXME: label flows/dangers as stealer, backdoor and sabotage behaviors.
     * stealer can be: read from sensitive locations and send to internet
     * backdoor can be: read information from file or internet and evaluate/execute
     * sabotage can be: remove/encrypt files outside own folder
     * </pre>
     *
     * Protobuf type {@code proto.ModuleFlow}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.ModuleFlow)
        proto.Module.ModuleFlowOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.Module.internal_static_proto_ModuleFlow_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.Module.internal_static_proto_ModuleFlow_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.Module.ModuleFlow.class, proto.Module.ModuleFlow.Builder.class);
      }

      // Construct using proto.Module.ModuleFlow.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getHopsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (sourceBuilder_ == null) {
          source_ = null;
        } else {
          source_ = null;
          sourceBuilder_ = null;
        }
        if (hopsBuilder_ == null) {
          hops_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          hopsBuilder_.clear();
        }
        if (sinkBuilder_ == null) {
          sink_ = null;
        } else {
          sink_ = null;
          sinkBuilder_ = null;
        }
        if (infoBuilder_ == null) {
          info_ = null;
        } else {
          info_ = null;
          infoBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return proto.Module.internal_static_proto_ModuleFlow_descriptor;
      }

      @java.lang.Override
      public proto.Module.ModuleFlow getDefaultInstanceForType() {
        return proto.Module.ModuleFlow.getDefaultInstance();
      }

      @java.lang.Override
      public proto.Module.ModuleFlow build() {
        proto.Module.ModuleFlow result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public proto.Module.ModuleFlow buildPartial() {
        proto.Module.ModuleFlow result = new proto.Module.ModuleFlow(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (sourceBuilder_ == null) {
          result.source_ = source_;
        } else {
          result.source_ = sourceBuilder_.build();
        }
        if (hopsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            hops_ = java.util.Collections.unmodifiableList(hops_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.hops_ = hops_;
        } else {
          result.hops_ = hopsBuilder_.build();
        }
        if (sinkBuilder_ == null) {
          result.sink_ = sink_;
        } else {
          result.sink_ = sinkBuilder_.build();
        }
        if (infoBuilder_ == null) {
          result.info_ = info_;
        } else {
          result.info_ = infoBuilder_.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 proto.Module.ModuleFlow) {
          return mergeFrom((proto.Module.ModuleFlow)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.Module.ModuleFlow other) {
        if (other == proto.Module.ModuleFlow.getDefaultInstance()) return this;
        if (other.hasSource()) {
          mergeSource(other.getSource());
        }
        if (hopsBuilder_ == null) {
          if (!other.hops_.isEmpty()) {
            if (hops_.isEmpty()) {
              hops_ = other.hops_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureHopsIsMutable();
              hops_.addAll(other.hops_);
            }
            onChanged();
          }
        } else {
          if (!other.hops_.isEmpty()) {
            if (hopsBuilder_.isEmpty()) {
              hopsBuilder_.dispose();
              hopsBuilder_ = null;
              hops_ = other.hops_;
              bitField0_ = (bitField0_ & ~0x00000002);
              hopsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getHopsFieldBuilder() : null;
            } else {
              hopsBuilder_.addAllMessages(other.hops_);
            }
          }
        }
        if (other.hasSink()) {
          mergeSink(other.getSink());
        }
        if (other.hasInfo()) {
          mergeInfo(other.getInfo());
        }
        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 {
        proto.Module.ModuleFlow parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.Module.ModuleFlow) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private proto.Ast.AstNode source_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> sourceBuilder_;
      /**
       * <code>.proto.AstNode source = 1;</code>
       */
      public boolean hasSource() {
        return sourceBuilder_ != null || source_ != null;
      }
      /**
       * <code>.proto.AstNode source = 1;</code>
       */
      public proto.Ast.AstNode getSource() {
        if (sourceBuilder_ == null) {
          return source_ == null ? proto.Ast.AstNode.getDefaultInstance() : source_;
        } else {
          return sourceBuilder_.getMessage();
        }
      }
      /**
       * <code>.proto.AstNode source = 1;</code>
       */
      public Builder setSource(proto.Ast.AstNode value) {
        if (sourceBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          source_ = value;
          onChanged();
        } else {
          sourceBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.proto.AstNode source = 1;</code>
       */
      public Builder setSource(
          proto.Ast.AstNode.Builder builderForValue) {
        if (sourceBuilder_ == null) {
          source_ = builderForValue.build();
          onChanged();
        } else {
          sourceBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.proto.AstNode source = 1;</code>
       */
      public Builder mergeSource(proto.Ast.AstNode value) {
        if (sourceBuilder_ == null) {
          if (source_ != null) {
            source_ =
              proto.Ast.AstNode.newBuilder(source_).mergeFrom(value).buildPartial();
          } else {
            source_ = value;
          }
          onChanged();
        } else {
          sourceBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.proto.AstNode source = 1;</code>
       */
      public Builder clearSource() {
        if (sourceBuilder_ == null) {
          source_ = null;
          onChanged();
        } else {
          source_ = null;
          sourceBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.proto.AstNode source = 1;</code>
       */
      public proto.Ast.AstNode.Builder getSourceBuilder() {
        
        onChanged();
        return getSourceFieldBuilder().getBuilder();
      }
      /**
       * <code>.proto.AstNode source = 1;</code>
       */
      public proto.Ast.AstNodeOrBuilder getSourceOrBuilder() {
        if (sourceBuilder_ != null) {
          return sourceBuilder_.getMessageOrBuilder();
        } else {
          return source_ == null ?
              proto.Ast.AstNode.getDefaultInstance() : source_;
        }
      }
      /**
       * <code>.proto.AstNode source = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> 
          getSourceFieldBuilder() {
        if (sourceBuilder_ == null) {
          sourceBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder>(
                  getSource(),
                  getParentForChildren(),
                  isClean());
          source_ = null;
        }
        return sourceBuilder_;
      }

      private java.util.List<proto.Ast.AstNode> hops_ =
        java.util.Collections.emptyList();
      private void ensureHopsIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          hops_ = new java.util.ArrayList<proto.Ast.AstNode>(hops_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> hopsBuilder_;

      /**
       * <code>repeated .proto.AstNode hops = 2;</code>
       */
      public java.util.List<proto.Ast.AstNode> getHopsList() {
        if (hopsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(hops_);
        } else {
          return hopsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.AstNode hops = 2;</code>
       */
      public int getHopsCount() {
        if (hopsBuilder_ == null) {
          return hops_.size();
        } else {
          return hopsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.AstNode hops = 2;</code>
       */
      public proto.Ast.AstNode getHops(int index) {
        if (hopsBuilder_ == null) {
          return hops_.get(index);
        } else {
          return hopsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.AstNode hops = 2;</code>
       */
      public Builder setHops(
          int index, proto.Ast.AstNode value) {
        if (hopsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureHopsIsMutable();
          hops_.set(index, value);
          onChanged();
        } else {
          hopsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode hops = 2;</code>
       */
      public Builder setHops(
          int index, proto.Ast.AstNode.Builder builderForValue) {
        if (hopsBuilder_ == null) {
          ensureHopsIsMutable();
          hops_.set(index, builderForValue.build());
          onChanged();
        } else {
          hopsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode hops = 2;</code>
       */
      public Builder addHops(proto.Ast.AstNode value) {
        if (hopsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureHopsIsMutable();
          hops_.add(value);
          onChanged();
        } else {
          hopsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode hops = 2;</code>
       */
      public Builder addHops(
          int index, proto.Ast.AstNode value) {
        if (hopsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureHopsIsMutable();
          hops_.add(index, value);
          onChanged();
        } else {
          hopsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode hops = 2;</code>
       */
      public Builder addHops(
          proto.Ast.AstNode.Builder builderForValue) {
        if (hopsBuilder_ == null) {
          ensureHopsIsMutable();
          hops_.add(builderForValue.build());
          onChanged();
        } else {
          hopsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode hops = 2;</code>
       */
      public Builder addHops(
          int index, proto.Ast.AstNode.Builder builderForValue) {
        if (hopsBuilder_ == null) {
          ensureHopsIsMutable();
          hops_.add(index, builderForValue.build());
          onChanged();
        } else {
          hopsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode hops = 2;</code>
       */
      public Builder addAllHops(
          java.lang.Iterable<? extends proto.Ast.AstNode> values) {
        if (hopsBuilder_ == null) {
          ensureHopsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, hops_);
          onChanged();
        } else {
          hopsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode hops = 2;</code>
       */
      public Builder clearHops() {
        if (hopsBuilder_ == null) {
          hops_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          hopsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode hops = 2;</code>
       */
      public Builder removeHops(int index) {
        if (hopsBuilder_ == null) {
          ensureHopsIsMutable();
          hops_.remove(index);
          onChanged();
        } else {
          hopsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode hops = 2;</code>
       */
      public proto.Ast.AstNode.Builder getHopsBuilder(
          int index) {
        return getHopsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.AstNode hops = 2;</code>
       */
      public proto.Ast.AstNodeOrBuilder getHopsOrBuilder(
          int index) {
        if (hopsBuilder_ == null) {
          return hops_.get(index);  } else {
          return hopsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.AstNode hops = 2;</code>
       */
      public java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
           getHopsOrBuilderList() {
        if (hopsBuilder_ != null) {
          return hopsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(hops_);
        }
      }
      /**
       * <code>repeated .proto.AstNode hops = 2;</code>
       */
      public proto.Ast.AstNode.Builder addHopsBuilder() {
        return getHopsFieldBuilder().addBuilder(
            proto.Ast.AstNode.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.AstNode hops = 2;</code>
       */
      public proto.Ast.AstNode.Builder addHopsBuilder(
          int index) {
        return getHopsFieldBuilder().addBuilder(
            index, proto.Ast.AstNode.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.AstNode hops = 2;</code>
       */
      public java.util.List<proto.Ast.AstNode.Builder> 
           getHopsBuilderList() {
        return getHopsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> 
          getHopsFieldBuilder() {
        if (hopsBuilder_ == null) {
          hopsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder>(
                  hops_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          hops_ = null;
        }
        return hopsBuilder_;
      }

      private proto.Ast.AstNode sink_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> sinkBuilder_;
      /**
       * <code>.proto.AstNode sink = 3;</code>
       */
      public boolean hasSink() {
        return sinkBuilder_ != null || sink_ != null;
      }
      /**
       * <code>.proto.AstNode sink = 3;</code>
       */
      public proto.Ast.AstNode getSink() {
        if (sinkBuilder_ == null) {
          return sink_ == null ? proto.Ast.AstNode.getDefaultInstance() : sink_;
        } else {
          return sinkBuilder_.getMessage();
        }
      }
      /**
       * <code>.proto.AstNode sink = 3;</code>
       */
      public Builder setSink(proto.Ast.AstNode value) {
        if (sinkBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          sink_ = value;
          onChanged();
        } else {
          sinkBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.proto.AstNode sink = 3;</code>
       */
      public Builder setSink(
          proto.Ast.AstNode.Builder builderForValue) {
        if (sinkBuilder_ == null) {
          sink_ = builderForValue.build();
          onChanged();
        } else {
          sinkBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.proto.AstNode sink = 3;</code>
       */
      public Builder mergeSink(proto.Ast.AstNode value) {
        if (sinkBuilder_ == null) {
          if (sink_ != null) {
            sink_ =
              proto.Ast.AstNode.newBuilder(sink_).mergeFrom(value).buildPartial();
          } else {
            sink_ = value;
          }
          onChanged();
        } else {
          sinkBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.proto.AstNode sink = 3;</code>
       */
      public Builder clearSink() {
        if (sinkBuilder_ == null) {
          sink_ = null;
          onChanged();
        } else {
          sink_ = null;
          sinkBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.proto.AstNode sink = 3;</code>
       */
      public proto.Ast.AstNode.Builder getSinkBuilder() {
        
        onChanged();
        return getSinkFieldBuilder().getBuilder();
      }
      /**
       * <code>.proto.AstNode sink = 3;</code>
       */
      public proto.Ast.AstNodeOrBuilder getSinkOrBuilder() {
        if (sinkBuilder_ != null) {
          return sinkBuilder_.getMessageOrBuilder();
        } else {
          return sink_ == null ?
              proto.Ast.AstNode.getDefaultInstance() : sink_;
        }
      }
      /**
       * <code>.proto.AstNode sink = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> 
          getSinkFieldBuilder() {
        if (sinkBuilder_ == null) {
          sinkBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder>(
                  getSink(),
                  getParentForChildren(),
                  isClean());
          sink_ = null;
        }
        return sinkBuilder_;
      }

      private proto.Module.ModuleFlow.FlowInfo info_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Module.ModuleFlow.FlowInfo, proto.Module.ModuleFlow.FlowInfo.Builder, proto.Module.ModuleFlow.FlowInfoOrBuilder> infoBuilder_;
      /**
       * <code>.proto.ModuleFlow.FlowInfo info = 4;</code>
       */
      public boolean hasInfo() {
        return infoBuilder_ != null || info_ != null;
      }
      /**
       * <code>.proto.ModuleFlow.FlowInfo info = 4;</code>
       */
      public proto.Module.ModuleFlow.FlowInfo getInfo() {
        if (infoBuilder_ == null) {
          return info_ == null ? proto.Module.ModuleFlow.FlowInfo.getDefaultInstance() : info_;
        } else {
          return infoBuilder_.getMessage();
        }
      }
      /**
       * <code>.proto.ModuleFlow.FlowInfo info = 4;</code>
       */
      public Builder setInfo(proto.Module.ModuleFlow.FlowInfo value) {
        if (infoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          info_ = value;
          onChanged();
        } else {
          infoBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.proto.ModuleFlow.FlowInfo info = 4;</code>
       */
      public Builder setInfo(
          proto.Module.ModuleFlow.FlowInfo.Builder builderForValue) {
        if (infoBuilder_ == null) {
          info_ = builderForValue.build();
          onChanged();
        } else {
          infoBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.proto.ModuleFlow.FlowInfo info = 4;</code>
       */
      public Builder mergeInfo(proto.Module.ModuleFlow.FlowInfo value) {
        if (infoBuilder_ == null) {
          if (info_ != null) {
            info_ =
              proto.Module.ModuleFlow.FlowInfo.newBuilder(info_).mergeFrom(value).buildPartial();
          } else {
            info_ = value;
          }
          onChanged();
        } else {
          infoBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.proto.ModuleFlow.FlowInfo info = 4;</code>
       */
      public Builder clearInfo() {
        if (infoBuilder_ == null) {
          info_ = null;
          onChanged();
        } else {
          info_ = null;
          infoBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.proto.ModuleFlow.FlowInfo info = 4;</code>
       */
      public proto.Module.ModuleFlow.FlowInfo.Builder getInfoBuilder() {
        
        onChanged();
        return getInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>.proto.ModuleFlow.FlowInfo info = 4;</code>
       */
      public proto.Module.ModuleFlow.FlowInfoOrBuilder getInfoOrBuilder() {
        if (infoBuilder_ != null) {
          return infoBuilder_.getMessageOrBuilder();
        } else {
          return info_ == null ?
              proto.Module.ModuleFlow.FlowInfo.getDefaultInstance() : info_;
        }
      }
      /**
       * <code>.proto.ModuleFlow.FlowInfo info = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Module.ModuleFlow.FlowInfo, proto.Module.ModuleFlow.FlowInfo.Builder, proto.Module.ModuleFlow.FlowInfoOrBuilder> 
          getInfoFieldBuilder() {
        if (infoBuilder_ == null) {
          infoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              proto.Module.ModuleFlow.FlowInfo, proto.Module.ModuleFlow.FlowInfo.Builder, proto.Module.ModuleFlow.FlowInfoOrBuilder>(
                  getInfo(),
                  getParentForChildren(),
                  isClean());
          info_ = null;
        }
        return infoBuilder_;
      }
      @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:proto.ModuleFlow)
    }

    // @@protoc_insertion_point(class_scope:proto.ModuleFlow)
    private static final proto.Module.ModuleFlow DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new proto.Module.ModuleFlow();
    }

    public static proto.Module.ModuleFlow getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public proto.Module.ModuleFlow getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ModuleDangerOrBuilder extends
      // @@protoc_insertion_point(interface_extends:proto.ModuleDanger)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.proto.AstNode danger = 1;</code>
     */
    boolean hasDanger();
    /**
     * <code>.proto.AstNode danger = 1;</code>
     */
    proto.Ast.AstNode getDanger();
    /**
     * <code>.proto.AstNode danger = 1;</code>
     */
    proto.Ast.AstNodeOrBuilder getDangerOrBuilder();

    /**
     * <code>repeated .proto.AstNode slices = 2;</code>
     */
    java.util.List<proto.Ast.AstNode> 
        getSlicesList();
    /**
     * <code>repeated .proto.AstNode slices = 2;</code>
     */
    proto.Ast.AstNode getSlices(int index);
    /**
     * <code>repeated .proto.AstNode slices = 2;</code>
     */
    int getSlicesCount();
    /**
     * <code>repeated .proto.AstNode slices = 2;</code>
     */
    java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
        getSlicesOrBuilderList();
    /**
     * <code>repeated .proto.AstNode slices = 2;</code>
     */
    proto.Ast.AstNodeOrBuilder getSlicesOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code proto.ModuleDanger}
   */
  public  static final class ModuleDanger extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.ModuleDanger)
      ModuleDangerOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ModuleDanger.newBuilder() to construct.
    private ModuleDanger(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ModuleDanger() {
      slices_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ModuleDanger(
        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: {
              proto.Ast.AstNode.Builder subBuilder = null;
              if (danger_ != null) {
                subBuilder = danger_.toBuilder();
              }
              danger_ = input.readMessage(proto.Ast.AstNode.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(danger_);
                danger_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                slices_ = new java.util.ArrayList<proto.Ast.AstNode>();
                mutable_bitField0_ |= 0x00000002;
              }
              slices_.add(
                  input.readMessage(proto.Ast.AstNode.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_ & 0x00000002) == 0x00000002)) {
          slices_ = java.util.Collections.unmodifiableList(slices_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.Module.internal_static_proto_ModuleDanger_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.Module.internal_static_proto_ModuleDanger_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.Module.ModuleDanger.class, proto.Module.ModuleDanger.Builder.class);
    }

    private int bitField0_;
    public static final int DANGER_FIELD_NUMBER = 1;
    private proto.Ast.AstNode danger_;
    /**
     * <code>.proto.AstNode danger = 1;</code>
     */
    public boolean hasDanger() {
      return danger_ != null;
    }
    /**
     * <code>.proto.AstNode danger = 1;</code>
     */
    public proto.Ast.AstNode getDanger() {
      return danger_ == null ? proto.Ast.AstNode.getDefaultInstance() : danger_;
    }
    /**
     * <code>.proto.AstNode danger = 1;</code>
     */
    public proto.Ast.AstNodeOrBuilder getDangerOrBuilder() {
      return getDanger();
    }

    public static final int SLICES_FIELD_NUMBER = 2;
    private java.util.List<proto.Ast.AstNode> slices_;
    /**
     * <code>repeated .proto.AstNode slices = 2;</code>
     */
    public java.util.List<proto.Ast.AstNode> getSlicesList() {
      return slices_;
    }
    /**
     * <code>repeated .proto.AstNode slices = 2;</code>
     */
    public java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
        getSlicesOrBuilderList() {
      return slices_;
    }
    /**
     * <code>repeated .proto.AstNode slices = 2;</code>
     */
    public int getSlicesCount() {
      return slices_.size();
    }
    /**
     * <code>repeated .proto.AstNode slices = 2;</code>
     */
    public proto.Ast.AstNode getSlices(int index) {
      return slices_.get(index);
    }
    /**
     * <code>repeated .proto.AstNode slices = 2;</code>
     */
    public proto.Ast.AstNodeOrBuilder getSlicesOrBuilder(
        int index) {
      return slices_.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 {
      if (danger_ != null) {
        output.writeMessage(1, getDanger());
      }
      for (int i = 0; i < slices_.size(); i++) {
        output.writeMessage(2, slices_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (danger_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getDanger());
      }
      for (int i = 0; i < slices_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, slices_.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 proto.Module.ModuleDanger)) {
        return super.equals(obj);
      }
      proto.Module.ModuleDanger other = (proto.Module.ModuleDanger) obj;

      boolean result = true;
      result = result && (hasDanger() == other.hasDanger());
      if (hasDanger()) {
        result = result && getDanger()
            .equals(other.getDanger());
      }
      result = result && getSlicesList()
          .equals(other.getSlicesList());
      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 (hasDanger()) {
        hash = (37 * hash) + DANGER_FIELD_NUMBER;
        hash = (53 * hash) + getDanger().hashCode();
      }
      if (getSlicesCount() > 0) {
        hash = (37 * hash) + SLICES_FIELD_NUMBER;
        hash = (53 * hash) + getSlicesList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

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

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.Module.internal_static_proto_ModuleDanger_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.Module.ModuleDanger.class, proto.Module.ModuleDanger.Builder.class);
      }

      // Construct using proto.Module.ModuleDanger.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getSlicesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (dangerBuilder_ == null) {
          danger_ = null;
        } else {
          danger_ = null;
          dangerBuilder_ = null;
        }
        if (slicesBuilder_ == null) {
          slices_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          slicesBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return proto.Module.internal_static_proto_ModuleDanger_descriptor;
      }

      @java.lang.Override
      public proto.Module.ModuleDanger getDefaultInstanceForType() {
        return proto.Module.ModuleDanger.getDefaultInstance();
      }

      @java.lang.Override
      public proto.Module.ModuleDanger build() {
        proto.Module.ModuleDanger result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public proto.Module.ModuleDanger buildPartial() {
        proto.Module.ModuleDanger result = new proto.Module.ModuleDanger(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (dangerBuilder_ == null) {
          result.danger_ = danger_;
        } else {
          result.danger_ = dangerBuilder_.build();
        }
        if (slicesBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            slices_ = java.util.Collections.unmodifiableList(slices_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.slices_ = slices_;
        } else {
          result.slices_ = slicesBuilder_.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 proto.Module.ModuleDanger) {
          return mergeFrom((proto.Module.ModuleDanger)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.Module.ModuleDanger other) {
        if (other == proto.Module.ModuleDanger.getDefaultInstance()) return this;
        if (other.hasDanger()) {
          mergeDanger(other.getDanger());
        }
        if (slicesBuilder_ == null) {
          if (!other.slices_.isEmpty()) {
            if (slices_.isEmpty()) {
              slices_ = other.slices_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureSlicesIsMutable();
              slices_.addAll(other.slices_);
            }
            onChanged();
          }
        } else {
          if (!other.slices_.isEmpty()) {
            if (slicesBuilder_.isEmpty()) {
              slicesBuilder_.dispose();
              slicesBuilder_ = null;
              slices_ = other.slices_;
              bitField0_ = (bitField0_ & ~0x00000002);
              slicesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getSlicesFieldBuilder() : null;
            } else {
              slicesBuilder_.addAllMessages(other.slices_);
            }
          }
        }
        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 {
        proto.Module.ModuleDanger parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.Module.ModuleDanger) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private proto.Ast.AstNode danger_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> dangerBuilder_;
      /**
       * <code>.proto.AstNode danger = 1;</code>
       */
      public boolean hasDanger() {
        return dangerBuilder_ != null || danger_ != null;
      }
      /**
       * <code>.proto.AstNode danger = 1;</code>
       */
      public proto.Ast.AstNode getDanger() {
        if (dangerBuilder_ == null) {
          return danger_ == null ? proto.Ast.AstNode.getDefaultInstance() : danger_;
        } else {
          return dangerBuilder_.getMessage();
        }
      }
      /**
       * <code>.proto.AstNode danger = 1;</code>
       */
      public Builder setDanger(proto.Ast.AstNode value) {
        if (dangerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          danger_ = value;
          onChanged();
        } else {
          dangerBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.proto.AstNode danger = 1;</code>
       */
      public Builder setDanger(
          proto.Ast.AstNode.Builder builderForValue) {
        if (dangerBuilder_ == null) {
          danger_ = builderForValue.build();
          onChanged();
        } else {
          dangerBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.proto.AstNode danger = 1;</code>
       */
      public Builder mergeDanger(proto.Ast.AstNode value) {
        if (dangerBuilder_ == null) {
          if (danger_ != null) {
            danger_ =
              proto.Ast.AstNode.newBuilder(danger_).mergeFrom(value).buildPartial();
          } else {
            danger_ = value;
          }
          onChanged();
        } else {
          dangerBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.proto.AstNode danger = 1;</code>
       */
      public Builder clearDanger() {
        if (dangerBuilder_ == null) {
          danger_ = null;
          onChanged();
        } else {
          danger_ = null;
          dangerBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.proto.AstNode danger = 1;</code>
       */
      public proto.Ast.AstNode.Builder getDangerBuilder() {
        
        onChanged();
        return getDangerFieldBuilder().getBuilder();
      }
      /**
       * <code>.proto.AstNode danger = 1;</code>
       */
      public proto.Ast.AstNodeOrBuilder getDangerOrBuilder() {
        if (dangerBuilder_ != null) {
          return dangerBuilder_.getMessageOrBuilder();
        } else {
          return danger_ == null ?
              proto.Ast.AstNode.getDefaultInstance() : danger_;
        }
      }
      /**
       * <code>.proto.AstNode danger = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> 
          getDangerFieldBuilder() {
        if (dangerBuilder_ == null) {
          dangerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder>(
                  getDanger(),
                  getParentForChildren(),
                  isClean());
          danger_ = null;
        }
        return dangerBuilder_;
      }

      private java.util.List<proto.Ast.AstNode> slices_ =
        java.util.Collections.emptyList();
      private void ensureSlicesIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          slices_ = new java.util.ArrayList<proto.Ast.AstNode>(slices_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> slicesBuilder_;

      /**
       * <code>repeated .proto.AstNode slices = 2;</code>
       */
      public java.util.List<proto.Ast.AstNode> getSlicesList() {
        if (slicesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(slices_);
        } else {
          return slicesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.AstNode slices = 2;</code>
       */
      public int getSlicesCount() {
        if (slicesBuilder_ == null) {
          return slices_.size();
        } else {
          return slicesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.AstNode slices = 2;</code>
       */
      public proto.Ast.AstNode getSlices(int index) {
        if (slicesBuilder_ == null) {
          return slices_.get(index);
        } else {
          return slicesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.AstNode slices = 2;</code>
       */
      public Builder setSlices(
          int index, proto.Ast.AstNode value) {
        if (slicesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSlicesIsMutable();
          slices_.set(index, value);
          onChanged();
        } else {
          slicesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode slices = 2;</code>
       */
      public Builder setSlices(
          int index, proto.Ast.AstNode.Builder builderForValue) {
        if (slicesBuilder_ == null) {
          ensureSlicesIsMutable();
          slices_.set(index, builderForValue.build());
          onChanged();
        } else {
          slicesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode slices = 2;</code>
       */
      public Builder addSlices(proto.Ast.AstNode value) {
        if (slicesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSlicesIsMutable();
          slices_.add(value);
          onChanged();
        } else {
          slicesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode slices = 2;</code>
       */
      public Builder addSlices(
          int index, proto.Ast.AstNode value) {
        if (slicesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSlicesIsMutable();
          slices_.add(index, value);
          onChanged();
        } else {
          slicesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode slices = 2;</code>
       */
      public Builder addSlices(
          proto.Ast.AstNode.Builder builderForValue) {
        if (slicesBuilder_ == null) {
          ensureSlicesIsMutable();
          slices_.add(builderForValue.build());
          onChanged();
        } else {
          slicesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode slices = 2;</code>
       */
      public Builder addSlices(
          int index, proto.Ast.AstNode.Builder builderForValue) {
        if (slicesBuilder_ == null) {
          ensureSlicesIsMutable();
          slices_.add(index, builderForValue.build());
          onChanged();
        } else {
          slicesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode slices = 2;</code>
       */
      public Builder addAllSlices(
          java.lang.Iterable<? extends proto.Ast.AstNode> values) {
        if (slicesBuilder_ == null) {
          ensureSlicesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, slices_);
          onChanged();
        } else {
          slicesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode slices = 2;</code>
       */
      public Builder clearSlices() {
        if (slicesBuilder_ == null) {
          slices_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          slicesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode slices = 2;</code>
       */
      public Builder removeSlices(int index) {
        if (slicesBuilder_ == null) {
          ensureSlicesIsMutable();
          slices_.remove(index);
          onChanged();
        } else {
          slicesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.AstNode slices = 2;</code>
       */
      public proto.Ast.AstNode.Builder getSlicesBuilder(
          int index) {
        return getSlicesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.AstNode slices = 2;</code>
       */
      public proto.Ast.AstNodeOrBuilder getSlicesOrBuilder(
          int index) {
        if (slicesBuilder_ == null) {
          return slices_.get(index);  } else {
          return slicesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.AstNode slices = 2;</code>
       */
      public java.util.List<? extends proto.Ast.AstNodeOrBuilder> 
           getSlicesOrBuilderList() {
        if (slicesBuilder_ != null) {
          return slicesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(slices_);
        }
      }
      /**
       * <code>repeated .proto.AstNode slices = 2;</code>
       */
      public proto.Ast.AstNode.Builder addSlicesBuilder() {
        return getSlicesFieldBuilder().addBuilder(
            proto.Ast.AstNode.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.AstNode slices = 2;</code>
       */
      public proto.Ast.AstNode.Builder addSlicesBuilder(
          int index) {
        return getSlicesFieldBuilder().addBuilder(
            index, proto.Ast.AstNode.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.AstNode slices = 2;</code>
       */
      public java.util.List<proto.Ast.AstNode.Builder> 
           getSlicesBuilderList() {
        return getSlicesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder> 
          getSlicesFieldBuilder() {
        if (slicesBuilder_ == null) {
          slicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Ast.AstNode, proto.Ast.AstNode.Builder, proto.Ast.AstNodeOrBuilder>(
                  slices_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          slices_ = null;
        }
        return slicesBuilder_;
      }
      @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:proto.ModuleDanger)
    }

    // @@protoc_insertion_point(class_scope:proto.ModuleDanger)
    private static final proto.Module.ModuleDanger DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new proto.Module.ModuleDanger();
    }

    public static proto.Module.ModuleDanger getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public proto.Module.ModuleDanger getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ModuleSummaryOrBuilder extends
      // @@protoc_insertion_point(interface_extends:proto.ModuleSummary)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.proto.PackageInfo package_info = 1;</code>
     */
    boolean hasPackageInfo();
    /**
     * <code>.proto.PackageInfo package_info = 1;</code>
     */
    proto.Info.PackageInfo getPackageInfo();
    /**
     * <code>.proto.PackageInfo package_info = 1;</code>
     */
    proto.Info.PackageInfoOrBuilder getPackageInfoOrBuilder();

    /**
     * <code>repeated .proto.ModuleSource sources = 2;</code>
     */
    java.util.List<proto.Module.ModuleSource> 
        getSourcesList();
    /**
     * <code>repeated .proto.ModuleSource sources = 2;</code>
     */
    proto.Module.ModuleSource getSources(int index);
    /**
     * <code>repeated .proto.ModuleSource sources = 2;</code>
     */
    int getSourcesCount();
    /**
     * <code>repeated .proto.ModuleSource sources = 2;</code>
     */
    java.util.List<? extends proto.Module.ModuleSourceOrBuilder> 
        getSourcesOrBuilderList();
    /**
     * <code>repeated .proto.ModuleSource sources = 2;</code>
     */
    proto.Module.ModuleSourceOrBuilder getSourcesOrBuilder(
        int index);

    /**
     * <code>repeated .proto.ModuleSink sinks = 3;</code>
     */
    java.util.List<proto.Module.ModuleSink> 
        getSinksList();
    /**
     * <code>repeated .proto.ModuleSink sinks = 3;</code>
     */
    proto.Module.ModuleSink getSinks(int index);
    /**
     * <code>repeated .proto.ModuleSink sinks = 3;</code>
     */
    int getSinksCount();
    /**
     * <code>repeated .proto.ModuleSink sinks = 3;</code>
     */
    java.util.List<? extends proto.Module.ModuleSinkOrBuilder> 
        getSinksOrBuilderList();
    /**
     * <code>repeated .proto.ModuleSink sinks = 3;</code>
     */
    proto.Module.ModuleSinkOrBuilder getSinksOrBuilder(
        int index);

    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
     */
    java.util.List<proto.Module.ModuleTaintWrapper> 
        getTaintWrappersList();
    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
     */
    proto.Module.ModuleTaintWrapper getTaintWrappers(int index);
    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
     */
    int getTaintWrappersCount();
    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
     */
    java.util.List<? extends proto.Module.ModuleTaintWrapperOrBuilder> 
        getTaintWrappersOrBuilderList();
    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
     */
    proto.Module.ModuleTaintWrapperOrBuilder getTaintWrappersOrBuilder(
        int index);
  }
  /**
   * <pre>
   * Summarize new sources, sinks and taint wrappers exposed by the current package, to enable module-based taint analysis
   * </pre>
   *
   * Protobuf type {@code proto.ModuleSummary}
   */
  public  static final class ModuleSummary extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.ModuleSummary)
      ModuleSummaryOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ModuleSummary.newBuilder() to construct.
    private ModuleSummary(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ModuleSummary() {
      sources_ = java.util.Collections.emptyList();
      sinks_ = java.util.Collections.emptyList();
      taintWrappers_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ModuleSummary(
        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: {
              proto.Info.PackageInfo.Builder subBuilder = null;
              if (packageInfo_ != null) {
                subBuilder = packageInfo_.toBuilder();
              }
              packageInfo_ = input.readMessage(proto.Info.PackageInfo.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(packageInfo_);
                packageInfo_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                sources_ = new java.util.ArrayList<proto.Module.ModuleSource>();
                mutable_bitField0_ |= 0x00000002;
              }
              sources_.add(
                  input.readMessage(proto.Module.ModuleSource.parser(), extensionRegistry));
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                sinks_ = new java.util.ArrayList<proto.Module.ModuleSink>();
                mutable_bitField0_ |= 0x00000004;
              }
              sinks_.add(
                  input.readMessage(proto.Module.ModuleSink.parser(), extensionRegistry));
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                taintWrappers_ = new java.util.ArrayList<proto.Module.ModuleTaintWrapper>();
                mutable_bitField0_ |= 0x00000008;
              }
              taintWrappers_.add(
                  input.readMessage(proto.Module.ModuleTaintWrapper.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_ & 0x00000002) == 0x00000002)) {
          sources_ = java.util.Collections.unmodifiableList(sources_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          sinks_ = java.util.Collections.unmodifiableList(sinks_);
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          taintWrappers_ = java.util.Collections.unmodifiableList(taintWrappers_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.Module.internal_static_proto_ModuleSummary_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.Module.internal_static_proto_ModuleSummary_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.Module.ModuleSummary.class, proto.Module.ModuleSummary.Builder.class);
    }

    private int bitField0_;
    public static final int PACKAGE_INFO_FIELD_NUMBER = 1;
    private proto.Info.PackageInfo packageInfo_;
    /**
     * <code>.proto.PackageInfo package_info = 1;</code>
     */
    public boolean hasPackageInfo() {
      return packageInfo_ != null;
    }
    /**
     * <code>.proto.PackageInfo package_info = 1;</code>
     */
    public proto.Info.PackageInfo getPackageInfo() {
      return packageInfo_ == null ? proto.Info.PackageInfo.getDefaultInstance() : packageInfo_;
    }
    /**
     * <code>.proto.PackageInfo package_info = 1;</code>
     */
    public proto.Info.PackageInfoOrBuilder getPackageInfoOrBuilder() {
      return getPackageInfo();
    }

    public static final int SOURCES_FIELD_NUMBER = 2;
    private java.util.List<proto.Module.ModuleSource> sources_;
    /**
     * <code>repeated .proto.ModuleSource sources = 2;</code>
     */
    public java.util.List<proto.Module.ModuleSource> getSourcesList() {
      return sources_;
    }
    /**
     * <code>repeated .proto.ModuleSource sources = 2;</code>
     */
    public java.util.List<? extends proto.Module.ModuleSourceOrBuilder> 
        getSourcesOrBuilderList() {
      return sources_;
    }
    /**
     * <code>repeated .proto.ModuleSource sources = 2;</code>
     */
    public int getSourcesCount() {
      return sources_.size();
    }
    /**
     * <code>repeated .proto.ModuleSource sources = 2;</code>
     */
    public proto.Module.ModuleSource getSources(int index) {
      return sources_.get(index);
    }
    /**
     * <code>repeated .proto.ModuleSource sources = 2;</code>
     */
    public proto.Module.ModuleSourceOrBuilder getSourcesOrBuilder(
        int index) {
      return sources_.get(index);
    }

    public static final int SINKS_FIELD_NUMBER = 3;
    private java.util.List<proto.Module.ModuleSink> sinks_;
    /**
     * <code>repeated .proto.ModuleSink sinks = 3;</code>
     */
    public java.util.List<proto.Module.ModuleSink> getSinksList() {
      return sinks_;
    }
    /**
     * <code>repeated .proto.ModuleSink sinks = 3;</code>
     */
    public java.util.List<? extends proto.Module.ModuleSinkOrBuilder> 
        getSinksOrBuilderList() {
      return sinks_;
    }
    /**
     * <code>repeated .proto.ModuleSink sinks = 3;</code>
     */
    public int getSinksCount() {
      return sinks_.size();
    }
    /**
     * <code>repeated .proto.ModuleSink sinks = 3;</code>
     */
    public proto.Module.ModuleSink getSinks(int index) {
      return sinks_.get(index);
    }
    /**
     * <code>repeated .proto.ModuleSink sinks = 3;</code>
     */
    public proto.Module.ModuleSinkOrBuilder getSinksOrBuilder(
        int index) {
      return sinks_.get(index);
    }

    public static final int TAINT_WRAPPERS_FIELD_NUMBER = 4;
    private java.util.List<proto.Module.ModuleTaintWrapper> taintWrappers_;
    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
     */
    public java.util.List<proto.Module.ModuleTaintWrapper> getTaintWrappersList() {
      return taintWrappers_;
    }
    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
     */
    public java.util.List<? extends proto.Module.ModuleTaintWrapperOrBuilder> 
        getTaintWrappersOrBuilderList() {
      return taintWrappers_;
    }
    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
     */
    public int getTaintWrappersCount() {
      return taintWrappers_.size();
    }
    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
     */
    public proto.Module.ModuleTaintWrapper getTaintWrappers(int index) {
      return taintWrappers_.get(index);
    }
    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
     */
    public proto.Module.ModuleTaintWrapperOrBuilder getTaintWrappersOrBuilder(
        int index) {
      return taintWrappers_.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 {
      if (packageInfo_ != null) {
        output.writeMessage(1, getPackageInfo());
      }
      for (int i = 0; i < sources_.size(); i++) {
        output.writeMessage(2, sources_.get(i));
      }
      for (int i = 0; i < sinks_.size(); i++) {
        output.writeMessage(3, sinks_.get(i));
      }
      for (int i = 0; i < taintWrappers_.size(); i++) {
        output.writeMessage(4, taintWrappers_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (packageInfo_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getPackageInfo());
      }
      for (int i = 0; i < sources_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, sources_.get(i));
      }
      for (int i = 0; i < sinks_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, sinks_.get(i));
      }
      for (int i = 0; i < taintWrappers_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, taintWrappers_.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 proto.Module.ModuleSummary)) {
        return super.equals(obj);
      }
      proto.Module.ModuleSummary other = (proto.Module.ModuleSummary) obj;

      boolean result = true;
      result = result && (hasPackageInfo() == other.hasPackageInfo());
      if (hasPackageInfo()) {
        result = result && getPackageInfo()
            .equals(other.getPackageInfo());
      }
      result = result && getSourcesList()
          .equals(other.getSourcesList());
      result = result && getSinksList()
          .equals(other.getSinksList());
      result = result && getTaintWrappersList()
          .equals(other.getTaintWrappersList());
      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 (hasPackageInfo()) {
        hash = (37 * hash) + PACKAGE_INFO_FIELD_NUMBER;
        hash = (53 * hash) + getPackageInfo().hashCode();
      }
      if (getSourcesCount() > 0) {
        hash = (37 * hash) + SOURCES_FIELD_NUMBER;
        hash = (53 * hash) + getSourcesList().hashCode();
      }
      if (getSinksCount() > 0) {
        hash = (37 * hash) + SINKS_FIELD_NUMBER;
        hash = (53 * hash) + getSinksList().hashCode();
      }
      if (getTaintWrappersCount() > 0) {
        hash = (37 * hash) + TAINT_WRAPPERS_FIELD_NUMBER;
        hash = (53 * hash) + getTaintWrappersList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.Module.ModuleSummary parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Module.ModuleSummary parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Module.ModuleSummary parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Module.ModuleSummary parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Module.ModuleSummary parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Module.ModuleSummary parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Module.ModuleSummary parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Module.ModuleSummary 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 proto.Module.ModuleSummary parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.Module.ModuleSummary 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 proto.Module.ModuleSummary parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Module.ModuleSummary 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(proto.Module.ModuleSummary 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>
     * Summarize new sources, sinks and taint wrappers exposed by the current package, to enable module-based taint analysis
     * </pre>
     *
     * Protobuf type {@code proto.ModuleSummary}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.ModuleSummary)
        proto.Module.ModuleSummaryOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.Module.internal_static_proto_ModuleSummary_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.Module.internal_static_proto_ModuleSummary_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.Module.ModuleSummary.class, proto.Module.ModuleSummary.Builder.class);
      }

      // Construct using proto.Module.ModuleSummary.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getSourcesFieldBuilder();
          getSinksFieldBuilder();
          getTaintWrappersFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (packageInfoBuilder_ == null) {
          packageInfo_ = null;
        } else {
          packageInfo_ = null;
          packageInfoBuilder_ = null;
        }
        if (sourcesBuilder_ == null) {
          sources_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          sourcesBuilder_.clear();
        }
        if (sinksBuilder_ == null) {
          sinks_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          sinksBuilder_.clear();
        }
        if (taintWrappersBuilder_ == null) {
          taintWrappers_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          taintWrappersBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return proto.Module.internal_static_proto_ModuleSummary_descriptor;
      }

      @java.lang.Override
      public proto.Module.ModuleSummary getDefaultInstanceForType() {
        return proto.Module.ModuleSummary.getDefaultInstance();
      }

      @java.lang.Override
      public proto.Module.ModuleSummary build() {
        proto.Module.ModuleSummary result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public proto.Module.ModuleSummary buildPartial() {
        proto.Module.ModuleSummary result = new proto.Module.ModuleSummary(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (packageInfoBuilder_ == null) {
          result.packageInfo_ = packageInfo_;
        } else {
          result.packageInfo_ = packageInfoBuilder_.build();
        }
        if (sourcesBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            sources_ = java.util.Collections.unmodifiableList(sources_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.sources_ = sources_;
        } else {
          result.sources_ = sourcesBuilder_.build();
        }
        if (sinksBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            sinks_ = java.util.Collections.unmodifiableList(sinks_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.sinks_ = sinks_;
        } else {
          result.sinks_ = sinksBuilder_.build();
        }
        if (taintWrappersBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            taintWrappers_ = java.util.Collections.unmodifiableList(taintWrappers_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.taintWrappers_ = taintWrappers_;
        } else {
          result.taintWrappers_ = taintWrappersBuilder_.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 proto.Module.ModuleSummary) {
          return mergeFrom((proto.Module.ModuleSummary)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.Module.ModuleSummary other) {
        if (other == proto.Module.ModuleSummary.getDefaultInstance()) return this;
        if (other.hasPackageInfo()) {
          mergePackageInfo(other.getPackageInfo());
        }
        if (sourcesBuilder_ == null) {
          if (!other.sources_.isEmpty()) {
            if (sources_.isEmpty()) {
              sources_ = other.sources_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureSourcesIsMutable();
              sources_.addAll(other.sources_);
            }
            onChanged();
          }
        } else {
          if (!other.sources_.isEmpty()) {
            if (sourcesBuilder_.isEmpty()) {
              sourcesBuilder_.dispose();
              sourcesBuilder_ = null;
              sources_ = other.sources_;
              bitField0_ = (bitField0_ & ~0x00000002);
              sourcesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getSourcesFieldBuilder() : null;
            } else {
              sourcesBuilder_.addAllMessages(other.sources_);
            }
          }
        }
        if (sinksBuilder_ == null) {
          if (!other.sinks_.isEmpty()) {
            if (sinks_.isEmpty()) {
              sinks_ = other.sinks_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureSinksIsMutable();
              sinks_.addAll(other.sinks_);
            }
            onChanged();
          }
        } else {
          if (!other.sinks_.isEmpty()) {
            if (sinksBuilder_.isEmpty()) {
              sinksBuilder_.dispose();
              sinksBuilder_ = null;
              sinks_ = other.sinks_;
              bitField0_ = (bitField0_ & ~0x00000004);
              sinksBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getSinksFieldBuilder() : null;
            } else {
              sinksBuilder_.addAllMessages(other.sinks_);
            }
          }
        }
        if (taintWrappersBuilder_ == null) {
          if (!other.taintWrappers_.isEmpty()) {
            if (taintWrappers_.isEmpty()) {
              taintWrappers_ = other.taintWrappers_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureTaintWrappersIsMutable();
              taintWrappers_.addAll(other.taintWrappers_);
            }
            onChanged();
          }
        } else {
          if (!other.taintWrappers_.isEmpty()) {
            if (taintWrappersBuilder_.isEmpty()) {
              taintWrappersBuilder_.dispose();
              taintWrappersBuilder_ = null;
              taintWrappers_ = other.taintWrappers_;
              bitField0_ = (bitField0_ & ~0x00000008);
              taintWrappersBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getTaintWrappersFieldBuilder() : null;
            } else {
              taintWrappersBuilder_.addAllMessages(other.taintWrappers_);
            }
          }
        }
        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 {
        proto.Module.ModuleSummary parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.Module.ModuleSummary) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private proto.Info.PackageInfo packageInfo_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Info.PackageInfo, proto.Info.PackageInfo.Builder, proto.Info.PackageInfoOrBuilder> packageInfoBuilder_;
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public boolean hasPackageInfo() {
        return packageInfoBuilder_ != null || packageInfo_ != null;
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public proto.Info.PackageInfo getPackageInfo() {
        if (packageInfoBuilder_ == null) {
          return packageInfo_ == null ? proto.Info.PackageInfo.getDefaultInstance() : packageInfo_;
        } else {
          return packageInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public Builder setPackageInfo(proto.Info.PackageInfo value) {
        if (packageInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          packageInfo_ = value;
          onChanged();
        } else {
          packageInfoBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public Builder setPackageInfo(
          proto.Info.PackageInfo.Builder builderForValue) {
        if (packageInfoBuilder_ == null) {
          packageInfo_ = builderForValue.build();
          onChanged();
        } else {
          packageInfoBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public Builder mergePackageInfo(proto.Info.PackageInfo value) {
        if (packageInfoBuilder_ == null) {
          if (packageInfo_ != null) {
            packageInfo_ =
              proto.Info.PackageInfo.newBuilder(packageInfo_).mergeFrom(value).buildPartial();
          } else {
            packageInfo_ = value;
          }
          onChanged();
        } else {
          packageInfoBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public Builder clearPackageInfo() {
        if (packageInfoBuilder_ == null) {
          packageInfo_ = null;
          onChanged();
        } else {
          packageInfo_ = null;
          packageInfoBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public proto.Info.PackageInfo.Builder getPackageInfoBuilder() {
        
        onChanged();
        return getPackageInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public proto.Info.PackageInfoOrBuilder getPackageInfoOrBuilder() {
        if (packageInfoBuilder_ != null) {
          return packageInfoBuilder_.getMessageOrBuilder();
        } else {
          return packageInfo_ == null ?
              proto.Info.PackageInfo.getDefaultInstance() : packageInfo_;
        }
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Info.PackageInfo, proto.Info.PackageInfo.Builder, proto.Info.PackageInfoOrBuilder> 
          getPackageInfoFieldBuilder() {
        if (packageInfoBuilder_ == null) {
          packageInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              proto.Info.PackageInfo, proto.Info.PackageInfo.Builder, proto.Info.PackageInfoOrBuilder>(
                  getPackageInfo(),
                  getParentForChildren(),
                  isClean());
          packageInfo_ = null;
        }
        return packageInfoBuilder_;
      }

      private java.util.List<proto.Module.ModuleSource> sources_ =
        java.util.Collections.emptyList();
      private void ensureSourcesIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          sources_ = new java.util.ArrayList<proto.Module.ModuleSource>(sources_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleSource, proto.Module.ModuleSource.Builder, proto.Module.ModuleSourceOrBuilder> sourcesBuilder_;

      /**
       * <code>repeated .proto.ModuleSource sources = 2;</code>
       */
      public java.util.List<proto.Module.ModuleSource> getSourcesList() {
        if (sourcesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(sources_);
        } else {
          return sourcesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 2;</code>
       */
      public int getSourcesCount() {
        if (sourcesBuilder_ == null) {
          return sources_.size();
        } else {
          return sourcesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 2;</code>
       */
      public proto.Module.ModuleSource getSources(int index) {
        if (sourcesBuilder_ == null) {
          return sources_.get(index);
        } else {
          return sourcesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 2;</code>
       */
      public Builder setSources(
          int index, proto.Module.ModuleSource value) {
        if (sourcesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSourcesIsMutable();
          sources_.set(index, value);
          onChanged();
        } else {
          sourcesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 2;</code>
       */
      public Builder setSources(
          int index, proto.Module.ModuleSource.Builder builderForValue) {
        if (sourcesBuilder_ == null) {
          ensureSourcesIsMutable();
          sources_.set(index, builderForValue.build());
          onChanged();
        } else {
          sourcesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 2;</code>
       */
      public Builder addSources(proto.Module.ModuleSource value) {
        if (sourcesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSourcesIsMutable();
          sources_.add(value);
          onChanged();
        } else {
          sourcesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 2;</code>
       */
      public Builder addSources(
          int index, proto.Module.ModuleSource value) {
        if (sourcesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSourcesIsMutable();
          sources_.add(index, value);
          onChanged();
        } else {
          sourcesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 2;</code>
       */
      public Builder addSources(
          proto.Module.ModuleSource.Builder builderForValue) {
        if (sourcesBuilder_ == null) {
          ensureSourcesIsMutable();
          sources_.add(builderForValue.build());
          onChanged();
        } else {
          sourcesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 2;</code>
       */
      public Builder addSources(
          int index, proto.Module.ModuleSource.Builder builderForValue) {
        if (sourcesBuilder_ == null) {
          ensureSourcesIsMutable();
          sources_.add(index, builderForValue.build());
          onChanged();
        } else {
          sourcesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 2;</code>
       */
      public Builder addAllSources(
          java.lang.Iterable<? extends proto.Module.ModuleSource> values) {
        if (sourcesBuilder_ == null) {
          ensureSourcesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, sources_);
          onChanged();
        } else {
          sourcesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 2;</code>
       */
      public Builder clearSources() {
        if (sourcesBuilder_ == null) {
          sources_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          sourcesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 2;</code>
       */
      public Builder removeSources(int index) {
        if (sourcesBuilder_ == null) {
          ensureSourcesIsMutable();
          sources_.remove(index);
          onChanged();
        } else {
          sourcesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 2;</code>
       */
      public proto.Module.ModuleSource.Builder getSourcesBuilder(
          int index) {
        return getSourcesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 2;</code>
       */
      public proto.Module.ModuleSourceOrBuilder getSourcesOrBuilder(
          int index) {
        if (sourcesBuilder_ == null) {
          return sources_.get(index);  } else {
          return sourcesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 2;</code>
       */
      public java.util.List<? extends proto.Module.ModuleSourceOrBuilder> 
           getSourcesOrBuilderList() {
        if (sourcesBuilder_ != null) {
          return sourcesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(sources_);
        }
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 2;</code>
       */
      public proto.Module.ModuleSource.Builder addSourcesBuilder() {
        return getSourcesFieldBuilder().addBuilder(
            proto.Module.ModuleSource.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 2;</code>
       */
      public proto.Module.ModuleSource.Builder addSourcesBuilder(
          int index) {
        return getSourcesFieldBuilder().addBuilder(
            index, proto.Module.ModuleSource.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 2;</code>
       */
      public java.util.List<proto.Module.ModuleSource.Builder> 
           getSourcesBuilderList() {
        return getSourcesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleSource, proto.Module.ModuleSource.Builder, proto.Module.ModuleSourceOrBuilder> 
          getSourcesFieldBuilder() {
        if (sourcesBuilder_ == null) {
          sourcesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Module.ModuleSource, proto.Module.ModuleSource.Builder, proto.Module.ModuleSourceOrBuilder>(
                  sources_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          sources_ = null;
        }
        return sourcesBuilder_;
      }

      private java.util.List<proto.Module.ModuleSink> sinks_ =
        java.util.Collections.emptyList();
      private void ensureSinksIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          sinks_ = new java.util.ArrayList<proto.Module.ModuleSink>(sinks_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleSink, proto.Module.ModuleSink.Builder, proto.Module.ModuleSinkOrBuilder> sinksBuilder_;

      /**
       * <code>repeated .proto.ModuleSink sinks = 3;</code>
       */
      public java.util.List<proto.Module.ModuleSink> getSinksList() {
        if (sinksBuilder_ == null) {
          return java.util.Collections.unmodifiableList(sinks_);
        } else {
          return sinksBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 3;</code>
       */
      public int getSinksCount() {
        if (sinksBuilder_ == null) {
          return sinks_.size();
        } else {
          return sinksBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 3;</code>
       */
      public proto.Module.ModuleSink getSinks(int index) {
        if (sinksBuilder_ == null) {
          return sinks_.get(index);
        } else {
          return sinksBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 3;</code>
       */
      public Builder setSinks(
          int index, proto.Module.ModuleSink value) {
        if (sinksBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSinksIsMutable();
          sinks_.set(index, value);
          onChanged();
        } else {
          sinksBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 3;</code>
       */
      public Builder setSinks(
          int index, proto.Module.ModuleSink.Builder builderForValue) {
        if (sinksBuilder_ == null) {
          ensureSinksIsMutable();
          sinks_.set(index, builderForValue.build());
          onChanged();
        } else {
          sinksBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 3;</code>
       */
      public Builder addSinks(proto.Module.ModuleSink value) {
        if (sinksBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSinksIsMutable();
          sinks_.add(value);
          onChanged();
        } else {
          sinksBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 3;</code>
       */
      public Builder addSinks(
          int index, proto.Module.ModuleSink value) {
        if (sinksBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSinksIsMutable();
          sinks_.add(index, value);
          onChanged();
        } else {
          sinksBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 3;</code>
       */
      public Builder addSinks(
          proto.Module.ModuleSink.Builder builderForValue) {
        if (sinksBuilder_ == null) {
          ensureSinksIsMutable();
          sinks_.add(builderForValue.build());
          onChanged();
        } else {
          sinksBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 3;</code>
       */
      public Builder addSinks(
          int index, proto.Module.ModuleSink.Builder builderForValue) {
        if (sinksBuilder_ == null) {
          ensureSinksIsMutable();
          sinks_.add(index, builderForValue.build());
          onChanged();
        } else {
          sinksBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 3;</code>
       */
      public Builder addAllSinks(
          java.lang.Iterable<? extends proto.Module.ModuleSink> values) {
        if (sinksBuilder_ == null) {
          ensureSinksIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, sinks_);
          onChanged();
        } else {
          sinksBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 3;</code>
       */
      public Builder clearSinks() {
        if (sinksBuilder_ == null) {
          sinks_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          sinksBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 3;</code>
       */
      public Builder removeSinks(int index) {
        if (sinksBuilder_ == null) {
          ensureSinksIsMutable();
          sinks_.remove(index);
          onChanged();
        } else {
          sinksBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 3;</code>
       */
      public proto.Module.ModuleSink.Builder getSinksBuilder(
          int index) {
        return getSinksFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 3;</code>
       */
      public proto.Module.ModuleSinkOrBuilder getSinksOrBuilder(
          int index) {
        if (sinksBuilder_ == null) {
          return sinks_.get(index);  } else {
          return sinksBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 3;</code>
       */
      public java.util.List<? extends proto.Module.ModuleSinkOrBuilder> 
           getSinksOrBuilderList() {
        if (sinksBuilder_ != null) {
          return sinksBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(sinks_);
        }
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 3;</code>
       */
      public proto.Module.ModuleSink.Builder addSinksBuilder() {
        return getSinksFieldBuilder().addBuilder(
            proto.Module.ModuleSink.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 3;</code>
       */
      public proto.Module.ModuleSink.Builder addSinksBuilder(
          int index) {
        return getSinksFieldBuilder().addBuilder(
            index, proto.Module.ModuleSink.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 3;</code>
       */
      public java.util.List<proto.Module.ModuleSink.Builder> 
           getSinksBuilderList() {
        return getSinksFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleSink, proto.Module.ModuleSink.Builder, proto.Module.ModuleSinkOrBuilder> 
          getSinksFieldBuilder() {
        if (sinksBuilder_ == null) {
          sinksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Module.ModuleSink, proto.Module.ModuleSink.Builder, proto.Module.ModuleSinkOrBuilder>(
                  sinks_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          sinks_ = null;
        }
        return sinksBuilder_;
      }

      private java.util.List<proto.Module.ModuleTaintWrapper> taintWrappers_ =
        java.util.Collections.emptyList();
      private void ensureTaintWrappersIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          taintWrappers_ = new java.util.ArrayList<proto.Module.ModuleTaintWrapper>(taintWrappers_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleTaintWrapper, proto.Module.ModuleTaintWrapper.Builder, proto.Module.ModuleTaintWrapperOrBuilder> taintWrappersBuilder_;

      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
       */
      public java.util.List<proto.Module.ModuleTaintWrapper> getTaintWrappersList() {
        if (taintWrappersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(taintWrappers_);
        } else {
          return taintWrappersBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
       */
      public int getTaintWrappersCount() {
        if (taintWrappersBuilder_ == null) {
          return taintWrappers_.size();
        } else {
          return taintWrappersBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
       */
      public proto.Module.ModuleTaintWrapper getTaintWrappers(int index) {
        if (taintWrappersBuilder_ == null) {
          return taintWrappers_.get(index);
        } else {
          return taintWrappersBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
       */
      public Builder setTaintWrappers(
          int index, proto.Module.ModuleTaintWrapper value) {
        if (taintWrappersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTaintWrappersIsMutable();
          taintWrappers_.set(index, value);
          onChanged();
        } else {
          taintWrappersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
       */
      public Builder setTaintWrappers(
          int index, proto.Module.ModuleTaintWrapper.Builder builderForValue) {
        if (taintWrappersBuilder_ == null) {
          ensureTaintWrappersIsMutable();
          taintWrappers_.set(index, builderForValue.build());
          onChanged();
        } else {
          taintWrappersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
       */
      public Builder addTaintWrappers(proto.Module.ModuleTaintWrapper value) {
        if (taintWrappersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTaintWrappersIsMutable();
          taintWrappers_.add(value);
          onChanged();
        } else {
          taintWrappersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
       */
      public Builder addTaintWrappers(
          int index, proto.Module.ModuleTaintWrapper value) {
        if (taintWrappersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTaintWrappersIsMutable();
          taintWrappers_.add(index, value);
          onChanged();
        } else {
          taintWrappersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
       */
      public Builder addTaintWrappers(
          proto.Module.ModuleTaintWrapper.Builder builderForValue) {
        if (taintWrappersBuilder_ == null) {
          ensureTaintWrappersIsMutable();
          taintWrappers_.add(builderForValue.build());
          onChanged();
        } else {
          taintWrappersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
       */
      public Builder addTaintWrappers(
          int index, proto.Module.ModuleTaintWrapper.Builder builderForValue) {
        if (taintWrappersBuilder_ == null) {
          ensureTaintWrappersIsMutable();
          taintWrappers_.add(index, builderForValue.build());
          onChanged();
        } else {
          taintWrappersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
       */
      public Builder addAllTaintWrappers(
          java.lang.Iterable<? extends proto.Module.ModuleTaintWrapper> values) {
        if (taintWrappersBuilder_ == null) {
          ensureTaintWrappersIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, taintWrappers_);
          onChanged();
        } else {
          taintWrappersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
       */
      public Builder clearTaintWrappers() {
        if (taintWrappersBuilder_ == null) {
          taintWrappers_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          taintWrappersBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
       */
      public Builder removeTaintWrappers(int index) {
        if (taintWrappersBuilder_ == null) {
          ensureTaintWrappersIsMutable();
          taintWrappers_.remove(index);
          onChanged();
        } else {
          taintWrappersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
       */
      public proto.Module.ModuleTaintWrapper.Builder getTaintWrappersBuilder(
          int index) {
        return getTaintWrappersFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
       */
      public proto.Module.ModuleTaintWrapperOrBuilder getTaintWrappersOrBuilder(
          int index) {
        if (taintWrappersBuilder_ == null) {
          return taintWrappers_.get(index);  } else {
          return taintWrappersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
       */
      public java.util.List<? extends proto.Module.ModuleTaintWrapperOrBuilder> 
           getTaintWrappersOrBuilderList() {
        if (taintWrappersBuilder_ != null) {
          return taintWrappersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(taintWrappers_);
        }
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
       */
      public proto.Module.ModuleTaintWrapper.Builder addTaintWrappersBuilder() {
        return getTaintWrappersFieldBuilder().addBuilder(
            proto.Module.ModuleTaintWrapper.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
       */
      public proto.Module.ModuleTaintWrapper.Builder addTaintWrappersBuilder(
          int index) {
        return getTaintWrappersFieldBuilder().addBuilder(
            index, proto.Module.ModuleTaintWrapper.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 4;</code>
       */
      public java.util.List<proto.Module.ModuleTaintWrapper.Builder> 
           getTaintWrappersBuilderList() {
        return getTaintWrappersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleTaintWrapper, proto.Module.ModuleTaintWrapper.Builder, proto.Module.ModuleTaintWrapperOrBuilder> 
          getTaintWrappersFieldBuilder() {
        if (taintWrappersBuilder_ == null) {
          taintWrappersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Module.ModuleTaintWrapper, proto.Module.ModuleTaintWrapper.Builder, proto.Module.ModuleTaintWrapperOrBuilder>(
                  taintWrappers_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          taintWrappers_ = null;
        }
        return taintWrappersBuilder_;
      }
      @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:proto.ModuleSummary)
    }

    // @@protoc_insertion_point(class_scope:proto.ModuleSummary)
    private static final proto.Module.ModuleSummary DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new proto.Module.ModuleSummary();
    }

    public static proto.Module.ModuleSummary getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public proto.Module.ModuleSummary getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ModuleResultOrBuilder extends
      // @@protoc_insertion_point(interface_extends:proto.ModuleResult)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.proto.PackageInfo package_info = 1;</code>
     */
    boolean hasPackageInfo();
    /**
     * <code>.proto.PackageInfo package_info = 1;</code>
     */
    proto.Info.PackageInfo getPackageInfo();
    /**
     * <code>.proto.PackageInfo package_info = 1;</code>
     */
    proto.Info.PackageInfoOrBuilder getPackageInfoOrBuilder();

    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    java.util.List<proto.Module.ModuleFlow> 
        getFlowsList();
    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    proto.Module.ModuleFlow getFlows(int index);
    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    int getFlowsCount();
    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    java.util.List<? extends proto.Module.ModuleFlowOrBuilder> 
        getFlowsOrBuilderList();
    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    proto.Module.ModuleFlowOrBuilder getFlowsOrBuilder(
        int index);

    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    java.util.List<proto.Module.ModuleDanger> 
        getDangersList();
    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    proto.Module.ModuleDanger getDangers(int index);
    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    int getDangersCount();
    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    java.util.List<? extends proto.Module.ModuleDangerOrBuilder> 
        getDangersOrBuilderList();
    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    proto.Module.ModuleDangerOrBuilder getDangersOrBuilder(
        int index);
  }
  /**
   * <pre>
   * Lists the identified taint flows for the specified module
   * </pre>
   *
   * Protobuf type {@code proto.ModuleResult}
   */
  public  static final class ModuleResult extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.ModuleResult)
      ModuleResultOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ModuleResult.newBuilder() to construct.
    private ModuleResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ModuleResult() {
      flows_ = java.util.Collections.emptyList();
      dangers_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ModuleResult(
        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: {
              proto.Info.PackageInfo.Builder subBuilder = null;
              if (packageInfo_ != null) {
                subBuilder = packageInfo_.toBuilder();
              }
              packageInfo_ = input.readMessage(proto.Info.PackageInfo.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(packageInfo_);
                packageInfo_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                flows_ = new java.util.ArrayList<proto.Module.ModuleFlow>();
                mutable_bitField0_ |= 0x00000002;
              }
              flows_.add(
                  input.readMessage(proto.Module.ModuleFlow.parser(), extensionRegistry));
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                dangers_ = new java.util.ArrayList<proto.Module.ModuleDanger>();
                mutable_bitField0_ |= 0x00000004;
              }
              dangers_.add(
                  input.readMessage(proto.Module.ModuleDanger.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_ & 0x00000002) == 0x00000002)) {
          flows_ = java.util.Collections.unmodifiableList(flows_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          dangers_ = java.util.Collections.unmodifiableList(dangers_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.Module.internal_static_proto_ModuleResult_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.Module.internal_static_proto_ModuleResult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.Module.ModuleResult.class, proto.Module.ModuleResult.Builder.class);
    }

    private int bitField0_;
    public static final int PACKAGE_INFO_FIELD_NUMBER = 1;
    private proto.Info.PackageInfo packageInfo_;
    /**
     * <code>.proto.PackageInfo package_info = 1;</code>
     */
    public boolean hasPackageInfo() {
      return packageInfo_ != null;
    }
    /**
     * <code>.proto.PackageInfo package_info = 1;</code>
     */
    public proto.Info.PackageInfo getPackageInfo() {
      return packageInfo_ == null ? proto.Info.PackageInfo.getDefaultInstance() : packageInfo_;
    }
    /**
     * <code>.proto.PackageInfo package_info = 1;</code>
     */
    public proto.Info.PackageInfoOrBuilder getPackageInfoOrBuilder() {
      return getPackageInfo();
    }

    public static final int FLOWS_FIELD_NUMBER = 2;
    private java.util.List<proto.Module.ModuleFlow> flows_;
    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    public java.util.List<proto.Module.ModuleFlow> getFlowsList() {
      return flows_;
    }
    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    public java.util.List<? extends proto.Module.ModuleFlowOrBuilder> 
        getFlowsOrBuilderList() {
      return flows_;
    }
    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    public int getFlowsCount() {
      return flows_.size();
    }
    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    public proto.Module.ModuleFlow getFlows(int index) {
      return flows_.get(index);
    }
    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    public proto.Module.ModuleFlowOrBuilder getFlowsOrBuilder(
        int index) {
      return flows_.get(index);
    }

    public static final int DANGERS_FIELD_NUMBER = 3;
    private java.util.List<proto.Module.ModuleDanger> dangers_;
    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    public java.util.List<proto.Module.ModuleDanger> getDangersList() {
      return dangers_;
    }
    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    public java.util.List<? extends proto.Module.ModuleDangerOrBuilder> 
        getDangersOrBuilderList() {
      return dangers_;
    }
    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    public int getDangersCount() {
      return dangers_.size();
    }
    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    public proto.Module.ModuleDanger getDangers(int index) {
      return dangers_.get(index);
    }
    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    public proto.Module.ModuleDangerOrBuilder getDangersOrBuilder(
        int index) {
      return dangers_.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 {
      if (packageInfo_ != null) {
        output.writeMessage(1, getPackageInfo());
      }
      for (int i = 0; i < flows_.size(); i++) {
        output.writeMessage(2, flows_.get(i));
      }
      for (int i = 0; i < dangers_.size(); i++) {
        output.writeMessage(3, dangers_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (packageInfo_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getPackageInfo());
      }
      for (int i = 0; i < flows_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, flows_.get(i));
      }
      for (int i = 0; i < dangers_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, dangers_.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 proto.Module.ModuleResult)) {
        return super.equals(obj);
      }
      proto.Module.ModuleResult other = (proto.Module.ModuleResult) obj;

      boolean result = true;
      result = result && (hasPackageInfo() == other.hasPackageInfo());
      if (hasPackageInfo()) {
        result = result && getPackageInfo()
            .equals(other.getPackageInfo());
      }
      result = result && getFlowsList()
          .equals(other.getFlowsList());
      result = result && getDangersList()
          .equals(other.getDangersList());
      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 (hasPackageInfo()) {
        hash = (37 * hash) + PACKAGE_INFO_FIELD_NUMBER;
        hash = (53 * hash) + getPackageInfo().hashCode();
      }
      if (getFlowsCount() > 0) {
        hash = (37 * hash) + FLOWS_FIELD_NUMBER;
        hash = (53 * hash) + getFlowsList().hashCode();
      }
      if (getDangersCount() > 0) {
        hash = (37 * hash) + DANGERS_FIELD_NUMBER;
        hash = (53 * hash) + getDangersList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.Module.ModuleResult parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Module.ModuleResult parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Module.ModuleResult parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Module.ModuleResult parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Module.ModuleResult parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Module.ModuleResult parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Module.ModuleResult parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Module.ModuleResult 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 proto.Module.ModuleResult parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.Module.ModuleResult 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 proto.Module.ModuleResult parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Module.ModuleResult 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(proto.Module.ModuleResult 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>
     * Lists the identified taint flows for the specified module
     * </pre>
     *
     * Protobuf type {@code proto.ModuleResult}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.ModuleResult)
        proto.Module.ModuleResultOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.Module.internal_static_proto_ModuleResult_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.Module.internal_static_proto_ModuleResult_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.Module.ModuleResult.class, proto.Module.ModuleResult.Builder.class);
      }

      // Construct using proto.Module.ModuleResult.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getFlowsFieldBuilder();
          getDangersFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (packageInfoBuilder_ == null) {
          packageInfo_ = null;
        } else {
          packageInfo_ = null;
          packageInfoBuilder_ = null;
        }
        if (flowsBuilder_ == null) {
          flows_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          flowsBuilder_.clear();
        }
        if (dangersBuilder_ == null) {
          dangers_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          dangersBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return proto.Module.internal_static_proto_ModuleResult_descriptor;
      }

      @java.lang.Override
      public proto.Module.ModuleResult getDefaultInstanceForType() {
        return proto.Module.ModuleResult.getDefaultInstance();
      }

      @java.lang.Override
      public proto.Module.ModuleResult build() {
        proto.Module.ModuleResult result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public proto.Module.ModuleResult buildPartial() {
        proto.Module.ModuleResult result = new proto.Module.ModuleResult(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (packageInfoBuilder_ == null) {
          result.packageInfo_ = packageInfo_;
        } else {
          result.packageInfo_ = packageInfoBuilder_.build();
        }
        if (flowsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            flows_ = java.util.Collections.unmodifiableList(flows_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.flows_ = flows_;
        } else {
          result.flows_ = flowsBuilder_.build();
        }
        if (dangersBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            dangers_ = java.util.Collections.unmodifiableList(dangers_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.dangers_ = dangers_;
        } else {
          result.dangers_ = dangersBuilder_.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 proto.Module.ModuleResult) {
          return mergeFrom((proto.Module.ModuleResult)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.Module.ModuleResult other) {
        if (other == proto.Module.ModuleResult.getDefaultInstance()) return this;
        if (other.hasPackageInfo()) {
          mergePackageInfo(other.getPackageInfo());
        }
        if (flowsBuilder_ == null) {
          if (!other.flows_.isEmpty()) {
            if (flows_.isEmpty()) {
              flows_ = other.flows_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureFlowsIsMutable();
              flows_.addAll(other.flows_);
            }
            onChanged();
          }
        } else {
          if (!other.flows_.isEmpty()) {
            if (flowsBuilder_.isEmpty()) {
              flowsBuilder_.dispose();
              flowsBuilder_ = null;
              flows_ = other.flows_;
              bitField0_ = (bitField0_ & ~0x00000002);
              flowsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getFlowsFieldBuilder() : null;
            } else {
              flowsBuilder_.addAllMessages(other.flows_);
            }
          }
        }
        if (dangersBuilder_ == null) {
          if (!other.dangers_.isEmpty()) {
            if (dangers_.isEmpty()) {
              dangers_ = other.dangers_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureDangersIsMutable();
              dangers_.addAll(other.dangers_);
            }
            onChanged();
          }
        } else {
          if (!other.dangers_.isEmpty()) {
            if (dangersBuilder_.isEmpty()) {
              dangersBuilder_.dispose();
              dangersBuilder_ = null;
              dangers_ = other.dangers_;
              bitField0_ = (bitField0_ & ~0x00000004);
              dangersBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getDangersFieldBuilder() : null;
            } else {
              dangersBuilder_.addAllMessages(other.dangers_);
            }
          }
        }
        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 {
        proto.Module.ModuleResult parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.Module.ModuleResult) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private proto.Info.PackageInfo packageInfo_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Info.PackageInfo, proto.Info.PackageInfo.Builder, proto.Info.PackageInfoOrBuilder> packageInfoBuilder_;
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public boolean hasPackageInfo() {
        return packageInfoBuilder_ != null || packageInfo_ != null;
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public proto.Info.PackageInfo getPackageInfo() {
        if (packageInfoBuilder_ == null) {
          return packageInfo_ == null ? proto.Info.PackageInfo.getDefaultInstance() : packageInfo_;
        } else {
          return packageInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public Builder setPackageInfo(proto.Info.PackageInfo value) {
        if (packageInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          packageInfo_ = value;
          onChanged();
        } else {
          packageInfoBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public Builder setPackageInfo(
          proto.Info.PackageInfo.Builder builderForValue) {
        if (packageInfoBuilder_ == null) {
          packageInfo_ = builderForValue.build();
          onChanged();
        } else {
          packageInfoBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public Builder mergePackageInfo(proto.Info.PackageInfo value) {
        if (packageInfoBuilder_ == null) {
          if (packageInfo_ != null) {
            packageInfo_ =
              proto.Info.PackageInfo.newBuilder(packageInfo_).mergeFrom(value).buildPartial();
          } else {
            packageInfo_ = value;
          }
          onChanged();
        } else {
          packageInfoBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public Builder clearPackageInfo() {
        if (packageInfoBuilder_ == null) {
          packageInfo_ = null;
          onChanged();
        } else {
          packageInfo_ = null;
          packageInfoBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public proto.Info.PackageInfo.Builder getPackageInfoBuilder() {
        
        onChanged();
        return getPackageInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public proto.Info.PackageInfoOrBuilder getPackageInfoOrBuilder() {
        if (packageInfoBuilder_ != null) {
          return packageInfoBuilder_.getMessageOrBuilder();
        } else {
          return packageInfo_ == null ?
              proto.Info.PackageInfo.getDefaultInstance() : packageInfo_;
        }
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Info.PackageInfo, proto.Info.PackageInfo.Builder, proto.Info.PackageInfoOrBuilder> 
          getPackageInfoFieldBuilder() {
        if (packageInfoBuilder_ == null) {
          packageInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              proto.Info.PackageInfo, proto.Info.PackageInfo.Builder, proto.Info.PackageInfoOrBuilder>(
                  getPackageInfo(),
                  getParentForChildren(),
                  isClean());
          packageInfo_ = null;
        }
        return packageInfoBuilder_;
      }

      private java.util.List<proto.Module.ModuleFlow> flows_ =
        java.util.Collections.emptyList();
      private void ensureFlowsIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          flows_ = new java.util.ArrayList<proto.Module.ModuleFlow>(flows_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleFlow, proto.Module.ModuleFlow.Builder, proto.Module.ModuleFlowOrBuilder> flowsBuilder_;

      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public java.util.List<proto.Module.ModuleFlow> getFlowsList() {
        if (flowsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(flows_);
        } else {
          return flowsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public int getFlowsCount() {
        if (flowsBuilder_ == null) {
          return flows_.size();
        } else {
          return flowsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public proto.Module.ModuleFlow getFlows(int index) {
        if (flowsBuilder_ == null) {
          return flows_.get(index);
        } else {
          return flowsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public Builder setFlows(
          int index, proto.Module.ModuleFlow value) {
        if (flowsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFlowsIsMutable();
          flows_.set(index, value);
          onChanged();
        } else {
          flowsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public Builder setFlows(
          int index, proto.Module.ModuleFlow.Builder builderForValue) {
        if (flowsBuilder_ == null) {
          ensureFlowsIsMutable();
          flows_.set(index, builderForValue.build());
          onChanged();
        } else {
          flowsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public Builder addFlows(proto.Module.ModuleFlow value) {
        if (flowsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFlowsIsMutable();
          flows_.add(value);
          onChanged();
        } else {
          flowsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public Builder addFlows(
          int index, proto.Module.ModuleFlow value) {
        if (flowsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFlowsIsMutable();
          flows_.add(index, value);
          onChanged();
        } else {
          flowsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public Builder addFlows(
          proto.Module.ModuleFlow.Builder builderForValue) {
        if (flowsBuilder_ == null) {
          ensureFlowsIsMutable();
          flows_.add(builderForValue.build());
          onChanged();
        } else {
          flowsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public Builder addFlows(
          int index, proto.Module.ModuleFlow.Builder builderForValue) {
        if (flowsBuilder_ == null) {
          ensureFlowsIsMutable();
          flows_.add(index, builderForValue.build());
          onChanged();
        } else {
          flowsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public Builder addAllFlows(
          java.lang.Iterable<? extends proto.Module.ModuleFlow> values) {
        if (flowsBuilder_ == null) {
          ensureFlowsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, flows_);
          onChanged();
        } else {
          flowsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public Builder clearFlows() {
        if (flowsBuilder_ == null) {
          flows_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          flowsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public Builder removeFlows(int index) {
        if (flowsBuilder_ == null) {
          ensureFlowsIsMutable();
          flows_.remove(index);
          onChanged();
        } else {
          flowsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public proto.Module.ModuleFlow.Builder getFlowsBuilder(
          int index) {
        return getFlowsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public proto.Module.ModuleFlowOrBuilder getFlowsOrBuilder(
          int index) {
        if (flowsBuilder_ == null) {
          return flows_.get(index);  } else {
          return flowsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public java.util.List<? extends proto.Module.ModuleFlowOrBuilder> 
           getFlowsOrBuilderList() {
        if (flowsBuilder_ != null) {
          return flowsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(flows_);
        }
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public proto.Module.ModuleFlow.Builder addFlowsBuilder() {
        return getFlowsFieldBuilder().addBuilder(
            proto.Module.ModuleFlow.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public proto.Module.ModuleFlow.Builder addFlowsBuilder(
          int index) {
        return getFlowsFieldBuilder().addBuilder(
            index, proto.Module.ModuleFlow.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public java.util.List<proto.Module.ModuleFlow.Builder> 
           getFlowsBuilderList() {
        return getFlowsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleFlow, proto.Module.ModuleFlow.Builder, proto.Module.ModuleFlowOrBuilder> 
          getFlowsFieldBuilder() {
        if (flowsBuilder_ == null) {
          flowsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Module.ModuleFlow, proto.Module.ModuleFlow.Builder, proto.Module.ModuleFlowOrBuilder>(
                  flows_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          flows_ = null;
        }
        return flowsBuilder_;
      }

      private java.util.List<proto.Module.ModuleDanger> dangers_ =
        java.util.Collections.emptyList();
      private void ensureDangersIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          dangers_ = new java.util.ArrayList<proto.Module.ModuleDanger>(dangers_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleDanger, proto.Module.ModuleDanger.Builder, proto.Module.ModuleDangerOrBuilder> dangersBuilder_;

      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public java.util.List<proto.Module.ModuleDanger> getDangersList() {
        if (dangersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(dangers_);
        } else {
          return dangersBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public int getDangersCount() {
        if (dangersBuilder_ == null) {
          return dangers_.size();
        } else {
          return dangersBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public proto.Module.ModuleDanger getDangers(int index) {
        if (dangersBuilder_ == null) {
          return dangers_.get(index);
        } else {
          return dangersBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public Builder setDangers(
          int index, proto.Module.ModuleDanger value) {
        if (dangersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDangersIsMutable();
          dangers_.set(index, value);
          onChanged();
        } else {
          dangersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public Builder setDangers(
          int index, proto.Module.ModuleDanger.Builder builderForValue) {
        if (dangersBuilder_ == null) {
          ensureDangersIsMutable();
          dangers_.set(index, builderForValue.build());
          onChanged();
        } else {
          dangersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public Builder addDangers(proto.Module.ModuleDanger value) {
        if (dangersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDangersIsMutable();
          dangers_.add(value);
          onChanged();
        } else {
          dangersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public Builder addDangers(
          int index, proto.Module.ModuleDanger value) {
        if (dangersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDangersIsMutable();
          dangers_.add(index, value);
          onChanged();
        } else {
          dangersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public Builder addDangers(
          proto.Module.ModuleDanger.Builder builderForValue) {
        if (dangersBuilder_ == null) {
          ensureDangersIsMutable();
          dangers_.add(builderForValue.build());
          onChanged();
        } else {
          dangersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public Builder addDangers(
          int index, proto.Module.ModuleDanger.Builder builderForValue) {
        if (dangersBuilder_ == null) {
          ensureDangersIsMutable();
          dangers_.add(index, builderForValue.build());
          onChanged();
        } else {
          dangersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public Builder addAllDangers(
          java.lang.Iterable<? extends proto.Module.ModuleDanger> values) {
        if (dangersBuilder_ == null) {
          ensureDangersIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, dangers_);
          onChanged();
        } else {
          dangersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public Builder clearDangers() {
        if (dangersBuilder_ == null) {
          dangers_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          dangersBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public Builder removeDangers(int index) {
        if (dangersBuilder_ == null) {
          ensureDangersIsMutable();
          dangers_.remove(index);
          onChanged();
        } else {
          dangersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public proto.Module.ModuleDanger.Builder getDangersBuilder(
          int index) {
        return getDangersFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public proto.Module.ModuleDangerOrBuilder getDangersOrBuilder(
          int index) {
        if (dangersBuilder_ == null) {
          return dangers_.get(index);  } else {
          return dangersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public java.util.List<? extends proto.Module.ModuleDangerOrBuilder> 
           getDangersOrBuilderList() {
        if (dangersBuilder_ != null) {
          return dangersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(dangers_);
        }
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public proto.Module.ModuleDanger.Builder addDangersBuilder() {
        return getDangersFieldBuilder().addBuilder(
            proto.Module.ModuleDanger.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public proto.Module.ModuleDanger.Builder addDangersBuilder(
          int index) {
        return getDangersFieldBuilder().addBuilder(
            index, proto.Module.ModuleDanger.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public java.util.List<proto.Module.ModuleDanger.Builder> 
           getDangersBuilderList() {
        return getDangersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleDanger, proto.Module.ModuleDanger.Builder, proto.Module.ModuleDangerOrBuilder> 
          getDangersFieldBuilder() {
        if (dangersBuilder_ == null) {
          dangersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Module.ModuleDanger, proto.Module.ModuleDanger.Builder, proto.Module.ModuleDangerOrBuilder>(
                  dangers_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          dangers_ = null;
        }
        return dangersBuilder_;
      }
      @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:proto.ModuleResult)
    }

    // @@protoc_insertion_point(class_scope:proto.ModuleResult)
    private static final proto.Module.ModuleResult DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new proto.Module.ModuleResult();
    }

    public static proto.Module.ModuleResult getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public proto.Module.ModuleResult getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ModuleStaticOrBuilder extends
      // @@protoc_insertion_point(interface_extends:proto.ModuleStatic)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.proto.PackageInfo package_info = 1;</code>
     */
    boolean hasPackageInfo();
    /**
     * <code>.proto.PackageInfo package_info = 1;</code>
     */
    proto.Info.PackageInfo getPackageInfo();
    /**
     * <code>.proto.PackageInfo package_info = 1;</code>
     */
    proto.Info.PackageInfoOrBuilder getPackageInfoOrBuilder();

    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    java.util.List<proto.Module.ModuleFlow> 
        getFlowsList();
    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    proto.Module.ModuleFlow getFlows(int index);
    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    int getFlowsCount();
    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    java.util.List<? extends proto.Module.ModuleFlowOrBuilder> 
        getFlowsOrBuilderList();
    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    proto.Module.ModuleFlowOrBuilder getFlowsOrBuilder(
        int index);

    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    java.util.List<proto.Module.ModuleDanger> 
        getDangersList();
    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    proto.Module.ModuleDanger getDangers(int index);
    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    int getDangersCount();
    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    java.util.List<? extends proto.Module.ModuleDangerOrBuilder> 
        getDangersOrBuilderList();
    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    proto.Module.ModuleDangerOrBuilder getDangersOrBuilder(
        int index);

    /**
     * <code>repeated .proto.ModuleSource sources = 4;</code>
     */
    java.util.List<proto.Module.ModuleSource> 
        getSourcesList();
    /**
     * <code>repeated .proto.ModuleSource sources = 4;</code>
     */
    proto.Module.ModuleSource getSources(int index);
    /**
     * <code>repeated .proto.ModuleSource sources = 4;</code>
     */
    int getSourcesCount();
    /**
     * <code>repeated .proto.ModuleSource sources = 4;</code>
     */
    java.util.List<? extends proto.Module.ModuleSourceOrBuilder> 
        getSourcesOrBuilderList();
    /**
     * <code>repeated .proto.ModuleSource sources = 4;</code>
     */
    proto.Module.ModuleSourceOrBuilder getSourcesOrBuilder(
        int index);

    /**
     * <code>repeated .proto.ModuleSink sinks = 5;</code>
     */
    java.util.List<proto.Module.ModuleSink> 
        getSinksList();
    /**
     * <code>repeated .proto.ModuleSink sinks = 5;</code>
     */
    proto.Module.ModuleSink getSinks(int index);
    /**
     * <code>repeated .proto.ModuleSink sinks = 5;</code>
     */
    int getSinksCount();
    /**
     * <code>repeated .proto.ModuleSink sinks = 5;</code>
     */
    java.util.List<? extends proto.Module.ModuleSinkOrBuilder> 
        getSinksOrBuilderList();
    /**
     * <code>repeated .proto.ModuleSink sinks = 5;</code>
     */
    proto.Module.ModuleSinkOrBuilder getSinksOrBuilder(
        int index);

    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
     */
    java.util.List<proto.Module.ModuleTaintWrapper> 
        getTaintWrappersList();
    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
     */
    proto.Module.ModuleTaintWrapper getTaintWrappers(int index);
    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
     */
    int getTaintWrappersCount();
    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
     */
    java.util.List<? extends proto.Module.ModuleTaintWrapperOrBuilder> 
        getTaintWrappersOrBuilderList();
    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
     */
    proto.Module.ModuleTaintWrapperOrBuilder getTaintWrappersOrBuilder(
        int index);
  }
  /**
   * <pre>
   * Wraps summary and result in a single message, this is intended for all static analysis results for the module.
   * </pre>
   *
   * Protobuf type {@code proto.ModuleStatic}
   */
  public  static final class ModuleStatic extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:proto.ModuleStatic)
      ModuleStaticOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ModuleStatic.newBuilder() to construct.
    private ModuleStatic(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ModuleStatic() {
      flows_ = java.util.Collections.emptyList();
      dangers_ = java.util.Collections.emptyList();
      sources_ = java.util.Collections.emptyList();
      sinks_ = java.util.Collections.emptyList();
      taintWrappers_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ModuleStatic(
        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: {
              proto.Info.PackageInfo.Builder subBuilder = null;
              if (packageInfo_ != null) {
                subBuilder = packageInfo_.toBuilder();
              }
              packageInfo_ = input.readMessage(proto.Info.PackageInfo.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(packageInfo_);
                packageInfo_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                flows_ = new java.util.ArrayList<proto.Module.ModuleFlow>();
                mutable_bitField0_ |= 0x00000002;
              }
              flows_.add(
                  input.readMessage(proto.Module.ModuleFlow.parser(), extensionRegistry));
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                dangers_ = new java.util.ArrayList<proto.Module.ModuleDanger>();
                mutable_bitField0_ |= 0x00000004;
              }
              dangers_.add(
                  input.readMessage(proto.Module.ModuleDanger.parser(), extensionRegistry));
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                sources_ = new java.util.ArrayList<proto.Module.ModuleSource>();
                mutable_bitField0_ |= 0x00000008;
              }
              sources_.add(
                  input.readMessage(proto.Module.ModuleSource.parser(), extensionRegistry));
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                sinks_ = new java.util.ArrayList<proto.Module.ModuleSink>();
                mutable_bitField0_ |= 0x00000010;
              }
              sinks_.add(
                  input.readMessage(proto.Module.ModuleSink.parser(), extensionRegistry));
              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                taintWrappers_ = new java.util.ArrayList<proto.Module.ModuleTaintWrapper>();
                mutable_bitField0_ |= 0x00000020;
              }
              taintWrappers_.add(
                  input.readMessage(proto.Module.ModuleTaintWrapper.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_ & 0x00000002) == 0x00000002)) {
          flows_ = java.util.Collections.unmodifiableList(flows_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          dangers_ = java.util.Collections.unmodifiableList(dangers_);
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          sources_ = java.util.Collections.unmodifiableList(sources_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          sinks_ = java.util.Collections.unmodifiableList(sinks_);
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          taintWrappers_ = java.util.Collections.unmodifiableList(taintWrappers_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return proto.Module.internal_static_proto_ModuleStatic_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return proto.Module.internal_static_proto_ModuleStatic_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              proto.Module.ModuleStatic.class, proto.Module.ModuleStatic.Builder.class);
    }

    private int bitField0_;
    public static final int PACKAGE_INFO_FIELD_NUMBER = 1;
    private proto.Info.PackageInfo packageInfo_;
    /**
     * <code>.proto.PackageInfo package_info = 1;</code>
     */
    public boolean hasPackageInfo() {
      return packageInfo_ != null;
    }
    /**
     * <code>.proto.PackageInfo package_info = 1;</code>
     */
    public proto.Info.PackageInfo getPackageInfo() {
      return packageInfo_ == null ? proto.Info.PackageInfo.getDefaultInstance() : packageInfo_;
    }
    /**
     * <code>.proto.PackageInfo package_info = 1;</code>
     */
    public proto.Info.PackageInfoOrBuilder getPackageInfoOrBuilder() {
      return getPackageInfo();
    }

    public static final int FLOWS_FIELD_NUMBER = 2;
    private java.util.List<proto.Module.ModuleFlow> flows_;
    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    public java.util.List<proto.Module.ModuleFlow> getFlowsList() {
      return flows_;
    }
    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    public java.util.List<? extends proto.Module.ModuleFlowOrBuilder> 
        getFlowsOrBuilderList() {
      return flows_;
    }
    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    public int getFlowsCount() {
      return flows_.size();
    }
    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    public proto.Module.ModuleFlow getFlows(int index) {
      return flows_.get(index);
    }
    /**
     * <code>repeated .proto.ModuleFlow flows = 2;</code>
     */
    public proto.Module.ModuleFlowOrBuilder getFlowsOrBuilder(
        int index) {
      return flows_.get(index);
    }

    public static final int DANGERS_FIELD_NUMBER = 3;
    private java.util.List<proto.Module.ModuleDanger> dangers_;
    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    public java.util.List<proto.Module.ModuleDanger> getDangersList() {
      return dangers_;
    }
    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    public java.util.List<? extends proto.Module.ModuleDangerOrBuilder> 
        getDangersOrBuilderList() {
      return dangers_;
    }
    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    public int getDangersCount() {
      return dangers_.size();
    }
    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    public proto.Module.ModuleDanger getDangers(int index) {
      return dangers_.get(index);
    }
    /**
     * <code>repeated .proto.ModuleDanger dangers = 3;</code>
     */
    public proto.Module.ModuleDangerOrBuilder getDangersOrBuilder(
        int index) {
      return dangers_.get(index);
    }

    public static final int SOURCES_FIELD_NUMBER = 4;
    private java.util.List<proto.Module.ModuleSource> sources_;
    /**
     * <code>repeated .proto.ModuleSource sources = 4;</code>
     */
    public java.util.List<proto.Module.ModuleSource> getSourcesList() {
      return sources_;
    }
    /**
     * <code>repeated .proto.ModuleSource sources = 4;</code>
     */
    public java.util.List<? extends proto.Module.ModuleSourceOrBuilder> 
        getSourcesOrBuilderList() {
      return sources_;
    }
    /**
     * <code>repeated .proto.ModuleSource sources = 4;</code>
     */
    public int getSourcesCount() {
      return sources_.size();
    }
    /**
     * <code>repeated .proto.ModuleSource sources = 4;</code>
     */
    public proto.Module.ModuleSource getSources(int index) {
      return sources_.get(index);
    }
    /**
     * <code>repeated .proto.ModuleSource sources = 4;</code>
     */
    public proto.Module.ModuleSourceOrBuilder getSourcesOrBuilder(
        int index) {
      return sources_.get(index);
    }

    public static final int SINKS_FIELD_NUMBER = 5;
    private java.util.List<proto.Module.ModuleSink> sinks_;
    /**
     * <code>repeated .proto.ModuleSink sinks = 5;</code>
     */
    public java.util.List<proto.Module.ModuleSink> getSinksList() {
      return sinks_;
    }
    /**
     * <code>repeated .proto.ModuleSink sinks = 5;</code>
     */
    public java.util.List<? extends proto.Module.ModuleSinkOrBuilder> 
        getSinksOrBuilderList() {
      return sinks_;
    }
    /**
     * <code>repeated .proto.ModuleSink sinks = 5;</code>
     */
    public int getSinksCount() {
      return sinks_.size();
    }
    /**
     * <code>repeated .proto.ModuleSink sinks = 5;</code>
     */
    public proto.Module.ModuleSink getSinks(int index) {
      return sinks_.get(index);
    }
    /**
     * <code>repeated .proto.ModuleSink sinks = 5;</code>
     */
    public proto.Module.ModuleSinkOrBuilder getSinksOrBuilder(
        int index) {
      return sinks_.get(index);
    }

    public static final int TAINT_WRAPPERS_FIELD_NUMBER = 6;
    private java.util.List<proto.Module.ModuleTaintWrapper> taintWrappers_;
    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
     */
    public java.util.List<proto.Module.ModuleTaintWrapper> getTaintWrappersList() {
      return taintWrappers_;
    }
    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
     */
    public java.util.List<? extends proto.Module.ModuleTaintWrapperOrBuilder> 
        getTaintWrappersOrBuilderList() {
      return taintWrappers_;
    }
    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
     */
    public int getTaintWrappersCount() {
      return taintWrappers_.size();
    }
    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
     */
    public proto.Module.ModuleTaintWrapper getTaintWrappers(int index) {
      return taintWrappers_.get(index);
    }
    /**
     * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
     */
    public proto.Module.ModuleTaintWrapperOrBuilder getTaintWrappersOrBuilder(
        int index) {
      return taintWrappers_.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 {
      if (packageInfo_ != null) {
        output.writeMessage(1, getPackageInfo());
      }
      for (int i = 0; i < flows_.size(); i++) {
        output.writeMessage(2, flows_.get(i));
      }
      for (int i = 0; i < dangers_.size(); i++) {
        output.writeMessage(3, dangers_.get(i));
      }
      for (int i = 0; i < sources_.size(); i++) {
        output.writeMessage(4, sources_.get(i));
      }
      for (int i = 0; i < sinks_.size(); i++) {
        output.writeMessage(5, sinks_.get(i));
      }
      for (int i = 0; i < taintWrappers_.size(); i++) {
        output.writeMessage(6, taintWrappers_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (packageInfo_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getPackageInfo());
      }
      for (int i = 0; i < flows_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, flows_.get(i));
      }
      for (int i = 0; i < dangers_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, dangers_.get(i));
      }
      for (int i = 0; i < sources_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, sources_.get(i));
      }
      for (int i = 0; i < sinks_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, sinks_.get(i));
      }
      for (int i = 0; i < taintWrappers_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, taintWrappers_.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 proto.Module.ModuleStatic)) {
        return super.equals(obj);
      }
      proto.Module.ModuleStatic other = (proto.Module.ModuleStatic) obj;

      boolean result = true;
      result = result && (hasPackageInfo() == other.hasPackageInfo());
      if (hasPackageInfo()) {
        result = result && getPackageInfo()
            .equals(other.getPackageInfo());
      }
      result = result && getFlowsList()
          .equals(other.getFlowsList());
      result = result && getDangersList()
          .equals(other.getDangersList());
      result = result && getSourcesList()
          .equals(other.getSourcesList());
      result = result && getSinksList()
          .equals(other.getSinksList());
      result = result && getTaintWrappersList()
          .equals(other.getTaintWrappersList());
      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 (hasPackageInfo()) {
        hash = (37 * hash) + PACKAGE_INFO_FIELD_NUMBER;
        hash = (53 * hash) + getPackageInfo().hashCode();
      }
      if (getFlowsCount() > 0) {
        hash = (37 * hash) + FLOWS_FIELD_NUMBER;
        hash = (53 * hash) + getFlowsList().hashCode();
      }
      if (getDangersCount() > 0) {
        hash = (37 * hash) + DANGERS_FIELD_NUMBER;
        hash = (53 * hash) + getDangersList().hashCode();
      }
      if (getSourcesCount() > 0) {
        hash = (37 * hash) + SOURCES_FIELD_NUMBER;
        hash = (53 * hash) + getSourcesList().hashCode();
      }
      if (getSinksCount() > 0) {
        hash = (37 * hash) + SINKS_FIELD_NUMBER;
        hash = (53 * hash) + getSinksList().hashCode();
      }
      if (getTaintWrappersCount() > 0) {
        hash = (37 * hash) + TAINT_WRAPPERS_FIELD_NUMBER;
        hash = (53 * hash) + getTaintWrappersList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static proto.Module.ModuleStatic parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Module.ModuleStatic parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Module.ModuleStatic parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Module.ModuleStatic parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Module.ModuleStatic parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static proto.Module.ModuleStatic parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static proto.Module.ModuleStatic parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Module.ModuleStatic 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 proto.Module.ModuleStatic parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static proto.Module.ModuleStatic 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 proto.Module.ModuleStatic parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static proto.Module.ModuleStatic 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(proto.Module.ModuleStatic 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>
     * Wraps summary and result in a single message, this is intended for all static analysis results for the module.
     * </pre>
     *
     * Protobuf type {@code proto.ModuleStatic}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:proto.ModuleStatic)
        proto.Module.ModuleStaticOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return proto.Module.internal_static_proto_ModuleStatic_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return proto.Module.internal_static_proto_ModuleStatic_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                proto.Module.ModuleStatic.class, proto.Module.ModuleStatic.Builder.class);
      }

      // Construct using proto.Module.ModuleStatic.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getFlowsFieldBuilder();
          getDangersFieldBuilder();
          getSourcesFieldBuilder();
          getSinksFieldBuilder();
          getTaintWrappersFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (packageInfoBuilder_ == null) {
          packageInfo_ = null;
        } else {
          packageInfo_ = null;
          packageInfoBuilder_ = null;
        }
        if (flowsBuilder_ == null) {
          flows_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          flowsBuilder_.clear();
        }
        if (dangersBuilder_ == null) {
          dangers_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          dangersBuilder_.clear();
        }
        if (sourcesBuilder_ == null) {
          sources_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          sourcesBuilder_.clear();
        }
        if (sinksBuilder_ == null) {
          sinks_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          sinksBuilder_.clear();
        }
        if (taintWrappersBuilder_ == null) {
          taintWrappers_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          taintWrappersBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return proto.Module.internal_static_proto_ModuleStatic_descriptor;
      }

      @java.lang.Override
      public proto.Module.ModuleStatic getDefaultInstanceForType() {
        return proto.Module.ModuleStatic.getDefaultInstance();
      }

      @java.lang.Override
      public proto.Module.ModuleStatic build() {
        proto.Module.ModuleStatic result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public proto.Module.ModuleStatic buildPartial() {
        proto.Module.ModuleStatic result = new proto.Module.ModuleStatic(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (packageInfoBuilder_ == null) {
          result.packageInfo_ = packageInfo_;
        } else {
          result.packageInfo_ = packageInfoBuilder_.build();
        }
        if (flowsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            flows_ = java.util.Collections.unmodifiableList(flows_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.flows_ = flows_;
        } else {
          result.flows_ = flowsBuilder_.build();
        }
        if (dangersBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            dangers_ = java.util.Collections.unmodifiableList(dangers_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.dangers_ = dangers_;
        } else {
          result.dangers_ = dangersBuilder_.build();
        }
        if (sourcesBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            sources_ = java.util.Collections.unmodifiableList(sources_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.sources_ = sources_;
        } else {
          result.sources_ = sourcesBuilder_.build();
        }
        if (sinksBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            sinks_ = java.util.Collections.unmodifiableList(sinks_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.sinks_ = sinks_;
        } else {
          result.sinks_ = sinksBuilder_.build();
        }
        if (taintWrappersBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            taintWrappers_ = java.util.Collections.unmodifiableList(taintWrappers_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.taintWrappers_ = taintWrappers_;
        } else {
          result.taintWrappers_ = taintWrappersBuilder_.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 proto.Module.ModuleStatic) {
          return mergeFrom((proto.Module.ModuleStatic)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(proto.Module.ModuleStatic other) {
        if (other == proto.Module.ModuleStatic.getDefaultInstance()) return this;
        if (other.hasPackageInfo()) {
          mergePackageInfo(other.getPackageInfo());
        }
        if (flowsBuilder_ == null) {
          if (!other.flows_.isEmpty()) {
            if (flows_.isEmpty()) {
              flows_ = other.flows_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureFlowsIsMutable();
              flows_.addAll(other.flows_);
            }
            onChanged();
          }
        } else {
          if (!other.flows_.isEmpty()) {
            if (flowsBuilder_.isEmpty()) {
              flowsBuilder_.dispose();
              flowsBuilder_ = null;
              flows_ = other.flows_;
              bitField0_ = (bitField0_ & ~0x00000002);
              flowsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getFlowsFieldBuilder() : null;
            } else {
              flowsBuilder_.addAllMessages(other.flows_);
            }
          }
        }
        if (dangersBuilder_ == null) {
          if (!other.dangers_.isEmpty()) {
            if (dangers_.isEmpty()) {
              dangers_ = other.dangers_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureDangersIsMutable();
              dangers_.addAll(other.dangers_);
            }
            onChanged();
          }
        } else {
          if (!other.dangers_.isEmpty()) {
            if (dangersBuilder_.isEmpty()) {
              dangersBuilder_.dispose();
              dangersBuilder_ = null;
              dangers_ = other.dangers_;
              bitField0_ = (bitField0_ & ~0x00000004);
              dangersBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getDangersFieldBuilder() : null;
            } else {
              dangersBuilder_.addAllMessages(other.dangers_);
            }
          }
        }
        if (sourcesBuilder_ == null) {
          if (!other.sources_.isEmpty()) {
            if (sources_.isEmpty()) {
              sources_ = other.sources_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureSourcesIsMutable();
              sources_.addAll(other.sources_);
            }
            onChanged();
          }
        } else {
          if (!other.sources_.isEmpty()) {
            if (sourcesBuilder_.isEmpty()) {
              sourcesBuilder_.dispose();
              sourcesBuilder_ = null;
              sources_ = other.sources_;
              bitField0_ = (bitField0_ & ~0x00000008);
              sourcesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getSourcesFieldBuilder() : null;
            } else {
              sourcesBuilder_.addAllMessages(other.sources_);
            }
          }
        }
        if (sinksBuilder_ == null) {
          if (!other.sinks_.isEmpty()) {
            if (sinks_.isEmpty()) {
              sinks_ = other.sinks_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureSinksIsMutable();
              sinks_.addAll(other.sinks_);
            }
            onChanged();
          }
        } else {
          if (!other.sinks_.isEmpty()) {
            if (sinksBuilder_.isEmpty()) {
              sinksBuilder_.dispose();
              sinksBuilder_ = null;
              sinks_ = other.sinks_;
              bitField0_ = (bitField0_ & ~0x00000010);
              sinksBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getSinksFieldBuilder() : null;
            } else {
              sinksBuilder_.addAllMessages(other.sinks_);
            }
          }
        }
        if (taintWrappersBuilder_ == null) {
          if (!other.taintWrappers_.isEmpty()) {
            if (taintWrappers_.isEmpty()) {
              taintWrappers_ = other.taintWrappers_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureTaintWrappersIsMutable();
              taintWrappers_.addAll(other.taintWrappers_);
            }
            onChanged();
          }
        } else {
          if (!other.taintWrappers_.isEmpty()) {
            if (taintWrappersBuilder_.isEmpty()) {
              taintWrappersBuilder_.dispose();
              taintWrappersBuilder_ = null;
              taintWrappers_ = other.taintWrappers_;
              bitField0_ = (bitField0_ & ~0x00000020);
              taintWrappersBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getTaintWrappersFieldBuilder() : null;
            } else {
              taintWrappersBuilder_.addAllMessages(other.taintWrappers_);
            }
          }
        }
        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 {
        proto.Module.ModuleStatic parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (proto.Module.ModuleStatic) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private proto.Info.PackageInfo packageInfo_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Info.PackageInfo, proto.Info.PackageInfo.Builder, proto.Info.PackageInfoOrBuilder> packageInfoBuilder_;
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public boolean hasPackageInfo() {
        return packageInfoBuilder_ != null || packageInfo_ != null;
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public proto.Info.PackageInfo getPackageInfo() {
        if (packageInfoBuilder_ == null) {
          return packageInfo_ == null ? proto.Info.PackageInfo.getDefaultInstance() : packageInfo_;
        } else {
          return packageInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public Builder setPackageInfo(proto.Info.PackageInfo value) {
        if (packageInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          packageInfo_ = value;
          onChanged();
        } else {
          packageInfoBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public Builder setPackageInfo(
          proto.Info.PackageInfo.Builder builderForValue) {
        if (packageInfoBuilder_ == null) {
          packageInfo_ = builderForValue.build();
          onChanged();
        } else {
          packageInfoBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public Builder mergePackageInfo(proto.Info.PackageInfo value) {
        if (packageInfoBuilder_ == null) {
          if (packageInfo_ != null) {
            packageInfo_ =
              proto.Info.PackageInfo.newBuilder(packageInfo_).mergeFrom(value).buildPartial();
          } else {
            packageInfo_ = value;
          }
          onChanged();
        } else {
          packageInfoBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public Builder clearPackageInfo() {
        if (packageInfoBuilder_ == null) {
          packageInfo_ = null;
          onChanged();
        } else {
          packageInfo_ = null;
          packageInfoBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public proto.Info.PackageInfo.Builder getPackageInfoBuilder() {
        
        onChanged();
        return getPackageInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      public proto.Info.PackageInfoOrBuilder getPackageInfoOrBuilder() {
        if (packageInfoBuilder_ != null) {
          return packageInfoBuilder_.getMessageOrBuilder();
        } else {
          return packageInfo_ == null ?
              proto.Info.PackageInfo.getDefaultInstance() : packageInfo_;
        }
      }
      /**
       * <code>.proto.PackageInfo package_info = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          proto.Info.PackageInfo, proto.Info.PackageInfo.Builder, proto.Info.PackageInfoOrBuilder> 
          getPackageInfoFieldBuilder() {
        if (packageInfoBuilder_ == null) {
          packageInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              proto.Info.PackageInfo, proto.Info.PackageInfo.Builder, proto.Info.PackageInfoOrBuilder>(
                  getPackageInfo(),
                  getParentForChildren(),
                  isClean());
          packageInfo_ = null;
        }
        return packageInfoBuilder_;
      }

      private java.util.List<proto.Module.ModuleFlow> flows_ =
        java.util.Collections.emptyList();
      private void ensureFlowsIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          flows_ = new java.util.ArrayList<proto.Module.ModuleFlow>(flows_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleFlow, proto.Module.ModuleFlow.Builder, proto.Module.ModuleFlowOrBuilder> flowsBuilder_;

      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public java.util.List<proto.Module.ModuleFlow> getFlowsList() {
        if (flowsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(flows_);
        } else {
          return flowsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public int getFlowsCount() {
        if (flowsBuilder_ == null) {
          return flows_.size();
        } else {
          return flowsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public proto.Module.ModuleFlow getFlows(int index) {
        if (flowsBuilder_ == null) {
          return flows_.get(index);
        } else {
          return flowsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public Builder setFlows(
          int index, proto.Module.ModuleFlow value) {
        if (flowsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFlowsIsMutable();
          flows_.set(index, value);
          onChanged();
        } else {
          flowsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public Builder setFlows(
          int index, proto.Module.ModuleFlow.Builder builderForValue) {
        if (flowsBuilder_ == null) {
          ensureFlowsIsMutable();
          flows_.set(index, builderForValue.build());
          onChanged();
        } else {
          flowsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public Builder addFlows(proto.Module.ModuleFlow value) {
        if (flowsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFlowsIsMutable();
          flows_.add(value);
          onChanged();
        } else {
          flowsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public Builder addFlows(
          int index, proto.Module.ModuleFlow value) {
        if (flowsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFlowsIsMutable();
          flows_.add(index, value);
          onChanged();
        } else {
          flowsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public Builder addFlows(
          proto.Module.ModuleFlow.Builder builderForValue) {
        if (flowsBuilder_ == null) {
          ensureFlowsIsMutable();
          flows_.add(builderForValue.build());
          onChanged();
        } else {
          flowsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public Builder addFlows(
          int index, proto.Module.ModuleFlow.Builder builderForValue) {
        if (flowsBuilder_ == null) {
          ensureFlowsIsMutable();
          flows_.add(index, builderForValue.build());
          onChanged();
        } else {
          flowsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public Builder addAllFlows(
          java.lang.Iterable<? extends proto.Module.ModuleFlow> values) {
        if (flowsBuilder_ == null) {
          ensureFlowsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, flows_);
          onChanged();
        } else {
          flowsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public Builder clearFlows() {
        if (flowsBuilder_ == null) {
          flows_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          flowsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public Builder removeFlows(int index) {
        if (flowsBuilder_ == null) {
          ensureFlowsIsMutable();
          flows_.remove(index);
          onChanged();
        } else {
          flowsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public proto.Module.ModuleFlow.Builder getFlowsBuilder(
          int index) {
        return getFlowsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public proto.Module.ModuleFlowOrBuilder getFlowsOrBuilder(
          int index) {
        if (flowsBuilder_ == null) {
          return flows_.get(index);  } else {
          return flowsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public java.util.List<? extends proto.Module.ModuleFlowOrBuilder> 
           getFlowsOrBuilderList() {
        if (flowsBuilder_ != null) {
          return flowsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(flows_);
        }
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public proto.Module.ModuleFlow.Builder addFlowsBuilder() {
        return getFlowsFieldBuilder().addBuilder(
            proto.Module.ModuleFlow.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public proto.Module.ModuleFlow.Builder addFlowsBuilder(
          int index) {
        return getFlowsFieldBuilder().addBuilder(
            index, proto.Module.ModuleFlow.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleFlow flows = 2;</code>
       */
      public java.util.List<proto.Module.ModuleFlow.Builder> 
           getFlowsBuilderList() {
        return getFlowsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleFlow, proto.Module.ModuleFlow.Builder, proto.Module.ModuleFlowOrBuilder> 
          getFlowsFieldBuilder() {
        if (flowsBuilder_ == null) {
          flowsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Module.ModuleFlow, proto.Module.ModuleFlow.Builder, proto.Module.ModuleFlowOrBuilder>(
                  flows_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          flows_ = null;
        }
        return flowsBuilder_;
      }

      private java.util.List<proto.Module.ModuleDanger> dangers_ =
        java.util.Collections.emptyList();
      private void ensureDangersIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          dangers_ = new java.util.ArrayList<proto.Module.ModuleDanger>(dangers_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleDanger, proto.Module.ModuleDanger.Builder, proto.Module.ModuleDangerOrBuilder> dangersBuilder_;

      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public java.util.List<proto.Module.ModuleDanger> getDangersList() {
        if (dangersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(dangers_);
        } else {
          return dangersBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public int getDangersCount() {
        if (dangersBuilder_ == null) {
          return dangers_.size();
        } else {
          return dangersBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public proto.Module.ModuleDanger getDangers(int index) {
        if (dangersBuilder_ == null) {
          return dangers_.get(index);
        } else {
          return dangersBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public Builder setDangers(
          int index, proto.Module.ModuleDanger value) {
        if (dangersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDangersIsMutable();
          dangers_.set(index, value);
          onChanged();
        } else {
          dangersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public Builder setDangers(
          int index, proto.Module.ModuleDanger.Builder builderForValue) {
        if (dangersBuilder_ == null) {
          ensureDangersIsMutable();
          dangers_.set(index, builderForValue.build());
          onChanged();
        } else {
          dangersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public Builder addDangers(proto.Module.ModuleDanger value) {
        if (dangersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDangersIsMutable();
          dangers_.add(value);
          onChanged();
        } else {
          dangersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public Builder addDangers(
          int index, proto.Module.ModuleDanger value) {
        if (dangersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDangersIsMutable();
          dangers_.add(index, value);
          onChanged();
        } else {
          dangersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public Builder addDangers(
          proto.Module.ModuleDanger.Builder builderForValue) {
        if (dangersBuilder_ == null) {
          ensureDangersIsMutable();
          dangers_.add(builderForValue.build());
          onChanged();
        } else {
          dangersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public Builder addDangers(
          int index, proto.Module.ModuleDanger.Builder builderForValue) {
        if (dangersBuilder_ == null) {
          ensureDangersIsMutable();
          dangers_.add(index, builderForValue.build());
          onChanged();
        } else {
          dangersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public Builder addAllDangers(
          java.lang.Iterable<? extends proto.Module.ModuleDanger> values) {
        if (dangersBuilder_ == null) {
          ensureDangersIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, dangers_);
          onChanged();
        } else {
          dangersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public Builder clearDangers() {
        if (dangersBuilder_ == null) {
          dangers_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          dangersBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public Builder removeDangers(int index) {
        if (dangersBuilder_ == null) {
          ensureDangersIsMutable();
          dangers_.remove(index);
          onChanged();
        } else {
          dangersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public proto.Module.ModuleDanger.Builder getDangersBuilder(
          int index) {
        return getDangersFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public proto.Module.ModuleDangerOrBuilder getDangersOrBuilder(
          int index) {
        if (dangersBuilder_ == null) {
          return dangers_.get(index);  } else {
          return dangersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public java.util.List<? extends proto.Module.ModuleDangerOrBuilder> 
           getDangersOrBuilderList() {
        if (dangersBuilder_ != null) {
          return dangersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(dangers_);
        }
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public proto.Module.ModuleDanger.Builder addDangersBuilder() {
        return getDangersFieldBuilder().addBuilder(
            proto.Module.ModuleDanger.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public proto.Module.ModuleDanger.Builder addDangersBuilder(
          int index) {
        return getDangersFieldBuilder().addBuilder(
            index, proto.Module.ModuleDanger.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleDanger dangers = 3;</code>
       */
      public java.util.List<proto.Module.ModuleDanger.Builder> 
           getDangersBuilderList() {
        return getDangersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleDanger, proto.Module.ModuleDanger.Builder, proto.Module.ModuleDangerOrBuilder> 
          getDangersFieldBuilder() {
        if (dangersBuilder_ == null) {
          dangersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Module.ModuleDanger, proto.Module.ModuleDanger.Builder, proto.Module.ModuleDangerOrBuilder>(
                  dangers_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          dangers_ = null;
        }
        return dangersBuilder_;
      }

      private java.util.List<proto.Module.ModuleSource> sources_ =
        java.util.Collections.emptyList();
      private void ensureSourcesIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          sources_ = new java.util.ArrayList<proto.Module.ModuleSource>(sources_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleSource, proto.Module.ModuleSource.Builder, proto.Module.ModuleSourceOrBuilder> sourcesBuilder_;

      /**
       * <code>repeated .proto.ModuleSource sources = 4;</code>
       */
      public java.util.List<proto.Module.ModuleSource> getSourcesList() {
        if (sourcesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(sources_);
        } else {
          return sourcesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 4;</code>
       */
      public int getSourcesCount() {
        if (sourcesBuilder_ == null) {
          return sources_.size();
        } else {
          return sourcesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 4;</code>
       */
      public proto.Module.ModuleSource getSources(int index) {
        if (sourcesBuilder_ == null) {
          return sources_.get(index);
        } else {
          return sourcesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 4;</code>
       */
      public Builder setSources(
          int index, proto.Module.ModuleSource value) {
        if (sourcesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSourcesIsMutable();
          sources_.set(index, value);
          onChanged();
        } else {
          sourcesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 4;</code>
       */
      public Builder setSources(
          int index, proto.Module.ModuleSource.Builder builderForValue) {
        if (sourcesBuilder_ == null) {
          ensureSourcesIsMutable();
          sources_.set(index, builderForValue.build());
          onChanged();
        } else {
          sourcesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 4;</code>
       */
      public Builder addSources(proto.Module.ModuleSource value) {
        if (sourcesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSourcesIsMutable();
          sources_.add(value);
          onChanged();
        } else {
          sourcesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 4;</code>
       */
      public Builder addSources(
          int index, proto.Module.ModuleSource value) {
        if (sourcesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSourcesIsMutable();
          sources_.add(index, value);
          onChanged();
        } else {
          sourcesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 4;</code>
       */
      public Builder addSources(
          proto.Module.ModuleSource.Builder builderForValue) {
        if (sourcesBuilder_ == null) {
          ensureSourcesIsMutable();
          sources_.add(builderForValue.build());
          onChanged();
        } else {
          sourcesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 4;</code>
       */
      public Builder addSources(
          int index, proto.Module.ModuleSource.Builder builderForValue) {
        if (sourcesBuilder_ == null) {
          ensureSourcesIsMutable();
          sources_.add(index, builderForValue.build());
          onChanged();
        } else {
          sourcesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 4;</code>
       */
      public Builder addAllSources(
          java.lang.Iterable<? extends proto.Module.ModuleSource> values) {
        if (sourcesBuilder_ == null) {
          ensureSourcesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, sources_);
          onChanged();
        } else {
          sourcesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 4;</code>
       */
      public Builder clearSources() {
        if (sourcesBuilder_ == null) {
          sources_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          sourcesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 4;</code>
       */
      public Builder removeSources(int index) {
        if (sourcesBuilder_ == null) {
          ensureSourcesIsMutable();
          sources_.remove(index);
          onChanged();
        } else {
          sourcesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 4;</code>
       */
      public proto.Module.ModuleSource.Builder getSourcesBuilder(
          int index) {
        return getSourcesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 4;</code>
       */
      public proto.Module.ModuleSourceOrBuilder getSourcesOrBuilder(
          int index) {
        if (sourcesBuilder_ == null) {
          return sources_.get(index);  } else {
          return sourcesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 4;</code>
       */
      public java.util.List<? extends proto.Module.ModuleSourceOrBuilder> 
           getSourcesOrBuilderList() {
        if (sourcesBuilder_ != null) {
          return sourcesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(sources_);
        }
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 4;</code>
       */
      public proto.Module.ModuleSource.Builder addSourcesBuilder() {
        return getSourcesFieldBuilder().addBuilder(
            proto.Module.ModuleSource.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 4;</code>
       */
      public proto.Module.ModuleSource.Builder addSourcesBuilder(
          int index) {
        return getSourcesFieldBuilder().addBuilder(
            index, proto.Module.ModuleSource.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleSource sources = 4;</code>
       */
      public java.util.List<proto.Module.ModuleSource.Builder> 
           getSourcesBuilderList() {
        return getSourcesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleSource, proto.Module.ModuleSource.Builder, proto.Module.ModuleSourceOrBuilder> 
          getSourcesFieldBuilder() {
        if (sourcesBuilder_ == null) {
          sourcesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Module.ModuleSource, proto.Module.ModuleSource.Builder, proto.Module.ModuleSourceOrBuilder>(
                  sources_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          sources_ = null;
        }
        return sourcesBuilder_;
      }

      private java.util.List<proto.Module.ModuleSink> sinks_ =
        java.util.Collections.emptyList();
      private void ensureSinksIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          sinks_ = new java.util.ArrayList<proto.Module.ModuleSink>(sinks_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleSink, proto.Module.ModuleSink.Builder, proto.Module.ModuleSinkOrBuilder> sinksBuilder_;

      /**
       * <code>repeated .proto.ModuleSink sinks = 5;</code>
       */
      public java.util.List<proto.Module.ModuleSink> getSinksList() {
        if (sinksBuilder_ == null) {
          return java.util.Collections.unmodifiableList(sinks_);
        } else {
          return sinksBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 5;</code>
       */
      public int getSinksCount() {
        if (sinksBuilder_ == null) {
          return sinks_.size();
        } else {
          return sinksBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 5;</code>
       */
      public proto.Module.ModuleSink getSinks(int index) {
        if (sinksBuilder_ == null) {
          return sinks_.get(index);
        } else {
          return sinksBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 5;</code>
       */
      public Builder setSinks(
          int index, proto.Module.ModuleSink value) {
        if (sinksBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSinksIsMutable();
          sinks_.set(index, value);
          onChanged();
        } else {
          sinksBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 5;</code>
       */
      public Builder setSinks(
          int index, proto.Module.ModuleSink.Builder builderForValue) {
        if (sinksBuilder_ == null) {
          ensureSinksIsMutable();
          sinks_.set(index, builderForValue.build());
          onChanged();
        } else {
          sinksBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 5;</code>
       */
      public Builder addSinks(proto.Module.ModuleSink value) {
        if (sinksBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSinksIsMutable();
          sinks_.add(value);
          onChanged();
        } else {
          sinksBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 5;</code>
       */
      public Builder addSinks(
          int index, proto.Module.ModuleSink value) {
        if (sinksBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSinksIsMutable();
          sinks_.add(index, value);
          onChanged();
        } else {
          sinksBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 5;</code>
       */
      public Builder addSinks(
          proto.Module.ModuleSink.Builder builderForValue) {
        if (sinksBuilder_ == null) {
          ensureSinksIsMutable();
          sinks_.add(builderForValue.build());
          onChanged();
        } else {
          sinksBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 5;</code>
       */
      public Builder addSinks(
          int index, proto.Module.ModuleSink.Builder builderForValue) {
        if (sinksBuilder_ == null) {
          ensureSinksIsMutable();
          sinks_.add(index, builderForValue.build());
          onChanged();
        } else {
          sinksBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 5;</code>
       */
      public Builder addAllSinks(
          java.lang.Iterable<? extends proto.Module.ModuleSink> values) {
        if (sinksBuilder_ == null) {
          ensureSinksIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, sinks_);
          onChanged();
        } else {
          sinksBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 5;</code>
       */
      public Builder clearSinks() {
        if (sinksBuilder_ == null) {
          sinks_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          sinksBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 5;</code>
       */
      public Builder removeSinks(int index) {
        if (sinksBuilder_ == null) {
          ensureSinksIsMutable();
          sinks_.remove(index);
          onChanged();
        } else {
          sinksBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 5;</code>
       */
      public proto.Module.ModuleSink.Builder getSinksBuilder(
          int index) {
        return getSinksFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 5;</code>
       */
      public proto.Module.ModuleSinkOrBuilder getSinksOrBuilder(
          int index) {
        if (sinksBuilder_ == null) {
          return sinks_.get(index);  } else {
          return sinksBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 5;</code>
       */
      public java.util.List<? extends proto.Module.ModuleSinkOrBuilder> 
           getSinksOrBuilderList() {
        if (sinksBuilder_ != null) {
          return sinksBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(sinks_);
        }
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 5;</code>
       */
      public proto.Module.ModuleSink.Builder addSinksBuilder() {
        return getSinksFieldBuilder().addBuilder(
            proto.Module.ModuleSink.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 5;</code>
       */
      public proto.Module.ModuleSink.Builder addSinksBuilder(
          int index) {
        return getSinksFieldBuilder().addBuilder(
            index, proto.Module.ModuleSink.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleSink sinks = 5;</code>
       */
      public java.util.List<proto.Module.ModuleSink.Builder> 
           getSinksBuilderList() {
        return getSinksFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleSink, proto.Module.ModuleSink.Builder, proto.Module.ModuleSinkOrBuilder> 
          getSinksFieldBuilder() {
        if (sinksBuilder_ == null) {
          sinksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Module.ModuleSink, proto.Module.ModuleSink.Builder, proto.Module.ModuleSinkOrBuilder>(
                  sinks_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          sinks_ = null;
        }
        return sinksBuilder_;
      }

      private java.util.List<proto.Module.ModuleTaintWrapper> taintWrappers_ =
        java.util.Collections.emptyList();
      private void ensureTaintWrappersIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          taintWrappers_ = new java.util.ArrayList<proto.Module.ModuleTaintWrapper>(taintWrappers_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleTaintWrapper, proto.Module.ModuleTaintWrapper.Builder, proto.Module.ModuleTaintWrapperOrBuilder> taintWrappersBuilder_;

      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
       */
      public java.util.List<proto.Module.ModuleTaintWrapper> getTaintWrappersList() {
        if (taintWrappersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(taintWrappers_);
        } else {
          return taintWrappersBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
       */
      public int getTaintWrappersCount() {
        if (taintWrappersBuilder_ == null) {
          return taintWrappers_.size();
        } else {
          return taintWrappersBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
       */
      public proto.Module.ModuleTaintWrapper getTaintWrappers(int index) {
        if (taintWrappersBuilder_ == null) {
          return taintWrappers_.get(index);
        } else {
          return taintWrappersBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
       */
      public Builder setTaintWrappers(
          int index, proto.Module.ModuleTaintWrapper value) {
        if (taintWrappersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTaintWrappersIsMutable();
          taintWrappers_.set(index, value);
          onChanged();
        } else {
          taintWrappersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
       */
      public Builder setTaintWrappers(
          int index, proto.Module.ModuleTaintWrapper.Builder builderForValue) {
        if (taintWrappersBuilder_ == null) {
          ensureTaintWrappersIsMutable();
          taintWrappers_.set(index, builderForValue.build());
          onChanged();
        } else {
          taintWrappersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
       */
      public Builder addTaintWrappers(proto.Module.ModuleTaintWrapper value) {
        if (taintWrappersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTaintWrappersIsMutable();
          taintWrappers_.add(value);
          onChanged();
        } else {
          taintWrappersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
       */
      public Builder addTaintWrappers(
          int index, proto.Module.ModuleTaintWrapper value) {
        if (taintWrappersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTaintWrappersIsMutable();
          taintWrappers_.add(index, value);
          onChanged();
        } else {
          taintWrappersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
       */
      public Builder addTaintWrappers(
          proto.Module.ModuleTaintWrapper.Builder builderForValue) {
        if (taintWrappersBuilder_ == null) {
          ensureTaintWrappersIsMutable();
          taintWrappers_.add(builderForValue.build());
          onChanged();
        } else {
          taintWrappersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
       */
      public Builder addTaintWrappers(
          int index, proto.Module.ModuleTaintWrapper.Builder builderForValue) {
        if (taintWrappersBuilder_ == null) {
          ensureTaintWrappersIsMutable();
          taintWrappers_.add(index, builderForValue.build());
          onChanged();
        } else {
          taintWrappersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
       */
      public Builder addAllTaintWrappers(
          java.lang.Iterable<? extends proto.Module.ModuleTaintWrapper> values) {
        if (taintWrappersBuilder_ == null) {
          ensureTaintWrappersIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, taintWrappers_);
          onChanged();
        } else {
          taintWrappersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
       */
      public Builder clearTaintWrappers() {
        if (taintWrappersBuilder_ == null) {
          taintWrappers_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          taintWrappersBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
       */
      public Builder removeTaintWrappers(int index) {
        if (taintWrappersBuilder_ == null) {
          ensureTaintWrappersIsMutable();
          taintWrappers_.remove(index);
          onChanged();
        } else {
          taintWrappersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
       */
      public proto.Module.ModuleTaintWrapper.Builder getTaintWrappersBuilder(
          int index) {
        return getTaintWrappersFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
       */
      public proto.Module.ModuleTaintWrapperOrBuilder getTaintWrappersOrBuilder(
          int index) {
        if (taintWrappersBuilder_ == null) {
          return taintWrappers_.get(index);  } else {
          return taintWrappersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
       */
      public java.util.List<? extends proto.Module.ModuleTaintWrapperOrBuilder> 
           getTaintWrappersOrBuilderList() {
        if (taintWrappersBuilder_ != null) {
          return taintWrappersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(taintWrappers_);
        }
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
       */
      public proto.Module.ModuleTaintWrapper.Builder addTaintWrappersBuilder() {
        return getTaintWrappersFieldBuilder().addBuilder(
            proto.Module.ModuleTaintWrapper.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
       */
      public proto.Module.ModuleTaintWrapper.Builder addTaintWrappersBuilder(
          int index) {
        return getTaintWrappersFieldBuilder().addBuilder(
            index, proto.Module.ModuleTaintWrapper.getDefaultInstance());
      }
      /**
       * <code>repeated .proto.ModuleTaintWrapper taint_wrappers = 6;</code>
       */
      public java.util.List<proto.Module.ModuleTaintWrapper.Builder> 
           getTaintWrappersBuilderList() {
        return getTaintWrappersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          proto.Module.ModuleTaintWrapper, proto.Module.ModuleTaintWrapper.Builder, proto.Module.ModuleTaintWrapperOrBuilder> 
          getTaintWrappersFieldBuilder() {
        if (taintWrappersBuilder_ == null) {
          taintWrappersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              proto.Module.ModuleTaintWrapper, proto.Module.ModuleTaintWrapper.Builder, proto.Module.ModuleTaintWrapperOrBuilder>(
                  taintWrappers_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          taintWrappers_ = null;
        }
        return taintWrappersBuilder_;
      }
      @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:proto.ModuleStatic)
    }

    // @@protoc_insertion_point(class_scope:proto.ModuleStatic)
    private static final proto.Module.ModuleStatic DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new proto.Module.ModuleStatic();
    }

    public static proto.Module.ModuleStatic getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public proto.Module.ModuleStatic getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_ModuleSource_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_ModuleSource_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_ModuleSink_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_ModuleSink_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_ModuleTaintWrapper_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_ModuleTaintWrapper_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_ModuleTaintWrapper_TaintPoint_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_ModuleTaintWrapper_TaintPoint_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_ModuleTaintWrapper_TaintRule_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_ModuleTaintWrapper_TaintRule_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_ModuleFlow_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_ModuleFlow_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_ModuleFlow_FlowInfo_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_ModuleFlow_FlowInfo_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_ModuleDanger_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_ModuleDanger_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_ModuleSummary_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_ModuleSummary_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_ModuleResult_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_ModuleResult_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_proto_ModuleStatic_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_proto_ModuleStatic_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\014module.proto\022\005proto\032\tast.proto\032\ninfo.p" +
      "roto\"W\n\014ModuleSource\022\034\n\004node\030\001 \001(\0132\016.pro" +
      "to.AstNode\022)\n\021reachable_sources\030\002 \003(\0132\016." +
      "proto.AstNode\"S\n\nModuleSink\022\034\n\004node\030\001 \001(" +
      "\0132\016.proto.AstNode\022\'\n\017reachable_sinks\030\002 \003" +
      "(\0132\016.proto.AstNode\"\217\002\n\022ModuleTaintWrappe" +
      "r\022\034\n\004node\030\001 \001(\0132\016.proto.AstNode\0222\n\005rules" +
      "\030\002 \003(\0132#.proto.ModuleTaintWrapper.TaintR" +
      "ule\032.\n\nTaintPoint\022\n\n\002id\030\001 \001(\005\022\024\n\014access_" +
      "paths\030\002 \003(\t\032w\n\tTaintRule\0223\n\005cause\030\001 \001(\0132" +
      "$.proto.ModuleTaintWrapper.TaintPoint\0225\n" +
      "\007effects\030\002 \003(\0132$.proto.ModuleTaintWrappe" +
      "r.TaintPoint\"\307\001\n\nModuleFlow\022\036\n\006source\030\001 " +
      "\001(\0132\016.proto.AstNode\022\034\n\004hops\030\002 \003(\0132\016.prot" +
      "o.AstNode\022\034\n\004sink\030\003 \001(\0132\016.proto.AstNode\022" +
      "(\n\004info\030\004 \001(\0132\032.proto.ModuleFlow.FlowInf" +
      "o\0323\n\010FlowInfo\022\014\n\004name\030\001 \001(\t\022\013\n\003cwe\030\002 \001(\t" +
      "\022\014\n\004type\030\003 \001(\t\"N\n\014ModuleDanger\022\036\n\006danger" +
      "\030\001 \001(\0132\016.proto.AstNode\022\036\n\006slices\030\002 \003(\0132\016" +
      ".proto.AstNode\"\264\001\n\rModuleSummary\022(\n\014pack" +
      "age_info\030\001 \001(\0132\022.proto.PackageInfo\022$\n\007so" +
      "urces\030\002 \003(\0132\023.proto.ModuleSource\022 \n\005sink" +
      "s\030\003 \003(\0132\021.proto.ModuleSink\0221\n\016taint_wrap" +
      "pers\030\004 \003(\0132\031.proto.ModuleTaintWrapper\"\200\001" +
      "\n\014ModuleResult\022(\n\014package_info\030\001 \001(\0132\022.p" +
      "roto.PackageInfo\022 \n\005flows\030\002 \003(\0132\021.proto." +
      "ModuleFlow\022$\n\007dangers\030\003 \003(\0132\023.proto.Modu" +
      "leDanger\"\373\001\n\014ModuleStatic\022(\n\014package_inf" +
      "o\030\001 \001(\0132\022.proto.PackageInfo\022 \n\005flows\030\002 \003" +
      "(\0132\021.proto.ModuleFlow\022$\n\007dangers\030\003 \003(\0132\023" +
      ".proto.ModuleDanger\022$\n\007sources\030\004 \003(\0132\023.p" +
      "roto.ModuleSource\022 \n\005sinks\030\005 \003(\0132\021.proto" +
      ".ModuleSink\0221\n\016taint_wrappers\030\006 \003(\0132\031.pr" +
      "oto.ModuleTaintWrapperb\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[] {
          proto.Ast.getDescriptor(),
          proto.Info.getDescriptor(),
        }, assigner);
    internal_static_proto_ModuleSource_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_proto_ModuleSource_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_ModuleSource_descriptor,
        new java.lang.String[] { "Node", "ReachableSources", });
    internal_static_proto_ModuleSink_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_proto_ModuleSink_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_ModuleSink_descriptor,
        new java.lang.String[] { "Node", "ReachableSinks", });
    internal_static_proto_ModuleTaintWrapper_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_proto_ModuleTaintWrapper_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_ModuleTaintWrapper_descriptor,
        new java.lang.String[] { "Node", "Rules", });
    internal_static_proto_ModuleTaintWrapper_TaintPoint_descriptor =
      internal_static_proto_ModuleTaintWrapper_descriptor.getNestedTypes().get(0);
    internal_static_proto_ModuleTaintWrapper_TaintPoint_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_ModuleTaintWrapper_TaintPoint_descriptor,
        new java.lang.String[] { "Id", "AccessPaths", });
    internal_static_proto_ModuleTaintWrapper_TaintRule_descriptor =
      internal_static_proto_ModuleTaintWrapper_descriptor.getNestedTypes().get(1);
    internal_static_proto_ModuleTaintWrapper_TaintRule_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_ModuleTaintWrapper_TaintRule_descriptor,
        new java.lang.String[] { "Cause", "Effects", });
    internal_static_proto_ModuleFlow_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_proto_ModuleFlow_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_ModuleFlow_descriptor,
        new java.lang.String[] { "Source", "Hops", "Sink", "Info", });
    internal_static_proto_ModuleFlow_FlowInfo_descriptor =
      internal_static_proto_ModuleFlow_descriptor.getNestedTypes().get(0);
    internal_static_proto_ModuleFlow_FlowInfo_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_ModuleFlow_FlowInfo_descriptor,
        new java.lang.String[] { "Name", "Cwe", "Type", });
    internal_static_proto_ModuleDanger_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_proto_ModuleDanger_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_ModuleDanger_descriptor,
        new java.lang.String[] { "Danger", "Slices", });
    internal_static_proto_ModuleSummary_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_proto_ModuleSummary_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_ModuleSummary_descriptor,
        new java.lang.String[] { "PackageInfo", "Sources", "Sinks", "TaintWrappers", });
    internal_static_proto_ModuleResult_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_proto_ModuleResult_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_ModuleResult_descriptor,
        new java.lang.String[] { "PackageInfo", "Flows", "Dangers", });
    internal_static_proto_ModuleStatic_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_proto_ModuleStatic_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_proto_ModuleStatic_descriptor,
        new java.lang.String[] { "PackageInfo", "Flows", "Dangers", "Sources", "Sinks", "TaintWrappers", });
    proto.Ast.getDescriptor();
    proto.Info.getDescriptor();
  }

  // @@protoc_insertion_point(outer_class_scope)
}
