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

package us.ihmc.aci.ddam;

/**
 * Protobuf type {@code ddam.ReadableNode}
 *
 * <pre>
 *ReadableNode represents the Readable version of a Node
 * </pre>
 */
public  final class ReadableNode extends
    com.google.protobuf.GeneratedMessage implements
    // @@protoc_insertion_point(message_implements:ddam.ReadableNode)
    ReadableNodeOrBuilder {
  // Use ReadableNode.newBuilder() to construct.
  private ReadableNode(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
    super(builder);
  }
  private ReadableNode() {
    id_ = "";
    name_ = "";
  }

  @java.lang.Override
  public final com.google.protobuf.UnknownFieldSet
  getUnknownFields() {
    return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
  }
  private ReadableNode(
      com.google.protobuf.CodedInputStream input,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
    this();
    int mutable_bitField0_ = 0;
    try {
      boolean done = false;
      while (!done) {
        int tag = input.readTag();
        switch (tag) {
          case 0:
            done = true;
            break;
          default: {
            if (!input.skipField(tag)) {
              done = true;
            }
            break;
          }
          case 10: {
            java.lang.String s = input.readStringRequireUtf8();

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

            name_ = s;
            break;
          }
          case 26: {
            us.ihmc.aci.ddam.Info.Builder subBuilder = null;
            if (info_ != null) {
              subBuilder = info_.toBuilder();
            }
            info_ = input.readMessage(us.ihmc.aci.ddam.Info.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(info_);
              info_ = subBuilder.buildPartial();
            }

            break;
          }
          case 34: {
            us.ihmc.aci.ddam.Grump.Builder subBuilder = null;
            if (grump_ != null) {
              subBuilder = grump_.toBuilder();
            }
            grump_ = input.readMessage(us.ihmc.aci.ddam.Grump.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(grump_);
              grump_ = subBuilder.buildPartial();
            }

            break;
          }
          case 42: {
            us.ihmc.aci.ddam.ReadableTraffic.Builder subBuilder = null;
            if (traffic_ != null) {
              subBuilder = traffic_.toBuilder();
            }
            traffic_ = input.readMessage(us.ihmc.aci.ddam.ReadableTraffic.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(traffic_);
              traffic_ = subBuilder.buildPartial();
            }

            break;
          }
          case 50: {
            if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
              topology_ = com.google.protobuf.MapField.newMapField(
                  TopologyDefaultEntryHolder.defaultEntry);
              mutable_bitField0_ |= 0x00000020;
            }
            com.google.protobuf.MapEntry<java.lang.String, us.ihmc.aci.ddam.ReadableTopology>
            topology = input.readMessage(
                TopologyDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
            topology_.getMutableMap().put(topology.getKey(), topology.getValue());
            break;
          }
          case 58: {
            if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
              networkHealth_ = com.google.protobuf.MapField.newMapField(
                  NetworkHealthDefaultEntryHolder.defaultEntry);
              mutable_bitField0_ |= 0x00000040;
            }
            com.google.protobuf.MapEntry<java.lang.String, us.ihmc.aci.ddam.NetworkHealth>
            networkHealth = input.readMessage(
                NetworkHealthDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
            networkHealth_.getMutableMap().put(networkHealth.getKey(), networkHealth.getValue());
            break;
          }
          case 66: {
            com.google.protobuf.Timestamp.Builder subBuilder = null;
            if (timestamp_ != null) {
              subBuilder = timestamp_.toBuilder();
            }
            timestamp_ = input.readMessage(com.google.protobuf.Timestamp.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(timestamp_);
              timestamp_ = subBuilder.buildPartial();
            }

            break;
          }
        }
      }
    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
      throw new RuntimeException(e.setUnfinishedMessage(this));
    } catch (java.io.IOException e) {
      throw new RuntimeException(
          new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this));
    } finally {
      makeExtensionsImmutable();
    }
  }
  public static final com.google.protobuf.Descriptors.Descriptor
      getDescriptor() {
    return us.ihmc.aci.ddam.NodeProto.internal_static_ddam_ReadableNode_descriptor;
  }

  @SuppressWarnings({"rawtypes"})
  protected com.google.protobuf.MapField internalGetMapField(
      int number) {
    switch (number) {
      case 6:
        return internalGetTopology();
      case 7:
        return internalGetNetworkHealth();
      default:
        throw new RuntimeException(
            "Invalid map field number: " + number);
    }
  }
  protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internalGetFieldAccessorTable() {
    return us.ihmc.aci.ddam.NodeProto.internal_static_ddam_ReadableNode_fieldAccessorTable
        .ensureFieldAccessorsInitialized(
            us.ihmc.aci.ddam.ReadableNode.class, us.ihmc.aci.ddam.ReadableNode.Builder.class);
  }

  private int bitField0_;
  public static final int ID_FIELD_NUMBER = 1;
  private volatile java.lang.Object id_;
  /**
   * <code>optional string id = 1;</code>
   *
   * <pre>
   *the id of the node
   * </pre>
   */
  public java.lang.String getId() {
    java.lang.Object ref = id_;
    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();
      id_ = s;
      return s;
    }
  }
  /**
   * <code>optional string id = 1;</code>
   *
   * <pre>
   *the id of the node
   * </pre>
   */
  public com.google.protobuf.ByteString
      getIdBytes() {
    java.lang.Object ref = id_;
    if (ref instanceof java.lang.String) {
      com.google.protobuf.ByteString b = 
          com.google.protobuf.ByteString.copyFromUtf8(
              (java.lang.String) ref);
      id_ = b;
      return b;
    } else {
      return (com.google.protobuf.ByteString) ref;
    }
  }

  public static final int NAME_FIELD_NUMBER = 2;
  private volatile java.lang.Object name_;
  /**
   * <code>optional string name = 2;</code>
   *
   * <pre>
   *the name of the node
   * </pre>
   */
  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>optional string name = 2;</code>
   *
   * <pre>
   *the name of the node
   * </pre>
   */
  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 INFO_FIELD_NUMBER = 3;
  private us.ihmc.aci.ddam.Info info_;
  /**
   * <code>optional .ddam.Info info = 3;</code>
   *
   * <pre>
   *generic information about the node like: OS, CPU, Network interface cards etc.
   * </pre>
   */
  public boolean hasInfo() {
    return info_ != null;
  }
  /**
   * <code>optional .ddam.Info info = 3;</code>
   *
   * <pre>
   *generic information about the node like: OS, CPU, Network interface cards etc.
   * </pre>
   */
  public us.ihmc.aci.ddam.Info getInfo() {
    return info_ == null ? us.ihmc.aci.ddam.Info.getDefaultInstance() : info_;
  }
  /**
   * <code>optional .ddam.Info info = 3;</code>
   *
   * <pre>
   *generic information about the node like: OS, CPU, Network interface cards etc.
   * </pre>
   */
  public us.ihmc.aci.ddam.InfoOrBuilder getInfoOrBuilder() {
    return getInfo();
  }

  public static final int GRUMP_FIELD_NUMBER = 4;
  private us.ihmc.aci.ddam.Grump grump_;
  /**
   * <code>optional .ddam.Grump grump = 4;</code>
   *
   * <pre>
   *information detected with Grump (GroupManager)
   * </pre>
   */
  public boolean hasGrump() {
    return grump_ != null;
  }
  /**
   * <code>optional .ddam.Grump grump = 4;</code>
   *
   * <pre>
   *information detected with Grump (GroupManager)
   * </pre>
   */
  public us.ihmc.aci.ddam.Grump getGrump() {
    return grump_ == null ? us.ihmc.aci.ddam.Grump.getDefaultInstance() : grump_;
  }
  /**
   * <code>optional .ddam.Grump grump = 4;</code>
   *
   * <pre>
   *information detected with Grump (GroupManager)
   * </pre>
   */
  public us.ihmc.aci.ddam.GrumpOrBuilder getGrumpOrBuilder() {
    return getGrump();
  }

  public static final int TRAFFIC_FIELD_NUMBER = 5;
  private us.ihmc.aci.ddam.ReadableTraffic traffic_;
  /**
   * <code>optional .ddam.ReadableTraffic traffic = 5;</code>
   *
   * <pre>
   *information related to the current Traffic (detected by NetSensor, Links info inferred by NetSupervisor)
   * </pre>
   */
  public boolean hasTraffic() {
    return traffic_ != null;
  }
  /**
   * <code>optional .ddam.ReadableTraffic traffic = 5;</code>
   *
   * <pre>
   *information related to the current Traffic (detected by NetSensor, Links info inferred by NetSupervisor)
   * </pre>
   */
  public us.ihmc.aci.ddam.ReadableTraffic getTraffic() {
    return traffic_ == null ? us.ihmc.aci.ddam.ReadableTraffic.getDefaultInstance() : traffic_;
  }
  /**
   * <code>optional .ddam.ReadableTraffic traffic = 5;</code>
   *
   * <pre>
   *information related to the current Traffic (detected by NetSensor, Links info inferred by NetSupervisor)
   * </pre>
   */
  public us.ihmc.aci.ddam.ReadableTrafficOrBuilder getTrafficOrBuilder() {
    return getTraffic();
  }

  public static final int TOPOLOGY_FIELD_NUMBER = 6;
  private static final class TopologyDefaultEntryHolder {
    static final com.google.protobuf.MapEntry<
        java.lang.String, us.ihmc.aci.ddam.ReadableTopology> defaultEntry =
            com.google.protobuf.MapEntry
            .<java.lang.String, us.ihmc.aci.ddam.ReadableTopology>newDefaultInstance(
                us.ihmc.aci.ddam.NodeProto.internal_static_ddam_ReadableNode_TopologyEntry_descriptor, 
                com.google.protobuf.WireFormat.FieldType.STRING,
                "",
                com.google.protobuf.WireFormat.FieldType.MESSAGE,
                us.ihmc.aci.ddam.ReadableTopology.getDefaultInstance());
  }
  private com.google.protobuf.MapField<
      java.lang.String, us.ihmc.aci.ddam.ReadableTopology> topology_;
  private com.google.protobuf.MapField<java.lang.String, us.ihmc.aci.ddam.ReadableTopology>
  internalGetTopology() {
    if (topology_ == null) {
      return com.google.protobuf.MapField.emptyMapField(
          TopologyDefaultEntryHolder.defaultEntry);
   }
    return topology_;
  }
  /**
   * <code>map&lt;string, .ddam.ReadableTopology&gt; topology = 6;</code>
   *
   * <pre>
   *topology related information, every topology associated to a network name in case of multiple topologies
   * </pre>
   */

  public java.util.Map<java.lang.String, us.ihmc.aci.ddam.ReadableTopology> getTopology() {
    return internalGetTopology().getMap();
  }

  public static final int NETWORKHEALTH_FIELD_NUMBER = 7;
  private static final class NetworkHealthDefaultEntryHolder {
    static final com.google.protobuf.MapEntry<
        java.lang.String, us.ihmc.aci.ddam.NetworkHealth> defaultEntry =
            com.google.protobuf.MapEntry
            .<java.lang.String, us.ihmc.aci.ddam.NetworkHealth>newDefaultInstance(
                us.ihmc.aci.ddam.NodeProto.internal_static_ddam_ReadableNode_NetworkHealthEntry_descriptor, 
                com.google.protobuf.WireFormat.FieldType.STRING,
                "",
                com.google.protobuf.WireFormat.FieldType.MESSAGE,
                us.ihmc.aci.ddam.NetworkHealth.getDefaultInstance());
  }
  private com.google.protobuf.MapField<
      java.lang.String, us.ihmc.aci.ddam.NetworkHealth> networkHealth_;
  private com.google.protobuf.MapField<java.lang.String, us.ihmc.aci.ddam.NetworkHealth>
  internalGetNetworkHealth() {
    if (networkHealth_ == null) {
      return com.google.protobuf.MapField.emptyMapField(
          NetworkHealthDefaultEntryHolder.defaultEntry);
   }
    return networkHealth_;
  }
  /**
   * <code>map&lt;string, .ddam.NetworkHealth&gt; networkHealth = 7;</code>
   *
   * <pre>
   *network health summary, every network health is associated to a network name (map id)
   * </pre>
   */

  public java.util.Map<java.lang.String, us.ihmc.aci.ddam.NetworkHealth> getNetworkHealth() {
    return internalGetNetworkHealth().getMap();
  }

  public static final int TIMESTAMP_FIELD_NUMBER = 8;
  private com.google.protobuf.Timestamp timestamp_;
  /**
   * <code>optional .google.protobuf.Timestamp timestamp = 8;</code>
   *
   * <pre>
   *time this object was created 
   * </pre>
   */
  public boolean hasTimestamp() {
    return timestamp_ != null;
  }
  /**
   * <code>optional .google.protobuf.Timestamp timestamp = 8;</code>
   *
   * <pre>
   *time this object was created 
   * </pre>
   */
  public com.google.protobuf.Timestamp getTimestamp() {
    return timestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : timestamp_;
  }
  /**
   * <code>optional .google.protobuf.Timestamp timestamp = 8;</code>
   *
   * <pre>
   *time this object was created 
   * </pre>
   */
  public com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder() {
    return getTimestamp();
  }

  private byte memoizedIsInitialized = -1;
  public final boolean isInitialized() {
    byte isInitialized = memoizedIsInitialized;
    if (isInitialized == 1) return true;
    if (isInitialized == 0) return false;

    memoizedIsInitialized = 1;
    return true;
  }

  public void writeTo(com.google.protobuf.CodedOutputStream output)
                      throws java.io.IOException {
    if (!getIdBytes().isEmpty()) {
      com.google.protobuf.GeneratedMessage.writeString(output, 1, id_);
    }
    if (!getNameBytes().isEmpty()) {
      com.google.protobuf.GeneratedMessage.writeString(output, 2, name_);
    }
    if (info_ != null) {
      output.writeMessage(3, getInfo());
    }
    if (grump_ != null) {
      output.writeMessage(4, getGrump());
    }
    if (traffic_ != null) {
      output.writeMessage(5, getTraffic());
    }
    for (java.util.Map.Entry<java.lang.String, us.ihmc.aci.ddam.ReadableTopology> entry
         : internalGetTopology().getMap().entrySet()) {
      com.google.protobuf.MapEntry<java.lang.String, us.ihmc.aci.ddam.ReadableTopology>
      topology = TopologyDefaultEntryHolder.defaultEntry.newBuilderForType()
          .setKey(entry.getKey())
          .setValue(entry.getValue())
          .build();
      output.writeMessage(6, topology);
    }
    for (java.util.Map.Entry<java.lang.String, us.ihmc.aci.ddam.NetworkHealth> entry
         : internalGetNetworkHealth().getMap().entrySet()) {
      com.google.protobuf.MapEntry<java.lang.String, us.ihmc.aci.ddam.NetworkHealth>
      networkHealth = NetworkHealthDefaultEntryHolder.defaultEntry.newBuilderForType()
          .setKey(entry.getKey())
          .setValue(entry.getValue())
          .build();
      output.writeMessage(7, networkHealth);
    }
    if (timestamp_ != null) {
      output.writeMessage(8, getTimestamp());
    }
  }

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

    size = 0;
    if (!getIdBytes().isEmpty()) {
      size += com.google.protobuf.GeneratedMessage.computeStringSize(1, id_);
    }
    if (!getNameBytes().isEmpty()) {
      size += com.google.protobuf.GeneratedMessage.computeStringSize(2, name_);
    }
    if (info_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(3, getInfo());
    }
    if (grump_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(4, getGrump());
    }
    if (traffic_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(5, getTraffic());
    }
    for (java.util.Map.Entry<java.lang.String, us.ihmc.aci.ddam.ReadableTopology> entry
         : internalGetTopology().getMap().entrySet()) {
      com.google.protobuf.MapEntry<java.lang.String, us.ihmc.aci.ddam.ReadableTopology>
      topology = TopologyDefaultEntryHolder.defaultEntry.newBuilderForType()
          .setKey(entry.getKey())
          .setValue(entry.getValue())
          .build();
      size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, topology);
    }
    for (java.util.Map.Entry<java.lang.String, us.ihmc.aci.ddam.NetworkHealth> entry
         : internalGetNetworkHealth().getMap().entrySet()) {
      com.google.protobuf.MapEntry<java.lang.String, us.ihmc.aci.ddam.NetworkHealth>
      networkHealth = NetworkHealthDefaultEntryHolder.defaultEntry.newBuilderForType()
          .setKey(entry.getKey())
          .setValue(entry.getValue())
          .build();
      size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, networkHealth);
    }
    if (timestamp_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(8, getTimestamp());
    }
    memoizedSize = size;
    return size;
  }

  private static final long serialVersionUID = 0L;
  @java.lang.Override
  public boolean equals(final java.lang.Object obj) {
    if (obj == this) {
     return true;
    }
    if (!(obj instanceof us.ihmc.aci.ddam.ReadableNode)) {
      return super.equals(obj);
    }
    us.ihmc.aci.ddam.ReadableNode other = (us.ihmc.aci.ddam.ReadableNode) obj;

    boolean result = true;
    result = result && getId()
        .equals(other.getId());
    result = result && getName()
        .equals(other.getName());
    result = result && (hasInfo() == other.hasInfo());
    if (hasInfo()) {
      result = result && getInfo()
          .equals(other.getInfo());
    }
    result = result && (hasGrump() == other.hasGrump());
    if (hasGrump()) {
      result = result && getGrump()
          .equals(other.getGrump());
    }
    result = result && (hasTraffic() == other.hasTraffic());
    if (hasTraffic()) {
      result = result && getTraffic()
          .equals(other.getTraffic());
    }
    result = result && internalGetTopology().equals(
        other.internalGetTopology());
    result = result && internalGetNetworkHealth().equals(
        other.internalGetNetworkHealth());
    result = result && (hasTimestamp() == other.hasTimestamp());
    if (hasTimestamp()) {
      result = result && getTimestamp()
          .equals(other.getTimestamp());
    }
    return result;
  }

  @java.lang.Override
  public int hashCode() {
    if (memoizedHashCode != 0) {
      return memoizedHashCode;
    }
    int hash = 41;
    hash = (19 * hash) + getDescriptorForType().hashCode();
    hash = (37 * hash) + ID_FIELD_NUMBER;
    hash = (53 * hash) + getId().hashCode();
    hash = (37 * hash) + NAME_FIELD_NUMBER;
    hash = (53 * hash) + getName().hashCode();
    if (hasInfo()) {
      hash = (37 * hash) + INFO_FIELD_NUMBER;
      hash = (53 * hash) + getInfo().hashCode();
    }
    if (hasGrump()) {
      hash = (37 * hash) + GRUMP_FIELD_NUMBER;
      hash = (53 * hash) + getGrump().hashCode();
    }
    if (hasTraffic()) {
      hash = (37 * hash) + TRAFFIC_FIELD_NUMBER;
      hash = (53 * hash) + getTraffic().hashCode();
    }
    if (!internalGetTopology().getMap().isEmpty()) {
      hash = (37 * hash) + TOPOLOGY_FIELD_NUMBER;
      hash = (53 * hash) + internalGetTopology().hashCode();
    }
    if (!internalGetNetworkHealth().getMap().isEmpty()) {
      hash = (37 * hash) + NETWORKHEALTH_FIELD_NUMBER;
      hash = (53 * hash) + internalGetNetworkHealth().hashCode();
    }
    if (hasTimestamp()) {
      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
      hash = (53 * hash) + getTimestamp().hashCode();
    }
    hash = (29 * hash) + unknownFields.hashCode();
    memoizedHashCode = hash;
    return hash;
  }

  public static us.ihmc.aci.ddam.ReadableNode parseFrom(
      com.google.protobuf.ByteString data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static us.ihmc.aci.ddam.ReadableNode parseFrom(
      com.google.protobuf.ByteString data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static us.ihmc.aci.ddam.ReadableNode parseFrom(byte[] data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static us.ihmc.aci.ddam.ReadableNode parseFrom(
      byte[] data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static us.ihmc.aci.ddam.ReadableNode parseFrom(java.io.InputStream input)
      throws java.io.IOException {
    return PARSER.parseFrom(input);
  }
  public static us.ihmc.aci.ddam.ReadableNode parseFrom(
      java.io.InputStream input,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws java.io.IOException {
    return PARSER.parseFrom(input, extensionRegistry);
  }
  public static us.ihmc.aci.ddam.ReadableNode parseDelimitedFrom(java.io.InputStream input)
      throws java.io.IOException {
    return PARSER.parseDelimitedFrom(input);
  }
  public static us.ihmc.aci.ddam.ReadableNode parseDelimitedFrom(
      java.io.InputStream input,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws java.io.IOException {
    return PARSER.parseDelimitedFrom(input, extensionRegistry);
  }
  public static us.ihmc.aci.ddam.ReadableNode parseFrom(
      com.google.protobuf.CodedInputStream input)
      throws java.io.IOException {
    return PARSER.parseFrom(input);
  }
  public static us.ihmc.aci.ddam.ReadableNode parseFrom(
      com.google.protobuf.CodedInputStream input,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws java.io.IOException {
    return PARSER.parseFrom(input, extensionRegistry);
  }

  public Builder newBuilderForType() { return newBuilder(); }
  public static Builder newBuilder() {
    return DEFAULT_INSTANCE.toBuilder();
  }
  public static Builder newBuilder(us.ihmc.aci.ddam.ReadableNode prototype) {
    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
  }
  public Builder toBuilder() {
    return this == DEFAULT_INSTANCE
        ? new Builder() : new Builder().mergeFrom(this);
  }

  @java.lang.Override
  protected Builder newBuilderForType(
      com.google.protobuf.GeneratedMessage.BuilderParent parent) {
    Builder builder = new Builder(parent);
    return builder;
  }
  /**
   * Protobuf type {@code ddam.ReadableNode}
   *
   * <pre>
   *ReadableNode represents the Readable version of a Node
   * </pre>
   */
  public static final class Builder extends
      com.google.protobuf.GeneratedMessage.Builder<Builder> implements
      // @@protoc_insertion_point(builder_implements:ddam.ReadableNode)
      us.ihmc.aci.ddam.ReadableNodeOrBuilder {
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return us.ihmc.aci.ddam.NodeProto.internal_static_ddam_ReadableNode_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 6:
          return internalGetTopology();
        case 7:
          return internalGetNetworkHealth();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    @SuppressWarnings({"rawtypes"})
    protected com.google.protobuf.MapField internalGetMutableMapField(
        int number) {
      switch (number) {
        case 6:
          return internalGetMutableTopology();
        case 7:
          return internalGetMutableNetworkHealth();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return us.ihmc.aci.ddam.NodeProto.internal_static_ddam_ReadableNode_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              us.ihmc.aci.ddam.ReadableNode.class, us.ihmc.aci.ddam.ReadableNode.Builder.class);
    }

    // Construct using us.ihmc.aci.ddam.ReadableNode.newBuilder()
    private Builder() {
      maybeForceBuilderInitialization();
    }

    private Builder(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      super(parent);
      maybeForceBuilderInitialization();
    }
    private void maybeForceBuilderInitialization() {
      if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
      }
    }
    public Builder clear() {
      super.clear();
      id_ = "";

      name_ = "";

      if (infoBuilder_ == null) {
        info_ = null;
      } else {
        info_ = null;
        infoBuilder_ = null;
      }
      if (grumpBuilder_ == null) {
        grump_ = null;
      } else {
        grump_ = null;
        grumpBuilder_ = null;
      }
      if (trafficBuilder_ == null) {
        traffic_ = null;
      } else {
        traffic_ = null;
        trafficBuilder_ = null;
      }
      internalGetMutableTopology().clear();
      internalGetMutableNetworkHealth().clear();
      if (timestampBuilder_ == null) {
        timestamp_ = null;
      } else {
        timestamp_ = null;
        timestampBuilder_ = null;
      }
      return this;
    }

    public com.google.protobuf.Descriptors.Descriptor
        getDescriptorForType() {
      return us.ihmc.aci.ddam.NodeProto.internal_static_ddam_ReadableNode_descriptor;
    }

    public us.ihmc.aci.ddam.ReadableNode getDefaultInstanceForType() {
      return us.ihmc.aci.ddam.ReadableNode.getDefaultInstance();
    }

    public us.ihmc.aci.ddam.ReadableNode build() {
      us.ihmc.aci.ddam.ReadableNode result = buildPartial();
      if (!result.isInitialized()) {
        throw newUninitializedMessageException(result);
      }
      return result;
    }

    public us.ihmc.aci.ddam.ReadableNode buildPartial() {
      us.ihmc.aci.ddam.ReadableNode result = new us.ihmc.aci.ddam.ReadableNode(this);
      int from_bitField0_ = bitField0_;
      int to_bitField0_ = 0;
      result.id_ = id_;
      result.name_ = name_;
      if (infoBuilder_ == null) {
        result.info_ = info_;
      } else {
        result.info_ = infoBuilder_.build();
      }
      if (grumpBuilder_ == null) {
        result.grump_ = grump_;
      } else {
        result.grump_ = grumpBuilder_.build();
      }
      if (trafficBuilder_ == null) {
        result.traffic_ = traffic_;
      } else {
        result.traffic_ = trafficBuilder_.build();
      }
      result.topology_ = internalGetTopology();
      result.topology_.makeImmutable();
      result.networkHealth_ = internalGetNetworkHealth();
      result.networkHealth_.makeImmutable();
      if (timestampBuilder_ == null) {
        result.timestamp_ = timestamp_;
      } else {
        result.timestamp_ = timestampBuilder_.build();
      }
      result.bitField0_ = to_bitField0_;
      onBuilt();
      return result;
    }

    public Builder mergeFrom(com.google.protobuf.Message other) {
      if (other instanceof us.ihmc.aci.ddam.ReadableNode) {
        return mergeFrom((us.ihmc.aci.ddam.ReadableNode)other);
      } else {
        super.mergeFrom(other);
        return this;
      }
    }

    public Builder mergeFrom(us.ihmc.aci.ddam.ReadableNode other) {
      if (other == us.ihmc.aci.ddam.ReadableNode.getDefaultInstance()) return this;
      if (!other.getId().isEmpty()) {
        id_ = other.id_;
        onChanged();
      }
      if (!other.getName().isEmpty()) {
        name_ = other.name_;
        onChanged();
      }
      if (other.hasInfo()) {
        mergeInfo(other.getInfo());
      }
      if (other.hasGrump()) {
        mergeGrump(other.getGrump());
      }
      if (other.hasTraffic()) {
        mergeTraffic(other.getTraffic());
      }
      internalGetMutableTopology().mergeFrom(
          other.internalGetTopology());
      internalGetMutableNetworkHealth().mergeFrom(
          other.internalGetNetworkHealth());
      if (other.hasTimestamp()) {
        mergeTimestamp(other.getTimestamp());
      }
      onChanged();
      return this;
    }

    public final boolean isInitialized() {
      return true;
    }

    public Builder mergeFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      us.ihmc.aci.ddam.ReadableNode parsedMessage = null;
      try {
        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        parsedMessage = (us.ihmc.aci.ddam.ReadableNode) e.getUnfinishedMessage();
        throw e;
      } finally {
        if (parsedMessage != null) {
          mergeFrom(parsedMessage);
        }
      }
      return this;
    }
    private int bitField0_;

    private java.lang.Object id_ = "";
    /**
     * <code>optional string id = 1;</code>
     *
     * <pre>
     *the id of the node
     * </pre>
     */
    public java.lang.String getId() {
      java.lang.Object ref = id_;
      if (!(ref instanceof java.lang.String)) {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        id_ = s;
        return s;
      } else {
        return (java.lang.String) ref;
      }
    }
    /**
     * <code>optional string id = 1;</code>
     *
     * <pre>
     *the id of the node
     * </pre>
     */
    public com.google.protobuf.ByteString
        getIdBytes() {
      java.lang.Object ref = id_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        id_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    /**
     * <code>optional string id = 1;</code>
     *
     * <pre>
     *the id of the node
     * </pre>
     */
    public Builder setId(
        java.lang.String value) {
      if (value == null) {
    throw new NullPointerException();
  }
  
      id_ = value;
      onChanged();
      return this;
    }
    /**
     * <code>optional string id = 1;</code>
     *
     * <pre>
     *the id of the node
     * </pre>
     */
    public Builder clearId() {
      
      id_ = getDefaultInstance().getId();
      onChanged();
      return this;
    }
    /**
     * <code>optional string id = 1;</code>
     *
     * <pre>
     *the id of the node
     * </pre>
     */
    public Builder setIdBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
      
      id_ = value;
      onChanged();
      return this;
    }

    private java.lang.Object name_ = "";
    /**
     * <code>optional string name = 2;</code>
     *
     * <pre>
     *the name of the node
     * </pre>
     */
    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>optional string name = 2;</code>
     *
     * <pre>
     *the name of the node
     * </pre>
     */
    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>optional string name = 2;</code>
     *
     * <pre>
     *the name of the node
     * </pre>
     */
    public Builder setName(
        java.lang.String value) {
      if (value == null) {
    throw new NullPointerException();
  }
  
      name_ = value;
      onChanged();
      return this;
    }
    /**
     * <code>optional string name = 2;</code>
     *
     * <pre>
     *the name of the node
     * </pre>
     */
    public Builder clearName() {
      
      name_ = getDefaultInstance().getName();
      onChanged();
      return this;
    }
    /**
     * <code>optional string name = 2;</code>
     *
     * <pre>
     *the name of the node
     * </pre>
     */
    public Builder setNameBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
      
      name_ = value;
      onChanged();
      return this;
    }

    private us.ihmc.aci.ddam.Info info_ = null;
    private com.google.protobuf.SingleFieldBuilder<
        us.ihmc.aci.ddam.Info, us.ihmc.aci.ddam.Info.Builder, us.ihmc.aci.ddam.InfoOrBuilder> infoBuilder_;
    /**
     * <code>optional .ddam.Info info = 3;</code>
     *
     * <pre>
     *generic information about the node like: OS, CPU, Network interface cards etc.
     * </pre>
     */
    public boolean hasInfo() {
      return infoBuilder_ != null || info_ != null;
    }
    /**
     * <code>optional .ddam.Info info = 3;</code>
     *
     * <pre>
     *generic information about the node like: OS, CPU, Network interface cards etc.
     * </pre>
     */
    public us.ihmc.aci.ddam.Info getInfo() {
      if (infoBuilder_ == null) {
        return info_ == null ? us.ihmc.aci.ddam.Info.getDefaultInstance() : info_;
      } else {
        return infoBuilder_.getMessage();
      }
    }
    /**
     * <code>optional .ddam.Info info = 3;</code>
     *
     * <pre>
     *generic information about the node like: OS, CPU, Network interface cards etc.
     * </pre>
     */
    public Builder setInfo(us.ihmc.aci.ddam.Info value) {
      if (infoBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        info_ = value;
        onChanged();
      } else {
        infoBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <code>optional .ddam.Info info = 3;</code>
     *
     * <pre>
     *generic information about the node like: OS, CPU, Network interface cards etc.
     * </pre>
     */
    public Builder setInfo(
        us.ihmc.aci.ddam.Info.Builder builderForValue) {
      if (infoBuilder_ == null) {
        info_ = builderForValue.build();
        onChanged();
      } else {
        infoBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <code>optional .ddam.Info info = 3;</code>
     *
     * <pre>
     *generic information about the node like: OS, CPU, Network interface cards etc.
     * </pre>
     */
    public Builder mergeInfo(us.ihmc.aci.ddam.Info value) {
      if (infoBuilder_ == null) {
        if (info_ != null) {
          info_ =
            us.ihmc.aci.ddam.Info.newBuilder(info_).mergeFrom(value).buildPartial();
        } else {
          info_ = value;
        }
        onChanged();
      } else {
        infoBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <code>optional .ddam.Info info = 3;</code>
     *
     * <pre>
     *generic information about the node like: OS, CPU, Network interface cards etc.
     * </pre>
     */
    public Builder clearInfo() {
      if (infoBuilder_ == null) {
        info_ = null;
        onChanged();
      } else {
        info_ = null;
        infoBuilder_ = null;
      }

      return this;
    }
    /**
     * <code>optional .ddam.Info info = 3;</code>
     *
     * <pre>
     *generic information about the node like: OS, CPU, Network interface cards etc.
     * </pre>
     */
    public us.ihmc.aci.ddam.Info.Builder getInfoBuilder() {
      
      onChanged();
      return getInfoFieldBuilder().getBuilder();
    }
    /**
     * <code>optional .ddam.Info info = 3;</code>
     *
     * <pre>
     *generic information about the node like: OS, CPU, Network interface cards etc.
     * </pre>
     */
    public us.ihmc.aci.ddam.InfoOrBuilder getInfoOrBuilder() {
      if (infoBuilder_ != null) {
        return infoBuilder_.getMessageOrBuilder();
      } else {
        return info_ == null ?
            us.ihmc.aci.ddam.Info.getDefaultInstance() : info_;
      }
    }
    /**
     * <code>optional .ddam.Info info = 3;</code>
     *
     * <pre>
     *generic information about the node like: OS, CPU, Network interface cards etc.
     * </pre>
     */
    private com.google.protobuf.SingleFieldBuilder<
        us.ihmc.aci.ddam.Info, us.ihmc.aci.ddam.Info.Builder, us.ihmc.aci.ddam.InfoOrBuilder> 
        getInfoFieldBuilder() {
      if (infoBuilder_ == null) {
        infoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
            us.ihmc.aci.ddam.Info, us.ihmc.aci.ddam.Info.Builder, us.ihmc.aci.ddam.InfoOrBuilder>(
                getInfo(),
                getParentForChildren(),
                isClean());
        info_ = null;
      }
      return infoBuilder_;
    }

    private us.ihmc.aci.ddam.Grump grump_ = null;
    private com.google.protobuf.SingleFieldBuilder<
        us.ihmc.aci.ddam.Grump, us.ihmc.aci.ddam.Grump.Builder, us.ihmc.aci.ddam.GrumpOrBuilder> grumpBuilder_;
    /**
     * <code>optional .ddam.Grump grump = 4;</code>
     *
     * <pre>
     *information detected with Grump (GroupManager)
     * </pre>
     */
    public boolean hasGrump() {
      return grumpBuilder_ != null || grump_ != null;
    }
    /**
     * <code>optional .ddam.Grump grump = 4;</code>
     *
     * <pre>
     *information detected with Grump (GroupManager)
     * </pre>
     */
    public us.ihmc.aci.ddam.Grump getGrump() {
      if (grumpBuilder_ == null) {
        return grump_ == null ? us.ihmc.aci.ddam.Grump.getDefaultInstance() : grump_;
      } else {
        return grumpBuilder_.getMessage();
      }
    }
    /**
     * <code>optional .ddam.Grump grump = 4;</code>
     *
     * <pre>
     *information detected with Grump (GroupManager)
     * </pre>
     */
    public Builder setGrump(us.ihmc.aci.ddam.Grump value) {
      if (grumpBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        grump_ = value;
        onChanged();
      } else {
        grumpBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <code>optional .ddam.Grump grump = 4;</code>
     *
     * <pre>
     *information detected with Grump (GroupManager)
     * </pre>
     */
    public Builder setGrump(
        us.ihmc.aci.ddam.Grump.Builder builderForValue) {
      if (grumpBuilder_ == null) {
        grump_ = builderForValue.build();
        onChanged();
      } else {
        grumpBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <code>optional .ddam.Grump grump = 4;</code>
     *
     * <pre>
     *information detected with Grump (GroupManager)
     * </pre>
     */
    public Builder mergeGrump(us.ihmc.aci.ddam.Grump value) {
      if (grumpBuilder_ == null) {
        if (grump_ != null) {
          grump_ =
            us.ihmc.aci.ddam.Grump.newBuilder(grump_).mergeFrom(value).buildPartial();
        } else {
          grump_ = value;
        }
        onChanged();
      } else {
        grumpBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <code>optional .ddam.Grump grump = 4;</code>
     *
     * <pre>
     *information detected with Grump (GroupManager)
     * </pre>
     */
    public Builder clearGrump() {
      if (grumpBuilder_ == null) {
        grump_ = null;
        onChanged();
      } else {
        grump_ = null;
        grumpBuilder_ = null;
      }

      return this;
    }
    /**
     * <code>optional .ddam.Grump grump = 4;</code>
     *
     * <pre>
     *information detected with Grump (GroupManager)
     * </pre>
     */
    public us.ihmc.aci.ddam.Grump.Builder getGrumpBuilder() {
      
      onChanged();
      return getGrumpFieldBuilder().getBuilder();
    }
    /**
     * <code>optional .ddam.Grump grump = 4;</code>
     *
     * <pre>
     *information detected with Grump (GroupManager)
     * </pre>
     */
    public us.ihmc.aci.ddam.GrumpOrBuilder getGrumpOrBuilder() {
      if (grumpBuilder_ != null) {
        return grumpBuilder_.getMessageOrBuilder();
      } else {
        return grump_ == null ?
            us.ihmc.aci.ddam.Grump.getDefaultInstance() : grump_;
      }
    }
    /**
     * <code>optional .ddam.Grump grump = 4;</code>
     *
     * <pre>
     *information detected with Grump (GroupManager)
     * </pre>
     */
    private com.google.protobuf.SingleFieldBuilder<
        us.ihmc.aci.ddam.Grump, us.ihmc.aci.ddam.Grump.Builder, us.ihmc.aci.ddam.GrumpOrBuilder> 
        getGrumpFieldBuilder() {
      if (grumpBuilder_ == null) {
        grumpBuilder_ = new com.google.protobuf.SingleFieldBuilder<
            us.ihmc.aci.ddam.Grump, us.ihmc.aci.ddam.Grump.Builder, us.ihmc.aci.ddam.GrumpOrBuilder>(
                getGrump(),
                getParentForChildren(),
                isClean());
        grump_ = null;
      }
      return grumpBuilder_;
    }

    private us.ihmc.aci.ddam.ReadableTraffic traffic_ = null;
    private com.google.protobuf.SingleFieldBuilder<
        us.ihmc.aci.ddam.ReadableTraffic, us.ihmc.aci.ddam.ReadableTraffic.Builder, us.ihmc.aci.ddam.ReadableTrafficOrBuilder> trafficBuilder_;
    /**
     * <code>optional .ddam.ReadableTraffic traffic = 5;</code>
     *
     * <pre>
     *information related to the current Traffic (detected by NetSensor, Links info inferred by NetSupervisor)
     * </pre>
     */
    public boolean hasTraffic() {
      return trafficBuilder_ != null || traffic_ != null;
    }
    /**
     * <code>optional .ddam.ReadableTraffic traffic = 5;</code>
     *
     * <pre>
     *information related to the current Traffic (detected by NetSensor, Links info inferred by NetSupervisor)
     * </pre>
     */
    public us.ihmc.aci.ddam.ReadableTraffic getTraffic() {
      if (trafficBuilder_ == null) {
        return traffic_ == null ? us.ihmc.aci.ddam.ReadableTraffic.getDefaultInstance() : traffic_;
      } else {
        return trafficBuilder_.getMessage();
      }
    }
    /**
     * <code>optional .ddam.ReadableTraffic traffic = 5;</code>
     *
     * <pre>
     *information related to the current Traffic (detected by NetSensor, Links info inferred by NetSupervisor)
     * </pre>
     */
    public Builder setTraffic(us.ihmc.aci.ddam.ReadableTraffic value) {
      if (trafficBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        traffic_ = value;
        onChanged();
      } else {
        trafficBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <code>optional .ddam.ReadableTraffic traffic = 5;</code>
     *
     * <pre>
     *information related to the current Traffic (detected by NetSensor, Links info inferred by NetSupervisor)
     * </pre>
     */
    public Builder setTraffic(
        us.ihmc.aci.ddam.ReadableTraffic.Builder builderForValue) {
      if (trafficBuilder_ == null) {
        traffic_ = builderForValue.build();
        onChanged();
      } else {
        trafficBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <code>optional .ddam.ReadableTraffic traffic = 5;</code>
     *
     * <pre>
     *information related to the current Traffic (detected by NetSensor, Links info inferred by NetSupervisor)
     * </pre>
     */
    public Builder mergeTraffic(us.ihmc.aci.ddam.ReadableTraffic value) {
      if (trafficBuilder_ == null) {
        if (traffic_ != null) {
          traffic_ =
            us.ihmc.aci.ddam.ReadableTraffic.newBuilder(traffic_).mergeFrom(value).buildPartial();
        } else {
          traffic_ = value;
        }
        onChanged();
      } else {
        trafficBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <code>optional .ddam.ReadableTraffic traffic = 5;</code>
     *
     * <pre>
     *information related to the current Traffic (detected by NetSensor, Links info inferred by NetSupervisor)
     * </pre>
     */
    public Builder clearTraffic() {
      if (trafficBuilder_ == null) {
        traffic_ = null;
        onChanged();
      } else {
        traffic_ = null;
        trafficBuilder_ = null;
      }

      return this;
    }
    /**
     * <code>optional .ddam.ReadableTraffic traffic = 5;</code>
     *
     * <pre>
     *information related to the current Traffic (detected by NetSensor, Links info inferred by NetSupervisor)
     * </pre>
     */
    public us.ihmc.aci.ddam.ReadableTraffic.Builder getTrafficBuilder() {
      
      onChanged();
      return getTrafficFieldBuilder().getBuilder();
    }
    /**
     * <code>optional .ddam.ReadableTraffic traffic = 5;</code>
     *
     * <pre>
     *information related to the current Traffic (detected by NetSensor, Links info inferred by NetSupervisor)
     * </pre>
     */
    public us.ihmc.aci.ddam.ReadableTrafficOrBuilder getTrafficOrBuilder() {
      if (trafficBuilder_ != null) {
        return trafficBuilder_.getMessageOrBuilder();
      } else {
        return traffic_ == null ?
            us.ihmc.aci.ddam.ReadableTraffic.getDefaultInstance() : traffic_;
      }
    }
    /**
     * <code>optional .ddam.ReadableTraffic traffic = 5;</code>
     *
     * <pre>
     *information related to the current Traffic (detected by NetSensor, Links info inferred by NetSupervisor)
     * </pre>
     */
    private com.google.protobuf.SingleFieldBuilder<
        us.ihmc.aci.ddam.ReadableTraffic, us.ihmc.aci.ddam.ReadableTraffic.Builder, us.ihmc.aci.ddam.ReadableTrafficOrBuilder> 
        getTrafficFieldBuilder() {
      if (trafficBuilder_ == null) {
        trafficBuilder_ = new com.google.protobuf.SingleFieldBuilder<
            us.ihmc.aci.ddam.ReadableTraffic, us.ihmc.aci.ddam.ReadableTraffic.Builder, us.ihmc.aci.ddam.ReadableTrafficOrBuilder>(
                getTraffic(),
                getParentForChildren(),
                isClean());
        traffic_ = null;
      }
      return trafficBuilder_;
    }

    private com.google.protobuf.MapField<
        java.lang.String, us.ihmc.aci.ddam.ReadableTopology> topology_;
    private com.google.protobuf.MapField<java.lang.String, us.ihmc.aci.ddam.ReadableTopology>
    internalGetTopology() {
      if (topology_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            TopologyDefaultEntryHolder.defaultEntry);
     }
      return topology_;
    }
    private com.google.protobuf.MapField<java.lang.String, us.ihmc.aci.ddam.ReadableTopology>
    internalGetMutableTopology() {
      onChanged();;
      if (topology_ == null) {
        topology_ = com.google.protobuf.MapField.newMapField(
            TopologyDefaultEntryHolder.defaultEntry);
      }
      if (!topology_.isMutable()) {
        topology_ = topology_.copy();
      }
      return topology_;
    }
    /**
     * <code>map&lt;string, .ddam.ReadableTopology&gt; topology = 6;</code>
     *
     * <pre>
     *topology related information, every topology associated to a network name in case of multiple topologies
     * </pre>
     */
    public java.util.Map<java.lang.String, us.ihmc.aci.ddam.ReadableTopology> getTopology() {
      return internalGetTopology().getMap();
    }
    /**
     * <code>map&lt;string, .ddam.ReadableTopology&gt; topology = 6;</code>
     *
     * <pre>
     *topology related information, every topology associated to a network name in case of multiple topologies
     * </pre>
     */
    public java.util.Map<java.lang.String, us.ihmc.aci.ddam.ReadableTopology>
    getMutableTopology() {
      return internalGetMutableTopology().getMutableMap();
    }
    /**
     * <code>map&lt;string, .ddam.ReadableTopology&gt; topology = 6;</code>
     *
     * <pre>
     *topology related information, every topology associated to a network name in case of multiple topologies
     * </pre>
     */
    public Builder putAllTopology(
        java.util.Map<java.lang.String, us.ihmc.aci.ddam.ReadableTopology> values) {
      getMutableTopology().putAll(values);
      return this;
    }

    private com.google.protobuf.MapField<
        java.lang.String, us.ihmc.aci.ddam.NetworkHealth> networkHealth_;
    private com.google.protobuf.MapField<java.lang.String, us.ihmc.aci.ddam.NetworkHealth>
    internalGetNetworkHealth() {
      if (networkHealth_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            NetworkHealthDefaultEntryHolder.defaultEntry);
     }
      return networkHealth_;
    }
    private com.google.protobuf.MapField<java.lang.String, us.ihmc.aci.ddam.NetworkHealth>
    internalGetMutableNetworkHealth() {
      onChanged();;
      if (networkHealth_ == null) {
        networkHealth_ = com.google.protobuf.MapField.newMapField(
            NetworkHealthDefaultEntryHolder.defaultEntry);
      }
      if (!networkHealth_.isMutable()) {
        networkHealth_ = networkHealth_.copy();
      }
      return networkHealth_;
    }
    /**
     * <code>map&lt;string, .ddam.NetworkHealth&gt; networkHealth = 7;</code>
     *
     * <pre>
     *network health summary, every network health is associated to a network name (map id)
     * </pre>
     */
    public java.util.Map<java.lang.String, us.ihmc.aci.ddam.NetworkHealth> getNetworkHealth() {
      return internalGetNetworkHealth().getMap();
    }
    /**
     * <code>map&lt;string, .ddam.NetworkHealth&gt; networkHealth = 7;</code>
     *
     * <pre>
     *network health summary, every network health is associated to a network name (map id)
     * </pre>
     */
    public java.util.Map<java.lang.String, us.ihmc.aci.ddam.NetworkHealth>
    getMutableNetworkHealth() {
      return internalGetMutableNetworkHealth().getMutableMap();
    }
    /**
     * <code>map&lt;string, .ddam.NetworkHealth&gt; networkHealth = 7;</code>
     *
     * <pre>
     *network health summary, every network health is associated to a network name (map id)
     * </pre>
     */
    public Builder putAllNetworkHealth(
        java.util.Map<java.lang.String, us.ihmc.aci.ddam.NetworkHealth> values) {
      getMutableNetworkHealth().putAll(values);
      return this;
    }

    private com.google.protobuf.Timestamp timestamp_ = null;
    private com.google.protobuf.SingleFieldBuilder<
        com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> timestampBuilder_;
    /**
     * <code>optional .google.protobuf.Timestamp timestamp = 8;</code>
     *
     * <pre>
     *time this object was created 
     * </pre>
     */
    public boolean hasTimestamp() {
      return timestampBuilder_ != null || timestamp_ != null;
    }
    /**
     * <code>optional .google.protobuf.Timestamp timestamp = 8;</code>
     *
     * <pre>
     *time this object was created 
     * </pre>
     */
    public com.google.protobuf.Timestamp getTimestamp() {
      if (timestampBuilder_ == null) {
        return timestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : timestamp_;
      } else {
        return timestampBuilder_.getMessage();
      }
    }
    /**
     * <code>optional .google.protobuf.Timestamp timestamp = 8;</code>
     *
     * <pre>
     *time this object was created 
     * </pre>
     */
    public Builder setTimestamp(com.google.protobuf.Timestamp value) {
      if (timestampBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        timestamp_ = value;
        onChanged();
      } else {
        timestampBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <code>optional .google.protobuf.Timestamp timestamp = 8;</code>
     *
     * <pre>
     *time this object was created 
     * </pre>
     */
    public Builder setTimestamp(
        com.google.protobuf.Timestamp.Builder builderForValue) {
      if (timestampBuilder_ == null) {
        timestamp_ = builderForValue.build();
        onChanged();
      } else {
        timestampBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <code>optional .google.protobuf.Timestamp timestamp = 8;</code>
     *
     * <pre>
     *time this object was created 
     * </pre>
     */
    public Builder mergeTimestamp(com.google.protobuf.Timestamp value) {
      if (timestampBuilder_ == null) {
        if (timestamp_ != null) {
          timestamp_ =
            com.google.protobuf.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
        } else {
          timestamp_ = value;
        }
        onChanged();
      } else {
        timestampBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <code>optional .google.protobuf.Timestamp timestamp = 8;</code>
     *
     * <pre>
     *time this object was created 
     * </pre>
     */
    public Builder clearTimestamp() {
      if (timestampBuilder_ == null) {
        timestamp_ = null;
        onChanged();
      } else {
        timestamp_ = null;
        timestampBuilder_ = null;
      }

      return this;
    }
    /**
     * <code>optional .google.protobuf.Timestamp timestamp = 8;</code>
     *
     * <pre>
     *time this object was created 
     * </pre>
     */
    public com.google.protobuf.Timestamp.Builder getTimestampBuilder() {
      
      onChanged();
      return getTimestampFieldBuilder().getBuilder();
    }
    /**
     * <code>optional .google.protobuf.Timestamp timestamp = 8;</code>
     *
     * <pre>
     *time this object was created 
     * </pre>
     */
    public com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder() {
      if (timestampBuilder_ != null) {
        return timestampBuilder_.getMessageOrBuilder();
      } else {
        return timestamp_ == null ?
            com.google.protobuf.Timestamp.getDefaultInstance() : timestamp_;
      }
    }
    /**
     * <code>optional .google.protobuf.Timestamp timestamp = 8;</code>
     *
     * <pre>
     *time this object was created 
     * </pre>
     */
    private com.google.protobuf.SingleFieldBuilder<
        com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
        getTimestampFieldBuilder() {
      if (timestampBuilder_ == null) {
        timestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
            com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                getTimestamp(),
                getParentForChildren(),
                isClean());
        timestamp_ = null;
      }
      return timestampBuilder_;
    }
    public final Builder setUnknownFields(
        final com.google.protobuf.UnknownFieldSet unknownFields) {
      return this;
    }

    public final Builder mergeUnknownFields(
        final com.google.protobuf.UnknownFieldSet unknownFields) {
      return this;
    }


    // @@protoc_insertion_point(builder_scope:ddam.ReadableNode)
  }

  // @@protoc_insertion_point(class_scope:ddam.ReadableNode)
  private static final us.ihmc.aci.ddam.ReadableNode DEFAULT_INSTANCE;
  static {
    DEFAULT_INSTANCE = new us.ihmc.aci.ddam.ReadableNode();
  }

  public static us.ihmc.aci.ddam.ReadableNode getDefaultInstance() {
    return DEFAULT_INSTANCE;
  }

  private static final com.google.protobuf.Parser<ReadableNode>
      PARSER = new com.google.protobuf.AbstractParser<ReadableNode>() {
    public ReadableNode parsePartialFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      try {
        return new ReadableNode(input, extensionRegistry);
      } catch (RuntimeException e) {
        if (e.getCause() instanceof
            com.google.protobuf.InvalidProtocolBufferException) {
          throw (com.google.protobuf.InvalidProtocolBufferException)
              e.getCause();
        }
        throw e;
      }
    }
  };

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

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

  public us.ihmc.aci.ddam.ReadableNode getDefaultInstanceForType() {
    return DEFAULT_INSTANCE;
  }

}

