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

package crosby.binary;

public final class Osmformat {
  private Osmformat() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }
  public interface HeaderBlockOrBuilder extends
      // @@protoc_insertion_point(interface_extends:OSMPBF.HeaderBlock)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
     */
    boolean hasBbox();
    /**
     * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
     */
    crosby.binary.Osmformat.HeaderBBox getBbox();

    /**
     * <code>repeated string required_features = 4;</code>
     *
     * <pre>
     * Additional tags to aid in parsing this dataset 
     * </pre>
     */
    com.google.protobuf.ProtocolStringList
        getRequiredFeaturesList();
    /**
     * <code>repeated string required_features = 4;</code>
     *
     * <pre>
     * Additional tags to aid in parsing this dataset 
     * </pre>
     */
    int getRequiredFeaturesCount();
    /**
     * <code>repeated string required_features = 4;</code>
     *
     * <pre>
     * Additional tags to aid in parsing this dataset 
     * </pre>
     */
    java.lang.String getRequiredFeatures(int index);
    /**
     * <code>repeated string required_features = 4;</code>
     *
     * <pre>
     * Additional tags to aid in parsing this dataset 
     * </pre>
     */
    com.google.protobuf.ByteString
        getRequiredFeaturesBytes(int index);

    /**
     * <code>repeated string optional_features = 5;</code>
     */
    com.google.protobuf.ProtocolStringList
        getOptionalFeaturesList();
    /**
     * <code>repeated string optional_features = 5;</code>
     */
    int getOptionalFeaturesCount();
    /**
     * <code>repeated string optional_features = 5;</code>
     */
    java.lang.String getOptionalFeatures(int index);
    /**
     * <code>repeated string optional_features = 5;</code>
     */
    com.google.protobuf.ByteString
        getOptionalFeaturesBytes(int index);

    /**
     * <code>optional string writingprogram = 16;</code>
     */
    boolean hasWritingprogram();
    /**
     * <code>optional string writingprogram = 16;</code>
     */
    java.lang.String getWritingprogram();
    /**
     * <code>optional string writingprogram = 16;</code>
     */
    com.google.protobuf.ByteString
        getWritingprogramBytes();

    /**
     * <code>optional string source = 17;</code>
     *
     * <pre>
     * From the bbox field.
     * </pre>
     */
    boolean hasSource();
    /**
     * <code>optional string source = 17;</code>
     *
     * <pre>
     * From the bbox field.
     * </pre>
     */
    java.lang.String getSource();
    /**
     * <code>optional string source = 17;</code>
     *
     * <pre>
     * From the bbox field.
     * </pre>
     */
    com.google.protobuf.ByteString
        getSourceBytes();

    /**
     * <code>optional int64 osmosis_replication_timestamp = 32;</code>
     *
     * <pre>
     * replication timestamp, expressed in seconds since the epoch, 
     * otherwise the same value as in the "timestamp=..." field
     * in the state.txt file used by Osmosis
     * </pre>
     */
    boolean hasOsmosisReplicationTimestamp();
    /**
     * <code>optional int64 osmosis_replication_timestamp = 32;</code>
     *
     * <pre>
     * replication timestamp, expressed in seconds since the epoch, 
     * otherwise the same value as in the "timestamp=..." field
     * in the state.txt file used by Osmosis
     * </pre>
     */
    long getOsmosisReplicationTimestamp();

    /**
     * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
     *
     * <pre>
     * replication sequence number (sequenceNumber in state.txt)
     * </pre>
     */
    boolean hasOsmosisReplicationSequenceNumber();
    /**
     * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
     *
     * <pre>
     * replication sequence number (sequenceNumber in state.txt)
     * </pre>
     */
    long getOsmosisReplicationSequenceNumber();

    /**
     * <code>optional string osmosis_replication_base_url = 34;</code>
     *
     * <pre>
     * replication base URL (from Osmosis' configuration.txt file)
     * </pre>
     */
    boolean hasOsmosisReplicationBaseUrl();
    /**
     * <code>optional string osmosis_replication_base_url = 34;</code>
     *
     * <pre>
     * replication base URL (from Osmosis' configuration.txt file)
     * </pre>
     */
    java.lang.String getOsmosisReplicationBaseUrl();
    /**
     * <code>optional string osmosis_replication_base_url = 34;</code>
     *
     * <pre>
     * replication base URL (from Osmosis' configuration.txt file)
     * </pre>
     */
    com.google.protobuf.ByteString
        getOsmosisReplicationBaseUrlBytes();
  }
  /**
   * Protobuf type {@code OSMPBF.HeaderBlock}
   */
  public static final class HeaderBlock extends
      com.google.protobuf.GeneratedMessageLite implements
      // @@protoc_insertion_point(message_implements:OSMPBF.HeaderBlock)
      HeaderBlockOrBuilder {
    // Use HeaderBlock.newBuilder() to construct.
    private HeaderBlock(com.google.protobuf.GeneratedMessageLite.Builder builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private HeaderBlock(boolean noInit) { this.unknownFields = com.google.protobuf.ByteString.EMPTY;}

    private static final HeaderBlock defaultInstance;
    public static HeaderBlock getDefaultInstance() {
      return defaultInstance;
    }

    public HeaderBlock getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.ByteString unknownFields;
    private HeaderBlock(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.ByteString.Output unknownFieldsOutput =
          com.google.protobuf.ByteString.newOutput();
      com.google.protobuf.CodedOutputStream unknownFieldsCodedOutput =
          com.google.protobuf.CodedOutputStream.newInstance(
              unknownFieldsOutput);
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFieldsCodedOutput,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              crosby.binary.Osmformat.HeaderBBox.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = bbox_.toBuilder();
              }
              bbox_ = input.readMessage(crosby.binary.Osmformat.HeaderBBox.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(bbox_);
                bbox_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 34: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                requiredFeatures_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000002;
              }
              requiredFeatures_.add(bs);
              break;
            }
            case 42: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                optionalFeatures_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000004;
              }
              optionalFeatures_.add(bs);
              break;
            }
            case 130: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              writingprogram_ = bs;
              break;
            }
            case 138: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000004;
              source_ = bs;
              break;
            }
            case 256: {
              bitField0_ |= 0x00000008;
              osmosisReplicationTimestamp_ = input.readInt64();
              break;
            }
            case 264: {
              bitField0_ |= 0x00000010;
              osmosisReplicationSequenceNumber_ = input.readInt64();
              break;
            }
            case 274: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000020;
              osmosisReplicationBaseUrl_ = bs;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          requiredFeatures_ = requiredFeatures_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          optionalFeatures_ = optionalFeatures_.getUnmodifiableView();
        }
        try {
          unknownFieldsCodedOutput.flush();
        } catch (java.io.IOException e) {
        // Should not happen
        } finally {
          unknownFields = unknownFieldsOutput.toByteString();
        }
        makeExtensionsImmutable();
      }
    }
    public static com.google.protobuf.Parser<HeaderBlock> PARSER =
        new com.google.protobuf.AbstractParser<HeaderBlock>() {
      public HeaderBlock parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new HeaderBlock(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    public static final int BBOX_FIELD_NUMBER = 1;
    private crosby.binary.Osmformat.HeaderBBox bbox_;
    /**
     * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
     */
    public boolean hasBbox() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
     */
    public crosby.binary.Osmformat.HeaderBBox getBbox() {
      return bbox_;
    }

    public static final int REQUIRED_FEATURES_FIELD_NUMBER = 4;
    private com.google.protobuf.LazyStringList requiredFeatures_;
    /**
     * <code>repeated string required_features = 4;</code>
     *
     * <pre>
     * Additional tags to aid in parsing this dataset 
     * </pre>
     */
    public com.google.protobuf.ProtocolStringList
        getRequiredFeaturesList() {
      return requiredFeatures_;
    }
    /**
     * <code>repeated string required_features = 4;</code>
     *
     * <pre>
     * Additional tags to aid in parsing this dataset 
     * </pre>
     */
    public int getRequiredFeaturesCount() {
      return requiredFeatures_.size();
    }
    /**
     * <code>repeated string required_features = 4;</code>
     *
     * <pre>
     * Additional tags to aid in parsing this dataset 
     * </pre>
     */
    public java.lang.String getRequiredFeatures(int index) {
      return requiredFeatures_.get(index);
    }
    /**
     * <code>repeated string required_features = 4;</code>
     *
     * <pre>
     * Additional tags to aid in parsing this dataset 
     * </pre>
     */
    public com.google.protobuf.ByteString
        getRequiredFeaturesBytes(int index) {
      return requiredFeatures_.getByteString(index);
    }

    public static final int OPTIONAL_FEATURES_FIELD_NUMBER = 5;
    private com.google.protobuf.LazyStringList optionalFeatures_;
    /**
     * <code>repeated string optional_features = 5;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getOptionalFeaturesList() {
      return optionalFeatures_;
    }
    /**
     * <code>repeated string optional_features = 5;</code>
     */
    public int getOptionalFeaturesCount() {
      return optionalFeatures_.size();
    }
    /**
     * <code>repeated string optional_features = 5;</code>
     */
    public java.lang.String getOptionalFeatures(int index) {
      return optionalFeatures_.get(index);
    }
    /**
     * <code>repeated string optional_features = 5;</code>
     */
    public com.google.protobuf.ByteString
        getOptionalFeaturesBytes(int index) {
      return optionalFeatures_.getByteString(index);
    }

    public static final int WRITINGPROGRAM_FIELD_NUMBER = 16;
    private java.lang.Object writingprogram_;
    /**
     * <code>optional string writingprogram = 16;</code>
     */
    public boolean hasWritingprogram() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string writingprogram = 16;</code>
     */
    public java.lang.String getWritingprogram() {
      java.lang.Object ref = writingprogram_;
      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();
        if (bs.isValidUtf8()) {
          writingprogram_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string writingprogram = 16;</code>
     */
    public com.google.protobuf.ByteString
        getWritingprogramBytes() {
      java.lang.Object ref = writingprogram_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        writingprogram_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SOURCE_FIELD_NUMBER = 17;
    private java.lang.Object source_;
    /**
     * <code>optional string source = 17;</code>
     *
     * <pre>
     * From the bbox field.
     * </pre>
     */
    public boolean hasSource() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string source = 17;</code>
     *
     * <pre>
     * From the bbox field.
     * </pre>
     */
    public java.lang.String getSource() {
      java.lang.Object ref = source_;
      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();
        if (bs.isValidUtf8()) {
          source_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string source = 17;</code>
     *
     * <pre>
     * From the bbox field.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getSourceBytes() {
      java.lang.Object ref = source_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        source_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int OSMOSIS_REPLICATION_TIMESTAMP_FIELD_NUMBER = 32;
    private long osmosisReplicationTimestamp_;
    /**
     * <code>optional int64 osmosis_replication_timestamp = 32;</code>
     *
     * <pre>
     * replication timestamp, expressed in seconds since the epoch, 
     * otherwise the same value as in the "timestamp=..." field
     * in the state.txt file used by Osmosis
     * </pre>
     */
    public boolean hasOsmosisReplicationTimestamp() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int64 osmosis_replication_timestamp = 32;</code>
     *
     * <pre>
     * replication timestamp, expressed in seconds since the epoch, 
     * otherwise the same value as in the "timestamp=..." field
     * in the state.txt file used by Osmosis
     * </pre>
     */
    public long getOsmosisReplicationTimestamp() {
      return osmosisReplicationTimestamp_;
    }

    public static final int OSMOSIS_REPLICATION_SEQUENCE_NUMBER_FIELD_NUMBER = 33;
    private long osmosisReplicationSequenceNumber_;
    /**
     * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
     *
     * <pre>
     * replication sequence number (sequenceNumber in state.txt)
     * </pre>
     */
    public boolean hasOsmosisReplicationSequenceNumber() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
     *
     * <pre>
     * replication sequence number (sequenceNumber in state.txt)
     * </pre>
     */
    public long getOsmosisReplicationSequenceNumber() {
      return osmosisReplicationSequenceNumber_;
    }

    public static final int OSMOSIS_REPLICATION_BASE_URL_FIELD_NUMBER = 34;
    private java.lang.Object osmosisReplicationBaseUrl_;
    /**
     * <code>optional string osmosis_replication_base_url = 34;</code>
     *
     * <pre>
     * replication base URL (from Osmosis' configuration.txt file)
     * </pre>
     */
    public boolean hasOsmosisReplicationBaseUrl() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional string osmosis_replication_base_url = 34;</code>
     *
     * <pre>
     * replication base URL (from Osmosis' configuration.txt file)
     * </pre>
     */
    public java.lang.String getOsmosisReplicationBaseUrl() {
      java.lang.Object ref = osmosisReplicationBaseUrl_;
      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();
        if (bs.isValidUtf8()) {
          osmosisReplicationBaseUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string osmosis_replication_base_url = 34;</code>
     *
     * <pre>
     * replication base URL (from Osmosis' configuration.txt file)
     * </pre>
     */
    public com.google.protobuf.ByteString
        getOsmosisReplicationBaseUrlBytes() {
      java.lang.Object ref = osmosisReplicationBaseUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        osmosisReplicationBaseUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      bbox_ = crosby.binary.Osmformat.HeaderBBox.getDefaultInstance();
      requiredFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      optionalFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      writingprogram_ = "";
      source_ = "";
      osmosisReplicationTimestamp_ = 0L;
      osmosisReplicationSequenceNumber_ = 0L;
      osmosisReplicationBaseUrl_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (hasBbox()) {
        if (!getBbox().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, bbox_);
      }
      for (int i = 0; i < requiredFeatures_.size(); i++) {
        output.writeBytes(4, requiredFeatures_.getByteString(i));
      }
      for (int i = 0; i < optionalFeatures_.size(); i++) {
        output.writeBytes(5, optionalFeatures_.getByteString(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(16, getWritingprogramBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(17, getSourceBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt64(32, osmosisReplicationTimestamp_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt64(33, osmosisReplicationSequenceNumber_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(34, getOsmosisReplicationBaseUrlBytes());
      }
      output.writeRawBytes(unknownFields);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, bbox_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < requiredFeatures_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(requiredFeatures_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getRequiredFeaturesList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < optionalFeatures_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(optionalFeatures_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getOptionalFeaturesList().size();
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(16, getWritingprogramBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(17, getSourceBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(32, osmosisReplicationTimestamp_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(33, osmosisReplicationSequenceNumber_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(34, getOsmosisReplicationBaseUrlBytes());
      }
      size += unknownFields.size();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static crosby.binary.Osmformat.HeaderBlock parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.HeaderBlock parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.HeaderBlock parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.HeaderBlock parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.HeaderBlock parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.HeaderBlock parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.HeaderBlock parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static crosby.binary.Osmformat.HeaderBlock parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.HeaderBlock parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.HeaderBlock parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.HeaderBlock prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    /**
     * Protobuf type {@code OSMPBF.HeaderBlock}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          crosby.binary.Osmformat.HeaderBlock, Builder>
        implements
        // @@protoc_insertion_point(builder_implements:OSMPBF.HeaderBlock)
        crosby.binary.Osmformat.HeaderBlockOrBuilder {
      // Construct using crosby.binary.Osmformat.HeaderBlock.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        bbox_ = crosby.binary.Osmformat.HeaderBBox.getDefaultInstance();
        bitField0_ = (bitField0_ & ~0x00000001);
        requiredFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        optionalFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        writingprogram_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        source_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        osmosisReplicationTimestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000020);
        osmosisReplicationSequenceNumber_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000040);
        osmosisReplicationBaseUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public crosby.binary.Osmformat.HeaderBlock getDefaultInstanceForType() {
        return crosby.binary.Osmformat.HeaderBlock.getDefaultInstance();
      }

      public crosby.binary.Osmformat.HeaderBlock build() {
        crosby.binary.Osmformat.HeaderBlock result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public crosby.binary.Osmformat.HeaderBlock buildPartial() {
        crosby.binary.Osmformat.HeaderBlock result = new crosby.binary.Osmformat.HeaderBlock(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.bbox_ = bbox_;
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          requiredFeatures_ = requiredFeatures_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.requiredFeatures_ = requiredFeatures_;
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          optionalFeatures_ = optionalFeatures_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.optionalFeatures_ = optionalFeatures_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000002;
        }
        result.writingprogram_ = writingprogram_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000004;
        }
        result.source_ = source_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000008;
        }
        result.osmosisReplicationTimestamp_ = osmosisReplicationTimestamp_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000010;
        }
        result.osmosisReplicationSequenceNumber_ = osmosisReplicationSequenceNumber_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000020;
        }
        result.osmosisReplicationBaseUrl_ = osmosisReplicationBaseUrl_;
        result.bitField0_ = to_bitField0_;
        return result;
      }

      public Builder mergeFrom(crosby.binary.Osmformat.HeaderBlock other) {
        if (other == crosby.binary.Osmformat.HeaderBlock.getDefaultInstance()) return this;
        if (other.hasBbox()) {
          mergeBbox(other.getBbox());
        }
        if (!other.requiredFeatures_.isEmpty()) {
          if (requiredFeatures_.isEmpty()) {
            requiredFeatures_ = other.requiredFeatures_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureRequiredFeaturesIsMutable();
            requiredFeatures_.addAll(other.requiredFeatures_);
          }
          
        }
        if (!other.optionalFeatures_.isEmpty()) {
          if (optionalFeatures_.isEmpty()) {
            optionalFeatures_ = other.optionalFeatures_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureOptionalFeaturesIsMutable();
            optionalFeatures_.addAll(other.optionalFeatures_);
          }
          
        }
        if (other.hasWritingprogram()) {
          bitField0_ |= 0x00000008;
          writingprogram_ = other.writingprogram_;
          
        }
        if (other.hasSource()) {
          bitField0_ |= 0x00000010;
          source_ = other.source_;
          
        }
        if (other.hasOsmosisReplicationTimestamp()) {
          setOsmosisReplicationTimestamp(other.getOsmosisReplicationTimestamp());
        }
        if (other.hasOsmosisReplicationSequenceNumber()) {
          setOsmosisReplicationSequenceNumber(other.getOsmosisReplicationSequenceNumber());
        }
        if (other.hasOsmosisReplicationBaseUrl()) {
          bitField0_ |= 0x00000080;
          osmosisReplicationBaseUrl_ = other.osmosisReplicationBaseUrl_;
          
        }
        setUnknownFields(
            getUnknownFields().concat(other.unknownFields));
        return this;
      }

      public final boolean isInitialized() {
        if (hasBbox()) {
          if (!getBbox().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

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

      private crosby.binary.Osmformat.HeaderBBox bbox_ = crosby.binary.Osmformat.HeaderBBox.getDefaultInstance();
      /**
       * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
       */
      public boolean hasBbox() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
       */
      public crosby.binary.Osmformat.HeaderBBox getBbox() {
        return bbox_;
      }
      /**
       * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
       */
      public Builder setBbox(crosby.binary.Osmformat.HeaderBBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bbox_ = value;

        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
       */
      public Builder setBbox(
          crosby.binary.Osmformat.HeaderBBox.Builder builderForValue) {
        bbox_ = builderForValue.build();

        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
       */
      public Builder mergeBbox(crosby.binary.Osmformat.HeaderBBox value) {
        if (((bitField0_ & 0x00000001) == 0x00000001) &&
            bbox_ != crosby.binary.Osmformat.HeaderBBox.getDefaultInstance()) {
          bbox_ =
            crosby.binary.Osmformat.HeaderBBox.newBuilder(bbox_).mergeFrom(value).buildPartial();
        } else {
          bbox_ = value;
        }

        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
       */
      public Builder clearBbox() {
        bbox_ = crosby.binary.Osmformat.HeaderBBox.getDefaultInstance();

        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      private com.google.protobuf.LazyStringList requiredFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureRequiredFeaturesIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          requiredFeatures_ = new com.google.protobuf.LazyStringArrayList(requiredFeatures_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated string required_features = 4;</code>
       *
       * <pre>
       * Additional tags to aid in parsing this dataset 
       * </pre>
       */
      public com.google.protobuf.ProtocolStringList
          getRequiredFeaturesList() {
        return requiredFeatures_.getUnmodifiableView();
      }
      /**
       * <code>repeated string required_features = 4;</code>
       *
       * <pre>
       * Additional tags to aid in parsing this dataset 
       * </pre>
       */
      public int getRequiredFeaturesCount() {
        return requiredFeatures_.size();
      }
      /**
       * <code>repeated string required_features = 4;</code>
       *
       * <pre>
       * Additional tags to aid in parsing this dataset 
       * </pre>
       */
      public java.lang.String getRequiredFeatures(int index) {
        return requiredFeatures_.get(index);
      }
      /**
       * <code>repeated string required_features = 4;</code>
       *
       * <pre>
       * Additional tags to aid in parsing this dataset 
       * </pre>
       */
      public com.google.protobuf.ByteString
          getRequiredFeaturesBytes(int index) {
        return requiredFeatures_.getByteString(index);
      }
      /**
       * <code>repeated string required_features = 4;</code>
       *
       * <pre>
       * Additional tags to aid in parsing this dataset 
       * </pre>
       */
      public Builder setRequiredFeatures(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureRequiredFeaturesIsMutable();
        requiredFeatures_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated string required_features = 4;</code>
       *
       * <pre>
       * Additional tags to aid in parsing this dataset 
       * </pre>
       */
      public Builder addRequiredFeatures(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureRequiredFeaturesIsMutable();
        requiredFeatures_.add(value);
        
        return this;
      }
      /**
       * <code>repeated string required_features = 4;</code>
       *
       * <pre>
       * Additional tags to aid in parsing this dataset 
       * </pre>
       */
      public Builder addAllRequiredFeatures(
          java.lang.Iterable<java.lang.String> values) {
        ensureRequiredFeaturesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, requiredFeatures_);
        
        return this;
      }
      /**
       * <code>repeated string required_features = 4;</code>
       *
       * <pre>
       * Additional tags to aid in parsing this dataset 
       * </pre>
       */
      public Builder clearRequiredFeatures() {
        requiredFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        
        return this;
      }
      /**
       * <code>repeated string required_features = 4;</code>
       *
       * <pre>
       * Additional tags to aid in parsing this dataset 
       * </pre>
       */
      public Builder addRequiredFeaturesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureRequiredFeaturesIsMutable();
        requiredFeatures_.add(value);
        
        return this;
      }

      private com.google.protobuf.LazyStringList optionalFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureOptionalFeaturesIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          optionalFeatures_ = new com.google.protobuf.LazyStringArrayList(optionalFeatures_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <code>repeated string optional_features = 5;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getOptionalFeaturesList() {
        return optionalFeatures_.getUnmodifiableView();
      }
      /**
       * <code>repeated string optional_features = 5;</code>
       */
      public int getOptionalFeaturesCount() {
        return optionalFeatures_.size();
      }
      /**
       * <code>repeated string optional_features = 5;</code>
       */
      public java.lang.String getOptionalFeatures(int index) {
        return optionalFeatures_.get(index);
      }
      /**
       * <code>repeated string optional_features = 5;</code>
       */
      public com.google.protobuf.ByteString
          getOptionalFeaturesBytes(int index) {
        return optionalFeatures_.getByteString(index);
      }
      /**
       * <code>repeated string optional_features = 5;</code>
       */
      public Builder setOptionalFeatures(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureOptionalFeaturesIsMutable();
        optionalFeatures_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated string optional_features = 5;</code>
       */
      public Builder addOptionalFeatures(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureOptionalFeaturesIsMutable();
        optionalFeatures_.add(value);
        
        return this;
      }
      /**
       * <code>repeated string optional_features = 5;</code>
       */
      public Builder addAllOptionalFeatures(
          java.lang.Iterable<java.lang.String> values) {
        ensureOptionalFeaturesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, optionalFeatures_);
        
        return this;
      }
      /**
       * <code>repeated string optional_features = 5;</code>
       */
      public Builder clearOptionalFeatures() {
        optionalFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        
        return this;
      }
      /**
       * <code>repeated string optional_features = 5;</code>
       */
      public Builder addOptionalFeaturesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureOptionalFeaturesIsMutable();
        optionalFeatures_.add(value);
        
        return this;
      }

      private java.lang.Object writingprogram_ = "";
      /**
       * <code>optional string writingprogram = 16;</code>
       */
      public boolean hasWritingprogram() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string writingprogram = 16;</code>
       */
      public java.lang.String getWritingprogram() {
        java.lang.Object ref = writingprogram_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            writingprogram_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string writingprogram = 16;</code>
       */
      public com.google.protobuf.ByteString
          getWritingprogramBytes() {
        java.lang.Object ref = writingprogram_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          writingprogram_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string writingprogram = 16;</code>
       */
      public Builder setWritingprogram(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        writingprogram_ = value;
        
        return this;
      }
      /**
       * <code>optional string writingprogram = 16;</code>
       */
      public Builder clearWritingprogram() {
        bitField0_ = (bitField0_ & ~0x00000008);
        writingprogram_ = getDefaultInstance().getWritingprogram();
        
        return this;
      }
      /**
       * <code>optional string writingprogram = 16;</code>
       */
      public Builder setWritingprogramBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        writingprogram_ = value;
        
        return this;
      }

      private java.lang.Object source_ = "";
      /**
       * <code>optional string source = 17;</code>
       *
       * <pre>
       * From the bbox field.
       * </pre>
       */
      public boolean hasSource() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string source = 17;</code>
       *
       * <pre>
       * From the bbox field.
       * </pre>
       */
      public java.lang.String getSource() {
        java.lang.Object ref = source_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            source_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string source = 17;</code>
       *
       * <pre>
       * From the bbox field.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getSourceBytes() {
        java.lang.Object ref = source_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          source_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string source = 17;</code>
       *
       * <pre>
       * From the bbox field.
       * </pre>
       */
      public Builder setSource(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        source_ = value;
        
        return this;
      }
      /**
       * <code>optional string source = 17;</code>
       *
       * <pre>
       * From the bbox field.
       * </pre>
       */
      public Builder clearSource() {
        bitField0_ = (bitField0_ & ~0x00000010);
        source_ = getDefaultInstance().getSource();
        
        return this;
      }
      /**
       * <code>optional string source = 17;</code>
       *
       * <pre>
       * From the bbox field.
       * </pre>
       */
      public Builder setSourceBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        source_ = value;
        
        return this;
      }

      private long osmosisReplicationTimestamp_ ;
      /**
       * <code>optional int64 osmosis_replication_timestamp = 32;</code>
       *
       * <pre>
       * replication timestamp, expressed in seconds since the epoch, 
       * otherwise the same value as in the "timestamp=..." field
       * in the state.txt file used by Osmosis
       * </pre>
       */
      public boolean hasOsmosisReplicationTimestamp() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional int64 osmosis_replication_timestamp = 32;</code>
       *
       * <pre>
       * replication timestamp, expressed in seconds since the epoch, 
       * otherwise the same value as in the "timestamp=..." field
       * in the state.txt file used by Osmosis
       * </pre>
       */
      public long getOsmosisReplicationTimestamp() {
        return osmosisReplicationTimestamp_;
      }
      /**
       * <code>optional int64 osmosis_replication_timestamp = 32;</code>
       *
       * <pre>
       * replication timestamp, expressed in seconds since the epoch, 
       * otherwise the same value as in the "timestamp=..." field
       * in the state.txt file used by Osmosis
       * </pre>
       */
      public Builder setOsmosisReplicationTimestamp(long value) {
        bitField0_ |= 0x00000020;
        osmosisReplicationTimestamp_ = value;
        
        return this;
      }
      /**
       * <code>optional int64 osmosis_replication_timestamp = 32;</code>
       *
       * <pre>
       * replication timestamp, expressed in seconds since the epoch, 
       * otherwise the same value as in the "timestamp=..." field
       * in the state.txt file used by Osmosis
       * </pre>
       */
      public Builder clearOsmosisReplicationTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000020);
        osmosisReplicationTimestamp_ = 0L;
        
        return this;
      }

      private long osmosisReplicationSequenceNumber_ ;
      /**
       * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
       *
       * <pre>
       * replication sequence number (sequenceNumber in state.txt)
       * </pre>
       */
      public boolean hasOsmosisReplicationSequenceNumber() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
       *
       * <pre>
       * replication sequence number (sequenceNumber in state.txt)
       * </pre>
       */
      public long getOsmosisReplicationSequenceNumber() {
        return osmosisReplicationSequenceNumber_;
      }
      /**
       * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
       *
       * <pre>
       * replication sequence number (sequenceNumber in state.txt)
       * </pre>
       */
      public Builder setOsmosisReplicationSequenceNumber(long value) {
        bitField0_ |= 0x00000040;
        osmosisReplicationSequenceNumber_ = value;
        
        return this;
      }
      /**
       * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
       *
       * <pre>
       * replication sequence number (sequenceNumber in state.txt)
       * </pre>
       */
      public Builder clearOsmosisReplicationSequenceNumber() {
        bitField0_ = (bitField0_ & ~0x00000040);
        osmosisReplicationSequenceNumber_ = 0L;
        
        return this;
      }

      private java.lang.Object osmosisReplicationBaseUrl_ = "";
      /**
       * <code>optional string osmosis_replication_base_url = 34;</code>
       *
       * <pre>
       * replication base URL (from Osmosis' configuration.txt file)
       * </pre>
       */
      public boolean hasOsmosisReplicationBaseUrl() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional string osmosis_replication_base_url = 34;</code>
       *
       * <pre>
       * replication base URL (from Osmosis' configuration.txt file)
       * </pre>
       */
      public java.lang.String getOsmosisReplicationBaseUrl() {
        java.lang.Object ref = osmosisReplicationBaseUrl_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            osmosisReplicationBaseUrl_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string osmosis_replication_base_url = 34;</code>
       *
       * <pre>
       * replication base URL (from Osmosis' configuration.txt file)
       * </pre>
       */
      public com.google.protobuf.ByteString
          getOsmosisReplicationBaseUrlBytes() {
        java.lang.Object ref = osmosisReplicationBaseUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          osmosisReplicationBaseUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string osmosis_replication_base_url = 34;</code>
       *
       * <pre>
       * replication base URL (from Osmosis' configuration.txt file)
       * </pre>
       */
      public Builder setOsmosisReplicationBaseUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        osmosisReplicationBaseUrl_ = value;
        
        return this;
      }
      /**
       * <code>optional string osmosis_replication_base_url = 34;</code>
       *
       * <pre>
       * replication base URL (from Osmosis' configuration.txt file)
       * </pre>
       */
      public Builder clearOsmosisReplicationBaseUrl() {
        bitField0_ = (bitField0_ & ~0x00000080);
        osmosisReplicationBaseUrl_ = getDefaultInstance().getOsmosisReplicationBaseUrl();
        
        return this;
      }
      /**
       * <code>optional string osmosis_replication_base_url = 34;</code>
       *
       * <pre>
       * replication base URL (from Osmosis' configuration.txt file)
       * </pre>
       */
      public Builder setOsmosisReplicationBaseUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        osmosisReplicationBaseUrl_ = value;
        
        return this;
      }

      // @@protoc_insertion_point(builder_scope:OSMPBF.HeaderBlock)
    }

    static {
      defaultInstance = new HeaderBlock(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:OSMPBF.HeaderBlock)
  }

  public interface HeaderBBoxOrBuilder extends
      // @@protoc_insertion_point(interface_extends:OSMPBF.HeaderBBox)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <code>required sint64 left = 1;</code>
     */
    boolean hasLeft();
    /**
     * <code>required sint64 left = 1;</code>
     */
    long getLeft();

    /**
     * <code>required sint64 right = 2;</code>
     */
    boolean hasRight();
    /**
     * <code>required sint64 right = 2;</code>
     */
    long getRight();

    /**
     * <code>required sint64 top = 3;</code>
     */
    boolean hasTop();
    /**
     * <code>required sint64 top = 3;</code>
     */
    long getTop();

    /**
     * <code>required sint64 bottom = 4;</code>
     */
    boolean hasBottom();
    /**
     * <code>required sint64 bottom = 4;</code>
     */
    long getBottom();
  }
  /**
   * Protobuf type {@code OSMPBF.HeaderBBox}
   */
  public static final class HeaderBBox extends
      com.google.protobuf.GeneratedMessageLite implements
      // @@protoc_insertion_point(message_implements:OSMPBF.HeaderBBox)
      HeaderBBoxOrBuilder {
    // Use HeaderBBox.newBuilder() to construct.
    private HeaderBBox(com.google.protobuf.GeneratedMessageLite.Builder builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private HeaderBBox(boolean noInit) { this.unknownFields = com.google.protobuf.ByteString.EMPTY;}

    private static final HeaderBBox defaultInstance;
    public static HeaderBBox getDefaultInstance() {
      return defaultInstance;
    }

    public HeaderBBox getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.ByteString unknownFields;
    private HeaderBBox(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.ByteString.Output unknownFieldsOutput =
          com.google.protobuf.ByteString.newOutput();
      com.google.protobuf.CodedOutputStream unknownFieldsCodedOutput =
          com.google.protobuf.CodedOutputStream.newInstance(
              unknownFieldsOutput);
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFieldsCodedOutput,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              left_ = input.readSInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              right_ = input.readSInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              top_ = input.readSInt64();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              bottom_ = input.readSInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        try {
          unknownFieldsCodedOutput.flush();
        } catch (java.io.IOException e) {
        // Should not happen
        } finally {
          unknownFields = unknownFieldsOutput.toByteString();
        }
        makeExtensionsImmutable();
      }
    }
    public static com.google.protobuf.Parser<HeaderBBox> PARSER =
        new com.google.protobuf.AbstractParser<HeaderBBox>() {
      public HeaderBBox parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new HeaderBBox(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    public static final int LEFT_FIELD_NUMBER = 1;
    private long left_;
    /**
     * <code>required sint64 left = 1;</code>
     */
    public boolean hasLeft() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required sint64 left = 1;</code>
     */
    public long getLeft() {
      return left_;
    }

    public static final int RIGHT_FIELD_NUMBER = 2;
    private long right_;
    /**
     * <code>required sint64 right = 2;</code>
     */
    public boolean hasRight() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>required sint64 right = 2;</code>
     */
    public long getRight() {
      return right_;
    }

    public static final int TOP_FIELD_NUMBER = 3;
    private long top_;
    /**
     * <code>required sint64 top = 3;</code>
     */
    public boolean hasTop() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>required sint64 top = 3;</code>
     */
    public long getTop() {
      return top_;
    }

    public static final int BOTTOM_FIELD_NUMBER = 4;
    private long bottom_;
    /**
     * <code>required sint64 bottom = 4;</code>
     */
    public boolean hasBottom() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>required sint64 bottom = 4;</code>
     */
    public long getBottom() {
      return bottom_;
    }

    private void initFields() {
      left_ = 0L;
      right_ = 0L;
      top_ = 0L;
      bottom_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasLeft()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasRight()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasTop()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasBottom()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeSInt64(1, left_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeSInt64(2, right_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeSInt64(3, top_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeSInt64(4, bottom_);
      }
      output.writeRawBytes(unknownFields);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(1, left_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(2, right_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(3, top_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(4, bottom_);
      }
      size += unknownFields.size();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.HeaderBBox parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.HeaderBBox parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.HeaderBBox parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static crosby.binary.Osmformat.HeaderBBox parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.HeaderBBox prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    /**
     * Protobuf type {@code OSMPBF.HeaderBBox}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          crosby.binary.Osmformat.HeaderBBox, Builder>
        implements
        // @@protoc_insertion_point(builder_implements:OSMPBF.HeaderBBox)
        crosby.binary.Osmformat.HeaderBBoxOrBuilder {
      // Construct using crosby.binary.Osmformat.HeaderBBox.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        left_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        right_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        top_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        bottom_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public crosby.binary.Osmformat.HeaderBBox getDefaultInstanceForType() {
        return crosby.binary.Osmformat.HeaderBBox.getDefaultInstance();
      }

      public crosby.binary.Osmformat.HeaderBBox build() {
        crosby.binary.Osmformat.HeaderBBox result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public crosby.binary.Osmformat.HeaderBBox buildPartial() {
        crosby.binary.Osmformat.HeaderBBox result = new crosby.binary.Osmformat.HeaderBBox(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.left_ = left_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.right_ = right_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.top_ = top_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.bottom_ = bottom_;
        result.bitField0_ = to_bitField0_;
        return result;
      }

      public Builder mergeFrom(crosby.binary.Osmformat.HeaderBBox other) {
        if (other == crosby.binary.Osmformat.HeaderBBox.getDefaultInstance()) return this;
        if (other.hasLeft()) {
          setLeft(other.getLeft());
        }
        if (other.hasRight()) {
          setRight(other.getRight());
        }
        if (other.hasTop()) {
          setTop(other.getTop());
        }
        if (other.hasBottom()) {
          setBottom(other.getBottom());
        }
        setUnknownFields(
            getUnknownFields().concat(other.unknownFields));
        return this;
      }

      public final boolean isInitialized() {
        if (!hasLeft()) {
          
          return false;
        }
        if (!hasRight()) {
          
          return false;
        }
        if (!hasTop()) {
          
          return false;
        }
        if (!hasBottom()) {
          
          return false;
        }
        return true;
      }

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

      private long left_ ;
      /**
       * <code>required sint64 left = 1;</code>
       */
      public boolean hasLeft() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required sint64 left = 1;</code>
       */
      public long getLeft() {
        return left_;
      }
      /**
       * <code>required sint64 left = 1;</code>
       */
      public Builder setLeft(long value) {
        bitField0_ |= 0x00000001;
        left_ = value;
        
        return this;
      }
      /**
       * <code>required sint64 left = 1;</code>
       */
      public Builder clearLeft() {
        bitField0_ = (bitField0_ & ~0x00000001);
        left_ = 0L;
        
        return this;
      }

      private long right_ ;
      /**
       * <code>required sint64 right = 2;</code>
       */
      public boolean hasRight() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required sint64 right = 2;</code>
       */
      public long getRight() {
        return right_;
      }
      /**
       * <code>required sint64 right = 2;</code>
       */
      public Builder setRight(long value) {
        bitField0_ |= 0x00000002;
        right_ = value;
        
        return this;
      }
      /**
       * <code>required sint64 right = 2;</code>
       */
      public Builder clearRight() {
        bitField0_ = (bitField0_ & ~0x00000002);
        right_ = 0L;
        
        return this;
      }

      private long top_ ;
      /**
       * <code>required sint64 top = 3;</code>
       */
      public boolean hasTop() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>required sint64 top = 3;</code>
       */
      public long getTop() {
        return top_;
      }
      /**
       * <code>required sint64 top = 3;</code>
       */
      public Builder setTop(long value) {
        bitField0_ |= 0x00000004;
        top_ = value;
        
        return this;
      }
      /**
       * <code>required sint64 top = 3;</code>
       */
      public Builder clearTop() {
        bitField0_ = (bitField0_ & ~0x00000004);
        top_ = 0L;
        
        return this;
      }

      private long bottom_ ;
      /**
       * <code>required sint64 bottom = 4;</code>
       */
      public boolean hasBottom() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>required sint64 bottom = 4;</code>
       */
      public long getBottom() {
        return bottom_;
      }
      /**
       * <code>required sint64 bottom = 4;</code>
       */
      public Builder setBottom(long value) {
        bitField0_ |= 0x00000008;
        bottom_ = value;
        
        return this;
      }
      /**
       * <code>required sint64 bottom = 4;</code>
       */
      public Builder clearBottom() {
        bitField0_ = (bitField0_ & ~0x00000008);
        bottom_ = 0L;
        
        return this;
      }

      // @@protoc_insertion_point(builder_scope:OSMPBF.HeaderBBox)
    }

    static {
      defaultInstance = new HeaderBBox(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:OSMPBF.HeaderBBox)
  }

  public interface PrimitiveBlockOrBuilder extends
      // @@protoc_insertion_point(interface_extends:OSMPBF.PrimitiveBlock)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <code>required .OSMPBF.StringTable stringtable = 1;</code>
     */
    boolean hasStringtable();
    /**
     * <code>required .OSMPBF.StringTable stringtable = 1;</code>
     */
    crosby.binary.Osmformat.StringTable getStringtable();

    /**
     * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
     */
    java.util.List<crosby.binary.Osmformat.PrimitiveGroup> 
        getPrimitivegroupList();
    /**
     * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
     */
    crosby.binary.Osmformat.PrimitiveGroup getPrimitivegroup(int index);
    /**
     * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
     */
    int getPrimitivegroupCount();

    /**
     * <code>optional int32 granularity = 17 [default = 100];</code>
     *
     * <pre>
     * Granularity, units of nanodegrees, used to store coordinates in this block
     * </pre>
     */
    boolean hasGranularity();
    /**
     * <code>optional int32 granularity = 17 [default = 100];</code>
     *
     * <pre>
     * Granularity, units of nanodegrees, used to store coordinates in this block
     * </pre>
     */
    int getGranularity();

    /**
     * <code>optional int64 lat_offset = 19 [default = 0];</code>
     *
     * <pre>
     * Offset value between the output coordinates coordinates and the granularity grid in unites of nanodegrees.
     * </pre>
     */
    boolean hasLatOffset();
    /**
     * <code>optional int64 lat_offset = 19 [default = 0];</code>
     *
     * <pre>
     * Offset value between the output coordinates coordinates and the granularity grid in unites of nanodegrees.
     * </pre>
     */
    long getLatOffset();

    /**
     * <code>optional int64 lon_offset = 20 [default = 0];</code>
     */
    boolean hasLonOffset();
    /**
     * <code>optional int64 lon_offset = 20 [default = 0];</code>
     */
    long getLonOffset();

    /**
     * <code>optional int32 date_granularity = 18 [default = 1000];</code>
     *
     * <pre>
     * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
     * </pre>
     */
    boolean hasDateGranularity();
    /**
     * <code>optional int32 date_granularity = 18 [default = 1000];</code>
     *
     * <pre>
     * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
     * </pre>
     */
    int getDateGranularity();
  }
  /**
   * Protobuf type {@code OSMPBF.PrimitiveBlock}
   */
  public static final class PrimitiveBlock extends
      com.google.protobuf.GeneratedMessageLite implements
      // @@protoc_insertion_point(message_implements:OSMPBF.PrimitiveBlock)
      PrimitiveBlockOrBuilder {
    // Use PrimitiveBlock.newBuilder() to construct.
    private PrimitiveBlock(com.google.protobuf.GeneratedMessageLite.Builder builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private PrimitiveBlock(boolean noInit) { this.unknownFields = com.google.protobuf.ByteString.EMPTY;}

    private static final PrimitiveBlock defaultInstance;
    public static PrimitiveBlock getDefaultInstance() {
      return defaultInstance;
    }

    public PrimitiveBlock getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.ByteString unknownFields;
    private PrimitiveBlock(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.ByteString.Output unknownFieldsOutput =
          com.google.protobuf.ByteString.newOutput();
      com.google.protobuf.CodedOutputStream unknownFieldsCodedOutput =
          com.google.protobuf.CodedOutputStream.newInstance(
              unknownFieldsOutput);
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFieldsCodedOutput,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              crosby.binary.Osmformat.StringTable.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = stringtable_.toBuilder();
              }
              stringtable_ = input.readMessage(crosby.binary.Osmformat.StringTable.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(stringtable_);
                stringtable_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                primitivegroup_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000002;
              }
              primitivegroup_.add(input.readMessage(crosby.binary.Osmformat.PrimitiveGroup.PARSER, extensionRegistry));
              break;
            }
            case 136: {
              bitField0_ |= 0x00000002;
              granularity_ = input.readInt32();
              break;
            }
            case 144: {
              bitField0_ |= 0x00000010;
              dateGranularity_ = input.readInt32();
              break;
            }
            case 152: {
              bitField0_ |= 0x00000004;
              latOffset_ = input.readInt64();
              break;
            }
            case 160: {
              bitField0_ |= 0x00000008;
              lonOffset_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          primitivegroup_ = java.util.Collections.unmodifiableList(primitivegroup_);
        }
        try {
          unknownFieldsCodedOutput.flush();
        } catch (java.io.IOException e) {
        // Should not happen
        } finally {
          unknownFields = unknownFieldsOutput.toByteString();
        }
        makeExtensionsImmutable();
      }
    }
    public static com.google.protobuf.Parser<PrimitiveBlock> PARSER =
        new com.google.protobuf.AbstractParser<PrimitiveBlock>() {
      public PrimitiveBlock parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new PrimitiveBlock(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    public static final int STRINGTABLE_FIELD_NUMBER = 1;
    private crosby.binary.Osmformat.StringTable stringtable_;
    /**
     * <code>required .OSMPBF.StringTable stringtable = 1;</code>
     */
    public boolean hasStringtable() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required .OSMPBF.StringTable stringtable = 1;</code>
     */
    public crosby.binary.Osmformat.StringTable getStringtable() {
      return stringtable_;
    }

    public static final int PRIMITIVEGROUP_FIELD_NUMBER = 2;
    private java.util.List<crosby.binary.Osmformat.PrimitiveGroup> primitivegroup_;
    /**
     * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
     */
    public java.util.List<crosby.binary.Osmformat.PrimitiveGroup> getPrimitivegroupList() {
      return primitivegroup_;
    }
    /**
     * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
     */
    public java.util.List<? extends crosby.binary.Osmformat.PrimitiveGroupOrBuilder> 
        getPrimitivegroupOrBuilderList() {
      return primitivegroup_;
    }
    /**
     * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
     */
    public int getPrimitivegroupCount() {
      return primitivegroup_.size();
    }
    /**
     * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
     */
    public crosby.binary.Osmformat.PrimitiveGroup getPrimitivegroup(int index) {
      return primitivegroup_.get(index);
    }
    /**
     * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
     */
    public crosby.binary.Osmformat.PrimitiveGroupOrBuilder getPrimitivegroupOrBuilder(
        int index) {
      return primitivegroup_.get(index);
    }

    public static final int GRANULARITY_FIELD_NUMBER = 17;
    private int granularity_;
    /**
     * <code>optional int32 granularity = 17 [default = 100];</code>
     *
     * <pre>
     * Granularity, units of nanodegrees, used to store coordinates in this block
     * </pre>
     */
    public boolean hasGranularity() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 granularity = 17 [default = 100];</code>
     *
     * <pre>
     * Granularity, units of nanodegrees, used to store coordinates in this block
     * </pre>
     */
    public int getGranularity() {
      return granularity_;
    }

    public static final int LAT_OFFSET_FIELD_NUMBER = 19;
    private long latOffset_;
    /**
     * <code>optional int64 lat_offset = 19 [default = 0];</code>
     *
     * <pre>
     * Offset value between the output coordinates coordinates and the granularity grid in unites of nanodegrees.
     * </pre>
     */
    public boolean hasLatOffset() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 lat_offset = 19 [default = 0];</code>
     *
     * <pre>
     * Offset value between the output coordinates coordinates and the granularity grid in unites of nanodegrees.
     * </pre>
     */
    public long getLatOffset() {
      return latOffset_;
    }

    public static final int LON_OFFSET_FIELD_NUMBER = 20;
    private long lonOffset_;
    /**
     * <code>optional int64 lon_offset = 20 [default = 0];</code>
     */
    public boolean hasLonOffset() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int64 lon_offset = 20 [default = 0];</code>
     */
    public long getLonOffset() {
      return lonOffset_;
    }

    public static final int DATE_GRANULARITY_FIELD_NUMBER = 18;
    private int dateGranularity_;
    /**
     * <code>optional int32 date_granularity = 18 [default = 1000];</code>
     *
     * <pre>
     * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
     * </pre>
     */
    public boolean hasDateGranularity() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int32 date_granularity = 18 [default = 1000];</code>
     *
     * <pre>
     * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
     * </pre>
     */
    public int getDateGranularity() {
      return dateGranularity_;
    }

    private void initFields() {
      stringtable_ = crosby.binary.Osmformat.StringTable.getDefaultInstance();
      primitivegroup_ = java.util.Collections.emptyList();
      granularity_ = 100;
      latOffset_ = 0L;
      lonOffset_ = 0L;
      dateGranularity_ = 1000;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasStringtable()) {
        memoizedIsInitialized = 0;
        return false;
      }
      for (int i = 0; i < getPrimitivegroupCount(); i++) {
        if (!getPrimitivegroup(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, stringtable_);
      }
      for (int i = 0; i < primitivegroup_.size(); i++) {
        output.writeMessage(2, primitivegroup_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(17, granularity_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt32(18, dateGranularity_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(19, latOffset_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt64(20, lonOffset_);
      }
      output.writeRawBytes(unknownFields);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, stringtable_);
      }
      for (int i = 0; i < primitivegroup_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, primitivegroup_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(17, granularity_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(18, dateGranularity_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(19, latOffset_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(20, lonOffset_);
      }
      size += unknownFields.size();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.PrimitiveBlock parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static crosby.binary.Osmformat.PrimitiveBlock parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.PrimitiveBlock prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    /**
     * Protobuf type {@code OSMPBF.PrimitiveBlock}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          crosby.binary.Osmformat.PrimitiveBlock, Builder>
        implements
        // @@protoc_insertion_point(builder_implements:OSMPBF.PrimitiveBlock)
        crosby.binary.Osmformat.PrimitiveBlockOrBuilder {
      // Construct using crosby.binary.Osmformat.PrimitiveBlock.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        stringtable_ = crosby.binary.Osmformat.StringTable.getDefaultInstance();
        bitField0_ = (bitField0_ & ~0x00000001);
        primitivegroup_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        granularity_ = 100;
        bitField0_ = (bitField0_ & ~0x00000004);
        latOffset_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        lonOffset_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000010);
        dateGranularity_ = 1000;
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public crosby.binary.Osmformat.PrimitiveBlock getDefaultInstanceForType() {
        return crosby.binary.Osmformat.PrimitiveBlock.getDefaultInstance();
      }

      public crosby.binary.Osmformat.PrimitiveBlock build() {
        crosby.binary.Osmformat.PrimitiveBlock result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public crosby.binary.Osmformat.PrimitiveBlock buildPartial() {
        crosby.binary.Osmformat.PrimitiveBlock result = new crosby.binary.Osmformat.PrimitiveBlock(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.stringtable_ = stringtable_;
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          primitivegroup_ = java.util.Collections.unmodifiableList(primitivegroup_);
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.primitivegroup_ = primitivegroup_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000002;
        }
        result.granularity_ = granularity_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000004;
        }
        result.latOffset_ = latOffset_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000008;
        }
        result.lonOffset_ = lonOffset_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000010;
        }
        result.dateGranularity_ = dateGranularity_;
        result.bitField0_ = to_bitField0_;
        return result;
      }

      public Builder mergeFrom(crosby.binary.Osmformat.PrimitiveBlock other) {
        if (other == crosby.binary.Osmformat.PrimitiveBlock.getDefaultInstance()) return this;
        if (other.hasStringtable()) {
          mergeStringtable(other.getStringtable());
        }
        if (!other.primitivegroup_.isEmpty()) {
          if (primitivegroup_.isEmpty()) {
            primitivegroup_ = other.primitivegroup_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensurePrimitivegroupIsMutable();
            primitivegroup_.addAll(other.primitivegroup_);
          }
          
        }
        if (other.hasGranularity()) {
          setGranularity(other.getGranularity());
        }
        if (other.hasLatOffset()) {
          setLatOffset(other.getLatOffset());
        }
        if (other.hasLonOffset()) {
          setLonOffset(other.getLonOffset());
        }
        if (other.hasDateGranularity()) {
          setDateGranularity(other.getDateGranularity());
        }
        setUnknownFields(
            getUnknownFields().concat(other.unknownFields));
        return this;
      }

      public final boolean isInitialized() {
        if (!hasStringtable()) {
          
          return false;
        }
        for (int i = 0; i < getPrimitivegroupCount(); i++) {
          if (!getPrimitivegroup(i).isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

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

      private crosby.binary.Osmformat.StringTable stringtable_ = crosby.binary.Osmformat.StringTable.getDefaultInstance();
      /**
       * <code>required .OSMPBF.StringTable stringtable = 1;</code>
       */
      public boolean hasStringtable() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required .OSMPBF.StringTable stringtable = 1;</code>
       */
      public crosby.binary.Osmformat.StringTable getStringtable() {
        return stringtable_;
      }
      /**
       * <code>required .OSMPBF.StringTable stringtable = 1;</code>
       */
      public Builder setStringtable(crosby.binary.Osmformat.StringTable value) {
        if (value == null) {
          throw new NullPointerException();
        }
        stringtable_ = value;

        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .OSMPBF.StringTable stringtable = 1;</code>
       */
      public Builder setStringtable(
          crosby.binary.Osmformat.StringTable.Builder builderForValue) {
        stringtable_ = builderForValue.build();

        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .OSMPBF.StringTable stringtable = 1;</code>
       */
      public Builder mergeStringtable(crosby.binary.Osmformat.StringTable value) {
        if (((bitField0_ & 0x00000001) == 0x00000001) &&
            stringtable_ != crosby.binary.Osmformat.StringTable.getDefaultInstance()) {
          stringtable_ =
            crosby.binary.Osmformat.StringTable.newBuilder(stringtable_).mergeFrom(value).buildPartial();
        } else {
          stringtable_ = value;
        }

        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .OSMPBF.StringTable stringtable = 1;</code>
       */
      public Builder clearStringtable() {
        stringtable_ = crosby.binary.Osmformat.StringTable.getDefaultInstance();

        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      private java.util.List<crosby.binary.Osmformat.PrimitiveGroup> primitivegroup_ =
        java.util.Collections.emptyList();
      private void ensurePrimitivegroupIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          primitivegroup_ = new java.util.ArrayList<>(primitivegroup_);
          bitField0_ |= 0x00000002;
         }
      }

      /**
       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
       */
      public java.util.List<crosby.binary.Osmformat.PrimitiveGroup> getPrimitivegroupList() {
        return java.util.Collections.unmodifiableList(primitivegroup_);
      }
      /**
       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
       */
      public int getPrimitivegroupCount() {
        return primitivegroup_.size();
      }
      /**
       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
       */
      public crosby.binary.Osmformat.PrimitiveGroup getPrimitivegroup(int index) {
        return primitivegroup_.get(index);
      }
      /**
       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
       */
      public Builder setPrimitivegroup(
          int index, crosby.binary.Osmformat.PrimitiveGroup value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensurePrimitivegroupIsMutable();
        primitivegroup_.set(index, value);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
       */
      public Builder setPrimitivegroup(
          int index, crosby.binary.Osmformat.PrimitiveGroup.Builder builderForValue) {
        ensurePrimitivegroupIsMutable();
        primitivegroup_.set(index, builderForValue.build());

        return this;
      }
      /**
       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
       */
      public Builder addPrimitivegroup(crosby.binary.Osmformat.PrimitiveGroup value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensurePrimitivegroupIsMutable();
        primitivegroup_.add(value);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
       */
      public Builder addPrimitivegroup(
          int index, crosby.binary.Osmformat.PrimitiveGroup value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensurePrimitivegroupIsMutable();
        primitivegroup_.add(index, value);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
       */
      public Builder addPrimitivegroup(
          crosby.binary.Osmformat.PrimitiveGroup.Builder builderForValue) {
        ensurePrimitivegroupIsMutable();
        primitivegroup_.add(builderForValue.build());

        return this;
      }
      /**
       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
       */
      public Builder addPrimitivegroup(
          int index, crosby.binary.Osmformat.PrimitiveGroup.Builder builderForValue) {
        ensurePrimitivegroupIsMutable();
        primitivegroup_.add(index, builderForValue.build());

        return this;
      }
      /**
       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
       */
      public Builder addAllPrimitivegroup(
          java.lang.Iterable<? extends crosby.binary.Osmformat.PrimitiveGroup> values) {
        ensurePrimitivegroupIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, primitivegroup_);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
       */
      public Builder clearPrimitivegroup() {
        primitivegroup_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
       */
      public Builder removePrimitivegroup(int index) {
        ensurePrimitivegroupIsMutable();
        primitivegroup_.remove(index);

        return this;
      }

      private int granularity_ = 100;
      /**
       * <code>optional int32 granularity = 17 [default = 100];</code>
       *
       * <pre>
       * Granularity, units of nanodegrees, used to store coordinates in this block
       * </pre>
       */
      public boolean hasGranularity() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int32 granularity = 17 [default = 100];</code>
       *
       * <pre>
       * Granularity, units of nanodegrees, used to store coordinates in this block
       * </pre>
       */
      public int getGranularity() {
        return granularity_;
      }
      /**
       * <code>optional int32 granularity = 17 [default = 100];</code>
       *
       * <pre>
       * Granularity, units of nanodegrees, used to store coordinates in this block
       * </pre>
       */
      public Builder setGranularity(int value) {
        bitField0_ |= 0x00000004;
        granularity_ = value;
        
        return this;
      }
      /**
       * <code>optional int32 granularity = 17 [default = 100];</code>
       *
       * <pre>
       * Granularity, units of nanodegrees, used to store coordinates in this block
       * </pre>
       */
      public Builder clearGranularity() {
        bitField0_ = (bitField0_ & ~0x00000004);
        granularity_ = 100;
        
        return this;
      }

      private long latOffset_ ;
      /**
       * <code>optional int64 lat_offset = 19 [default = 0];</code>
       *
       * <pre>
       * Offset value between the output coordinates coordinates and the granularity grid in unites of nanodegrees.
       * </pre>
       */
      public boolean hasLatOffset() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 lat_offset = 19 [default = 0];</code>
       *
       * <pre>
       * Offset value between the output coordinates coordinates and the granularity grid in unites of nanodegrees.
       * </pre>
       */
      public long getLatOffset() {
        return latOffset_;
      }
      /**
       * <code>optional int64 lat_offset = 19 [default = 0];</code>
       *
       * <pre>
       * Offset value between the output coordinates coordinates and the granularity grid in unites of nanodegrees.
       * </pre>
       */
      public Builder setLatOffset(long value) {
        bitField0_ |= 0x00000008;
        latOffset_ = value;
        
        return this;
      }
      /**
       * <code>optional int64 lat_offset = 19 [default = 0];</code>
       *
       * <pre>
       * Offset value between the output coordinates coordinates and the granularity grid in unites of nanodegrees.
       * </pre>
       */
      public Builder clearLatOffset() {
        bitField0_ = (bitField0_ & ~0x00000008);
        latOffset_ = 0L;
        
        return this;
      }

      private long lonOffset_ ;
      /**
       * <code>optional int64 lon_offset = 20 [default = 0];</code>
       */
      public boolean hasLonOffset() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional int64 lon_offset = 20 [default = 0];</code>
       */
      public long getLonOffset() {
        return lonOffset_;
      }
      /**
       * <code>optional int64 lon_offset = 20 [default = 0];</code>
       */
      public Builder setLonOffset(long value) {
        bitField0_ |= 0x00000010;
        lonOffset_ = value;
        
        return this;
      }
      /**
       * <code>optional int64 lon_offset = 20 [default = 0];</code>
       */
      public Builder clearLonOffset() {
        bitField0_ = (bitField0_ & ~0x00000010);
        lonOffset_ = 0L;
        
        return this;
      }

      private int dateGranularity_ = 1000;
      /**
       * <code>optional int32 date_granularity = 18 [default = 1000];</code>
       *
       * <pre>
       * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
       * </pre>
       */
      public boolean hasDateGranularity() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional int32 date_granularity = 18 [default = 1000];</code>
       *
       * <pre>
       * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
       * </pre>
       */
      public int getDateGranularity() {
        return dateGranularity_;
      }
      /**
       * <code>optional int32 date_granularity = 18 [default = 1000];</code>
       *
       * <pre>
       * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
       * </pre>
       */
      public Builder setDateGranularity(int value) {
        bitField0_ |= 0x00000020;
        dateGranularity_ = value;
        
        return this;
      }
      /**
       * <code>optional int32 date_granularity = 18 [default = 1000];</code>
       *
       * <pre>
       * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
       * </pre>
       */
      public Builder clearDateGranularity() {
        bitField0_ = (bitField0_ & ~0x00000020);
        dateGranularity_ = 1000;
        
        return this;
      }

      // @@protoc_insertion_point(builder_scope:OSMPBF.PrimitiveBlock)
    }

    static {
      defaultInstance = new PrimitiveBlock(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:OSMPBF.PrimitiveBlock)
  }

  public interface PrimitiveGroupOrBuilder extends
      // @@protoc_insertion_point(interface_extends:OSMPBF.PrimitiveGroup)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <code>repeated .OSMPBF.Node nodes = 1;</code>
     */
    java.util.List<crosby.binary.Osmformat.Node> 
        getNodesList();
    /**
     * <code>repeated .OSMPBF.Node nodes = 1;</code>
     */
    crosby.binary.Osmformat.Node getNodes(int index);
    /**
     * <code>repeated .OSMPBF.Node nodes = 1;</code>
     */
    int getNodesCount();

    /**
     * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
     */
    boolean hasDense();
    /**
     * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
     */
    crosby.binary.Osmformat.DenseNodes getDense();

    /**
     * <code>repeated .OSMPBF.Way ways = 3;</code>
     */
    java.util.List<crosby.binary.Osmformat.Way> 
        getWaysList();
    /**
     * <code>repeated .OSMPBF.Way ways = 3;</code>
     */
    crosby.binary.Osmformat.Way getWays(int index);
    /**
     * <code>repeated .OSMPBF.Way ways = 3;</code>
     */
    int getWaysCount();

    /**
     * <code>repeated .OSMPBF.Relation relations = 4;</code>
     */
    java.util.List<crosby.binary.Osmformat.Relation> 
        getRelationsList();
    /**
     * <code>repeated .OSMPBF.Relation relations = 4;</code>
     */
    crosby.binary.Osmformat.Relation getRelations(int index);
    /**
     * <code>repeated .OSMPBF.Relation relations = 4;</code>
     */
    int getRelationsCount();

    /**
     * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
     */
    java.util.List<crosby.binary.Osmformat.ChangeSet> 
        getChangesetsList();
    /**
     * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
     */
    crosby.binary.Osmformat.ChangeSet getChangesets(int index);
    /**
     * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
     */
    int getChangesetsCount();
  }
  /**
   * Protobuf type {@code OSMPBF.PrimitiveGroup}
   *
   * <pre>
   * Group of OSMPrimitives. All primitives in a group must be the same type.
   * </pre>
   */
  public static final class PrimitiveGroup extends
      com.google.protobuf.GeneratedMessageLite implements
      // @@protoc_insertion_point(message_implements:OSMPBF.PrimitiveGroup)
      PrimitiveGroupOrBuilder {
    // Use PrimitiveGroup.newBuilder() to construct.
    private PrimitiveGroup(com.google.protobuf.GeneratedMessageLite.Builder builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private PrimitiveGroup(boolean noInit) { this.unknownFields = com.google.protobuf.ByteString.EMPTY;}

    private static final PrimitiveGroup defaultInstance;
    public static PrimitiveGroup getDefaultInstance() {
      return defaultInstance;
    }

    public PrimitiveGroup getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.ByteString unknownFields;
    private PrimitiveGroup(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.ByteString.Output unknownFieldsOutput =
          com.google.protobuf.ByteString.newOutput();
      com.google.protobuf.CodedOutputStream unknownFieldsCodedOutput =
          com.google.protobuf.CodedOutputStream.newInstance(
              unknownFieldsOutput);
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFieldsCodedOutput,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                nodes_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000001;
              }
              nodes_.add(input.readMessage(crosby.binary.Osmformat.Node.PARSER, extensionRegistry));
              break;
            }
            case 18: {
              crosby.binary.Osmformat.DenseNodes.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = dense_.toBuilder();
              }
              dense_ = input.readMessage(crosby.binary.Osmformat.DenseNodes.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(dense_);
                dense_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                ways_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000004;
              }
              ways_.add(input.readMessage(crosby.binary.Osmformat.Way.PARSER, extensionRegistry));
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                relations_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000008;
              }
              relations_.add(input.readMessage(crosby.binary.Osmformat.Relation.PARSER, extensionRegistry));
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                changesets_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000010;
              }
              changesets_.add(input.readMessage(crosby.binary.Osmformat.ChangeSet.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          nodes_ = java.util.Collections.unmodifiableList(nodes_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          ways_ = java.util.Collections.unmodifiableList(ways_);
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          relations_ = java.util.Collections.unmodifiableList(relations_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          changesets_ = java.util.Collections.unmodifiableList(changesets_);
        }
        try {
          unknownFieldsCodedOutput.flush();
        } catch (java.io.IOException e) {
        // Should not happen
        } finally {
          unknownFields = unknownFieldsOutput.toByteString();
        }
        makeExtensionsImmutable();
      }
    }
    public static com.google.protobuf.Parser<PrimitiveGroup> PARSER =
        new com.google.protobuf.AbstractParser<PrimitiveGroup>() {
      public PrimitiveGroup parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new PrimitiveGroup(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    public static final int NODES_FIELD_NUMBER = 1;
    private java.util.List<crosby.binary.Osmformat.Node> nodes_;
    /**
     * <code>repeated .OSMPBF.Node nodes = 1;</code>
     */
    public java.util.List<crosby.binary.Osmformat.Node> getNodesList() {
      return nodes_;
    }
    /**
     * <code>repeated .OSMPBF.Node nodes = 1;</code>
     */
    public java.util.List<? extends crosby.binary.Osmformat.NodeOrBuilder> 
        getNodesOrBuilderList() {
      return nodes_;
    }
    /**
     * <code>repeated .OSMPBF.Node nodes = 1;</code>
     */
    public int getNodesCount() {
      return nodes_.size();
    }
    /**
     * <code>repeated .OSMPBF.Node nodes = 1;</code>
     */
    public crosby.binary.Osmformat.Node getNodes(int index) {
      return nodes_.get(index);
    }
    /**
     * <code>repeated .OSMPBF.Node nodes = 1;</code>
     */
    public crosby.binary.Osmformat.NodeOrBuilder getNodesOrBuilder(
        int index) {
      return nodes_.get(index);
    }

    public static final int DENSE_FIELD_NUMBER = 2;
    private crosby.binary.Osmformat.DenseNodes dense_;
    /**
     * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
     */
    public boolean hasDense() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
     */
    public crosby.binary.Osmformat.DenseNodes getDense() {
      return dense_;
    }

    public static final int WAYS_FIELD_NUMBER = 3;
    private java.util.List<crosby.binary.Osmformat.Way> ways_;
    /**
     * <code>repeated .OSMPBF.Way ways = 3;</code>
     */
    public java.util.List<crosby.binary.Osmformat.Way> getWaysList() {
      return ways_;
    }
    /**
     * <code>repeated .OSMPBF.Way ways = 3;</code>
     */
    public java.util.List<? extends crosby.binary.Osmformat.WayOrBuilder> 
        getWaysOrBuilderList() {
      return ways_;
    }
    /**
     * <code>repeated .OSMPBF.Way ways = 3;</code>
     */
    public int getWaysCount() {
      return ways_.size();
    }
    /**
     * <code>repeated .OSMPBF.Way ways = 3;</code>
     */
    public crosby.binary.Osmformat.Way getWays(int index) {
      return ways_.get(index);
    }
    /**
     * <code>repeated .OSMPBF.Way ways = 3;</code>
     */
    public crosby.binary.Osmformat.WayOrBuilder getWaysOrBuilder(
        int index) {
      return ways_.get(index);
    }

    public static final int RELATIONS_FIELD_NUMBER = 4;
    private java.util.List<crosby.binary.Osmformat.Relation> relations_;
    /**
     * <code>repeated .OSMPBF.Relation relations = 4;</code>
     */
    public java.util.List<crosby.binary.Osmformat.Relation> getRelationsList() {
      return relations_;
    }
    /**
     * <code>repeated .OSMPBF.Relation relations = 4;</code>
     */
    public java.util.List<? extends crosby.binary.Osmformat.RelationOrBuilder> 
        getRelationsOrBuilderList() {
      return relations_;
    }
    /**
     * <code>repeated .OSMPBF.Relation relations = 4;</code>
     */
    public int getRelationsCount() {
      return relations_.size();
    }
    /**
     * <code>repeated .OSMPBF.Relation relations = 4;</code>
     */
    public crosby.binary.Osmformat.Relation getRelations(int index) {
      return relations_.get(index);
    }
    /**
     * <code>repeated .OSMPBF.Relation relations = 4;</code>
     */
    public crosby.binary.Osmformat.RelationOrBuilder getRelationsOrBuilder(
        int index) {
      return relations_.get(index);
    }

    public static final int CHANGESETS_FIELD_NUMBER = 5;
    private java.util.List<crosby.binary.Osmformat.ChangeSet> changesets_;
    /**
     * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
     */
    public java.util.List<crosby.binary.Osmformat.ChangeSet> getChangesetsList() {
      return changesets_;
    }
    /**
     * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
     */
    public java.util.List<? extends crosby.binary.Osmformat.ChangeSetOrBuilder> 
        getChangesetsOrBuilderList() {
      return changesets_;
    }
    /**
     * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
     */
    public int getChangesetsCount() {
      return changesets_.size();
    }
    /**
     * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
     */
    public crosby.binary.Osmformat.ChangeSet getChangesets(int index) {
      return changesets_.get(index);
    }
    /**
     * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
     */
    public crosby.binary.Osmformat.ChangeSetOrBuilder getChangesetsOrBuilder(
        int index) {
      return changesets_.get(index);
    }

    private void initFields() {
      nodes_ = java.util.Collections.emptyList();
      dense_ = crosby.binary.Osmformat.DenseNodes.getDefaultInstance();
      ways_ = java.util.Collections.emptyList();
      relations_ = java.util.Collections.emptyList();
      changesets_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      for (int i = 0; i < getNodesCount(); i++) {
        if (!getNodes(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getWaysCount(); i++) {
        if (!getWays(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getRelationsCount(); i++) {
        if (!getRelations(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getChangesetsCount(); i++) {
        if (!getChangesets(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < nodes_.size(); i++) {
        output.writeMessage(1, nodes_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(2, dense_);
      }
      for (int i = 0; i < ways_.size(); i++) {
        output.writeMessage(3, ways_.get(i));
      }
      for (int i = 0; i < relations_.size(); i++) {
        output.writeMessage(4, relations_.get(i));
      }
      for (int i = 0; i < changesets_.size(); i++) {
        output.writeMessage(5, changesets_.get(i));
      }
      output.writeRawBytes(unknownFields);
    }

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

      size = 0;
      for (int i = 0; i < nodes_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, nodes_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, dense_);
      }
      for (int i = 0; i < ways_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, ways_.get(i));
      }
      for (int i = 0; i < relations_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, relations_.get(i));
      }
      for (int i = 0; i < changesets_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, changesets_.get(i));
      }
      size += unknownFields.size();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.PrimitiveGroup parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static crosby.binary.Osmformat.PrimitiveGroup parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.PrimitiveGroup prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    /**
     * Protobuf type {@code OSMPBF.PrimitiveGroup}
     *
     * <pre>
     * Group of OSMPrimitives. All primitives in a group must be the same type.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          crosby.binary.Osmformat.PrimitiveGroup, Builder>
        implements
        // @@protoc_insertion_point(builder_implements:OSMPBF.PrimitiveGroup)
        crosby.binary.Osmformat.PrimitiveGroupOrBuilder {
      // Construct using crosby.binary.Osmformat.PrimitiveGroup.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        nodes_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        dense_ = crosby.binary.Osmformat.DenseNodes.getDefaultInstance();
        bitField0_ = (bitField0_ & ~0x00000002);
        ways_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
        relations_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);
        changesets_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public crosby.binary.Osmformat.PrimitiveGroup getDefaultInstanceForType() {
        return crosby.binary.Osmformat.PrimitiveGroup.getDefaultInstance();
      }

      public crosby.binary.Osmformat.PrimitiveGroup build() {
        crosby.binary.Osmformat.PrimitiveGroup result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public crosby.binary.Osmformat.PrimitiveGroup buildPartial() {
        crosby.binary.Osmformat.PrimitiveGroup result = new crosby.binary.Osmformat.PrimitiveGroup(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          nodes_ = java.util.Collections.unmodifiableList(nodes_);
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.nodes_ = nodes_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000001;
        }
        result.dense_ = dense_;
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          ways_ = java.util.Collections.unmodifiableList(ways_);
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.ways_ = ways_;
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          relations_ = java.util.Collections.unmodifiableList(relations_);
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.relations_ = relations_;
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          changesets_ = java.util.Collections.unmodifiableList(changesets_);
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.changesets_ = changesets_;
        result.bitField0_ = to_bitField0_;
        return result;
      }

      public Builder mergeFrom(crosby.binary.Osmformat.PrimitiveGroup other) {
        if (other == crosby.binary.Osmformat.PrimitiveGroup.getDefaultInstance()) return this;
        if (!other.nodes_.isEmpty()) {
          if (nodes_.isEmpty()) {
            nodes_ = other.nodes_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureNodesIsMutable();
            nodes_.addAll(other.nodes_);
          }
          
        }
        if (other.hasDense()) {
          mergeDense(other.getDense());
        }
        if (!other.ways_.isEmpty()) {
          if (ways_.isEmpty()) {
            ways_ = other.ways_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureWaysIsMutable();
            ways_.addAll(other.ways_);
          }
          
        }
        if (!other.relations_.isEmpty()) {
          if (relations_.isEmpty()) {
            relations_ = other.relations_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureRelationsIsMutable();
            relations_.addAll(other.relations_);
          }
          
        }
        if (!other.changesets_.isEmpty()) {
          if (changesets_.isEmpty()) {
            changesets_ = other.changesets_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureChangesetsIsMutable();
            changesets_.addAll(other.changesets_);
          }
          
        }
        setUnknownFields(
            getUnknownFields().concat(other.unknownFields));
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getNodesCount(); i++) {
          if (!getNodes(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getWaysCount(); i++) {
          if (!getWays(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getRelationsCount(); i++) {
          if (!getRelations(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getChangesetsCount(); i++) {
          if (!getChangesets(i).isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

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

      private java.util.List<crosby.binary.Osmformat.Node> nodes_ =
        java.util.Collections.emptyList();
      private void ensureNodesIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          nodes_ = new java.util.ArrayList<>(nodes_);
          bitField0_ |= 0x00000001;
         }
      }

      /**
       * <code>repeated .OSMPBF.Node nodes = 1;</code>
       */
      public java.util.List<crosby.binary.Osmformat.Node> getNodesList() {
        return java.util.Collections.unmodifiableList(nodes_);
      }
      /**
       * <code>repeated .OSMPBF.Node nodes = 1;</code>
       */
      public int getNodesCount() {
        return nodes_.size();
      }
      /**
       * <code>repeated .OSMPBF.Node nodes = 1;</code>
       */
      public crosby.binary.Osmformat.Node getNodes(int index) {
        return nodes_.get(index);
      }
      /**
       * <code>repeated .OSMPBF.Node nodes = 1;</code>
       */
      public Builder setNodes(
          int index, crosby.binary.Osmformat.Node value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureNodesIsMutable();
        nodes_.set(index, value);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Node nodes = 1;</code>
       */
      public Builder setNodes(
          int index, crosby.binary.Osmformat.Node.Builder builderForValue) {
        ensureNodesIsMutable();
        nodes_.set(index, builderForValue.build());

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Node nodes = 1;</code>
       */
      public Builder addNodes(crosby.binary.Osmformat.Node value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureNodesIsMutable();
        nodes_.add(value);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Node nodes = 1;</code>
       */
      public Builder addNodes(
          int index, crosby.binary.Osmformat.Node value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureNodesIsMutable();
        nodes_.add(index, value);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Node nodes = 1;</code>
       */
      public Builder addNodes(
          crosby.binary.Osmformat.Node.Builder builderForValue) {
        ensureNodesIsMutable();
        nodes_.add(builderForValue.build());

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Node nodes = 1;</code>
       */
      public Builder addNodes(
          int index, crosby.binary.Osmformat.Node.Builder builderForValue) {
        ensureNodesIsMutable();
        nodes_.add(index, builderForValue.build());

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Node nodes = 1;</code>
       */
      public Builder addAllNodes(
          java.lang.Iterable<? extends crosby.binary.Osmformat.Node> values) {
        ensureNodesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, nodes_);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Node nodes = 1;</code>
       */
      public Builder clearNodes() {
        nodes_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Node nodes = 1;</code>
       */
      public Builder removeNodes(int index) {
        ensureNodesIsMutable();
        nodes_.remove(index);

        return this;
      }

      private crosby.binary.Osmformat.DenseNodes dense_ = crosby.binary.Osmformat.DenseNodes.getDefaultInstance();
      /**
       * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
       */
      public boolean hasDense() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
       */
      public crosby.binary.Osmformat.DenseNodes getDense() {
        return dense_;
      }
      /**
       * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
       */
      public Builder setDense(crosby.binary.Osmformat.DenseNodes value) {
        if (value == null) {
          throw new NullPointerException();
        }
        dense_ = value;

        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
       */
      public Builder setDense(
          crosby.binary.Osmformat.DenseNodes.Builder builderForValue) {
        dense_ = builderForValue.build();

        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
       */
      public Builder mergeDense(crosby.binary.Osmformat.DenseNodes value) {
        if (((bitField0_ & 0x00000002) == 0x00000002) &&
            dense_ != crosby.binary.Osmformat.DenseNodes.getDefaultInstance()) {
          dense_ =
            crosby.binary.Osmformat.DenseNodes.newBuilder(dense_).mergeFrom(value).buildPartial();
        } else {
          dense_ = value;
        }

        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
       */
      public Builder clearDense() {
        dense_ = crosby.binary.Osmformat.DenseNodes.getDefaultInstance();

        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      private java.util.List<crosby.binary.Osmformat.Way> ways_ =
        java.util.Collections.emptyList();
      private void ensureWaysIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          ways_ = new java.util.ArrayList<>(ways_);
          bitField0_ |= 0x00000004;
         }
      }

      /**
       * <code>repeated .OSMPBF.Way ways = 3;</code>
       */
      public java.util.List<crosby.binary.Osmformat.Way> getWaysList() {
        return java.util.Collections.unmodifiableList(ways_);
      }
      /**
       * <code>repeated .OSMPBF.Way ways = 3;</code>
       */
      public int getWaysCount() {
        return ways_.size();
      }
      /**
       * <code>repeated .OSMPBF.Way ways = 3;</code>
       */
      public crosby.binary.Osmformat.Way getWays(int index) {
        return ways_.get(index);
      }
      /**
       * <code>repeated .OSMPBF.Way ways = 3;</code>
       */
      public Builder setWays(
          int index, crosby.binary.Osmformat.Way value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureWaysIsMutable();
        ways_.set(index, value);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Way ways = 3;</code>
       */
      public Builder setWays(
          int index, crosby.binary.Osmformat.Way.Builder builderForValue) {
        ensureWaysIsMutable();
        ways_.set(index, builderForValue.build());

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Way ways = 3;</code>
       */
      public Builder addWays(crosby.binary.Osmformat.Way value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureWaysIsMutable();
        ways_.add(value);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Way ways = 3;</code>
       */
      public Builder addWays(
          int index, crosby.binary.Osmformat.Way value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureWaysIsMutable();
        ways_.add(index, value);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Way ways = 3;</code>
       */
      public Builder addWays(
          crosby.binary.Osmformat.Way.Builder builderForValue) {
        ensureWaysIsMutable();
        ways_.add(builderForValue.build());

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Way ways = 3;</code>
       */
      public Builder addWays(
          int index, crosby.binary.Osmformat.Way.Builder builderForValue) {
        ensureWaysIsMutable();
        ways_.add(index, builderForValue.build());

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Way ways = 3;</code>
       */
      public Builder addAllWays(
          java.lang.Iterable<? extends crosby.binary.Osmformat.Way> values) {
        ensureWaysIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, ways_);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Way ways = 3;</code>
       */
      public Builder clearWays() {
        ways_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Way ways = 3;</code>
       */
      public Builder removeWays(int index) {
        ensureWaysIsMutable();
        ways_.remove(index);

        return this;
      }

      private java.util.List<crosby.binary.Osmformat.Relation> relations_ =
        java.util.Collections.emptyList();
      private void ensureRelationsIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          relations_ = new java.util.ArrayList<>(relations_);
          bitField0_ |= 0x00000008;
         }
      }

      /**
       * <code>repeated .OSMPBF.Relation relations = 4;</code>
       */
      public java.util.List<crosby.binary.Osmformat.Relation> getRelationsList() {
        return java.util.Collections.unmodifiableList(relations_);
      }
      /**
       * <code>repeated .OSMPBF.Relation relations = 4;</code>
       */
      public int getRelationsCount() {
        return relations_.size();
      }
      /**
       * <code>repeated .OSMPBF.Relation relations = 4;</code>
       */
      public crosby.binary.Osmformat.Relation getRelations(int index) {
        return relations_.get(index);
      }
      /**
       * <code>repeated .OSMPBF.Relation relations = 4;</code>
       */
      public Builder setRelations(
          int index, crosby.binary.Osmformat.Relation value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureRelationsIsMutable();
        relations_.set(index, value);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Relation relations = 4;</code>
       */
      public Builder setRelations(
          int index, crosby.binary.Osmformat.Relation.Builder builderForValue) {
        ensureRelationsIsMutable();
        relations_.set(index, builderForValue.build());

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Relation relations = 4;</code>
       */
      public Builder addRelations(crosby.binary.Osmformat.Relation value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureRelationsIsMutable();
        relations_.add(value);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Relation relations = 4;</code>
       */
      public Builder addRelations(
          int index, crosby.binary.Osmformat.Relation value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureRelationsIsMutable();
        relations_.add(index, value);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Relation relations = 4;</code>
       */
      public Builder addRelations(
          crosby.binary.Osmformat.Relation.Builder builderForValue) {
        ensureRelationsIsMutable();
        relations_.add(builderForValue.build());

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Relation relations = 4;</code>
       */
      public Builder addRelations(
          int index, crosby.binary.Osmformat.Relation.Builder builderForValue) {
        ensureRelationsIsMutable();
        relations_.add(index, builderForValue.build());

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Relation relations = 4;</code>
       */
      public Builder addAllRelations(
          java.lang.Iterable<? extends crosby.binary.Osmformat.Relation> values) {
        ensureRelationsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, relations_);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Relation relations = 4;</code>
       */
      public Builder clearRelations() {
        relations_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.Relation relations = 4;</code>
       */
      public Builder removeRelations(int index) {
        ensureRelationsIsMutable();
        relations_.remove(index);

        return this;
      }

      private java.util.List<crosby.binary.Osmformat.ChangeSet> changesets_ =
        java.util.Collections.emptyList();
      private void ensureChangesetsIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          changesets_ = new java.util.ArrayList<>(changesets_);
          bitField0_ |= 0x00000010;
         }
      }

      /**
       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
       */
      public java.util.List<crosby.binary.Osmformat.ChangeSet> getChangesetsList() {
        return java.util.Collections.unmodifiableList(changesets_);
      }
      /**
       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
       */
      public int getChangesetsCount() {
        return changesets_.size();
      }
      /**
       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
       */
      public crosby.binary.Osmformat.ChangeSet getChangesets(int index) {
        return changesets_.get(index);
      }
      /**
       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
       */
      public Builder setChangesets(
          int index, crosby.binary.Osmformat.ChangeSet value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureChangesetsIsMutable();
        changesets_.set(index, value);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
       */
      public Builder setChangesets(
          int index, crosby.binary.Osmformat.ChangeSet.Builder builderForValue) {
        ensureChangesetsIsMutable();
        changesets_.set(index, builderForValue.build());

        return this;
      }
      /**
       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
       */
      public Builder addChangesets(crosby.binary.Osmformat.ChangeSet value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureChangesetsIsMutable();
        changesets_.add(value);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
       */
      public Builder addChangesets(
          int index, crosby.binary.Osmformat.ChangeSet value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureChangesetsIsMutable();
        changesets_.add(index, value);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
       */
      public Builder addChangesets(
          crosby.binary.Osmformat.ChangeSet.Builder builderForValue) {
        ensureChangesetsIsMutable();
        changesets_.add(builderForValue.build());

        return this;
      }
      /**
       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
       */
      public Builder addChangesets(
          int index, crosby.binary.Osmformat.ChangeSet.Builder builderForValue) {
        ensureChangesetsIsMutable();
        changesets_.add(index, builderForValue.build());

        return this;
      }
      /**
       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
       */
      public Builder addAllChangesets(
          java.lang.Iterable<? extends crosby.binary.Osmformat.ChangeSet> values) {
        ensureChangesetsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, changesets_);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
       */
      public Builder clearChangesets() {
        changesets_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);

        return this;
      }
      /**
       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
       */
      public Builder removeChangesets(int index) {
        ensureChangesetsIsMutable();
        changesets_.remove(index);

        return this;
      }

      // @@protoc_insertion_point(builder_scope:OSMPBF.PrimitiveGroup)
    }

    static {
      defaultInstance = new PrimitiveGroup(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:OSMPBF.PrimitiveGroup)
  }

  public interface StringTableOrBuilder extends
      // @@protoc_insertion_point(interface_extends:OSMPBF.StringTable)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <code>repeated bytes s = 1;</code>
     */
    java.util.List<com.google.protobuf.ByteString> getSList();
    /**
     * <code>repeated bytes s = 1;</code>
     */
    int getSCount();
    /**
     * <code>repeated bytes s = 1;</code>
     */
    com.google.protobuf.ByteString getS(int index);
  }
  /**
   * Protobuf type {@code OSMPBF.StringTable}
   *
   * <pre>
   ** String table, contains the common strings in each block.
   *Note that we reserve index '0' as a delimiter, so the entry at that
   *index in the table is ALWAYS blank and unused.
   * </pre>
   */
  public static final class StringTable extends
      com.google.protobuf.GeneratedMessageLite implements
      // @@protoc_insertion_point(message_implements:OSMPBF.StringTable)
      StringTableOrBuilder {
    // Use StringTable.newBuilder() to construct.
    private StringTable(com.google.protobuf.GeneratedMessageLite.Builder builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private StringTable(boolean noInit) { this.unknownFields = com.google.protobuf.ByteString.EMPTY;}

    private static final StringTable defaultInstance;
    public static StringTable getDefaultInstance() {
      return defaultInstance;
    }

    public StringTable getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.ByteString unknownFields;
    private StringTable(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.ByteString.Output unknownFieldsOutput =
          com.google.protobuf.ByteString.newOutput();
      com.google.protobuf.CodedOutputStream unknownFieldsCodedOutput =
          com.google.protobuf.CodedOutputStream.newInstance(
              unknownFieldsOutput);
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFieldsCodedOutput,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                s_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000001;
              }
              s_.add(input.readBytes());
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          s_ = java.util.Collections.unmodifiableList(s_);
        }
        try {
          unknownFieldsCodedOutput.flush();
        } catch (java.io.IOException e) {
        // Should not happen
        } finally {
          unknownFields = unknownFieldsOutput.toByteString();
        }
        makeExtensionsImmutable();
      }
    }
    public static com.google.protobuf.Parser<StringTable> PARSER =
        new com.google.protobuf.AbstractParser<StringTable>() {
      public StringTable parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new StringTable(input, extensionRegistry);
      }
    };

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

    public static final int S_FIELD_NUMBER = 1;
    private java.util.List<com.google.protobuf.ByteString> s_;
    /**
     * <code>repeated bytes s = 1;</code>
     */
    public java.util.List<com.google.protobuf.ByteString>
        getSList() {
      return s_;
    }
    /**
     * <code>repeated bytes s = 1;</code>
     */
    public int getSCount() {
      return s_.size();
    }
    /**
     * <code>repeated bytes s = 1;</code>
     */
    public com.google.protobuf.ByteString getS(int index) {
      return s_.get(index);
    }

    private void initFields() {
      s_ = java.util.Collections.emptyList();
    }
    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 {
      getSerializedSize();
      for (int i = 0; i < s_.size(); i++) {
        output.writeBytes(1, s_.get(i));
      }
      output.writeRawBytes(unknownFields);
    }

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

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < s_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(s_.get(i));
        }
        size += dataSize;
        size += 1 * getSList().size();
      }
      size += unknownFields.size();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static crosby.binary.Osmformat.StringTable parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.StringTable parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.StringTable parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.StringTable parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.StringTable parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.StringTable parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.StringTable parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static crosby.binary.Osmformat.StringTable parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.StringTable parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.StringTable parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.StringTable prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    /**
     * Protobuf type {@code OSMPBF.StringTable}
     *
     * <pre>
     ** String table, contains the common strings in each block.
     *Note that we reserve index '0' as a delimiter, so the entry at that
     *index in the table is ALWAYS blank and unused.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          crosby.binary.Osmformat.StringTable, Builder>
        implements
        // @@protoc_insertion_point(builder_implements:OSMPBF.StringTable)
        crosby.binary.Osmformat.StringTableOrBuilder {
      // Construct using crosby.binary.Osmformat.StringTable.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        s_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public crosby.binary.Osmformat.StringTable getDefaultInstanceForType() {
        return crosby.binary.Osmformat.StringTable.getDefaultInstance();
      }

      public crosby.binary.Osmformat.StringTable build() {
        crosby.binary.Osmformat.StringTable result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public crosby.binary.Osmformat.StringTable buildPartial() {
        crosby.binary.Osmformat.StringTable result = new crosby.binary.Osmformat.StringTable(this);
        int from_bitField0_ = bitField0_;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          s_ = java.util.Collections.unmodifiableList(s_);
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.s_ = s_;
        return result;
      }

      public Builder mergeFrom(crosby.binary.Osmformat.StringTable other) {
        if (other == crosby.binary.Osmformat.StringTable.getDefaultInstance()) return this;
        if (!other.s_.isEmpty()) {
          if (s_.isEmpty()) {
            s_ = other.s_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureSIsMutable();
            s_.addAll(other.s_);
          }
          
        }
        setUnknownFields(
            getUnknownFields().concat(other.unknownFields));
        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 {
        crosby.binary.Osmformat.StringTable parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (crosby.binary.Osmformat.StringTable) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<com.google.protobuf.ByteString> s_ = java.util.Collections.emptyList();
      private void ensureSIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          s_ = new java.util.ArrayList<>(s_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <code>repeated bytes s = 1;</code>
       */
      public java.util.List<com.google.protobuf.ByteString>
          getSList() {
        return java.util.Collections.unmodifiableList(s_);
      }
      /**
       * <code>repeated bytes s = 1;</code>
       */
      public int getSCount() {
        return s_.size();
      }
      /**
       * <code>repeated bytes s = 1;</code>
       */
      public com.google.protobuf.ByteString getS(int index) {
        return s_.get(index);
      }
      /**
       * <code>repeated bytes s = 1;</code>
       */
      public Builder setS(
          int index, com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSIsMutable();
        s_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated bytes s = 1;</code>
       */
      public Builder addS(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSIsMutable();
        s_.add(value);
        
        return this;
      }
      /**
       * <code>repeated bytes s = 1;</code>
       */
      public Builder addAllS(
          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
        ensureSIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, s_);
        
        return this;
      }
      /**
       * <code>repeated bytes s = 1;</code>
       */
      public Builder clearS() {
        s_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        
        return this;
      }

      // @@protoc_insertion_point(builder_scope:OSMPBF.StringTable)
    }

    static {
      defaultInstance = new StringTable(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:OSMPBF.StringTable)
  }

  public interface InfoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:OSMPBF.Info)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <code>optional int32 version = 1 [default = -1];</code>
     */
    boolean hasVersion();
    /**
     * <code>optional int32 version = 1 [default = -1];</code>
     */
    int getVersion();

    /**
     * <code>optional int64 timestamp = 2;</code>
     */
    boolean hasTimestamp();
    /**
     * <code>optional int64 timestamp = 2;</code>
     */
    long getTimestamp();

    /**
     * <code>optional int64 changeset = 3;</code>
     */
    boolean hasChangeset();
    /**
     * <code>optional int64 changeset = 3;</code>
     */
    long getChangeset();

    /**
     * <code>optional int32 uid = 4;</code>
     */
    boolean hasUid();
    /**
     * <code>optional int32 uid = 4;</code>
     */
    int getUid();

    /**
     * <code>optional uint32 user_sid = 5;</code>
     *
     * <pre>
     * String IDs
     * </pre>
     */
    boolean hasUserSid();
    /**
     * <code>optional uint32 user_sid = 5;</code>
     *
     * <pre>
     * String IDs
     * </pre>
     */
    int getUserSid();

    /**
     * <code>optional bool visible = 6;</code>
     *
     * <pre>
     * The visible flag is used to store history information. It indicates that
     * the current object version has been created by a delete operation on the
     * OSM API.
     * When a writer sets this flag, it MUST add a required_features tag with
     * value "HistoricalInformation" to the HeaderBlock.
     * If this flag is not available for some object it MUST be assumed to be
     * true if the file has the required_features tag "HistoricalInformation"
     * set.
     * </pre>
     */
    boolean hasVisible();
    /**
     * <code>optional bool visible = 6;</code>
     *
     * <pre>
     * The visible flag is used to store history information. It indicates that
     * the current object version has been created by a delete operation on the
     * OSM API.
     * When a writer sets this flag, it MUST add a required_features tag with
     * value "HistoricalInformation" to the HeaderBlock.
     * If this flag is not available for some object it MUST be assumed to be
     * true if the file has the required_features tag "HistoricalInformation"
     * set.
     * </pre>
     */
    boolean getVisible();
  }
  /**
   * Protobuf type {@code OSMPBF.Info}
   *
   * <pre>
   * Optional metadata that may be included into each primitive. 
   * </pre>
   */
  public static final class Info extends
      com.google.protobuf.GeneratedMessageLite implements
      // @@protoc_insertion_point(message_implements:OSMPBF.Info)
      InfoOrBuilder {
    // Use Info.newBuilder() to construct.
    private Info(com.google.protobuf.GeneratedMessageLite.Builder builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Info(boolean noInit) { this.unknownFields = com.google.protobuf.ByteString.EMPTY;}

    private static final Info defaultInstance;
    public static Info getDefaultInstance() {
      return defaultInstance;
    }

    public Info getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.ByteString unknownFields;
    private Info(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.ByteString.Output unknownFieldsOutput =
          com.google.protobuf.ByteString.newOutput();
      com.google.protobuf.CodedOutputStream unknownFieldsCodedOutput =
          com.google.protobuf.CodedOutputStream.newInstance(
              unknownFieldsOutput);
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFieldsCodedOutput,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              version_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              timestamp_ = input.readInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              changeset_ = input.readInt64();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              uid_ = input.readInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              userSid_ = input.readUInt32();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              visible_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        try {
          unknownFieldsCodedOutput.flush();
        } catch (java.io.IOException e) {
        // Should not happen
        } finally {
          unknownFields = unknownFieldsOutput.toByteString();
        }
        makeExtensionsImmutable();
      }
    }
    public static com.google.protobuf.Parser<Info> PARSER =
        new com.google.protobuf.AbstractParser<Info>() {
      public Info parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Info(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    public static final int VERSION_FIELD_NUMBER = 1;
    private int version_;
    /**
     * <code>optional int32 version = 1 [default = -1];</code>
     */
    public boolean hasVersion() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 version = 1 [default = -1];</code>
     */
    public int getVersion() {
      return version_;
    }

    public static final int TIMESTAMP_FIELD_NUMBER = 2;
    private long timestamp_;
    /**
     * <code>optional int64 timestamp = 2;</code>
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 timestamp = 2;</code>
     */
    public long getTimestamp() {
      return timestamp_;
    }

    public static final int CHANGESET_FIELD_NUMBER = 3;
    private long changeset_;
    /**
     * <code>optional int64 changeset = 3;</code>
     */
    public boolean hasChangeset() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 changeset = 3;</code>
     */
    public long getChangeset() {
      return changeset_;
    }

    public static final int UID_FIELD_NUMBER = 4;
    private int uid_;
    /**
     * <code>optional int32 uid = 4;</code>
     */
    public boolean hasUid() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int32 uid = 4;</code>
     */
    public int getUid() {
      return uid_;
    }

    public static final int USER_SID_FIELD_NUMBER = 5;
    private int userSid_;
    /**
     * <code>optional uint32 user_sid = 5;</code>
     *
     * <pre>
     * String IDs
     * </pre>
     */
    public boolean hasUserSid() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional uint32 user_sid = 5;</code>
     *
     * <pre>
     * String IDs
     * </pre>
     */
    public int getUserSid() {
      return userSid_;
    }

    public static final int VISIBLE_FIELD_NUMBER = 6;
    private boolean visible_;
    /**
     * <code>optional bool visible = 6;</code>
     *
     * <pre>
     * The visible flag is used to store history information. It indicates that
     * the current object version has been created by a delete operation on the
     * OSM API.
     * When a writer sets this flag, it MUST add a required_features tag with
     * value "HistoricalInformation" to the HeaderBlock.
     * If this flag is not available for some object it MUST be assumed to be
     * true if the file has the required_features tag "HistoricalInformation"
     * set.
     * </pre>
     */
    public boolean hasVisible() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional bool visible = 6;</code>
     *
     * <pre>
     * The visible flag is used to store history information. It indicates that
     * the current object version has been created by a delete operation on the
     * OSM API.
     * When a writer sets this flag, it MUST add a required_features tag with
     * value "HistoricalInformation" to the HeaderBlock.
     * If this flag is not available for some object it MUST be assumed to be
     * true if the file has the required_features tag "HistoricalInformation"
     * set.
     * </pre>
     */
    public boolean getVisible() {
      return visible_;
    }

    private void initFields() {
      version_ = -1;
      timestamp_ = 0L;
      changeset_ = 0L;
      uid_ = 0;
      userSid_ = 0;
      visible_ = false;
    }
    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 {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, version_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, timestamp_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, changeset_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(4, uid_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeUInt32(5, userSid_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBool(6, visible_);
      }
      output.writeRawBytes(unknownFields);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, version_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, timestamp_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, changeset_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, uid_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(5, userSid_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, visible_);
      }
      size += unknownFields.size();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static crosby.binary.Osmformat.Info parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.Info parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.Info parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.Info parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.Info parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.Info parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.Info parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static crosby.binary.Osmformat.Info parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.Info parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.Info parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.Info prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    /**
     * Protobuf type {@code OSMPBF.Info}
     *
     * <pre>
     * Optional metadata that may be included into each primitive. 
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          crosby.binary.Osmformat.Info, Builder>
        implements
        // @@protoc_insertion_point(builder_implements:OSMPBF.Info)
        crosby.binary.Osmformat.InfoOrBuilder {
      // Construct using crosby.binary.Osmformat.Info.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        version_ = -1;
        bitField0_ = (bitField0_ & ~0x00000001);
        timestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        changeset_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        uid_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        userSid_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        visible_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public crosby.binary.Osmformat.Info getDefaultInstanceForType() {
        return crosby.binary.Osmformat.Info.getDefaultInstance();
      }

      public crosby.binary.Osmformat.Info build() {
        crosby.binary.Osmformat.Info result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public crosby.binary.Osmformat.Info buildPartial() {
        crosby.binary.Osmformat.Info result = new crosby.binary.Osmformat.Info(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.version_ = version_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.timestamp_ = timestamp_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.changeset_ = changeset_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.uid_ = uid_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.userSid_ = userSid_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.visible_ = visible_;
        result.bitField0_ = to_bitField0_;
        return result;
      }

      public Builder mergeFrom(crosby.binary.Osmformat.Info other) {
        if (other == crosby.binary.Osmformat.Info.getDefaultInstance()) return this;
        if (other.hasVersion()) {
          setVersion(other.getVersion());
        }
        if (other.hasTimestamp()) {
          setTimestamp(other.getTimestamp());
        }
        if (other.hasChangeset()) {
          setChangeset(other.getChangeset());
        }
        if (other.hasUid()) {
          setUid(other.getUid());
        }
        if (other.hasUserSid()) {
          setUserSid(other.getUserSid());
        }
        if (other.hasVisible()) {
          setVisible(other.getVisible());
        }
        setUnknownFields(
            getUnknownFields().concat(other.unknownFields));
        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 {
        crosby.binary.Osmformat.Info parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (crosby.binary.Osmformat.Info) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int version_ = -1;
      /**
       * <code>optional int32 version = 1 [default = -1];</code>
       */
      public boolean hasVersion() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 version = 1 [default = -1];</code>
       */
      public int getVersion() {
        return version_;
      }
      /**
       * <code>optional int32 version = 1 [default = -1];</code>
       */
      public Builder setVersion(int value) {
        bitField0_ |= 0x00000001;
        version_ = value;
        
        return this;
      }
      /**
       * <code>optional int32 version = 1 [default = -1];</code>
       */
      public Builder clearVersion() {
        bitField0_ = (bitField0_ & ~0x00000001);
        version_ = -1;
        
        return this;
      }

      private long timestamp_ ;
      /**
       * <code>optional int64 timestamp = 2;</code>
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 timestamp = 2;</code>
       */
      public long getTimestamp() {
        return timestamp_;
      }
      /**
       * <code>optional int64 timestamp = 2;</code>
       */
      public Builder setTimestamp(long value) {
        bitField0_ |= 0x00000002;
        timestamp_ = value;
        
        return this;
      }
      /**
       * <code>optional int64 timestamp = 2;</code>
       */
      public Builder clearTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000002);
        timestamp_ = 0L;
        
        return this;
      }

      private long changeset_ ;
      /**
       * <code>optional int64 changeset = 3;</code>
       */
      public boolean hasChangeset() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 changeset = 3;</code>
       */
      public long getChangeset() {
        return changeset_;
      }
      /**
       * <code>optional int64 changeset = 3;</code>
       */
      public Builder setChangeset(long value) {
        bitField0_ |= 0x00000004;
        changeset_ = value;
        
        return this;
      }
      /**
       * <code>optional int64 changeset = 3;</code>
       */
      public Builder clearChangeset() {
        bitField0_ = (bitField0_ & ~0x00000004);
        changeset_ = 0L;
        
        return this;
      }

      private int uid_ ;
      /**
       * <code>optional int32 uid = 4;</code>
       */
      public boolean hasUid() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int32 uid = 4;</code>
       */
      public int getUid() {
        return uid_;
      }
      /**
       * <code>optional int32 uid = 4;</code>
       */
      public Builder setUid(int value) {
        bitField0_ |= 0x00000008;
        uid_ = value;
        
        return this;
      }
      /**
       * <code>optional int32 uid = 4;</code>
       */
      public Builder clearUid() {
        bitField0_ = (bitField0_ & ~0x00000008);
        uid_ = 0;
        
        return this;
      }

      private int userSid_ ;
      /**
       * <code>optional uint32 user_sid = 5;</code>
       *
       * <pre>
       * String IDs
       * </pre>
       */
      public boolean hasUserSid() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional uint32 user_sid = 5;</code>
       *
       * <pre>
       * String IDs
       * </pre>
       */
      public int getUserSid() {
        return userSid_;
      }
      /**
       * <code>optional uint32 user_sid = 5;</code>
       *
       * <pre>
       * String IDs
       * </pre>
       */
      public Builder setUserSid(int value) {
        bitField0_ |= 0x00000010;
        userSid_ = value;
        
        return this;
      }
      /**
       * <code>optional uint32 user_sid = 5;</code>
       *
       * <pre>
       * String IDs
       * </pre>
       */
      public Builder clearUserSid() {
        bitField0_ = (bitField0_ & ~0x00000010);
        userSid_ = 0;
        
        return this;
      }

      private boolean visible_ ;
      /**
       * <code>optional bool visible = 6;</code>
       *
       * <pre>
       * The visible flag is used to store history information. It indicates that
       * the current object version has been created by a delete operation on the
       * OSM API.
       * When a writer sets this flag, it MUST add a required_features tag with
       * value "HistoricalInformation" to the HeaderBlock.
       * If this flag is not available for some object it MUST be assumed to be
       * true if the file has the required_features tag "HistoricalInformation"
       * set.
       * </pre>
       */
      public boolean hasVisible() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional bool visible = 6;</code>
       *
       * <pre>
       * The visible flag is used to store history information. It indicates that
       * the current object version has been created by a delete operation on the
       * OSM API.
       * When a writer sets this flag, it MUST add a required_features tag with
       * value "HistoricalInformation" to the HeaderBlock.
       * If this flag is not available for some object it MUST be assumed to be
       * true if the file has the required_features tag "HistoricalInformation"
       * set.
       * </pre>
       */
      public boolean getVisible() {
        return visible_;
      }
      /**
       * <code>optional bool visible = 6;</code>
       *
       * <pre>
       * The visible flag is used to store history information. It indicates that
       * the current object version has been created by a delete operation on the
       * OSM API.
       * When a writer sets this flag, it MUST add a required_features tag with
       * value "HistoricalInformation" to the HeaderBlock.
       * If this flag is not available for some object it MUST be assumed to be
       * true if the file has the required_features tag "HistoricalInformation"
       * set.
       * </pre>
       */
      public Builder setVisible(boolean value) {
        bitField0_ |= 0x00000020;
        visible_ = value;
        
        return this;
      }
      /**
       * <code>optional bool visible = 6;</code>
       *
       * <pre>
       * The visible flag is used to store history information. It indicates that
       * the current object version has been created by a delete operation on the
       * OSM API.
       * When a writer sets this flag, it MUST add a required_features tag with
       * value "HistoricalInformation" to the HeaderBlock.
       * If this flag is not available for some object it MUST be assumed to be
       * true if the file has the required_features tag "HistoricalInformation"
       * set.
       * </pre>
       */
      public Builder clearVisible() {
        bitField0_ = (bitField0_ & ~0x00000020);
        visible_ = false;
        
        return this;
      }

      // @@protoc_insertion_point(builder_scope:OSMPBF.Info)
    }

    static {
      defaultInstance = new Info(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:OSMPBF.Info)
  }

  public interface DenseInfoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:OSMPBF.DenseInfo)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <code>repeated int32 version = 1 [packed = true];</code>
     */
    java.util.List<java.lang.Integer> getVersionList();
    /**
     * <code>repeated int32 version = 1 [packed = true];</code>
     */
    int getVersionCount();
    /**
     * <code>repeated int32 version = 1 [packed = true];</code>
     */
    int getVersion(int index);

    /**
     * <code>repeated sint64 timestamp = 2 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    java.util.List<java.lang.Long> getTimestampList();
    /**
     * <code>repeated sint64 timestamp = 2 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    int getTimestampCount();
    /**
     * <code>repeated sint64 timestamp = 2 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    long getTimestamp(int index);

    /**
     * <code>repeated sint64 changeset = 3 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    java.util.List<java.lang.Long> getChangesetList();
    /**
     * <code>repeated sint64 changeset = 3 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    int getChangesetCount();
    /**
     * <code>repeated sint64 changeset = 3 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    long getChangeset(int index);

    /**
     * <code>repeated sint32 uid = 4 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    java.util.List<java.lang.Integer> getUidList();
    /**
     * <code>repeated sint32 uid = 4 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    int getUidCount();
    /**
     * <code>repeated sint32 uid = 4 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    int getUid(int index);

    /**
     * <code>repeated sint32 user_sid = 5 [packed = true];</code>
     *
     * <pre>
     * String IDs for usernames. DELTA coded
     * </pre>
     */
    java.util.List<java.lang.Integer> getUserSidList();
    /**
     * <code>repeated sint32 user_sid = 5 [packed = true];</code>
     *
     * <pre>
     * String IDs for usernames. DELTA coded
     * </pre>
     */
    int getUserSidCount();
    /**
     * <code>repeated sint32 user_sid = 5 [packed = true];</code>
     *
     * <pre>
     * String IDs for usernames. DELTA coded
     * </pre>
     */
    int getUserSid(int index);

    /**
     * <code>repeated bool visible = 6 [packed = true];</code>
     *
     * <pre>
     * The visible flag is used to store history information. It indicates that
     * the current object version has been created by a delete operation on the
     * OSM API.
     * When a writer sets this flag, it MUST add a required_features tag with
     * value "HistoricalInformation" to the HeaderBlock.
     * If this flag is not available for some object it MUST be assumed to be
     * true if the file has the required_features tag "HistoricalInformation"
     * set.
     * </pre>
     */
    java.util.List<java.lang.Boolean> getVisibleList();
    /**
     * <code>repeated bool visible = 6 [packed = true];</code>
     *
     * <pre>
     * The visible flag is used to store history information. It indicates that
     * the current object version has been created by a delete operation on the
     * OSM API.
     * When a writer sets this flag, it MUST add a required_features tag with
     * value "HistoricalInformation" to the HeaderBlock.
     * If this flag is not available for some object it MUST be assumed to be
     * true if the file has the required_features tag "HistoricalInformation"
     * set.
     * </pre>
     */
    int getVisibleCount();
    /**
     * <code>repeated bool visible = 6 [packed = true];</code>
     *
     * <pre>
     * The visible flag is used to store history information. It indicates that
     * the current object version has been created by a delete operation on the
     * OSM API.
     * When a writer sets this flag, it MUST add a required_features tag with
     * value "HistoricalInformation" to the HeaderBlock.
     * If this flag is not available for some object it MUST be assumed to be
     * true if the file has the required_features tag "HistoricalInformation"
     * set.
     * </pre>
     */
    boolean getVisible(int index);
  }
  /**
   * Protobuf type {@code OSMPBF.DenseInfo}
   *
   * <pre>
   ** Optional metadata that may be included into each primitive. Special dense format used in DenseNodes. 
   * </pre>
   */
  public static final class DenseInfo extends
      com.google.protobuf.GeneratedMessageLite implements
      // @@protoc_insertion_point(message_implements:OSMPBF.DenseInfo)
      DenseInfoOrBuilder {
    // Use DenseInfo.newBuilder() to construct.
    private DenseInfo(com.google.protobuf.GeneratedMessageLite.Builder builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DenseInfo(boolean noInit) { this.unknownFields = com.google.protobuf.ByteString.EMPTY;}

    private static final DenseInfo defaultInstance;
    public static DenseInfo getDefaultInstance() {
      return defaultInstance;
    }

    public DenseInfo getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.ByteString unknownFields;
    private DenseInfo(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.ByteString.Output unknownFieldsOutput =
          com.google.protobuf.ByteString.newOutput();
      com.google.protobuf.CodedOutputStream unknownFieldsCodedOutput =
          com.google.protobuf.CodedOutputStream.newInstance(
              unknownFieldsOutput);
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFieldsCodedOutput,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                version_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000001;
              }
              version_.add(input.readInt32());
              break;
            }
            case 10: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001) && input.getBytesUntilLimit() > 0) {
                version_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000001;
              }
              while (input.getBytesUntilLimit() > 0) {
                version_.add(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 16: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                timestamp_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000002;
              }
              timestamp_.add(input.readSInt64());
              break;
            }
            case 18: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) {
                timestamp_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000002;
              }
              while (input.getBytesUntilLimit() > 0) {
                timestamp_.add(input.readSInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 24: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                changeset_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000004;
              }
              changeset_.add(input.readSInt64());
              break;
            }
            case 26: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004) && input.getBytesUntilLimit() > 0) {
                changeset_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000004;
              }
              while (input.getBytesUntilLimit() > 0) {
                changeset_.add(input.readSInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 32: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                uid_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000008;
              }
              uid_.add(input.readSInt32());
              break;
            }
            case 34: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008) && input.getBytesUntilLimit() > 0) {
                uid_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000008;
              }
              while (input.getBytesUntilLimit() > 0) {
                uid_.add(input.readSInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 40: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                userSid_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000010;
              }
              userSid_.add(input.readSInt32());
              break;
            }
            case 42: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010) && input.getBytesUntilLimit() > 0) {
                userSid_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000010;
              }
              while (input.getBytesUntilLimit() > 0) {
                userSid_.add(input.readSInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 48: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                visible_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000020;
              }
              visible_.add(input.readBool());
              break;
            }
            case 50: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020) && input.getBytesUntilLimit() > 0) {
                visible_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000020;
              }
              while (input.getBytesUntilLimit() > 0) {
                visible_.add(input.readBool());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          version_ = java.util.Collections.unmodifiableList(version_);
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          timestamp_ = java.util.Collections.unmodifiableList(timestamp_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          changeset_ = java.util.Collections.unmodifiableList(changeset_);
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          uid_ = java.util.Collections.unmodifiableList(uid_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          userSid_ = java.util.Collections.unmodifiableList(userSid_);
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          visible_ = java.util.Collections.unmodifiableList(visible_);
        }
        try {
          unknownFieldsCodedOutput.flush();
        } catch (java.io.IOException e) {
        // Should not happen
        } finally {
          unknownFields = unknownFieldsOutput.toByteString();
        }
        makeExtensionsImmutable();
      }
    }
    public static com.google.protobuf.Parser<DenseInfo> PARSER =
        new com.google.protobuf.AbstractParser<DenseInfo>() {
      public DenseInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DenseInfo(input, extensionRegistry);
      }
    };

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

    public static final int VERSION_FIELD_NUMBER = 1;
    private java.util.List<java.lang.Integer> version_;
    /**
     * <code>repeated int32 version = 1 [packed = true];</code>
     */
    public java.util.List<java.lang.Integer>
        getVersionList() {
      return version_;
    }
    /**
     * <code>repeated int32 version = 1 [packed = true];</code>
     */
    public int getVersionCount() {
      return version_.size();
    }
    /**
     * <code>repeated int32 version = 1 [packed = true];</code>
     */
    public int getVersion(int index) {
      return version_.get(index);
    }
    private int versionMemoizedSerializedSize = -1;

    public static final int TIMESTAMP_FIELD_NUMBER = 2;
    private java.util.List<java.lang.Long> timestamp_;
    /**
     * <code>repeated sint64 timestamp = 2 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public java.util.List<java.lang.Long>
        getTimestampList() {
      return timestamp_;
    }
    /**
     * <code>repeated sint64 timestamp = 2 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public int getTimestampCount() {
      return timestamp_.size();
    }
    /**
     * <code>repeated sint64 timestamp = 2 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public long getTimestamp(int index) {
      return timestamp_.get(index);
    }
    private int timestampMemoizedSerializedSize = -1;

    public static final int CHANGESET_FIELD_NUMBER = 3;
    private java.util.List<java.lang.Long> changeset_;
    /**
     * <code>repeated sint64 changeset = 3 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public java.util.List<java.lang.Long>
        getChangesetList() {
      return changeset_;
    }
    /**
     * <code>repeated sint64 changeset = 3 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public int getChangesetCount() {
      return changeset_.size();
    }
    /**
     * <code>repeated sint64 changeset = 3 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public long getChangeset(int index) {
      return changeset_.get(index);
    }
    private int changesetMemoizedSerializedSize = -1;

    public static final int UID_FIELD_NUMBER = 4;
    private java.util.List<java.lang.Integer> uid_;
    /**
     * <code>repeated sint32 uid = 4 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public java.util.List<java.lang.Integer>
        getUidList() {
      return uid_;
    }
    /**
     * <code>repeated sint32 uid = 4 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public int getUidCount() {
      return uid_.size();
    }
    /**
     * <code>repeated sint32 uid = 4 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public int getUid(int index) {
      return uid_.get(index);
    }
    private int uidMemoizedSerializedSize = -1;

    public static final int USER_SID_FIELD_NUMBER = 5;
    private java.util.List<java.lang.Integer> userSid_;
    /**
     * <code>repeated sint32 user_sid = 5 [packed = true];</code>
     *
     * <pre>
     * String IDs for usernames. DELTA coded
     * </pre>
     */
    public java.util.List<java.lang.Integer>
        getUserSidList() {
      return userSid_;
    }
    /**
     * <code>repeated sint32 user_sid = 5 [packed = true];</code>
     *
     * <pre>
     * String IDs for usernames. DELTA coded
     * </pre>
     */
    public int getUserSidCount() {
      return userSid_.size();
    }
    /**
     * <code>repeated sint32 user_sid = 5 [packed = true];</code>
     *
     * <pre>
     * String IDs for usernames. DELTA coded
     * </pre>
     */
    public int getUserSid(int index) {
      return userSid_.get(index);
    }
    private int userSidMemoizedSerializedSize = -1;

    public static final int VISIBLE_FIELD_NUMBER = 6;
    private java.util.List<java.lang.Boolean> visible_;
    /**
     * <code>repeated bool visible = 6 [packed = true];</code>
     *
     * <pre>
     * The visible flag is used to store history information. It indicates that
     * the current object version has been created by a delete operation on the
     * OSM API.
     * When a writer sets this flag, it MUST add a required_features tag with
     * value "HistoricalInformation" to the HeaderBlock.
     * If this flag is not available for some object it MUST be assumed to be
     * true if the file has the required_features tag "HistoricalInformation"
     * set.
     * </pre>
     */
    public java.util.List<java.lang.Boolean>
        getVisibleList() {
      return visible_;
    }
    /**
     * <code>repeated bool visible = 6 [packed = true];</code>
     *
     * <pre>
     * The visible flag is used to store history information. It indicates that
     * the current object version has been created by a delete operation on the
     * OSM API.
     * When a writer sets this flag, it MUST add a required_features tag with
     * value "HistoricalInformation" to the HeaderBlock.
     * If this flag is not available for some object it MUST be assumed to be
     * true if the file has the required_features tag "HistoricalInformation"
     * set.
     * </pre>
     */
    public int getVisibleCount() {
      return visible_.size();
    }
    /**
     * <code>repeated bool visible = 6 [packed = true];</code>
     *
     * <pre>
     * The visible flag is used to store history information. It indicates that
     * the current object version has been created by a delete operation on the
     * OSM API.
     * When a writer sets this flag, it MUST add a required_features tag with
     * value "HistoricalInformation" to the HeaderBlock.
     * If this flag is not available for some object it MUST be assumed to be
     * true if the file has the required_features tag "HistoricalInformation"
     * set.
     * </pre>
     */
    public boolean getVisible(int index) {
      return visible_.get(index);
    }
    private int visibleMemoizedSerializedSize = -1;

    private void initFields() {
      version_ = java.util.Collections.emptyList();
      timestamp_ = java.util.Collections.emptyList();
      changeset_ = java.util.Collections.emptyList();
      uid_ = java.util.Collections.emptyList();
      userSid_ = java.util.Collections.emptyList();
      visible_ = java.util.Collections.emptyList();
    }
    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 {
      getSerializedSize();
      if (getVersionList().size() > 0) {
        output.writeRawVarint32(10);
        output.writeRawVarint32(versionMemoizedSerializedSize);
      }
      for (int i = 0; i < version_.size(); i++) {
        output.writeInt32NoTag(version_.get(i));
      }
      if (getTimestampList().size() > 0) {
        output.writeRawVarint32(18);
        output.writeRawVarint32(timestampMemoizedSerializedSize);
      }
      for (int i = 0; i < timestamp_.size(); i++) {
        output.writeSInt64NoTag(timestamp_.get(i));
      }
      if (getChangesetList().size() > 0) {
        output.writeRawVarint32(26);
        output.writeRawVarint32(changesetMemoizedSerializedSize);
      }
      for (int i = 0; i < changeset_.size(); i++) {
        output.writeSInt64NoTag(changeset_.get(i));
      }
      if (getUidList().size() > 0) {
        output.writeRawVarint32(34);
        output.writeRawVarint32(uidMemoizedSerializedSize);
      }
      for (int i = 0; i < uid_.size(); i++) {
        output.writeSInt32NoTag(uid_.get(i));
      }
      if (getUserSidList().size() > 0) {
        output.writeRawVarint32(42);
        output.writeRawVarint32(userSidMemoizedSerializedSize);
      }
      for (int i = 0; i < userSid_.size(); i++) {
        output.writeSInt32NoTag(userSid_.get(i));
      }
      if (getVisibleList().size() > 0) {
        output.writeRawVarint32(50);
        output.writeRawVarint32(visibleMemoizedSerializedSize);
      }
      for (int i = 0; i < visible_.size(); i++) {
        output.writeBoolNoTag(visible_.get(i));
      }
      output.writeRawBytes(unknownFields);
    }

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

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < version_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(version_.get(i));
        }
        size += dataSize;
        if (!getVersionList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        versionMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < timestamp_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt64SizeNoTag(timestamp_.get(i));
        }
        size += dataSize;
        if (!getTimestampList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        timestampMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < changeset_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt64SizeNoTag(changeset_.get(i));
        }
        size += dataSize;
        if (!getChangesetList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        changesetMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < uid_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt32SizeNoTag(uid_.get(i));
        }
        size += dataSize;
        if (!getUidList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        uidMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < userSid_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt32SizeNoTag(userSid_.get(i));
        }
        size += dataSize;
        if (!getUserSidList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        userSidMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        dataSize = 1 * getVisibleList().size();
        size += dataSize;
        if (!getVisibleList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        visibleMemoizedSerializedSize = dataSize;
      }
      size += unknownFields.size();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static crosby.binary.Osmformat.DenseInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.DenseInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.DenseInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.DenseInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.DenseInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.DenseInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.DenseInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static crosby.binary.Osmformat.DenseInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.DenseInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.DenseInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.DenseInfo prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    /**
     * Protobuf type {@code OSMPBF.DenseInfo}
     *
     * <pre>
     ** Optional metadata that may be included into each primitive. Special dense format used in DenseNodes. 
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          crosby.binary.Osmformat.DenseInfo, Builder>
        implements
        // @@protoc_insertion_point(builder_implements:OSMPBF.DenseInfo)
        crosby.binary.Osmformat.DenseInfoOrBuilder {
      // Construct using crosby.binary.Osmformat.DenseInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        version_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        timestamp_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        changeset_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
        uid_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);
        userSid_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        visible_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public crosby.binary.Osmformat.DenseInfo getDefaultInstanceForType() {
        return crosby.binary.Osmformat.DenseInfo.getDefaultInstance();
      }

      public crosby.binary.Osmformat.DenseInfo build() {
        crosby.binary.Osmformat.DenseInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public crosby.binary.Osmformat.DenseInfo buildPartial() {
        crosby.binary.Osmformat.DenseInfo result = new crosby.binary.Osmformat.DenseInfo(this);
        int from_bitField0_ = bitField0_;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          version_ = java.util.Collections.unmodifiableList(version_);
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.version_ = version_;
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          timestamp_ = java.util.Collections.unmodifiableList(timestamp_);
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.timestamp_ = timestamp_;
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          changeset_ = java.util.Collections.unmodifiableList(changeset_);
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.changeset_ = changeset_;
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          uid_ = java.util.Collections.unmodifiableList(uid_);
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.uid_ = uid_;
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          userSid_ = java.util.Collections.unmodifiableList(userSid_);
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.userSid_ = userSid_;
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          visible_ = java.util.Collections.unmodifiableList(visible_);
          bitField0_ = (bitField0_ & ~0x00000020);
        }
        result.visible_ = visible_;
        return result;
      }

      public Builder mergeFrom(crosby.binary.Osmformat.DenseInfo other) {
        if (other == crosby.binary.Osmformat.DenseInfo.getDefaultInstance()) return this;
        if (!other.version_.isEmpty()) {
          if (version_.isEmpty()) {
            version_ = other.version_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureVersionIsMutable();
            version_.addAll(other.version_);
          }
          
        }
        if (!other.timestamp_.isEmpty()) {
          if (timestamp_.isEmpty()) {
            timestamp_ = other.timestamp_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureTimestampIsMutable();
            timestamp_.addAll(other.timestamp_);
          }
          
        }
        if (!other.changeset_.isEmpty()) {
          if (changeset_.isEmpty()) {
            changeset_ = other.changeset_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureChangesetIsMutable();
            changeset_.addAll(other.changeset_);
          }
          
        }
        if (!other.uid_.isEmpty()) {
          if (uid_.isEmpty()) {
            uid_ = other.uid_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureUidIsMutable();
            uid_.addAll(other.uid_);
          }
          
        }
        if (!other.userSid_.isEmpty()) {
          if (userSid_.isEmpty()) {
            userSid_ = other.userSid_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureUserSidIsMutable();
            userSid_.addAll(other.userSid_);
          }
          
        }
        if (!other.visible_.isEmpty()) {
          if (visible_.isEmpty()) {
            visible_ = other.visible_;
            bitField0_ = (bitField0_ & ~0x00000020);
          } else {
            ensureVisibleIsMutable();
            visible_.addAll(other.visible_);
          }
          
        }
        setUnknownFields(
            getUnknownFields().concat(other.unknownFields));
        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 {
        crosby.binary.Osmformat.DenseInfo parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (crosby.binary.Osmformat.DenseInfo) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<java.lang.Integer> version_ = java.util.Collections.emptyList();
      private void ensureVersionIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          version_ = new java.util.ArrayList<>(version_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <code>repeated int32 version = 1 [packed = true];</code>
       */
      public java.util.List<java.lang.Integer>
          getVersionList() {
        return java.util.Collections.unmodifiableList(version_);
      }
      /**
       * <code>repeated int32 version = 1 [packed = true];</code>
       */
      public int getVersionCount() {
        return version_.size();
      }
      /**
       * <code>repeated int32 version = 1 [packed = true];</code>
       */
      public int getVersion(int index) {
        return version_.get(index);
      }
      /**
       * <code>repeated int32 version = 1 [packed = true];</code>
       */
      public Builder setVersion(
          int index, int value) {
        ensureVersionIsMutable();
        version_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated int32 version = 1 [packed = true];</code>
       */
      public Builder addVersion(int value) {
        ensureVersionIsMutable();
        version_.add(value);
        
        return this;
      }
      /**
       * <code>repeated int32 version = 1 [packed = true];</code>
       */
      public Builder addAllVersion(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureVersionIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, version_);
        
        return this;
      }
      /**
       * <code>repeated int32 version = 1 [packed = true];</code>
       */
      public Builder clearVersion() {
        version_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        
        return this;
      }

      private java.util.List<java.lang.Long> timestamp_ = java.util.Collections.emptyList();
      private void ensureTimestampIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          timestamp_ = new java.util.ArrayList<>(timestamp_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated sint64 timestamp = 2 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public java.util.List<java.lang.Long>
          getTimestampList() {
        return java.util.Collections.unmodifiableList(timestamp_);
      }
      /**
       * <code>repeated sint64 timestamp = 2 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public int getTimestampCount() {
        return timestamp_.size();
      }
      /**
       * <code>repeated sint64 timestamp = 2 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public long getTimestamp(int index) {
        return timestamp_.get(index);
      }
      /**
       * <code>repeated sint64 timestamp = 2 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder setTimestamp(
          int index, long value) {
        ensureTimestampIsMutable();
        timestamp_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated sint64 timestamp = 2 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder addTimestamp(long value) {
        ensureTimestampIsMutable();
        timestamp_.add(value);
        
        return this;
      }
      /**
       * <code>repeated sint64 timestamp = 2 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder addAllTimestamp(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureTimestampIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, timestamp_);
        
        return this;
      }
      /**
       * <code>repeated sint64 timestamp = 2 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder clearTimestamp() {
        timestamp_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        
        return this;
      }

      private java.util.List<java.lang.Long> changeset_ = java.util.Collections.emptyList();
      private void ensureChangesetIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          changeset_ = new java.util.ArrayList<>(changeset_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <code>repeated sint64 changeset = 3 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public java.util.List<java.lang.Long>
          getChangesetList() {
        return java.util.Collections.unmodifiableList(changeset_);
      }
      /**
       * <code>repeated sint64 changeset = 3 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public int getChangesetCount() {
        return changeset_.size();
      }
      /**
       * <code>repeated sint64 changeset = 3 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public long getChangeset(int index) {
        return changeset_.get(index);
      }
      /**
       * <code>repeated sint64 changeset = 3 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder setChangeset(
          int index, long value) {
        ensureChangesetIsMutable();
        changeset_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated sint64 changeset = 3 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder addChangeset(long value) {
        ensureChangesetIsMutable();
        changeset_.add(value);
        
        return this;
      }
      /**
       * <code>repeated sint64 changeset = 3 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder addAllChangeset(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureChangesetIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, changeset_);
        
        return this;
      }
      /**
       * <code>repeated sint64 changeset = 3 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder clearChangeset() {
        changeset_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
        
        return this;
      }

      private java.util.List<java.lang.Integer> uid_ = java.util.Collections.emptyList();
      private void ensureUidIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          uid_ = new java.util.ArrayList<>(uid_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <code>repeated sint32 uid = 4 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public java.util.List<java.lang.Integer>
          getUidList() {
        return java.util.Collections.unmodifiableList(uid_);
      }
      /**
       * <code>repeated sint32 uid = 4 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public int getUidCount() {
        return uid_.size();
      }
      /**
       * <code>repeated sint32 uid = 4 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public int getUid(int index) {
        return uid_.get(index);
      }
      /**
       * <code>repeated sint32 uid = 4 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder setUid(
          int index, int value) {
        ensureUidIsMutable();
        uid_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated sint32 uid = 4 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder addUid(int value) {
        ensureUidIsMutable();
        uid_.add(value);
        
        return this;
      }
      /**
       * <code>repeated sint32 uid = 4 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder addAllUid(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureUidIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, uid_);
        
        return this;
      }
      /**
       * <code>repeated sint32 uid = 4 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder clearUid() {
        uid_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);
        
        return this;
      }

      private java.util.List<java.lang.Integer> userSid_ = java.util.Collections.emptyList();
      private void ensureUserSidIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          userSid_ = new java.util.ArrayList<>(userSid_);
          bitField0_ |= 0x00000010;
         }
      }
      /**
       * <code>repeated sint32 user_sid = 5 [packed = true];</code>
       *
       * <pre>
       * String IDs for usernames. DELTA coded
       * </pre>
       */
      public java.util.List<java.lang.Integer>
          getUserSidList() {
        return java.util.Collections.unmodifiableList(userSid_);
      }
      /**
       * <code>repeated sint32 user_sid = 5 [packed = true];</code>
       *
       * <pre>
       * String IDs for usernames. DELTA coded
       * </pre>
       */
      public int getUserSidCount() {
        return userSid_.size();
      }
      /**
       * <code>repeated sint32 user_sid = 5 [packed = true];</code>
       *
       * <pre>
       * String IDs for usernames. DELTA coded
       * </pre>
       */
      public int getUserSid(int index) {
        return userSid_.get(index);
      }
      /**
       * <code>repeated sint32 user_sid = 5 [packed = true];</code>
       *
       * <pre>
       * String IDs for usernames. DELTA coded
       * </pre>
       */
      public Builder setUserSid(
          int index, int value) {
        ensureUserSidIsMutable();
        userSid_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated sint32 user_sid = 5 [packed = true];</code>
       *
       * <pre>
       * String IDs for usernames. DELTA coded
       * </pre>
       */
      public Builder addUserSid(int value) {
        ensureUserSidIsMutable();
        userSid_.add(value);
        
        return this;
      }
      /**
       * <code>repeated sint32 user_sid = 5 [packed = true];</code>
       *
       * <pre>
       * String IDs for usernames. DELTA coded
       * </pre>
       */
      public Builder addAllUserSid(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureUserSidIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, userSid_);
        
        return this;
      }
      /**
       * <code>repeated sint32 user_sid = 5 [packed = true];</code>
       *
       * <pre>
       * String IDs for usernames. DELTA coded
       * </pre>
       */
      public Builder clearUserSid() {
        userSid_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        
        return this;
      }

      private java.util.List<java.lang.Boolean> visible_ = java.util.Collections.emptyList();
      private void ensureVisibleIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          visible_ = new java.util.ArrayList<>(visible_);
          bitField0_ |= 0x00000020;
         }
      }
      /**
       * <code>repeated bool visible = 6 [packed = true];</code>
       *
       * <pre>
       * The visible flag is used to store history information. It indicates that
       * the current object version has been created by a delete operation on the
       * OSM API.
       * When a writer sets this flag, it MUST add a required_features tag with
       * value "HistoricalInformation" to the HeaderBlock.
       * If this flag is not available for some object it MUST be assumed to be
       * true if the file has the required_features tag "HistoricalInformation"
       * set.
       * </pre>
       */
      public java.util.List<java.lang.Boolean>
          getVisibleList() {
        return java.util.Collections.unmodifiableList(visible_);
      }
      /**
       * <code>repeated bool visible = 6 [packed = true];</code>
       *
       * <pre>
       * The visible flag is used to store history information. It indicates that
       * the current object version has been created by a delete operation on the
       * OSM API.
       * When a writer sets this flag, it MUST add a required_features tag with
       * value "HistoricalInformation" to the HeaderBlock.
       * If this flag is not available for some object it MUST be assumed to be
       * true if the file has the required_features tag "HistoricalInformation"
       * set.
       * </pre>
       */
      public int getVisibleCount() {
        return visible_.size();
      }
      /**
       * <code>repeated bool visible = 6 [packed = true];</code>
       *
       * <pre>
       * The visible flag is used to store history information. It indicates that
       * the current object version has been created by a delete operation on the
       * OSM API.
       * When a writer sets this flag, it MUST add a required_features tag with
       * value "HistoricalInformation" to the HeaderBlock.
       * If this flag is not available for some object it MUST be assumed to be
       * true if the file has the required_features tag "HistoricalInformation"
       * set.
       * </pre>
       */
      public boolean getVisible(int index) {
        return visible_.get(index);
      }
      /**
       * <code>repeated bool visible = 6 [packed = true];</code>
       *
       * <pre>
       * The visible flag is used to store history information. It indicates that
       * the current object version has been created by a delete operation on the
       * OSM API.
       * When a writer sets this flag, it MUST add a required_features tag with
       * value "HistoricalInformation" to the HeaderBlock.
       * If this flag is not available for some object it MUST be assumed to be
       * true if the file has the required_features tag "HistoricalInformation"
       * set.
       * </pre>
       */
      public Builder setVisible(
          int index, boolean value) {
        ensureVisibleIsMutable();
        visible_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated bool visible = 6 [packed = true];</code>
       *
       * <pre>
       * The visible flag is used to store history information. It indicates that
       * the current object version has been created by a delete operation on the
       * OSM API.
       * When a writer sets this flag, it MUST add a required_features tag with
       * value "HistoricalInformation" to the HeaderBlock.
       * If this flag is not available for some object it MUST be assumed to be
       * true if the file has the required_features tag "HistoricalInformation"
       * set.
       * </pre>
       */
      public Builder addVisible(boolean value) {
        ensureVisibleIsMutable();
        visible_.add(value);
        
        return this;
      }
      /**
       * <code>repeated bool visible = 6 [packed = true];</code>
       *
       * <pre>
       * The visible flag is used to store history information. It indicates that
       * the current object version has been created by a delete operation on the
       * OSM API.
       * When a writer sets this flag, it MUST add a required_features tag with
       * value "HistoricalInformation" to the HeaderBlock.
       * If this flag is not available for some object it MUST be assumed to be
       * true if the file has the required_features tag "HistoricalInformation"
       * set.
       * </pre>
       */
      public Builder addAllVisible(
          java.lang.Iterable<? extends java.lang.Boolean> values) {
        ensureVisibleIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, visible_);
        
        return this;
      }
      /**
       * <code>repeated bool visible = 6 [packed = true];</code>
       *
       * <pre>
       * The visible flag is used to store history information. It indicates that
       * the current object version has been created by a delete operation on the
       * OSM API.
       * When a writer sets this flag, it MUST add a required_features tag with
       * value "HistoricalInformation" to the HeaderBlock.
       * If this flag is not available for some object it MUST be assumed to be
       * true if the file has the required_features tag "HistoricalInformation"
       * set.
       * </pre>
       */
      public Builder clearVisible() {
        visible_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000020);
        
        return this;
      }

      // @@protoc_insertion_point(builder_scope:OSMPBF.DenseInfo)
    }

    static {
      defaultInstance = new DenseInfo(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:OSMPBF.DenseInfo)
  }

  public interface ChangeSetOrBuilder extends
      // @@protoc_insertion_point(interface_extends:OSMPBF.ChangeSet)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <code>required int64 id = 1;</code>
     *
     * <pre>
     *   
     *   // Parallel arrays.
     *   repeated uint32 keys = 2 [packed = true]; // String IDs.
     *   repeated uint32 vals = 3 [packed = true]; // String IDs.
     *   optional Info info = 4;
     * </pre>
     */
    boolean hasId();
    /**
     * <code>required int64 id = 1;</code>
     *
     * <pre>
     *   
     *   // Parallel arrays.
     *   repeated uint32 keys = 2 [packed = true]; // String IDs.
     *   repeated uint32 vals = 3 [packed = true]; // String IDs.
     *   optional Info info = 4;
     * </pre>
     */
    long getId();
  }
  /**
   * Protobuf type {@code OSMPBF.ChangeSet}
   *
   * <pre>
   * THIS IS STUB DESIGN FOR CHANGESETS. NOT USED RIGHT NOW.
   * TODO:    REMOVE THIS?
   * </pre>
   */
  public static final class ChangeSet extends
      com.google.protobuf.GeneratedMessageLite implements
      // @@protoc_insertion_point(message_implements:OSMPBF.ChangeSet)
      ChangeSetOrBuilder {
    // Use ChangeSet.newBuilder() to construct.
    private ChangeSet(com.google.protobuf.GeneratedMessageLite.Builder builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ChangeSet(boolean noInit) { this.unknownFields = com.google.protobuf.ByteString.EMPTY;}

    private static final ChangeSet defaultInstance;
    public static ChangeSet getDefaultInstance() {
      return defaultInstance;
    }

    public ChangeSet getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.ByteString unknownFields;
    private ChangeSet(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.ByteString.Output unknownFieldsOutput =
          com.google.protobuf.ByteString.newOutput();
      com.google.protobuf.CodedOutputStream unknownFieldsCodedOutput =
          com.google.protobuf.CodedOutputStream.newInstance(
              unknownFieldsOutput);
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFieldsCodedOutput,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              id_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        try {
          unknownFieldsCodedOutput.flush();
        } catch (java.io.IOException e) {
        // Should not happen
        } finally {
          unknownFields = unknownFieldsOutput.toByteString();
        }
        makeExtensionsImmutable();
      }
    }
    public static com.google.protobuf.Parser<ChangeSet> PARSER =
        new com.google.protobuf.AbstractParser<ChangeSet>() {
      public ChangeSet parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ChangeSet(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    public static final int ID_FIELD_NUMBER = 1;
    private long id_;
    /**
     * <code>required int64 id = 1;</code>
     *
     * <pre>
     *   
     *   // Parallel arrays.
     *   repeated uint32 keys = 2 [packed = true]; // String IDs.
     *   repeated uint32 vals = 3 [packed = true]; // String IDs.
     *   optional Info info = 4;
     * </pre>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required int64 id = 1;</code>
     *
     * <pre>
     *   
     *   // Parallel arrays.
     *   repeated uint32 keys = 2 [packed = true]; // String IDs.
     *   repeated uint32 vals = 3 [packed = true]; // String IDs.
     *   optional Info info = 4;
     * </pre>
     */
    public long getId() {
      return id_;
    }

    private void initFields() {
      id_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasId()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, id_);
      }
      output.writeRawBytes(unknownFields);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, id_);
      }
      size += unknownFields.size();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static crosby.binary.Osmformat.ChangeSet parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.ChangeSet parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.ChangeSet parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.ChangeSet parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.ChangeSet parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.ChangeSet parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.ChangeSet parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static crosby.binary.Osmformat.ChangeSet parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.ChangeSet parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.ChangeSet parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.ChangeSet prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    /**
     * Protobuf type {@code OSMPBF.ChangeSet}
     *
     * <pre>
     * THIS IS STUB DESIGN FOR CHANGESETS. NOT USED RIGHT NOW.
     * TODO:    REMOVE THIS?
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          crosby.binary.Osmformat.ChangeSet, Builder>
        implements
        // @@protoc_insertion_point(builder_implements:OSMPBF.ChangeSet)
        crosby.binary.Osmformat.ChangeSetOrBuilder {
      // Construct using crosby.binary.Osmformat.ChangeSet.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public crosby.binary.Osmformat.ChangeSet getDefaultInstanceForType() {
        return crosby.binary.Osmformat.ChangeSet.getDefaultInstance();
      }

      public crosby.binary.Osmformat.ChangeSet build() {
        crosby.binary.Osmformat.ChangeSet result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public crosby.binary.Osmformat.ChangeSet buildPartial() {
        crosby.binary.Osmformat.ChangeSet result = new crosby.binary.Osmformat.ChangeSet(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        result.bitField0_ = to_bitField0_;
        return result;
      }

      public Builder mergeFrom(crosby.binary.Osmformat.ChangeSet other) {
        if (other == crosby.binary.Osmformat.ChangeSet.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        setUnknownFields(
            getUnknownFields().concat(other.unknownFields));
        return this;
      }

      public final boolean isInitialized() {
        if (!hasId()) {
          
          return false;
        }
        return true;
      }

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

      private long id_ ;
      /**
       * <code>required int64 id = 1;</code>
       *
       * <pre>
       *   
       *   // Parallel arrays.
       *   repeated uint32 keys = 2 [packed = true]; // String IDs.
       *   repeated uint32 vals = 3 [packed = true]; // String IDs.
       *   optional Info info = 4;
       * </pre>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required int64 id = 1;</code>
       *
       * <pre>
       *   
       *   // Parallel arrays.
       *   repeated uint32 keys = 2 [packed = true]; // String IDs.
       *   repeated uint32 vals = 3 [packed = true]; // String IDs.
       *   optional Info info = 4;
       * </pre>
       */
      public long getId() {
        return id_;
      }
      /**
       * <code>required int64 id = 1;</code>
       *
       * <pre>
       *   
       *   // Parallel arrays.
       *   repeated uint32 keys = 2 [packed = true]; // String IDs.
       *   repeated uint32 vals = 3 [packed = true]; // String IDs.
       *   optional Info info = 4;
       * </pre>
       */
      public Builder setId(long value) {
        bitField0_ |= 0x00000001;
        id_ = value;
        
        return this;
      }
      /**
       * <code>required int64 id = 1;</code>
       *
       * <pre>
       *   
       *   // Parallel arrays.
       *   repeated uint32 keys = 2 [packed = true]; // String IDs.
       *   repeated uint32 vals = 3 [packed = true]; // String IDs.
       *   optional Info info = 4;
       * </pre>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = 0L;
        
        return this;
      }

      // @@protoc_insertion_point(builder_scope:OSMPBF.ChangeSet)
    }

    static {
      defaultInstance = new ChangeSet(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:OSMPBF.ChangeSet)
  }

  public interface NodeOrBuilder extends
      // @@protoc_insertion_point(interface_extends:OSMPBF.Node)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <code>required sint64 id = 1;</code>
     */
    boolean hasId();
    /**
     * <code>required sint64 id = 1;</code>
     */
    long getId();

    /**
     * <code>repeated uint32 keys = 2 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays.
     * </pre>
     */
    java.util.List<java.lang.Integer> getKeysList();
    /**
     * <code>repeated uint32 keys = 2 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays.
     * </pre>
     */
    int getKeysCount();
    /**
     * <code>repeated uint32 keys = 2 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays.
     * </pre>
     */
    int getKeys(int index);

    /**
     * <code>repeated uint32 vals = 3 [packed = true];</code>
     *
     * <pre>
     * String IDs.
     * </pre>
     */
    java.util.List<java.lang.Integer> getValsList();
    /**
     * <code>repeated uint32 vals = 3 [packed = true];</code>
     *
     * <pre>
     * String IDs.
     * </pre>
     */
    int getValsCount();
    /**
     * <code>repeated uint32 vals = 3 [packed = true];</code>
     *
     * <pre>
     * String IDs.
     * </pre>
     */
    int getVals(int index);

    /**
     * <code>optional .OSMPBF.Info info = 4;</code>
     *
     * <pre>
     * May be omitted in omitmeta
     * </pre>
     */
    boolean hasInfo();
    /**
     * <code>optional .OSMPBF.Info info = 4;</code>
     *
     * <pre>
     * May be omitted in omitmeta
     * </pre>
     */
    crosby.binary.Osmformat.Info getInfo();

    /**
     * <code>required sint64 lat = 8;</code>
     */
    boolean hasLat();
    /**
     * <code>required sint64 lat = 8;</code>
     */
    long getLat();

    /**
     * <code>required sint64 lon = 9;</code>
     */
    boolean hasLon();
    /**
     * <code>required sint64 lon = 9;</code>
     */
    long getLon();
  }
  /**
   * Protobuf type {@code OSMPBF.Node}
   */
  public static final class Node extends
      com.google.protobuf.GeneratedMessageLite implements
      // @@protoc_insertion_point(message_implements:OSMPBF.Node)
      NodeOrBuilder {
    // Use Node.newBuilder() to construct.
    private Node(com.google.protobuf.GeneratedMessageLite.Builder builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Node(boolean noInit) { this.unknownFields = com.google.protobuf.ByteString.EMPTY;}

    private static final Node defaultInstance;
    public static Node getDefaultInstance() {
      return defaultInstance;
    }

    public Node getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.ByteString unknownFields;
    private Node(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.ByteString.Output unknownFieldsOutput =
          com.google.protobuf.ByteString.newOutput();
      com.google.protobuf.CodedOutputStream unknownFieldsCodedOutput =
          com.google.protobuf.CodedOutputStream.newInstance(
              unknownFieldsOutput);
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFieldsCodedOutput,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              id_ = input.readSInt64();
              break;
            }
            case 16: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                keys_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000002;
              }
              keys_.add(input.readUInt32());
              break;
            }
            case 18: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) {
                keys_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000002;
              }
              while (input.getBytesUntilLimit() > 0) {
                keys_.add(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 24: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                vals_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000004;
              }
              vals_.add(input.readUInt32());
              break;
            }
            case 26: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004) && input.getBytesUntilLimit() > 0) {
                vals_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000004;
              }
              while (input.getBytesUntilLimit() > 0) {
                vals_.add(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 34: {
              crosby.binary.Osmformat.Info.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = info_.toBuilder();
              }
              info_ = input.readMessage(crosby.binary.Osmformat.Info.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(info_);
                info_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 64: {
              bitField0_ |= 0x00000004;
              lat_ = input.readSInt64();
              break;
            }
            case 72: {
              bitField0_ |= 0x00000008;
              lon_ = input.readSInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          keys_ = java.util.Collections.unmodifiableList(keys_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          vals_ = java.util.Collections.unmodifiableList(vals_);
        }
        try {
          unknownFieldsCodedOutput.flush();
        } catch (java.io.IOException e) {
        // Should not happen
        } finally {
          unknownFields = unknownFieldsOutput.toByteString();
        }
        makeExtensionsImmutable();
      }
    }
    public static com.google.protobuf.Parser<Node> PARSER =
        new com.google.protobuf.AbstractParser<Node>() {
      public Node parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Node(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    public static final int ID_FIELD_NUMBER = 1;
    private long id_;
    /**
     * <code>required sint64 id = 1;</code>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required sint64 id = 1;</code>
     */
    public long getId() {
      return id_;
    }

    public static final int KEYS_FIELD_NUMBER = 2;
    private java.util.List<java.lang.Integer> keys_;
    /**
     * <code>repeated uint32 keys = 2 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays.
     * </pre>
     */
    public java.util.List<java.lang.Integer>
        getKeysList() {
      return keys_;
    }
    /**
     * <code>repeated uint32 keys = 2 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays.
     * </pre>
     */
    public int getKeysCount() {
      return keys_.size();
    }
    /**
     * <code>repeated uint32 keys = 2 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays.
     * </pre>
     */
    public int getKeys(int index) {
      return keys_.get(index);
    }
    private int keysMemoizedSerializedSize = -1;

    public static final int VALS_FIELD_NUMBER = 3;
    private java.util.List<java.lang.Integer> vals_;
    /**
     * <code>repeated uint32 vals = 3 [packed = true];</code>
     *
     * <pre>
     * String IDs.
     * </pre>
     */
    public java.util.List<java.lang.Integer>
        getValsList() {
      return vals_;
    }
    /**
     * <code>repeated uint32 vals = 3 [packed = true];</code>
     *
     * <pre>
     * String IDs.
     * </pre>
     */
    public int getValsCount() {
      return vals_.size();
    }
    /**
     * <code>repeated uint32 vals = 3 [packed = true];</code>
     *
     * <pre>
     * String IDs.
     * </pre>
     */
    public int getVals(int index) {
      return vals_.get(index);
    }
    private int valsMemoizedSerializedSize = -1;

    public static final int INFO_FIELD_NUMBER = 4;
    private crosby.binary.Osmformat.Info info_;
    /**
     * <code>optional .OSMPBF.Info info = 4;</code>
     *
     * <pre>
     * May be omitted in omitmeta
     * </pre>
     */
    public boolean hasInfo() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .OSMPBF.Info info = 4;</code>
     *
     * <pre>
     * May be omitted in omitmeta
     * </pre>
     */
    public crosby.binary.Osmformat.Info getInfo() {
      return info_;
    }

    public static final int LAT_FIELD_NUMBER = 8;
    private long lat_;
    /**
     * <code>required sint64 lat = 8;</code>
     */
    public boolean hasLat() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>required sint64 lat = 8;</code>
     */
    public long getLat() {
      return lat_;
    }

    public static final int LON_FIELD_NUMBER = 9;
    private long lon_;
    /**
     * <code>required sint64 lon = 9;</code>
     */
    public boolean hasLon() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>required sint64 lon = 9;</code>
     */
    public long getLon() {
      return lon_;
    }

    private void initFields() {
      id_ = 0L;
      keys_ = java.util.Collections.emptyList();
      vals_ = java.util.Collections.emptyList();
      info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
      lat_ = 0L;
      lon_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasId()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasLat()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasLon()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeSInt64(1, id_);
      }
      if (getKeysList().size() > 0) {
        output.writeRawVarint32(18);
        output.writeRawVarint32(keysMemoizedSerializedSize);
      }
      for (int i = 0; i < keys_.size(); i++) {
        output.writeUInt32NoTag(keys_.get(i));
      }
      if (getValsList().size() > 0) {
        output.writeRawVarint32(26);
        output.writeRawVarint32(valsMemoizedSerializedSize);
      }
      for (int i = 0; i < vals_.size(); i++) {
        output.writeUInt32NoTag(vals_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(4, info_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeSInt64(8, lat_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeSInt64(9, lon_);
      }
      output.writeRawBytes(unknownFields);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(1, id_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < keys_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(keys_.get(i));
        }
        size += dataSize;
        if (!getKeysList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        keysMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < vals_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(vals_.get(i));
        }
        size += dataSize;
        if (!getValsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        valsMemoizedSerializedSize = dataSize;
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, info_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(8, lat_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(9, lon_);
      }
      size += unknownFields.size();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static crosby.binary.Osmformat.Node parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.Node parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.Node parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.Node parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.Node parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.Node parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.Node parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static crosby.binary.Osmformat.Node parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.Node parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.Node parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.Node prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    /**
     * Protobuf type {@code OSMPBF.Node}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          crosby.binary.Osmformat.Node, Builder>
        implements
        // @@protoc_insertion_point(builder_implements:OSMPBF.Node)
        crosby.binary.Osmformat.NodeOrBuilder {
      // Construct using crosby.binary.Osmformat.Node.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        keys_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        vals_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
        info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
        bitField0_ = (bitField0_ & ~0x00000008);
        lat_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000010);
        lon_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public crosby.binary.Osmformat.Node getDefaultInstanceForType() {
        return crosby.binary.Osmformat.Node.getDefaultInstance();
      }

      public crosby.binary.Osmformat.Node build() {
        crosby.binary.Osmformat.Node result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public crosby.binary.Osmformat.Node buildPartial() {
        crosby.binary.Osmformat.Node result = new crosby.binary.Osmformat.Node(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          keys_ = java.util.Collections.unmodifiableList(keys_);
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.keys_ = keys_;
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          vals_ = java.util.Collections.unmodifiableList(vals_);
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.vals_ = vals_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000002;
        }
        result.info_ = info_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000004;
        }
        result.lat_ = lat_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000008;
        }
        result.lon_ = lon_;
        result.bitField0_ = to_bitField0_;
        return result;
      }

      public Builder mergeFrom(crosby.binary.Osmformat.Node other) {
        if (other == crosby.binary.Osmformat.Node.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (!other.keys_.isEmpty()) {
          if (keys_.isEmpty()) {
            keys_ = other.keys_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureKeysIsMutable();
            keys_.addAll(other.keys_);
          }
          
        }
        if (!other.vals_.isEmpty()) {
          if (vals_.isEmpty()) {
            vals_ = other.vals_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureValsIsMutable();
            vals_.addAll(other.vals_);
          }
          
        }
        if (other.hasInfo()) {
          mergeInfo(other.getInfo());
        }
        if (other.hasLat()) {
          setLat(other.getLat());
        }
        if (other.hasLon()) {
          setLon(other.getLon());
        }
        setUnknownFields(
            getUnknownFields().concat(other.unknownFields));
        return this;
      }

      public final boolean isInitialized() {
        if (!hasId()) {
          
          return false;
        }
        if (!hasLat()) {
          
          return false;
        }
        if (!hasLon()) {
          
          return false;
        }
        return true;
      }

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

      private long id_ ;
      /**
       * <code>required sint64 id = 1;</code>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required sint64 id = 1;</code>
       */
      public long getId() {
        return id_;
      }
      /**
       * <code>required sint64 id = 1;</code>
       */
      public Builder setId(long value) {
        bitField0_ |= 0x00000001;
        id_ = value;
        
        return this;
      }
      /**
       * <code>required sint64 id = 1;</code>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = 0L;
        
        return this;
      }

      private java.util.List<java.lang.Integer> keys_ = java.util.Collections.emptyList();
      private void ensureKeysIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          keys_ = new java.util.ArrayList<>(keys_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public java.util.List<java.lang.Integer>
          getKeysList() {
        return java.util.Collections.unmodifiableList(keys_);
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public int getKeysCount() {
        return keys_.size();
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public int getKeys(int index) {
        return keys_.get(index);
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public Builder setKeys(
          int index, int value) {
        ensureKeysIsMutable();
        keys_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public Builder addKeys(int value) {
        ensureKeysIsMutable();
        keys_.add(value);
        
        return this;
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public Builder addAllKeys(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureKeysIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, keys_);
        
        return this;
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public Builder clearKeys() {
        keys_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        
        return this;
      }

      private java.util.List<java.lang.Integer> vals_ = java.util.Collections.emptyList();
      private void ensureValsIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          vals_ = new java.util.ArrayList<>(vals_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       *
       * <pre>
       * String IDs.
       * </pre>
       */
      public java.util.List<java.lang.Integer>
          getValsList() {
        return java.util.Collections.unmodifiableList(vals_);
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       *
       * <pre>
       * String IDs.
       * </pre>
       */
      public int getValsCount() {
        return vals_.size();
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       *
       * <pre>
       * String IDs.
       * </pre>
       */
      public int getVals(int index) {
        return vals_.get(index);
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       *
       * <pre>
       * String IDs.
       * </pre>
       */
      public Builder setVals(
          int index, int value) {
        ensureValsIsMutable();
        vals_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       *
       * <pre>
       * String IDs.
       * </pre>
       */
      public Builder addVals(int value) {
        ensureValsIsMutable();
        vals_.add(value);
        
        return this;
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       *
       * <pre>
       * String IDs.
       * </pre>
       */
      public Builder addAllVals(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureValsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, vals_);
        
        return this;
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       *
       * <pre>
       * String IDs.
       * </pre>
       */
      public Builder clearVals() {
        vals_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
        
        return this;
      }

      private crosby.binary.Osmformat.Info info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
      /**
       * <code>optional .OSMPBF.Info info = 4;</code>
       *
       * <pre>
       * May be omitted in omitmeta
       * </pre>
       */
      public boolean hasInfo() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .OSMPBF.Info info = 4;</code>
       *
       * <pre>
       * May be omitted in omitmeta
       * </pre>
       */
      public crosby.binary.Osmformat.Info getInfo() {
        return info_;
      }
      /**
       * <code>optional .OSMPBF.Info info = 4;</code>
       *
       * <pre>
       * May be omitted in omitmeta
       * </pre>
       */
      public Builder setInfo(crosby.binary.Osmformat.Info value) {
        if (value == null) {
          throw new NullPointerException();
        }
        info_ = value;

        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .OSMPBF.Info info = 4;</code>
       *
       * <pre>
       * May be omitted in omitmeta
       * </pre>
       */
      public Builder setInfo(
          crosby.binary.Osmformat.Info.Builder builderForValue) {
        info_ = builderForValue.build();

        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .OSMPBF.Info info = 4;</code>
       *
       * <pre>
       * May be omitted in omitmeta
       * </pre>
       */
      public Builder mergeInfo(crosby.binary.Osmformat.Info value) {
        if (((bitField0_ & 0x00000008) == 0x00000008) &&
            info_ != crosby.binary.Osmformat.Info.getDefaultInstance()) {
          info_ =
            crosby.binary.Osmformat.Info.newBuilder(info_).mergeFrom(value).buildPartial();
        } else {
          info_ = value;
        }

        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .OSMPBF.Info info = 4;</code>
       *
       * <pre>
       * May be omitted in omitmeta
       * </pre>
       */
      public Builder clearInfo() {
        info_ = crosby.binary.Osmformat.Info.getDefaultInstance();

        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      private long lat_ ;
      /**
       * <code>required sint64 lat = 8;</code>
       */
      public boolean hasLat() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>required sint64 lat = 8;</code>
       */
      public long getLat() {
        return lat_;
      }
      /**
       * <code>required sint64 lat = 8;</code>
       */
      public Builder setLat(long value) {
        bitField0_ |= 0x00000010;
        lat_ = value;
        
        return this;
      }
      /**
       * <code>required sint64 lat = 8;</code>
       */
      public Builder clearLat() {
        bitField0_ = (bitField0_ & ~0x00000010);
        lat_ = 0L;
        
        return this;
      }

      private long lon_ ;
      /**
       * <code>required sint64 lon = 9;</code>
       */
      public boolean hasLon() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>required sint64 lon = 9;</code>
       */
      public long getLon() {
        return lon_;
      }
      /**
       * <code>required sint64 lon = 9;</code>
       */
      public Builder setLon(long value) {
        bitField0_ |= 0x00000020;
        lon_ = value;
        
        return this;
      }
      /**
       * <code>required sint64 lon = 9;</code>
       */
      public Builder clearLon() {
        bitField0_ = (bitField0_ & ~0x00000020);
        lon_ = 0L;
        
        return this;
      }

      // @@protoc_insertion_point(builder_scope:OSMPBF.Node)
    }

    static {
      defaultInstance = new Node(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:OSMPBF.Node)
  }

  public interface DenseNodesOrBuilder extends
      // @@protoc_insertion_point(interface_extends:OSMPBF.DenseNodes)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <code>repeated sint64 id = 1 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    java.util.List<java.lang.Long> getIdList();
    /**
     * <code>repeated sint64 id = 1 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    int getIdCount();
    /**
     * <code>repeated sint64 id = 1 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    long getId(int index);

    /**
     * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
     *
     * <pre>
     *repeated Info info = 4;
     * </pre>
     */
    boolean hasDenseinfo();
    /**
     * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
     *
     * <pre>
     *repeated Info info = 4;
     * </pre>
     */
    crosby.binary.Osmformat.DenseInfo getDenseinfo();

    /**
     * <code>repeated sint64 lat = 8 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    java.util.List<java.lang.Long> getLatList();
    /**
     * <code>repeated sint64 lat = 8 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    int getLatCount();
    /**
     * <code>repeated sint64 lat = 8 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    long getLat(int index);

    /**
     * <code>repeated sint64 lon = 9 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    java.util.List<java.lang.Long> getLonList();
    /**
     * <code>repeated sint64 lon = 9 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    int getLonCount();
    /**
     * <code>repeated sint64 lon = 9 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    long getLon(int index);

    /**
     * <code>repeated int32 keys_vals = 10 [packed = true];</code>
     *
     * <pre>
     * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
     * </pre>
     */
    java.util.List<java.lang.Integer> getKeysValsList();
    /**
     * <code>repeated int32 keys_vals = 10 [packed = true];</code>
     *
     * <pre>
     * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
     * </pre>
     */
    int getKeysValsCount();
    /**
     * <code>repeated int32 keys_vals = 10 [packed = true];</code>
     *
     * <pre>
     * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
     * </pre>
     */
    int getKeysVals(int index);
  }
  /**
   * Protobuf type {@code OSMPBF.DenseNodes}
   */
  public static final class DenseNodes extends
      com.google.protobuf.GeneratedMessageLite implements
      // @@protoc_insertion_point(message_implements:OSMPBF.DenseNodes)
      DenseNodesOrBuilder {
    // Use DenseNodes.newBuilder() to construct.
    private DenseNodes(com.google.protobuf.GeneratedMessageLite.Builder builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DenseNodes(boolean noInit) { this.unknownFields = com.google.protobuf.ByteString.EMPTY;}

    private static final DenseNodes defaultInstance;
    public static DenseNodes getDefaultInstance() {
      return defaultInstance;
    }

    public DenseNodes getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.ByteString unknownFields;
    private DenseNodes(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.ByteString.Output unknownFieldsOutput =
          com.google.protobuf.ByteString.newOutput();
      com.google.protobuf.CodedOutputStream unknownFieldsCodedOutput =
          com.google.protobuf.CodedOutputStream.newInstance(
              unknownFieldsOutput);
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFieldsCodedOutput,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                id_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000001;
              }
              id_.add(input.readSInt64());
              break;
            }
            case 10: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001) && input.getBytesUntilLimit() > 0) {
                id_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000001;
              }
              while (input.getBytesUntilLimit() > 0) {
                id_.add(input.readSInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 42: {
              crosby.binary.Osmformat.DenseInfo.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = denseinfo_.toBuilder();
              }
              denseinfo_ = input.readMessage(crosby.binary.Osmformat.DenseInfo.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(denseinfo_);
                denseinfo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 64: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                lat_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000004;
              }
              lat_.add(input.readSInt64());
              break;
            }
            case 66: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004) && input.getBytesUntilLimit() > 0) {
                lat_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000004;
              }
              while (input.getBytesUntilLimit() > 0) {
                lat_.add(input.readSInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 72: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                lon_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000008;
              }
              lon_.add(input.readSInt64());
              break;
            }
            case 74: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008) && input.getBytesUntilLimit() > 0) {
                lon_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000008;
              }
              while (input.getBytesUntilLimit() > 0) {
                lon_.add(input.readSInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 80: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                keysVals_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000010;
              }
              keysVals_.add(input.readInt32());
              break;
            }
            case 82: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010) && input.getBytesUntilLimit() > 0) {
                keysVals_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000010;
              }
              while (input.getBytesUntilLimit() > 0) {
                keysVals_.add(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          id_ = java.util.Collections.unmodifiableList(id_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          lat_ = java.util.Collections.unmodifiableList(lat_);
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          lon_ = java.util.Collections.unmodifiableList(lon_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          keysVals_ = java.util.Collections.unmodifiableList(keysVals_);
        }
        try {
          unknownFieldsCodedOutput.flush();
        } catch (java.io.IOException e) {
        // Should not happen
        } finally {
          unknownFields = unknownFieldsOutput.toByteString();
        }
        makeExtensionsImmutable();
      }
    }
    public static com.google.protobuf.Parser<DenseNodes> PARSER =
        new com.google.protobuf.AbstractParser<DenseNodes>() {
      public DenseNodes parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DenseNodes(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    public static final int ID_FIELD_NUMBER = 1;
    private java.util.List<java.lang.Long> id_;
    /**
     * <code>repeated sint64 id = 1 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public java.util.List<java.lang.Long>
        getIdList() {
      return id_;
    }
    /**
     * <code>repeated sint64 id = 1 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public int getIdCount() {
      return id_.size();
    }
    /**
     * <code>repeated sint64 id = 1 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public long getId(int index) {
      return id_.get(index);
    }
    private int idMemoizedSerializedSize = -1;

    public static final int DENSEINFO_FIELD_NUMBER = 5;
    private crosby.binary.Osmformat.DenseInfo denseinfo_;
    /**
     * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
     *
     * <pre>
     *repeated Info info = 4;
     * </pre>
     */
    public boolean hasDenseinfo() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
     *
     * <pre>
     *repeated Info info = 4;
     * </pre>
     */
    public crosby.binary.Osmformat.DenseInfo getDenseinfo() {
      return denseinfo_;
    }

    public static final int LAT_FIELD_NUMBER = 8;
    private java.util.List<java.lang.Long> lat_;
    /**
     * <code>repeated sint64 lat = 8 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public java.util.List<java.lang.Long>
        getLatList() {
      return lat_;
    }
    /**
     * <code>repeated sint64 lat = 8 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public int getLatCount() {
      return lat_.size();
    }
    /**
     * <code>repeated sint64 lat = 8 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public long getLat(int index) {
      return lat_.get(index);
    }
    private int latMemoizedSerializedSize = -1;

    public static final int LON_FIELD_NUMBER = 9;
    private java.util.List<java.lang.Long> lon_;
    /**
     * <code>repeated sint64 lon = 9 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public java.util.List<java.lang.Long>
        getLonList() {
      return lon_;
    }
    /**
     * <code>repeated sint64 lon = 9 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public int getLonCount() {
      return lon_.size();
    }
    /**
     * <code>repeated sint64 lon = 9 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public long getLon(int index) {
      return lon_.get(index);
    }
    private int lonMemoizedSerializedSize = -1;

    public static final int KEYS_VALS_FIELD_NUMBER = 10;
    private java.util.List<java.lang.Integer> keysVals_;
    /**
     * <code>repeated int32 keys_vals = 10 [packed = true];</code>
     *
     * <pre>
     * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
     * </pre>
     */
    public java.util.List<java.lang.Integer>
        getKeysValsList() {
      return keysVals_;
    }
    /**
     * <code>repeated int32 keys_vals = 10 [packed = true];</code>
     *
     * <pre>
     * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
     * </pre>
     */
    public int getKeysValsCount() {
      return keysVals_.size();
    }
    /**
     * <code>repeated int32 keys_vals = 10 [packed = true];</code>
     *
     * <pre>
     * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
     * </pre>
     */
    public int getKeysVals(int index) {
      return keysVals_.get(index);
    }
    private int keysValsMemoizedSerializedSize = -1;

    private void initFields() {
      id_ = java.util.Collections.emptyList();
      denseinfo_ = crosby.binary.Osmformat.DenseInfo.getDefaultInstance();
      lat_ = java.util.Collections.emptyList();
      lon_ = java.util.Collections.emptyList();
      keysVals_ = java.util.Collections.emptyList();
    }
    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 {
      getSerializedSize();
      if (getIdList().size() > 0) {
        output.writeRawVarint32(10);
        output.writeRawVarint32(idMemoizedSerializedSize);
      }
      for (int i = 0; i < id_.size(); i++) {
        output.writeSInt64NoTag(id_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(5, denseinfo_);
      }
      if (getLatList().size() > 0) {
        output.writeRawVarint32(66);
        output.writeRawVarint32(latMemoizedSerializedSize);
      }
      for (int i = 0; i < lat_.size(); i++) {
        output.writeSInt64NoTag(lat_.get(i));
      }
      if (getLonList().size() > 0) {
        output.writeRawVarint32(74);
        output.writeRawVarint32(lonMemoizedSerializedSize);
      }
      for (int i = 0; i < lon_.size(); i++) {
        output.writeSInt64NoTag(lon_.get(i));
      }
      if (getKeysValsList().size() > 0) {
        output.writeRawVarint32(82);
        output.writeRawVarint32(keysValsMemoizedSerializedSize);
      }
      for (int i = 0; i < keysVals_.size(); i++) {
        output.writeInt32NoTag(keysVals_.get(i));
      }
      output.writeRawBytes(unknownFields);
    }

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

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < id_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt64SizeNoTag(id_.get(i));
        }
        size += dataSize;
        if (!getIdList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        idMemoizedSerializedSize = dataSize;
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, denseinfo_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < lat_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt64SizeNoTag(lat_.get(i));
        }
        size += dataSize;
        if (!getLatList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        latMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < lon_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt64SizeNoTag(lon_.get(i));
        }
        size += dataSize;
        if (!getLonList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        lonMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < keysVals_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(keysVals_.get(i));
        }
        size += dataSize;
        if (!getKeysValsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        keysValsMemoizedSerializedSize = dataSize;
      }
      size += unknownFields.size();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static crosby.binary.Osmformat.DenseNodes parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.DenseNodes parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.DenseNodes parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.DenseNodes parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.DenseNodes parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.DenseNodes parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.DenseNodes parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static crosby.binary.Osmformat.DenseNodes parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.DenseNodes parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.DenseNodes parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.DenseNodes prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    /**
     * Protobuf type {@code OSMPBF.DenseNodes}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          crosby.binary.Osmformat.DenseNodes, Builder>
        implements
        // @@protoc_insertion_point(builder_implements:OSMPBF.DenseNodes)
        crosby.binary.Osmformat.DenseNodesOrBuilder {
      // Construct using crosby.binary.Osmformat.DenseNodes.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        denseinfo_ = crosby.binary.Osmformat.DenseInfo.getDefaultInstance();
        bitField0_ = (bitField0_ & ~0x00000002);
        lat_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
        lon_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);
        keysVals_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public crosby.binary.Osmformat.DenseNodes getDefaultInstanceForType() {
        return crosby.binary.Osmformat.DenseNodes.getDefaultInstance();
      }

      public crosby.binary.Osmformat.DenseNodes build() {
        crosby.binary.Osmformat.DenseNodes result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public crosby.binary.Osmformat.DenseNodes buildPartial() {
        crosby.binary.Osmformat.DenseNodes result = new crosby.binary.Osmformat.DenseNodes(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          id_ = java.util.Collections.unmodifiableList(id_);
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.id_ = id_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000001;
        }
        result.denseinfo_ = denseinfo_;
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          lat_ = java.util.Collections.unmodifiableList(lat_);
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.lat_ = lat_;
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          lon_ = java.util.Collections.unmodifiableList(lon_);
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.lon_ = lon_;
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          keysVals_ = java.util.Collections.unmodifiableList(keysVals_);
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.keysVals_ = keysVals_;
        result.bitField0_ = to_bitField0_;
        return result;
      }

      public Builder mergeFrom(crosby.binary.Osmformat.DenseNodes other) {
        if (other == crosby.binary.Osmformat.DenseNodes.getDefaultInstance()) return this;
        if (!other.id_.isEmpty()) {
          if (id_.isEmpty()) {
            id_ = other.id_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureIdIsMutable();
            id_.addAll(other.id_);
          }
          
        }
        if (other.hasDenseinfo()) {
          mergeDenseinfo(other.getDenseinfo());
        }
        if (!other.lat_.isEmpty()) {
          if (lat_.isEmpty()) {
            lat_ = other.lat_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureLatIsMutable();
            lat_.addAll(other.lat_);
          }
          
        }
        if (!other.lon_.isEmpty()) {
          if (lon_.isEmpty()) {
            lon_ = other.lon_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureLonIsMutable();
            lon_.addAll(other.lon_);
          }
          
        }
        if (!other.keysVals_.isEmpty()) {
          if (keysVals_.isEmpty()) {
            keysVals_ = other.keysVals_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureKeysValsIsMutable();
            keysVals_.addAll(other.keysVals_);
          }
          
        }
        setUnknownFields(
            getUnknownFields().concat(other.unknownFields));
        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 {
        crosby.binary.Osmformat.DenseNodes parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (crosby.binary.Osmformat.DenseNodes) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<java.lang.Long> id_ = java.util.Collections.emptyList();
      private void ensureIdIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          id_ = new java.util.ArrayList<>(id_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <code>repeated sint64 id = 1 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public java.util.List<java.lang.Long>
          getIdList() {
        return java.util.Collections.unmodifiableList(id_);
      }
      /**
       * <code>repeated sint64 id = 1 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public int getIdCount() {
        return id_.size();
      }
      /**
       * <code>repeated sint64 id = 1 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public long getId(int index) {
        return id_.get(index);
      }
      /**
       * <code>repeated sint64 id = 1 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder setId(
          int index, long value) {
        ensureIdIsMutable();
        id_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated sint64 id = 1 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder addId(long value) {
        ensureIdIsMutable();
        id_.add(value);
        
        return this;
      }
      /**
       * <code>repeated sint64 id = 1 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder addAllId(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureIdIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, id_);
        
        return this;
      }
      /**
       * <code>repeated sint64 id = 1 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder clearId() {
        id_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        
        return this;
      }

      private crosby.binary.Osmformat.DenseInfo denseinfo_ = crosby.binary.Osmformat.DenseInfo.getDefaultInstance();
      /**
       * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
       *
       * <pre>
       *repeated Info info = 4;
       * </pre>
       */
      public boolean hasDenseinfo() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
       *
       * <pre>
       *repeated Info info = 4;
       * </pre>
       */
      public crosby.binary.Osmformat.DenseInfo getDenseinfo() {
        return denseinfo_;
      }
      /**
       * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
       *
       * <pre>
       *repeated Info info = 4;
       * </pre>
       */
      public Builder setDenseinfo(crosby.binary.Osmformat.DenseInfo value) {
        if (value == null) {
          throw new NullPointerException();
        }
        denseinfo_ = value;

        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
       *
       * <pre>
       *repeated Info info = 4;
       * </pre>
       */
      public Builder setDenseinfo(
          crosby.binary.Osmformat.DenseInfo.Builder builderForValue) {
        denseinfo_ = builderForValue.build();

        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
       *
       * <pre>
       *repeated Info info = 4;
       * </pre>
       */
      public Builder mergeDenseinfo(crosby.binary.Osmformat.DenseInfo value) {
        if (((bitField0_ & 0x00000002) == 0x00000002) &&
            denseinfo_ != crosby.binary.Osmformat.DenseInfo.getDefaultInstance()) {
          denseinfo_ =
            crosby.binary.Osmformat.DenseInfo.newBuilder(denseinfo_).mergeFrom(value).buildPartial();
        } else {
          denseinfo_ = value;
        }

        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
       *
       * <pre>
       *repeated Info info = 4;
       * </pre>
       */
      public Builder clearDenseinfo() {
        denseinfo_ = crosby.binary.Osmformat.DenseInfo.getDefaultInstance();

        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      private java.util.List<java.lang.Long> lat_ = java.util.Collections.emptyList();
      private void ensureLatIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          lat_ = new java.util.ArrayList<>(lat_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <code>repeated sint64 lat = 8 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public java.util.List<java.lang.Long>
          getLatList() {
        return java.util.Collections.unmodifiableList(lat_);
      }
      /**
       * <code>repeated sint64 lat = 8 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public int getLatCount() {
        return lat_.size();
      }
      /**
       * <code>repeated sint64 lat = 8 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public long getLat(int index) {
        return lat_.get(index);
      }
      /**
       * <code>repeated sint64 lat = 8 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder setLat(
          int index, long value) {
        ensureLatIsMutable();
        lat_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated sint64 lat = 8 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder addLat(long value) {
        ensureLatIsMutable();
        lat_.add(value);
        
        return this;
      }
      /**
       * <code>repeated sint64 lat = 8 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder addAllLat(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureLatIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, lat_);
        
        return this;
      }
      /**
       * <code>repeated sint64 lat = 8 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder clearLat() {
        lat_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
        
        return this;
      }

      private java.util.List<java.lang.Long> lon_ = java.util.Collections.emptyList();
      private void ensureLonIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          lon_ = new java.util.ArrayList<>(lon_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <code>repeated sint64 lon = 9 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public java.util.List<java.lang.Long>
          getLonList() {
        return java.util.Collections.unmodifiableList(lon_);
      }
      /**
       * <code>repeated sint64 lon = 9 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public int getLonCount() {
        return lon_.size();
      }
      /**
       * <code>repeated sint64 lon = 9 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public long getLon(int index) {
        return lon_.get(index);
      }
      /**
       * <code>repeated sint64 lon = 9 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder setLon(
          int index, long value) {
        ensureLonIsMutable();
        lon_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated sint64 lon = 9 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder addLon(long value) {
        ensureLonIsMutable();
        lon_.add(value);
        
        return this;
      }
      /**
       * <code>repeated sint64 lon = 9 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder addAllLon(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureLonIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, lon_);
        
        return this;
      }
      /**
       * <code>repeated sint64 lon = 9 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder clearLon() {
        lon_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);
        
        return this;
      }

      private java.util.List<java.lang.Integer> keysVals_ = java.util.Collections.emptyList();
      private void ensureKeysValsIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          keysVals_ = new java.util.ArrayList<>(keysVals_);
          bitField0_ |= 0x00000010;
         }
      }
      /**
       * <code>repeated int32 keys_vals = 10 [packed = true];</code>
       *
       * <pre>
       * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
       * </pre>
       */
      public java.util.List<java.lang.Integer>
          getKeysValsList() {
        return java.util.Collections.unmodifiableList(keysVals_);
      }
      /**
       * <code>repeated int32 keys_vals = 10 [packed = true];</code>
       *
       * <pre>
       * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
       * </pre>
       */
      public int getKeysValsCount() {
        return keysVals_.size();
      }
      /**
       * <code>repeated int32 keys_vals = 10 [packed = true];</code>
       *
       * <pre>
       * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
       * </pre>
       */
      public int getKeysVals(int index) {
        return keysVals_.get(index);
      }
      /**
       * <code>repeated int32 keys_vals = 10 [packed = true];</code>
       *
       * <pre>
       * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
       * </pre>
       */
      public Builder setKeysVals(
          int index, int value) {
        ensureKeysValsIsMutable();
        keysVals_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated int32 keys_vals = 10 [packed = true];</code>
       *
       * <pre>
       * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
       * </pre>
       */
      public Builder addKeysVals(int value) {
        ensureKeysValsIsMutable();
        keysVals_.add(value);
        
        return this;
      }
      /**
       * <code>repeated int32 keys_vals = 10 [packed = true];</code>
       *
       * <pre>
       * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
       * </pre>
       */
      public Builder addAllKeysVals(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureKeysValsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, keysVals_);
        
        return this;
      }
      /**
       * <code>repeated int32 keys_vals = 10 [packed = true];</code>
       *
       * <pre>
       * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
       * </pre>
       */
      public Builder clearKeysVals() {
        keysVals_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        
        return this;
      }

      // @@protoc_insertion_point(builder_scope:OSMPBF.DenseNodes)
    }

    static {
      defaultInstance = new DenseNodes(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:OSMPBF.DenseNodes)
  }

  public interface WayOrBuilder extends
      // @@protoc_insertion_point(interface_extends:OSMPBF.Way)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <code>required int64 id = 1;</code>
     */
    boolean hasId();
    /**
     * <code>required int64 id = 1;</code>
     */
    long getId();

    /**
     * <code>repeated uint32 keys = 2 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays.
     * </pre>
     */
    java.util.List<java.lang.Integer> getKeysList();
    /**
     * <code>repeated uint32 keys = 2 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays.
     * </pre>
     */
    int getKeysCount();
    /**
     * <code>repeated uint32 keys = 2 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays.
     * </pre>
     */
    int getKeys(int index);

    /**
     * <code>repeated uint32 vals = 3 [packed = true];</code>
     */
    java.util.List<java.lang.Integer> getValsList();
    /**
     * <code>repeated uint32 vals = 3 [packed = true];</code>
     */
    int getValsCount();
    /**
     * <code>repeated uint32 vals = 3 [packed = true];</code>
     */
    int getVals(int index);

    /**
     * <code>optional .OSMPBF.Info info = 4;</code>
     */
    boolean hasInfo();
    /**
     * <code>optional .OSMPBF.Info info = 4;</code>
     */
    crosby.binary.Osmformat.Info getInfo();

    /**
     * <code>repeated sint64 refs = 8 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    java.util.List<java.lang.Long> getRefsList();
    /**
     * <code>repeated sint64 refs = 8 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    int getRefsCount();
    /**
     * <code>repeated sint64 refs = 8 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    long getRefs(int index);
  }
  /**
   * Protobuf type {@code OSMPBF.Way}
   */
  public static final class Way extends
      com.google.protobuf.GeneratedMessageLite implements
      // @@protoc_insertion_point(message_implements:OSMPBF.Way)
      WayOrBuilder {
    // Use Way.newBuilder() to construct.
    private Way(com.google.protobuf.GeneratedMessageLite.Builder builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Way(boolean noInit) { this.unknownFields = com.google.protobuf.ByteString.EMPTY;}

    private static final Way defaultInstance;
    public static Way getDefaultInstance() {
      return defaultInstance;
    }

    public Way getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.ByteString unknownFields;
    private Way(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.ByteString.Output unknownFieldsOutput =
          com.google.protobuf.ByteString.newOutput();
      com.google.protobuf.CodedOutputStream unknownFieldsCodedOutput =
          com.google.protobuf.CodedOutputStream.newInstance(
              unknownFieldsOutput);
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFieldsCodedOutput,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              id_ = input.readInt64();
              break;
            }
            case 16: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                keys_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000002;
              }
              keys_.add(input.readUInt32());
              break;
            }
            case 18: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) {
                keys_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000002;
              }
              while (input.getBytesUntilLimit() > 0) {
                keys_.add(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 24: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                vals_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000004;
              }
              vals_.add(input.readUInt32());
              break;
            }
            case 26: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004) && input.getBytesUntilLimit() > 0) {
                vals_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000004;
              }
              while (input.getBytesUntilLimit() > 0) {
                vals_.add(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 34: {
              crosby.binary.Osmformat.Info.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = info_.toBuilder();
              }
              info_ = input.readMessage(crosby.binary.Osmformat.Info.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(info_);
                info_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 64: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                refs_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000010;
              }
              refs_.add(input.readSInt64());
              break;
            }
            case 66: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010) && input.getBytesUntilLimit() > 0) {
                refs_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000010;
              }
              while (input.getBytesUntilLimit() > 0) {
                refs_.add(input.readSInt64());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          keys_ = java.util.Collections.unmodifiableList(keys_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          vals_ = java.util.Collections.unmodifiableList(vals_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          refs_ = java.util.Collections.unmodifiableList(refs_);
        }
        try {
          unknownFieldsCodedOutput.flush();
        } catch (java.io.IOException e) {
        // Should not happen
        } finally {
          unknownFields = unknownFieldsOutput.toByteString();
        }
        makeExtensionsImmutable();
      }
    }
    public static com.google.protobuf.Parser<Way> PARSER =
        new com.google.protobuf.AbstractParser<Way>() {
      public Way parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Way(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    public static final int ID_FIELD_NUMBER = 1;
    private long id_;
    /**
     * <code>required int64 id = 1;</code>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required int64 id = 1;</code>
     */
    public long getId() {
      return id_;
    }

    public static final int KEYS_FIELD_NUMBER = 2;
    private java.util.List<java.lang.Integer> keys_;
    /**
     * <code>repeated uint32 keys = 2 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays.
     * </pre>
     */
    public java.util.List<java.lang.Integer>
        getKeysList() {
      return keys_;
    }
    /**
     * <code>repeated uint32 keys = 2 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays.
     * </pre>
     */
    public int getKeysCount() {
      return keys_.size();
    }
    /**
     * <code>repeated uint32 keys = 2 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays.
     * </pre>
     */
    public int getKeys(int index) {
      return keys_.get(index);
    }
    private int keysMemoizedSerializedSize = -1;

    public static final int VALS_FIELD_NUMBER = 3;
    private java.util.List<java.lang.Integer> vals_;
    /**
     * <code>repeated uint32 vals = 3 [packed = true];</code>
     */
    public java.util.List<java.lang.Integer>
        getValsList() {
      return vals_;
    }
    /**
     * <code>repeated uint32 vals = 3 [packed = true];</code>
     */
    public int getValsCount() {
      return vals_.size();
    }
    /**
     * <code>repeated uint32 vals = 3 [packed = true];</code>
     */
    public int getVals(int index) {
      return vals_.get(index);
    }
    private int valsMemoizedSerializedSize = -1;

    public static final int INFO_FIELD_NUMBER = 4;
    private crosby.binary.Osmformat.Info info_;
    /**
     * <code>optional .OSMPBF.Info info = 4;</code>
     */
    public boolean hasInfo() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .OSMPBF.Info info = 4;</code>
     */
    public crosby.binary.Osmformat.Info getInfo() {
      return info_;
    }

    public static final int REFS_FIELD_NUMBER = 8;
    private java.util.List<java.lang.Long> refs_;
    /**
     * <code>repeated sint64 refs = 8 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public java.util.List<java.lang.Long>
        getRefsList() {
      return refs_;
    }
    /**
     * <code>repeated sint64 refs = 8 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public int getRefsCount() {
      return refs_.size();
    }
    /**
     * <code>repeated sint64 refs = 8 [packed = true];</code>
     *
     * <pre>
     * DELTA coded
     * </pre>
     */
    public long getRefs(int index) {
      return refs_.get(index);
    }
    private int refsMemoizedSerializedSize = -1;

    private void initFields() {
      id_ = 0L;
      keys_ = java.util.Collections.emptyList();
      vals_ = java.util.Collections.emptyList();
      info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
      refs_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasId()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, id_);
      }
      if (getKeysList().size() > 0) {
        output.writeRawVarint32(18);
        output.writeRawVarint32(keysMemoizedSerializedSize);
      }
      for (int i = 0; i < keys_.size(); i++) {
        output.writeUInt32NoTag(keys_.get(i));
      }
      if (getValsList().size() > 0) {
        output.writeRawVarint32(26);
        output.writeRawVarint32(valsMemoizedSerializedSize);
      }
      for (int i = 0; i < vals_.size(); i++) {
        output.writeUInt32NoTag(vals_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(4, info_);
      }
      if (getRefsList().size() > 0) {
        output.writeRawVarint32(66);
        output.writeRawVarint32(refsMemoizedSerializedSize);
      }
      for (int i = 0; i < refs_.size(); i++) {
        output.writeSInt64NoTag(refs_.get(i));
      }
      output.writeRawBytes(unknownFields);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, id_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < keys_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(keys_.get(i));
        }
        size += dataSize;
        if (!getKeysList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        keysMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < vals_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(vals_.get(i));
        }
        size += dataSize;
        if (!getValsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        valsMemoizedSerializedSize = dataSize;
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, info_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < refs_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt64SizeNoTag(refs_.get(i));
        }
        size += dataSize;
        if (!getRefsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        refsMemoizedSerializedSize = dataSize;
      }
      size += unknownFields.size();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static crosby.binary.Osmformat.Way parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.Way parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.Way parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.Way parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.Way parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.Way parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.Way parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static crosby.binary.Osmformat.Way parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.Way parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.Way parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.Way prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    /**
     * Protobuf type {@code OSMPBF.Way}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          crosby.binary.Osmformat.Way, Builder>
        implements
        // @@protoc_insertion_point(builder_implements:OSMPBF.Way)
        crosby.binary.Osmformat.WayOrBuilder {
      // Construct using crosby.binary.Osmformat.Way.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        keys_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        vals_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
        info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
        bitField0_ = (bitField0_ & ~0x00000008);
        refs_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public crosby.binary.Osmformat.Way getDefaultInstanceForType() {
        return crosby.binary.Osmformat.Way.getDefaultInstance();
      }

      public crosby.binary.Osmformat.Way build() {
        crosby.binary.Osmformat.Way result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public crosby.binary.Osmformat.Way buildPartial() {
        crosby.binary.Osmformat.Way result = new crosby.binary.Osmformat.Way(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          keys_ = java.util.Collections.unmodifiableList(keys_);
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.keys_ = keys_;
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          vals_ = java.util.Collections.unmodifiableList(vals_);
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.vals_ = vals_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000002;
        }
        result.info_ = info_;
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          refs_ = java.util.Collections.unmodifiableList(refs_);
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.refs_ = refs_;
        result.bitField0_ = to_bitField0_;
        return result;
      }

      public Builder mergeFrom(crosby.binary.Osmformat.Way other) {
        if (other == crosby.binary.Osmformat.Way.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (!other.keys_.isEmpty()) {
          if (keys_.isEmpty()) {
            keys_ = other.keys_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureKeysIsMutable();
            keys_.addAll(other.keys_);
          }
          
        }
        if (!other.vals_.isEmpty()) {
          if (vals_.isEmpty()) {
            vals_ = other.vals_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureValsIsMutable();
            vals_.addAll(other.vals_);
          }
          
        }
        if (other.hasInfo()) {
          mergeInfo(other.getInfo());
        }
        if (!other.refs_.isEmpty()) {
          if (refs_.isEmpty()) {
            refs_ = other.refs_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureRefsIsMutable();
            refs_.addAll(other.refs_);
          }
          
        }
        setUnknownFields(
            getUnknownFields().concat(other.unknownFields));
        return this;
      }

      public final boolean isInitialized() {
        if (!hasId()) {
          
          return false;
        }
        return true;
      }

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

      private long id_ ;
      /**
       * <code>required int64 id = 1;</code>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required int64 id = 1;</code>
       */
      public long getId() {
        return id_;
      }
      /**
       * <code>required int64 id = 1;</code>
       */
      public Builder setId(long value) {
        bitField0_ |= 0x00000001;
        id_ = value;
        
        return this;
      }
      /**
       * <code>required int64 id = 1;</code>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = 0L;
        
        return this;
      }

      private java.util.List<java.lang.Integer> keys_ = java.util.Collections.emptyList();
      private void ensureKeysIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          keys_ = new java.util.ArrayList<>(keys_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public java.util.List<java.lang.Integer>
          getKeysList() {
        return java.util.Collections.unmodifiableList(keys_);
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public int getKeysCount() {
        return keys_.size();
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public int getKeys(int index) {
        return keys_.get(index);
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public Builder setKeys(
          int index, int value) {
        ensureKeysIsMutable();
        keys_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public Builder addKeys(int value) {
        ensureKeysIsMutable();
        keys_.add(value);
        
        return this;
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public Builder addAllKeys(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureKeysIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, keys_);
        
        return this;
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public Builder clearKeys() {
        keys_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        
        return this;
      }

      private java.util.List<java.lang.Integer> vals_ = java.util.Collections.emptyList();
      private void ensureValsIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          vals_ = new java.util.ArrayList<>(vals_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       */
      public java.util.List<java.lang.Integer>
          getValsList() {
        return java.util.Collections.unmodifiableList(vals_);
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       */
      public int getValsCount() {
        return vals_.size();
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       */
      public int getVals(int index) {
        return vals_.get(index);
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       */
      public Builder setVals(
          int index, int value) {
        ensureValsIsMutable();
        vals_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       */
      public Builder addVals(int value) {
        ensureValsIsMutable();
        vals_.add(value);
        
        return this;
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       */
      public Builder addAllVals(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureValsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, vals_);
        
        return this;
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       */
      public Builder clearVals() {
        vals_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
        
        return this;
      }

      private crosby.binary.Osmformat.Info info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
      /**
       * <code>optional .OSMPBF.Info info = 4;</code>
       */
      public boolean hasInfo() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .OSMPBF.Info info = 4;</code>
       */
      public crosby.binary.Osmformat.Info getInfo() {
        return info_;
      }
      /**
       * <code>optional .OSMPBF.Info info = 4;</code>
       */
      public Builder setInfo(crosby.binary.Osmformat.Info value) {
        if (value == null) {
          throw new NullPointerException();
        }
        info_ = value;

        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .OSMPBF.Info info = 4;</code>
       */
      public Builder setInfo(
          crosby.binary.Osmformat.Info.Builder builderForValue) {
        info_ = builderForValue.build();

        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .OSMPBF.Info info = 4;</code>
       */
      public Builder mergeInfo(crosby.binary.Osmformat.Info value) {
        if (((bitField0_ & 0x00000008) == 0x00000008) &&
            info_ != crosby.binary.Osmformat.Info.getDefaultInstance()) {
          info_ =
            crosby.binary.Osmformat.Info.newBuilder(info_).mergeFrom(value).buildPartial();
        } else {
          info_ = value;
        }

        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .OSMPBF.Info info = 4;</code>
       */
      public Builder clearInfo() {
        info_ = crosby.binary.Osmformat.Info.getDefaultInstance();

        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      private java.util.List<java.lang.Long> refs_ = java.util.Collections.emptyList();
      private void ensureRefsIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          refs_ = new java.util.ArrayList<>(refs_);
          bitField0_ |= 0x00000010;
         }
      }
      /**
       * <code>repeated sint64 refs = 8 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public java.util.List<java.lang.Long>
          getRefsList() {
        return java.util.Collections.unmodifiableList(refs_);
      }
      /**
       * <code>repeated sint64 refs = 8 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public int getRefsCount() {
        return refs_.size();
      }
      /**
       * <code>repeated sint64 refs = 8 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public long getRefs(int index) {
        return refs_.get(index);
      }
      /**
       * <code>repeated sint64 refs = 8 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder setRefs(
          int index, long value) {
        ensureRefsIsMutable();
        refs_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated sint64 refs = 8 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder addRefs(long value) {
        ensureRefsIsMutable();
        refs_.add(value);
        
        return this;
      }
      /**
       * <code>repeated sint64 refs = 8 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder addAllRefs(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureRefsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, refs_);
        
        return this;
      }
      /**
       * <code>repeated sint64 refs = 8 [packed = true];</code>
       *
       * <pre>
       * DELTA coded
       * </pre>
       */
      public Builder clearRefs() {
        refs_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        
        return this;
      }

      // @@protoc_insertion_point(builder_scope:OSMPBF.Way)
    }

    static {
      defaultInstance = new Way(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:OSMPBF.Way)
  }

  public interface RelationOrBuilder extends
      // @@protoc_insertion_point(interface_extends:OSMPBF.Relation)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <code>required int64 id = 1;</code>
     */
    boolean hasId();
    /**
     * <code>required int64 id = 1;</code>
     */
    long getId();

    /**
     * <code>repeated uint32 keys = 2 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays.
     * </pre>
     */
    java.util.List<java.lang.Integer> getKeysList();
    /**
     * <code>repeated uint32 keys = 2 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays.
     * </pre>
     */
    int getKeysCount();
    /**
     * <code>repeated uint32 keys = 2 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays.
     * </pre>
     */
    int getKeys(int index);

    /**
     * <code>repeated uint32 vals = 3 [packed = true];</code>
     */
    java.util.List<java.lang.Integer> getValsList();
    /**
     * <code>repeated uint32 vals = 3 [packed = true];</code>
     */
    int getValsCount();
    /**
     * <code>repeated uint32 vals = 3 [packed = true];</code>
     */
    int getVals(int index);

    /**
     * <code>optional .OSMPBF.Info info = 4;</code>
     */
    boolean hasInfo();
    /**
     * <code>optional .OSMPBF.Info info = 4;</code>
     */
    crosby.binary.Osmformat.Info getInfo();

    /**
     * <code>repeated int32 roles_sid = 8 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays
     * </pre>
     */
    java.util.List<java.lang.Integer> getRolesSidList();
    /**
     * <code>repeated int32 roles_sid = 8 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays
     * </pre>
     */
    int getRolesSidCount();
    /**
     * <code>repeated int32 roles_sid = 8 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays
     * </pre>
     */
    int getRolesSid(int index);

    /**
     * <code>repeated sint64 memids = 9 [packed = true];</code>
     *
     * <pre>
     * DELTA encoded
     * </pre>
     */
    java.util.List<java.lang.Long> getMemidsList();
    /**
     * <code>repeated sint64 memids = 9 [packed = true];</code>
     *
     * <pre>
     * DELTA encoded
     * </pre>
     */
    int getMemidsCount();
    /**
     * <code>repeated sint64 memids = 9 [packed = true];</code>
     *
     * <pre>
     * DELTA encoded
     * </pre>
     */
    long getMemids(int index);

    /**
     * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
     */
    java.util.List<crosby.binary.Osmformat.Relation.MemberType> getTypesList();
    /**
     * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
     */
    int getTypesCount();
    /**
     * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
     */
    crosby.binary.Osmformat.Relation.MemberType getTypes(int index);
  }
  /**
   * Protobuf type {@code OSMPBF.Relation}
   */
  public static final class Relation extends
      com.google.protobuf.GeneratedMessageLite implements
      // @@protoc_insertion_point(message_implements:OSMPBF.Relation)
      RelationOrBuilder {
    // Use Relation.newBuilder() to construct.
    private Relation(com.google.protobuf.GeneratedMessageLite.Builder builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Relation(boolean noInit) { this.unknownFields = com.google.protobuf.ByteString.EMPTY;}

    private static final Relation defaultInstance;
    public static Relation getDefaultInstance() {
      return defaultInstance;
    }

    public Relation getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.ByteString unknownFields;
    private Relation(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.ByteString.Output unknownFieldsOutput =
          com.google.protobuf.ByteString.newOutput();
      com.google.protobuf.CodedOutputStream unknownFieldsCodedOutput =
          com.google.protobuf.CodedOutputStream.newInstance(
              unknownFieldsOutput);
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFieldsCodedOutput,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              id_ = input.readInt64();
              break;
            }
            case 16: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                keys_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000002;
              }
              keys_.add(input.readUInt32());
              break;
            }
            case 18: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) {
                keys_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000002;
              }
              while (input.getBytesUntilLimit() > 0) {
                keys_.add(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 24: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                vals_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000004;
              }
              vals_.add(input.readUInt32());
              break;
            }
            case 26: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004) && input.getBytesUntilLimit() > 0) {
                vals_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000004;
              }
              while (input.getBytesUntilLimit() > 0) {
                vals_.add(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 34: {
              crosby.binary.Osmformat.Info.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = info_.toBuilder();
              }
              info_ = input.readMessage(crosby.binary.Osmformat.Info.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(info_);
                info_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 64: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                rolesSid_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000010;
              }
              rolesSid_.add(input.readInt32());
              break;
            }
            case 66: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010) && input.getBytesUntilLimit() > 0) {
                rolesSid_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000010;
              }
              while (input.getBytesUntilLimit() > 0) {
                rolesSid_.add(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 72: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                memids_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000020;
              }
              memids_.add(input.readSInt64());
              break;
            }
            case 74: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020) && input.getBytesUntilLimit() > 0) {
                memids_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000020;
              }
              while (input.getBytesUntilLimit() > 0) {
                memids_.add(input.readSInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 80: {
              int rawValue = input.readEnum();
              crosby.binary.Osmformat.Relation.MemberType value = crosby.binary.Osmformat.Relation.MemberType.valueOf(rawValue);
              if (value == null) {
                unknownFieldsCodedOutput.writeRawVarint32(tag);
                unknownFieldsCodedOutput.writeRawVarint32(rawValue);
                } else {
                if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                  types_ = new java.util.ArrayList<>();
                  mutable_bitField0_ |= 0x00000040;
                }
                types_.add(value);
              }
              break;
            }
            case 82: {
              int length = input.readRawVarint32();
              int oldLimit = input.pushLimit(length);
              while(input.getBytesUntilLimit() > 0) {
                int rawValue = input.readEnum();
                crosby.binary.Osmformat.Relation.MemberType value = crosby.binary.Osmformat.Relation.MemberType.valueOf(rawValue);
                if (value == null) {
                  unknownFieldsCodedOutput.writeRawVarint32(tag);
                  unknownFieldsCodedOutput.writeRawVarint32(rawValue);
                  } else {
                  if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                    types_ = new java.util.ArrayList<>();
                    mutable_bitField0_ |= 0x00000040;
                  }
                  types_.add(value);
                }
              }
              input.popLimit(oldLimit);
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          keys_ = java.util.Collections.unmodifiableList(keys_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          vals_ = java.util.Collections.unmodifiableList(vals_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          rolesSid_ = java.util.Collections.unmodifiableList(rolesSid_);
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          memids_ = java.util.Collections.unmodifiableList(memids_);
        }
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          types_ = java.util.Collections.unmodifiableList(types_);
        }
        try {
          unknownFieldsCodedOutput.flush();
        } catch (java.io.IOException e) {
        // Should not happen
        } finally {
          unknownFields = unknownFieldsOutput.toByteString();
        }
        makeExtensionsImmutable();
      }
    }
    public static com.google.protobuf.Parser<Relation> PARSER =
        new com.google.protobuf.AbstractParser<Relation>() {
      public Relation parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Relation(input, extensionRegistry);
      }
    };

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

    /**
     * Protobuf enum {@code OSMPBF.Relation.MemberType}
     */
    public enum MemberType
        implements com.google.protobuf.Internal.EnumLite {
      /**
       * <code>NODE = 0;</code>
       */
      NODE(0, 0),
      /**
       * <code>WAY = 1;</code>
       */
      WAY(1, 1),
      /**
       * <code>RELATION = 2;</code>
       */
      RELATION(2, 2),
      ;

      /**
       * <code>NODE = 0;</code>
       */
      public static final int NODE_VALUE = 0;
      /**
       * <code>WAY = 1;</code>
       */
      public static final int WAY_VALUE = 1;
      /**
       * <code>RELATION = 2;</code>
       */
      public static final int RELATION_VALUE = 2;


      public final int getNumber() { return value; }

      public static MemberType valueOf(int value) {
        switch (value) {
          case 0: return NODE;
          case 1: return WAY;
          case 2: return RELATION;
          default: return null;
        }
      }

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

      private final int value;

      private MemberType(int index, int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:OSMPBF.Relation.MemberType)
    }

    private int bitField0_;
    public static final int ID_FIELD_NUMBER = 1;
    private long id_;
    /**
     * <code>required int64 id = 1;</code>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required int64 id = 1;</code>
     */
    public long getId() {
      return id_;
    }

    public static final int KEYS_FIELD_NUMBER = 2;
    private java.util.List<java.lang.Integer> keys_;
    /**
     * <code>repeated uint32 keys = 2 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays.
     * </pre>
     */
    public java.util.List<java.lang.Integer>
        getKeysList() {
      return keys_;
    }
    /**
     * <code>repeated uint32 keys = 2 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays.
     * </pre>
     */
    public int getKeysCount() {
      return keys_.size();
    }
    /**
     * <code>repeated uint32 keys = 2 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays.
     * </pre>
     */
    public int getKeys(int index) {
      return keys_.get(index);
    }
    private int keysMemoizedSerializedSize = -1;

    public static final int VALS_FIELD_NUMBER = 3;
    private java.util.List<java.lang.Integer> vals_;
    /**
     * <code>repeated uint32 vals = 3 [packed = true];</code>
     */
    public java.util.List<java.lang.Integer>
        getValsList() {
      return vals_;
    }
    /**
     * <code>repeated uint32 vals = 3 [packed = true];</code>
     */
    public int getValsCount() {
      return vals_.size();
    }
    /**
     * <code>repeated uint32 vals = 3 [packed = true];</code>
     */
    public int getVals(int index) {
      return vals_.get(index);
    }
    private int valsMemoizedSerializedSize = -1;

    public static final int INFO_FIELD_NUMBER = 4;
    private crosby.binary.Osmformat.Info info_;
    /**
     * <code>optional .OSMPBF.Info info = 4;</code>
     */
    public boolean hasInfo() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .OSMPBF.Info info = 4;</code>
     */
    public crosby.binary.Osmformat.Info getInfo() {
      return info_;
    }

    public static final int ROLES_SID_FIELD_NUMBER = 8;
    private java.util.List<java.lang.Integer> rolesSid_;
    /**
     * <code>repeated int32 roles_sid = 8 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays
     * </pre>
     */
    public java.util.List<java.lang.Integer>
        getRolesSidList() {
      return rolesSid_;
    }
    /**
     * <code>repeated int32 roles_sid = 8 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays
     * </pre>
     */
    public int getRolesSidCount() {
      return rolesSid_.size();
    }
    /**
     * <code>repeated int32 roles_sid = 8 [packed = true];</code>
     *
     * <pre>
     * Parallel arrays
     * </pre>
     */
    public int getRolesSid(int index) {
      return rolesSid_.get(index);
    }
    private int rolesSidMemoizedSerializedSize = -1;

    public static final int MEMIDS_FIELD_NUMBER = 9;
    private java.util.List<java.lang.Long> memids_;
    /**
     * <code>repeated sint64 memids = 9 [packed = true];</code>
     *
     * <pre>
     * DELTA encoded
     * </pre>
     */
    public java.util.List<java.lang.Long>
        getMemidsList() {
      return memids_;
    }
    /**
     * <code>repeated sint64 memids = 9 [packed = true];</code>
     *
     * <pre>
     * DELTA encoded
     * </pre>
     */
    public int getMemidsCount() {
      return memids_.size();
    }
    /**
     * <code>repeated sint64 memids = 9 [packed = true];</code>
     *
     * <pre>
     * DELTA encoded
     * </pre>
     */
    public long getMemids(int index) {
      return memids_.get(index);
    }
    private int memidsMemoizedSerializedSize = -1;

    public static final int TYPES_FIELD_NUMBER = 10;
    private java.util.List<crosby.binary.Osmformat.Relation.MemberType> types_;
    /**
     * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
     */
    public java.util.List<crosby.binary.Osmformat.Relation.MemberType> getTypesList() {
      return types_;
    }
    /**
     * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
     */
    public int getTypesCount() {
      return types_.size();
    }
    /**
     * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
     */
    public crosby.binary.Osmformat.Relation.MemberType getTypes(int index) {
      return types_.get(index);
    }
    private int typesMemoizedSerializedSize;

    private void initFields() {
      id_ = 0L;
      keys_ = java.util.Collections.emptyList();
      vals_ = java.util.Collections.emptyList();
      info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
      rolesSid_ = java.util.Collections.emptyList();
      memids_ = java.util.Collections.emptyList();
      types_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasId()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, id_);
      }
      if (getKeysList().size() > 0) {
        output.writeRawVarint32(18);
        output.writeRawVarint32(keysMemoizedSerializedSize);
      }
      for (int i = 0; i < keys_.size(); i++) {
        output.writeUInt32NoTag(keys_.get(i));
      }
      if (getValsList().size() > 0) {
        output.writeRawVarint32(26);
        output.writeRawVarint32(valsMemoizedSerializedSize);
      }
      for (int i = 0; i < vals_.size(); i++) {
        output.writeUInt32NoTag(vals_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(4, info_);
      }
      if (getRolesSidList().size() > 0) {
        output.writeRawVarint32(66);
        output.writeRawVarint32(rolesSidMemoizedSerializedSize);
      }
      for (int i = 0; i < rolesSid_.size(); i++) {
        output.writeInt32NoTag(rolesSid_.get(i));
      }
      if (getMemidsList().size() > 0) {
        output.writeRawVarint32(74);
        output.writeRawVarint32(memidsMemoizedSerializedSize);
      }
      for (int i = 0; i < memids_.size(); i++) {
        output.writeSInt64NoTag(memids_.get(i));
      }
      if (getTypesList().size() > 0) {
        output.writeRawVarint32(82);
        output.writeRawVarint32(typesMemoizedSerializedSize);
      }
      for (int i = 0; i < types_.size(); i++) {
        output.writeEnumNoTag(types_.get(i).getNumber());
      }
      output.writeRawBytes(unknownFields);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, id_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < keys_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(keys_.get(i));
        }
        size += dataSize;
        if (!getKeysList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        keysMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < vals_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(vals_.get(i));
        }
        size += dataSize;
        if (!getValsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        valsMemoizedSerializedSize = dataSize;
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, info_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < rolesSid_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(rolesSid_.get(i));
        }
        size += dataSize;
        if (!getRolesSidList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        rolesSidMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < memids_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt64SizeNoTag(memids_.get(i));
        }
        size += dataSize;
        if (!getMemidsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        memidsMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < types_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeEnumSizeNoTag(types_.get(i).getNumber());
        }
        size += dataSize;
        if (!getTypesList().isEmpty()) {  size += 1;
          size += com.google.protobuf.CodedOutputStream
            .computeRawVarint32Size(dataSize);
        }typesMemoizedSerializedSize = dataSize;
      }
      size += unknownFields.size();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static crosby.binary.Osmformat.Relation parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.Relation parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.Relation parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static crosby.binary.Osmformat.Relation parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static crosby.binary.Osmformat.Relation parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.Relation parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.Relation parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static crosby.binary.Osmformat.Relation parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static crosby.binary.Osmformat.Relation parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static crosby.binary.Osmformat.Relation parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.Relation prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    /**
     * Protobuf type {@code OSMPBF.Relation}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          crosby.binary.Osmformat.Relation, Builder>
        implements
        // @@protoc_insertion_point(builder_implements:OSMPBF.Relation)
        crosby.binary.Osmformat.RelationOrBuilder {
      // Construct using crosby.binary.Osmformat.Relation.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        keys_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        vals_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
        info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
        bitField0_ = (bitField0_ & ~0x00000008);
        rolesSid_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        memids_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000020);
        types_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public crosby.binary.Osmformat.Relation getDefaultInstanceForType() {
        return crosby.binary.Osmformat.Relation.getDefaultInstance();
      }

      public crosby.binary.Osmformat.Relation build() {
        crosby.binary.Osmformat.Relation result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public crosby.binary.Osmformat.Relation buildPartial() {
        crosby.binary.Osmformat.Relation result = new crosby.binary.Osmformat.Relation(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          keys_ = java.util.Collections.unmodifiableList(keys_);
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.keys_ = keys_;
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          vals_ = java.util.Collections.unmodifiableList(vals_);
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.vals_ = vals_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000002;
        }
        result.info_ = info_;
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          rolesSid_ = java.util.Collections.unmodifiableList(rolesSid_);
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.rolesSid_ = rolesSid_;
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          memids_ = java.util.Collections.unmodifiableList(memids_);
          bitField0_ = (bitField0_ & ~0x00000020);
        }
        result.memids_ = memids_;
        if (((bitField0_ & 0x00000040) == 0x00000040)) {
          types_ = java.util.Collections.unmodifiableList(types_);
          bitField0_ = (bitField0_ & ~0x00000040);
        }
        result.types_ = types_;
        result.bitField0_ = to_bitField0_;
        return result;
      }

      public Builder mergeFrom(crosby.binary.Osmformat.Relation other) {
        if (other == crosby.binary.Osmformat.Relation.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (!other.keys_.isEmpty()) {
          if (keys_.isEmpty()) {
            keys_ = other.keys_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureKeysIsMutable();
            keys_.addAll(other.keys_);
          }
          
        }
        if (!other.vals_.isEmpty()) {
          if (vals_.isEmpty()) {
            vals_ = other.vals_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureValsIsMutable();
            vals_.addAll(other.vals_);
          }
          
        }
        if (other.hasInfo()) {
          mergeInfo(other.getInfo());
        }
        if (!other.rolesSid_.isEmpty()) {
          if (rolesSid_.isEmpty()) {
            rolesSid_ = other.rolesSid_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureRolesSidIsMutable();
            rolesSid_.addAll(other.rolesSid_);
          }
          
        }
        if (!other.memids_.isEmpty()) {
          if (memids_.isEmpty()) {
            memids_ = other.memids_;
            bitField0_ = (bitField0_ & ~0x00000020);
          } else {
            ensureMemidsIsMutable();
            memids_.addAll(other.memids_);
          }
          
        }
        if (!other.types_.isEmpty()) {
          if (types_.isEmpty()) {
            types_ = other.types_;
            bitField0_ = (bitField0_ & ~0x00000040);
          } else {
            ensureTypesIsMutable();
            types_.addAll(other.types_);
          }
          
        }
        setUnknownFields(
            getUnknownFields().concat(other.unknownFields));
        return this;
      }

      public final boolean isInitialized() {
        if (!hasId()) {
          
          return false;
        }
        return true;
      }

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

      private long id_ ;
      /**
       * <code>required int64 id = 1;</code>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required int64 id = 1;</code>
       */
      public long getId() {
        return id_;
      }
      /**
       * <code>required int64 id = 1;</code>
       */
      public Builder setId(long value) {
        bitField0_ |= 0x00000001;
        id_ = value;
        
        return this;
      }
      /**
       * <code>required int64 id = 1;</code>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = 0L;
        
        return this;
      }

      private java.util.List<java.lang.Integer> keys_ = java.util.Collections.emptyList();
      private void ensureKeysIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          keys_ = new java.util.ArrayList<>(keys_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public java.util.List<java.lang.Integer>
          getKeysList() {
        return java.util.Collections.unmodifiableList(keys_);
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public int getKeysCount() {
        return keys_.size();
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public int getKeys(int index) {
        return keys_.get(index);
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public Builder setKeys(
          int index, int value) {
        ensureKeysIsMutable();
        keys_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public Builder addKeys(int value) {
        ensureKeysIsMutable();
        keys_.add(value);
        
        return this;
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public Builder addAllKeys(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureKeysIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, keys_);
        
        return this;
      }
      /**
       * <code>repeated uint32 keys = 2 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays.
       * </pre>
       */
      public Builder clearKeys() {
        keys_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        
        return this;
      }

      private java.util.List<java.lang.Integer> vals_ = java.util.Collections.emptyList();
      private void ensureValsIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          vals_ = new java.util.ArrayList<>(vals_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       */
      public java.util.List<java.lang.Integer>
          getValsList() {
        return java.util.Collections.unmodifiableList(vals_);
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       */
      public int getValsCount() {
        return vals_.size();
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       */
      public int getVals(int index) {
        return vals_.get(index);
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       */
      public Builder setVals(
          int index, int value) {
        ensureValsIsMutable();
        vals_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       */
      public Builder addVals(int value) {
        ensureValsIsMutable();
        vals_.add(value);
        
        return this;
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       */
      public Builder addAllVals(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureValsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, vals_);
        
        return this;
      }
      /**
       * <code>repeated uint32 vals = 3 [packed = true];</code>
       */
      public Builder clearVals() {
        vals_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
        
        return this;
      }

      private crosby.binary.Osmformat.Info info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
      /**
       * <code>optional .OSMPBF.Info info = 4;</code>
       */
      public boolean hasInfo() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .OSMPBF.Info info = 4;</code>
       */
      public crosby.binary.Osmformat.Info getInfo() {
        return info_;
      }
      /**
       * <code>optional .OSMPBF.Info info = 4;</code>
       */
      public Builder setInfo(crosby.binary.Osmformat.Info value) {
        if (value == null) {
          throw new NullPointerException();
        }
        info_ = value;

        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .OSMPBF.Info info = 4;</code>
       */
      public Builder setInfo(
          crosby.binary.Osmformat.Info.Builder builderForValue) {
        info_ = builderForValue.build();

        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .OSMPBF.Info info = 4;</code>
       */
      public Builder mergeInfo(crosby.binary.Osmformat.Info value) {
        if (((bitField0_ & 0x00000008) == 0x00000008) &&
            info_ != crosby.binary.Osmformat.Info.getDefaultInstance()) {
          info_ =
            crosby.binary.Osmformat.Info.newBuilder(info_).mergeFrom(value).buildPartial();
        } else {
          info_ = value;
        }

        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .OSMPBF.Info info = 4;</code>
       */
      public Builder clearInfo() {
        info_ = crosby.binary.Osmformat.Info.getDefaultInstance();

        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      private java.util.List<java.lang.Integer> rolesSid_ = java.util.Collections.emptyList();
      private void ensureRolesSidIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          rolesSid_ = new java.util.ArrayList<>(rolesSid_);
          bitField0_ |= 0x00000010;
         }
      }
      /**
       * <code>repeated int32 roles_sid = 8 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays
       * </pre>
       */
      public java.util.List<java.lang.Integer>
          getRolesSidList() {
        return java.util.Collections.unmodifiableList(rolesSid_);
      }
      /**
       * <code>repeated int32 roles_sid = 8 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays
       * </pre>
       */
      public int getRolesSidCount() {
        return rolesSid_.size();
      }
      /**
       * <code>repeated int32 roles_sid = 8 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays
       * </pre>
       */
      public int getRolesSid(int index) {
        return rolesSid_.get(index);
      }
      /**
       * <code>repeated int32 roles_sid = 8 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays
       * </pre>
       */
      public Builder setRolesSid(
          int index, int value) {
        ensureRolesSidIsMutable();
        rolesSid_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated int32 roles_sid = 8 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays
       * </pre>
       */
      public Builder addRolesSid(int value) {
        ensureRolesSidIsMutable();
        rolesSid_.add(value);
        
        return this;
      }
      /**
       * <code>repeated int32 roles_sid = 8 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays
       * </pre>
       */
      public Builder addAllRolesSid(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureRolesSidIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, rolesSid_);
        
        return this;
      }
      /**
       * <code>repeated int32 roles_sid = 8 [packed = true];</code>
       *
       * <pre>
       * Parallel arrays
       * </pre>
       */
      public Builder clearRolesSid() {
        rolesSid_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        
        return this;
      }

      private java.util.List<java.lang.Long> memids_ = java.util.Collections.emptyList();
      private void ensureMemidsIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          memids_ = new java.util.ArrayList<>(memids_);
          bitField0_ |= 0x00000020;
         }
      }
      /**
       * <code>repeated sint64 memids = 9 [packed = true];</code>
       *
       * <pre>
       * DELTA encoded
       * </pre>
       */
      public java.util.List<java.lang.Long>
          getMemidsList() {
        return java.util.Collections.unmodifiableList(memids_);
      }
      /**
       * <code>repeated sint64 memids = 9 [packed = true];</code>
       *
       * <pre>
       * DELTA encoded
       * </pre>
       */
      public int getMemidsCount() {
        return memids_.size();
      }
      /**
       * <code>repeated sint64 memids = 9 [packed = true];</code>
       *
       * <pre>
       * DELTA encoded
       * </pre>
       */
      public long getMemids(int index) {
        return memids_.get(index);
      }
      /**
       * <code>repeated sint64 memids = 9 [packed = true];</code>
       *
       * <pre>
       * DELTA encoded
       * </pre>
       */
      public Builder setMemids(
          int index, long value) {
        ensureMemidsIsMutable();
        memids_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated sint64 memids = 9 [packed = true];</code>
       *
       * <pre>
       * DELTA encoded
       * </pre>
       */
      public Builder addMemids(long value) {
        ensureMemidsIsMutable();
        memids_.add(value);
        
        return this;
      }
      /**
       * <code>repeated sint64 memids = 9 [packed = true];</code>
       *
       * <pre>
       * DELTA encoded
       * </pre>
       */
      public Builder addAllMemids(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureMemidsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, memids_);
        
        return this;
      }
      /**
       * <code>repeated sint64 memids = 9 [packed = true];</code>
       *
       * <pre>
       * DELTA encoded
       * </pre>
       */
      public Builder clearMemids() {
        memids_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000020);
        
        return this;
      }

      private java.util.List<crosby.binary.Osmformat.Relation.MemberType> types_ =
        java.util.Collections.emptyList();
      private void ensureTypesIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          types_ = new java.util.ArrayList<>(types_);
          bitField0_ |= 0x00000040;
        }
      }
      /**
       * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
       */
      public java.util.List<crosby.binary.Osmformat.Relation.MemberType> getTypesList() {
        return java.util.Collections.unmodifiableList(types_);
      }
      /**
       * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
       */
      public int getTypesCount() {
        return types_.size();
      }
      /**
       * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
       */
      public crosby.binary.Osmformat.Relation.MemberType getTypes(int index) {
        return types_.get(index);
      }
      /**
       * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
       */
      public Builder setTypes(
          int index, crosby.binary.Osmformat.Relation.MemberType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureTypesIsMutable();
        types_.set(index, value);
        
        return this;
      }
      /**
       * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
       */
      public Builder addTypes(crosby.binary.Osmformat.Relation.MemberType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureTypesIsMutable();
        types_.add(value);
        
        return this;
      }
      /**
       * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
       */
      public Builder addAllTypes(
          java.lang.Iterable<? extends crosby.binary.Osmformat.Relation.MemberType> values) {
        ensureTypesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, types_);
        
        return this;
      }
      /**
       * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
       */
      public Builder clearTypes() {
        types_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000040);
        
        return this;
      }

      // @@protoc_insertion_point(builder_scope:OSMPBF.Relation)
    }

    static {
      defaultInstance = new Relation(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:OSMPBF.Relation)
  }


  static {
  }

  // @@protoc_insertion_point(outer_class_scope)
}
