// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: DataExtractionOSM/src/osmand_index.proto

package net.osmand.binary;

public final class OsmandIndex {
  private OsmandIndex() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }
  public static final class OsmAndStoredIndex extends
      com.google.protobuf.GeneratedMessageLite {
    // Use OsmAndStoredIndex.newBuilder() to construct.
    private OsmAndStoredIndex() {
      initFields();
    }
    private OsmAndStoredIndex(boolean noInit) {}
    
    private static final OsmAndStoredIndex defaultInstance;
    public static OsmAndStoredIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndStoredIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    // required uint32 version = 1;
    public static final int VERSION_FIELD_NUMBER = 1;
    private boolean hasVersion;
    private int version_ = 0;
    public boolean hasVersion() { return hasVersion; }
    public int getVersion() { return version_; }
    
    // required int64 dateCreated = 18;
    public static final int DATECREATED_FIELD_NUMBER = 18;
    private boolean hasDateCreated;
    private long dateCreated_ = 0L;
    public boolean hasDateCreated() { return hasDateCreated; }
    public long getDateCreated() { return dateCreated_; }
    
    // repeated .FileIndex fileIndex = 7;
    public static final int FILEINDEX_FIELD_NUMBER = 7;
    private java.util.List<net.osmand.binary.OsmandIndex.FileIndex> fileIndex_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandIndex.FileIndex> getFileIndexList() {
      return fileIndex_;
    }
    public int getFileIndexCount() { return fileIndex_.size(); }
    public net.osmand.binary.OsmandIndex.FileIndex getFileIndex(int index) {
      return fileIndex_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasVersion) return false;
      if (!hasDateCreated) return false;
      for (net.osmand.binary.OsmandIndex.FileIndex element : getFileIndexList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasVersion()) {
        output.writeUInt32(1, getVersion());
      }
      for (net.osmand.binary.OsmandIndex.FileIndex element : getFileIndexList()) {
        output.writeMessage(7, element);
      }
      if (hasDateCreated()) {
        output.writeInt64(18, getDateCreated());
      }
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasVersion()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, getVersion());
      }
      for (net.osmand.binary.OsmandIndex.FileIndex element : getFileIndexList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, element);
      }
      if (hasDateCreated()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(18, getDateCreated());
      }
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandIndex.OsmAndStoredIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          net.osmand.binary.OsmandIndex.OsmAndStoredIndex, Builder> {
      private net.osmand.binary.OsmandIndex.OsmAndStoredIndex result;
      
      // Construct using net.osmand.binary.OsmandIndex.OsmAndStoredIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandIndex.OsmAndStoredIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandIndex.OsmAndStoredIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandIndex.OsmAndStoredIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.OsmAndStoredIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandIndex.OsmAndStoredIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandIndex.OsmAndStoredIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandIndex.OsmAndStoredIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.OsmAndStoredIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.fileIndex_ != java.util.Collections.EMPTY_LIST) {
          result.fileIndex_ =
            java.util.Collections.unmodifiableList(result.fileIndex_);
        }
        net.osmand.binary.OsmandIndex.OsmAndStoredIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(net.osmand.binary.OsmandIndex.OsmAndStoredIndex other) {
        if (other == net.osmand.binary.OsmandIndex.OsmAndStoredIndex.getDefaultInstance()) return this;
        if (other.hasVersion()) {
          setVersion(other.getVersion());
        }
        if (other.hasDateCreated()) {
          setDateCreated(other.getDateCreated());
        }
        if (!other.fileIndex_.isEmpty()) {
          if (result.fileIndex_.isEmpty()) {
            result.fileIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.FileIndex>();
          }
          result.fileIndex_.addAll(other.fileIndex_);
        }
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              return this;
            default: {
              if (!parseUnknownField(input, extensionRegistry, tag)) {
                return this;
              }
              break;
            }
            case 8: {
              setVersion(input.readUInt32());
              break;
            }
            case 58: {
              net.osmand.binary.OsmandIndex.FileIndex.Builder subBuilder = net.osmand.binary.OsmandIndex.FileIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addFileIndex(subBuilder.buildPartial());
              break;
            }
            case 144: {
              setDateCreated(input.readInt64());
              break;
            }
          }
        }
      }
      
      
      // required uint32 version = 1;
      public boolean hasVersion() {
        return result.hasVersion();
      }
      public int getVersion() {
        return result.getVersion();
      }
      public Builder setVersion(int value) {
        result.hasVersion = true;
        result.version_ = value;
        return this;
      }
      public Builder clearVersion() {
        result.hasVersion = false;
        result.version_ = 0;
        return this;
      }
      
      // required int64 dateCreated = 18;
      public boolean hasDateCreated() {
        return result.hasDateCreated();
      }
      public long getDateCreated() {
        return result.getDateCreated();
      }
      public Builder setDateCreated(long value) {
        result.hasDateCreated = true;
        result.dateCreated_ = value;
        return this;
      }
      public Builder clearDateCreated() {
        result.hasDateCreated = false;
        result.dateCreated_ = 0L;
        return this;
      }
      
      // repeated .FileIndex fileIndex = 7;
      public java.util.List<net.osmand.binary.OsmandIndex.FileIndex> getFileIndexList() {
        return java.util.Collections.unmodifiableList(result.fileIndex_);
      }
      public int getFileIndexCount() {
        return result.getFileIndexCount();
      }
      public net.osmand.binary.OsmandIndex.FileIndex getFileIndex(int index) {
        return result.getFileIndex(index);
      }
      public Builder setFileIndex(int index, net.osmand.binary.OsmandIndex.FileIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.fileIndex_.set(index, value);
        return this;
      }
      public Builder setFileIndex(int index, net.osmand.binary.OsmandIndex.FileIndex.Builder builderForValue) {
        result.fileIndex_.set(index, builderForValue.build());
        return this;
      }
      public Builder addFileIndex(net.osmand.binary.OsmandIndex.FileIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.fileIndex_.isEmpty()) {
          result.fileIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.FileIndex>();
        }
        result.fileIndex_.add(value);
        return this;
      }
      public Builder addFileIndex(net.osmand.binary.OsmandIndex.FileIndex.Builder builderForValue) {
        if (result.fileIndex_.isEmpty()) {
          result.fileIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.FileIndex>();
        }
        result.fileIndex_.add(builderForValue.build());
        return this;
      }
      public Builder addAllFileIndex(
          java.lang.Iterable<? extends net.osmand.binary.OsmandIndex.FileIndex> values) {
        if (result.fileIndex_.isEmpty()) {
          result.fileIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.FileIndex>();
        }
        super.addAll(values, result.fileIndex_);
        return this;
      }
      public Builder clearFileIndex() {
        result.fileIndex_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndStoredIndex)
    }
    
    static {
      defaultInstance = new OsmAndStoredIndex(true);
      net.osmand.binary.OsmandIndex.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndStoredIndex)
  }
  
  public static final class FileIndex extends
      com.google.protobuf.GeneratedMessageLite {
    // Use FileIndex.newBuilder() to construct.
    private FileIndex() {
      initFields();
    }
    private FileIndex(boolean noInit) {}
    
    private static final FileIndex defaultInstance;
    public static FileIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public FileIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    // required int64 size = 1;
    public static final int SIZE_FIELD_NUMBER = 1;
    private boolean hasSize;
    private long size_ = 0L;
    public boolean hasSize() { return hasSize; }
    public long getSize() { return size_; }
    
    // required int64 dateModified = 2;
    public static final int DATEMODIFIED_FIELD_NUMBER = 2;
    private boolean hasDateModified;
    private long dateModified_ = 0L;
    public boolean hasDateModified() { return hasDateModified; }
    public long getDateModified() { return dateModified_; }
    
    // required string fileName = 3;
    public static final int FILENAME_FIELD_NUMBER = 3;
    private boolean hasFileName;
    private java.lang.String fileName_ = "";
    public boolean hasFileName() { return hasFileName; }
    public java.lang.String getFileName() { return fileName_; }
    
    // required int32 version = 4;
    public static final int VERSION_FIELD_NUMBER = 4;
    private boolean hasVersion;
    private int version_ = 0;
    public boolean hasVersion() { return hasVersion; }
    public int getVersion() { return version_; }
    
    // repeated .AddressPart addressIndex = 8;
    public static final int ADDRESSINDEX_FIELD_NUMBER = 8;
    private java.util.List<net.osmand.binary.OsmandIndex.AddressPart> addressIndex_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandIndex.AddressPart> getAddressIndexList() {
      return addressIndex_;
    }
    public int getAddressIndexCount() { return addressIndex_.size(); }
    public net.osmand.binary.OsmandIndex.AddressPart getAddressIndex(int index) {
      return addressIndex_.get(index);
    }
    
    // repeated .TransportPart transportIndex = 9;
    public static final int TRANSPORTINDEX_FIELD_NUMBER = 9;
    private java.util.List<net.osmand.binary.OsmandIndex.TransportPart> transportIndex_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandIndex.TransportPart> getTransportIndexList() {
      return transportIndex_;
    }
    public int getTransportIndexCount() { return transportIndex_.size(); }
    public net.osmand.binary.OsmandIndex.TransportPart getTransportIndex(int index) {
      return transportIndex_.get(index);
    }
    
    // repeated .PoiPart poiIndex = 10;
    public static final int POIINDEX_FIELD_NUMBER = 10;
    private java.util.List<net.osmand.binary.OsmandIndex.PoiPart> poiIndex_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandIndex.PoiPart> getPoiIndexList() {
      return poiIndex_;
    }
    public int getPoiIndexCount() { return poiIndex_.size(); }
    public net.osmand.binary.OsmandIndex.PoiPart getPoiIndex(int index) {
      return poiIndex_.get(index);
    }
    
    // repeated .MapPart mapIndex = 11;
    public static final int MAPINDEX_FIELD_NUMBER = 11;
    private java.util.List<net.osmand.binary.OsmandIndex.MapPart> mapIndex_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandIndex.MapPart> getMapIndexList() {
      return mapIndex_;
    }
    public int getMapIndexCount() { return mapIndex_.size(); }
    public net.osmand.binary.OsmandIndex.MapPart getMapIndex(int index) {
      return mapIndex_.get(index);
    }
    
    // repeated .RoutingPart routingIndex = 12;
    public static final int ROUTINGINDEX_FIELD_NUMBER = 12;
    private java.util.List<net.osmand.binary.OsmandIndex.RoutingPart> routingIndex_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandIndex.RoutingPart> getRoutingIndexList() {
      return routingIndex_;
    }
    public int getRoutingIndexCount() { return routingIndex_.size(); }
    public net.osmand.binary.OsmandIndex.RoutingPart getRoutingIndex(int index) {
      return routingIndex_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasSize) return false;
      if (!hasDateModified) return false;
      if (!hasFileName) return false;
      if (!hasVersion) return false;
      for (net.osmand.binary.OsmandIndex.AddressPart element : getAddressIndexList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandIndex.TransportPart element : getTransportIndexList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandIndex.PoiPart element : getPoiIndexList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandIndex.MapPart element : getMapIndexList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandIndex.RoutingPart element : getRoutingIndexList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasSize()) {
        output.writeInt64(1, getSize());
      }
      if (hasDateModified()) {
        output.writeInt64(2, getDateModified());
      }
      if (hasFileName()) {
        output.writeString(3, getFileName());
      }
      if (hasVersion()) {
        output.writeInt32(4, getVersion());
      }
      for (net.osmand.binary.OsmandIndex.AddressPart element : getAddressIndexList()) {
        output.writeMessage(8, element);
      }
      for (net.osmand.binary.OsmandIndex.TransportPart element : getTransportIndexList()) {
        output.writeMessage(9, element);
      }
      for (net.osmand.binary.OsmandIndex.PoiPart element : getPoiIndexList()) {
        output.writeMessage(10, element);
      }
      for (net.osmand.binary.OsmandIndex.MapPart element : getMapIndexList()) {
        output.writeMessage(11, element);
      }
      for (net.osmand.binary.OsmandIndex.RoutingPart element : getRoutingIndexList()) {
        output.writeMessage(12, element);
      }
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasSize()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, getSize());
      }
      if (hasDateModified()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, getDateModified());
      }
      if (hasFileName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(3, getFileName());
      }
      if (hasVersion()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, getVersion());
      }
      for (net.osmand.binary.OsmandIndex.AddressPart element : getAddressIndexList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, element);
      }
      for (net.osmand.binary.OsmandIndex.TransportPart element : getTransportIndexList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, element);
      }
      for (net.osmand.binary.OsmandIndex.PoiPart element : getPoiIndexList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, element);
      }
      for (net.osmand.binary.OsmandIndex.MapPart element : getMapIndexList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(11, element);
      }
      for (net.osmand.binary.OsmandIndex.RoutingPart element : getRoutingIndexList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, element);
      }
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandIndex.FileIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.FileIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.FileIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.FileIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.FileIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.FileIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.FileIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.FileIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.FileIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.FileIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandIndex.FileIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          net.osmand.binary.OsmandIndex.FileIndex, Builder> {
      private net.osmand.binary.OsmandIndex.FileIndex result;
      
      // Construct using net.osmand.binary.OsmandIndex.FileIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandIndex.FileIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandIndex.FileIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandIndex.FileIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.FileIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandIndex.FileIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandIndex.FileIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandIndex.FileIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.FileIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.addressIndex_ != java.util.Collections.EMPTY_LIST) {
          result.addressIndex_ =
            java.util.Collections.unmodifiableList(result.addressIndex_);
        }
        if (result.transportIndex_ != java.util.Collections.EMPTY_LIST) {
          result.transportIndex_ =
            java.util.Collections.unmodifiableList(result.transportIndex_);
        }
        if (result.poiIndex_ != java.util.Collections.EMPTY_LIST) {
          result.poiIndex_ =
            java.util.Collections.unmodifiableList(result.poiIndex_);
        }
        if (result.mapIndex_ != java.util.Collections.EMPTY_LIST) {
          result.mapIndex_ =
            java.util.Collections.unmodifiableList(result.mapIndex_);
        }
        if (result.routingIndex_ != java.util.Collections.EMPTY_LIST) {
          result.routingIndex_ =
            java.util.Collections.unmodifiableList(result.routingIndex_);
        }
        net.osmand.binary.OsmandIndex.FileIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(net.osmand.binary.OsmandIndex.FileIndex other) {
        if (other == net.osmand.binary.OsmandIndex.FileIndex.getDefaultInstance()) return this;
        if (other.hasSize()) {
          setSize(other.getSize());
        }
        if (other.hasDateModified()) {
          setDateModified(other.getDateModified());
        }
        if (other.hasFileName()) {
          setFileName(other.getFileName());
        }
        if (other.hasVersion()) {
          setVersion(other.getVersion());
        }
        if (!other.addressIndex_.isEmpty()) {
          if (result.addressIndex_.isEmpty()) {
            result.addressIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.AddressPart>();
          }
          result.addressIndex_.addAll(other.addressIndex_);
        }
        if (!other.transportIndex_.isEmpty()) {
          if (result.transportIndex_.isEmpty()) {
            result.transportIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.TransportPart>();
          }
          result.transportIndex_.addAll(other.transportIndex_);
        }
        if (!other.poiIndex_.isEmpty()) {
          if (result.poiIndex_.isEmpty()) {
            result.poiIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.PoiPart>();
          }
          result.poiIndex_.addAll(other.poiIndex_);
        }
        if (!other.mapIndex_.isEmpty()) {
          if (result.mapIndex_.isEmpty()) {
            result.mapIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.MapPart>();
          }
          result.mapIndex_.addAll(other.mapIndex_);
        }
        if (!other.routingIndex_.isEmpty()) {
          if (result.routingIndex_.isEmpty()) {
            result.routingIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.RoutingPart>();
          }
          result.routingIndex_.addAll(other.routingIndex_);
        }
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              return this;
            default: {
              if (!parseUnknownField(input, extensionRegistry, tag)) {
                return this;
              }
              break;
            }
            case 8: {
              setSize(input.readInt64());
              break;
            }
            case 16: {
              setDateModified(input.readInt64());
              break;
            }
            case 26: {
              setFileName(input.readString());
              break;
            }
            case 32: {
              setVersion(input.readInt32());
              break;
            }
            case 66: {
              net.osmand.binary.OsmandIndex.AddressPart.Builder subBuilder = net.osmand.binary.OsmandIndex.AddressPart.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addAddressIndex(subBuilder.buildPartial());
              break;
            }
            case 74: {
              net.osmand.binary.OsmandIndex.TransportPart.Builder subBuilder = net.osmand.binary.OsmandIndex.TransportPart.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addTransportIndex(subBuilder.buildPartial());
              break;
            }
            case 82: {
              net.osmand.binary.OsmandIndex.PoiPart.Builder subBuilder = net.osmand.binary.OsmandIndex.PoiPart.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addPoiIndex(subBuilder.buildPartial());
              break;
            }
            case 90: {
              net.osmand.binary.OsmandIndex.MapPart.Builder subBuilder = net.osmand.binary.OsmandIndex.MapPart.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addMapIndex(subBuilder.buildPartial());
              break;
            }
            case 98: {
              net.osmand.binary.OsmandIndex.RoutingPart.Builder subBuilder = net.osmand.binary.OsmandIndex.RoutingPart.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addRoutingIndex(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required int64 size = 1;
      public boolean hasSize() {
        return result.hasSize();
      }
      public long getSize() {
        return result.getSize();
      }
      public Builder setSize(long value) {
        result.hasSize = true;
        result.size_ = value;
        return this;
      }
      public Builder clearSize() {
        result.hasSize = false;
        result.size_ = 0L;
        return this;
      }
      
      // required int64 dateModified = 2;
      public boolean hasDateModified() {
        return result.hasDateModified();
      }
      public long getDateModified() {
        return result.getDateModified();
      }
      public Builder setDateModified(long value) {
        result.hasDateModified = true;
        result.dateModified_ = value;
        return this;
      }
      public Builder clearDateModified() {
        result.hasDateModified = false;
        result.dateModified_ = 0L;
        return this;
      }
      
      // required string fileName = 3;
      public boolean hasFileName() {
        return result.hasFileName();
      }
      public java.lang.String getFileName() {
        return result.getFileName();
      }
      public Builder setFileName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasFileName = true;
        result.fileName_ = value;
        return this;
      }
      public Builder clearFileName() {
        result.hasFileName = false;
        result.fileName_ = getDefaultInstance().getFileName();
        return this;
      }
      
      // required int32 version = 4;
      public boolean hasVersion() {
        return result.hasVersion();
      }
      public int getVersion() {
        return result.getVersion();
      }
      public Builder setVersion(int value) {
        result.hasVersion = true;
        result.version_ = value;
        return this;
      }
      public Builder clearVersion() {
        result.hasVersion = false;
        result.version_ = 0;
        return this;
      }
      
      // repeated .AddressPart addressIndex = 8;
      public java.util.List<net.osmand.binary.OsmandIndex.AddressPart> getAddressIndexList() {
        return java.util.Collections.unmodifiableList(result.addressIndex_);
      }
      public int getAddressIndexCount() {
        return result.getAddressIndexCount();
      }
      public net.osmand.binary.OsmandIndex.AddressPart getAddressIndex(int index) {
        return result.getAddressIndex(index);
      }
      public Builder setAddressIndex(int index, net.osmand.binary.OsmandIndex.AddressPart value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.addressIndex_.set(index, value);
        return this;
      }
      public Builder setAddressIndex(int index, net.osmand.binary.OsmandIndex.AddressPart.Builder builderForValue) {
        result.addressIndex_.set(index, builderForValue.build());
        return this;
      }
      public Builder addAddressIndex(net.osmand.binary.OsmandIndex.AddressPart value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.addressIndex_.isEmpty()) {
          result.addressIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.AddressPart>();
        }
        result.addressIndex_.add(value);
        return this;
      }
      public Builder addAddressIndex(net.osmand.binary.OsmandIndex.AddressPart.Builder builderForValue) {
        if (result.addressIndex_.isEmpty()) {
          result.addressIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.AddressPart>();
        }
        result.addressIndex_.add(builderForValue.build());
        return this;
      }
      public Builder addAllAddressIndex(
          java.lang.Iterable<? extends net.osmand.binary.OsmandIndex.AddressPart> values) {
        if (result.addressIndex_.isEmpty()) {
          result.addressIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.AddressPart>();
        }
        super.addAll(values, result.addressIndex_);
        return this;
      }
      public Builder clearAddressIndex() {
        result.addressIndex_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .TransportPart transportIndex = 9;
      public java.util.List<net.osmand.binary.OsmandIndex.TransportPart> getTransportIndexList() {
        return java.util.Collections.unmodifiableList(result.transportIndex_);
      }
      public int getTransportIndexCount() {
        return result.getTransportIndexCount();
      }
      public net.osmand.binary.OsmandIndex.TransportPart getTransportIndex(int index) {
        return result.getTransportIndex(index);
      }
      public Builder setTransportIndex(int index, net.osmand.binary.OsmandIndex.TransportPart value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.transportIndex_.set(index, value);
        return this;
      }
      public Builder setTransportIndex(int index, net.osmand.binary.OsmandIndex.TransportPart.Builder builderForValue) {
        result.transportIndex_.set(index, builderForValue.build());
        return this;
      }
      public Builder addTransportIndex(net.osmand.binary.OsmandIndex.TransportPart value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.transportIndex_.isEmpty()) {
          result.transportIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.TransportPart>();
        }
        result.transportIndex_.add(value);
        return this;
      }
      public Builder addTransportIndex(net.osmand.binary.OsmandIndex.TransportPart.Builder builderForValue) {
        if (result.transportIndex_.isEmpty()) {
          result.transportIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.TransportPart>();
        }
        result.transportIndex_.add(builderForValue.build());
        return this;
      }
      public Builder addAllTransportIndex(
          java.lang.Iterable<? extends net.osmand.binary.OsmandIndex.TransportPart> values) {
        if (result.transportIndex_.isEmpty()) {
          result.transportIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.TransportPart>();
        }
        super.addAll(values, result.transportIndex_);
        return this;
      }
      public Builder clearTransportIndex() {
        result.transportIndex_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .PoiPart poiIndex = 10;
      public java.util.List<net.osmand.binary.OsmandIndex.PoiPart> getPoiIndexList() {
        return java.util.Collections.unmodifiableList(result.poiIndex_);
      }
      public int getPoiIndexCount() {
        return result.getPoiIndexCount();
      }
      public net.osmand.binary.OsmandIndex.PoiPart getPoiIndex(int index) {
        return result.getPoiIndex(index);
      }
      public Builder setPoiIndex(int index, net.osmand.binary.OsmandIndex.PoiPart value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.poiIndex_.set(index, value);
        return this;
      }
      public Builder setPoiIndex(int index, net.osmand.binary.OsmandIndex.PoiPart.Builder builderForValue) {
        result.poiIndex_.set(index, builderForValue.build());
        return this;
      }
      public Builder addPoiIndex(net.osmand.binary.OsmandIndex.PoiPart value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.poiIndex_.isEmpty()) {
          result.poiIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.PoiPart>();
        }
        result.poiIndex_.add(value);
        return this;
      }
      public Builder addPoiIndex(net.osmand.binary.OsmandIndex.PoiPart.Builder builderForValue) {
        if (result.poiIndex_.isEmpty()) {
          result.poiIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.PoiPart>();
        }
        result.poiIndex_.add(builderForValue.build());
        return this;
      }
      public Builder addAllPoiIndex(
          java.lang.Iterable<? extends net.osmand.binary.OsmandIndex.PoiPart> values) {
        if (result.poiIndex_.isEmpty()) {
          result.poiIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.PoiPart>();
        }
        super.addAll(values, result.poiIndex_);
        return this;
      }
      public Builder clearPoiIndex() {
        result.poiIndex_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .MapPart mapIndex = 11;
      public java.util.List<net.osmand.binary.OsmandIndex.MapPart> getMapIndexList() {
        return java.util.Collections.unmodifiableList(result.mapIndex_);
      }
      public int getMapIndexCount() {
        return result.getMapIndexCount();
      }
      public net.osmand.binary.OsmandIndex.MapPart getMapIndex(int index) {
        return result.getMapIndex(index);
      }
      public Builder setMapIndex(int index, net.osmand.binary.OsmandIndex.MapPart value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.mapIndex_.set(index, value);
        return this;
      }
      public Builder setMapIndex(int index, net.osmand.binary.OsmandIndex.MapPart.Builder builderForValue) {
        result.mapIndex_.set(index, builderForValue.build());
        return this;
      }
      public Builder addMapIndex(net.osmand.binary.OsmandIndex.MapPart value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.mapIndex_.isEmpty()) {
          result.mapIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.MapPart>();
        }
        result.mapIndex_.add(value);
        return this;
      }
      public Builder addMapIndex(net.osmand.binary.OsmandIndex.MapPart.Builder builderForValue) {
        if (result.mapIndex_.isEmpty()) {
          result.mapIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.MapPart>();
        }
        result.mapIndex_.add(builderForValue.build());
        return this;
      }
      public Builder addAllMapIndex(
          java.lang.Iterable<? extends net.osmand.binary.OsmandIndex.MapPart> values) {
        if (result.mapIndex_.isEmpty()) {
          result.mapIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.MapPart>();
        }
        super.addAll(values, result.mapIndex_);
        return this;
      }
      public Builder clearMapIndex() {
        result.mapIndex_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .RoutingPart routingIndex = 12;
      public java.util.List<net.osmand.binary.OsmandIndex.RoutingPart> getRoutingIndexList() {
        return java.util.Collections.unmodifiableList(result.routingIndex_);
      }
      public int getRoutingIndexCount() {
        return result.getRoutingIndexCount();
      }
      public net.osmand.binary.OsmandIndex.RoutingPart getRoutingIndex(int index) {
        return result.getRoutingIndex(index);
      }
      public Builder setRoutingIndex(int index, net.osmand.binary.OsmandIndex.RoutingPart value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.routingIndex_.set(index, value);
        return this;
      }
      public Builder setRoutingIndex(int index, net.osmand.binary.OsmandIndex.RoutingPart.Builder builderForValue) {
        result.routingIndex_.set(index, builderForValue.build());
        return this;
      }
      public Builder addRoutingIndex(net.osmand.binary.OsmandIndex.RoutingPart value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.routingIndex_.isEmpty()) {
          result.routingIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.RoutingPart>();
        }
        result.routingIndex_.add(value);
        return this;
      }
      public Builder addRoutingIndex(net.osmand.binary.OsmandIndex.RoutingPart.Builder builderForValue) {
        if (result.routingIndex_.isEmpty()) {
          result.routingIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.RoutingPart>();
        }
        result.routingIndex_.add(builderForValue.build());
        return this;
      }
      public Builder addAllRoutingIndex(
          java.lang.Iterable<? extends net.osmand.binary.OsmandIndex.RoutingPart> values) {
        if (result.routingIndex_.isEmpty()) {
          result.routingIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.RoutingPart>();
        }
        super.addAll(values, result.routingIndex_);
        return this;
      }
      public Builder clearRoutingIndex() {
        result.routingIndex_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:FileIndex)
    }
    
    static {
      defaultInstance = new FileIndex(true);
      net.osmand.binary.OsmandIndex.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:FileIndex)
  }
  
  public static final class AddressPart extends
      com.google.protobuf.GeneratedMessageLite {
    // Use AddressPart.newBuilder() to construct.
    private AddressPart() {
      initFields();
    }
    private AddressPart(boolean noInit) {}
    
    private static final AddressPart defaultInstance;
    public static AddressPart getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public AddressPart getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    // required int64 size = 1;
    public static final int SIZE_FIELD_NUMBER = 1;
    private boolean hasSize;
    private long size_ = 0L;
    public boolean hasSize() { return hasSize; }
    public long getSize() { return size_; }
    
    // required int64 offset = 2;
    public static final int OFFSET_FIELD_NUMBER = 2;
    private boolean hasOffset;
    private long offset_ = 0L;
    public boolean hasOffset() { return hasOffset; }
    public long getOffset() { return offset_; }
    
    // optional string name = 3;
    public static final int NAME_FIELD_NUMBER = 3;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // optional string nameEn = 4;
    public static final int NAMEEN_FIELD_NUMBER = 4;
    private boolean hasNameEn;
    private java.lang.String nameEn_ = "";
    public boolean hasNameEn() { return hasNameEn; }
    public java.lang.String getNameEn() { return nameEn_; }
    
    // optional int32 indexNameOffset = 5;
    public static final int INDEXNAMEOFFSET_FIELD_NUMBER = 5;
    private boolean hasIndexNameOffset;
    private int indexNameOffset_ = 0;
    public boolean hasIndexNameOffset() { return hasIndexNameOffset; }
    public int getIndexNameOffset() { return indexNameOffset_; }
    
    // repeated .CityBlock cities = 8;
    public static final int CITIES_FIELD_NUMBER = 8;
    private java.util.List<net.osmand.binary.OsmandIndex.CityBlock> cities_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandIndex.CityBlock> getCitiesList() {
      return cities_;
    }
    public int getCitiesCount() { return cities_.size(); }
    public net.osmand.binary.OsmandIndex.CityBlock getCities(int index) {
      return cities_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasSize) return false;
      if (!hasOffset) return false;
      for (net.osmand.binary.OsmandIndex.CityBlock element : getCitiesList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasSize()) {
        output.writeInt64(1, getSize());
      }
      if (hasOffset()) {
        output.writeInt64(2, getOffset());
      }
      if (hasName()) {
        output.writeString(3, getName());
      }
      if (hasNameEn()) {
        output.writeString(4, getNameEn());
      }
      if (hasIndexNameOffset()) {
        output.writeInt32(5, getIndexNameOffset());
      }
      for (net.osmand.binary.OsmandIndex.CityBlock element : getCitiesList()) {
        output.writeMessage(8, element);
      }
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasSize()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, getSize());
      }
      if (hasOffset()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, getOffset());
      }
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(3, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(4, getNameEn());
      }
      if (hasIndexNameOffset()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, getIndexNameOffset());
      }
      for (net.osmand.binary.OsmandIndex.CityBlock element : getCitiesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, element);
      }
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandIndex.AddressPart parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.AddressPart parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.AddressPart parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.AddressPart parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.AddressPart parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.AddressPart parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.AddressPart parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.AddressPart parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.AddressPart parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.AddressPart parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandIndex.AddressPart prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          net.osmand.binary.OsmandIndex.AddressPart, Builder> {
      private net.osmand.binary.OsmandIndex.AddressPart result;
      
      // Construct using net.osmand.binary.OsmandIndex.AddressPart.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandIndex.AddressPart();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandIndex.AddressPart internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandIndex.AddressPart();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.AddressPart getDefaultInstanceForType() {
        return net.osmand.binary.OsmandIndex.AddressPart.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandIndex.AddressPart build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandIndex.AddressPart buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.AddressPart buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.cities_ != java.util.Collections.EMPTY_LIST) {
          result.cities_ =
            java.util.Collections.unmodifiableList(result.cities_);
        }
        net.osmand.binary.OsmandIndex.AddressPart returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(net.osmand.binary.OsmandIndex.AddressPart other) {
        if (other == net.osmand.binary.OsmandIndex.AddressPart.getDefaultInstance()) return this;
        if (other.hasSize()) {
          setSize(other.getSize());
        }
        if (other.hasOffset()) {
          setOffset(other.getOffset());
        }
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        if (other.hasIndexNameOffset()) {
          setIndexNameOffset(other.getIndexNameOffset());
        }
        if (!other.cities_.isEmpty()) {
          if (result.cities_.isEmpty()) {
            result.cities_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.CityBlock>();
          }
          result.cities_.addAll(other.cities_);
        }
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              return this;
            default: {
              if (!parseUnknownField(input, extensionRegistry, tag)) {
                return this;
              }
              break;
            }
            case 8: {
              setSize(input.readInt64());
              break;
            }
            case 16: {
              setOffset(input.readInt64());
              break;
            }
            case 26: {
              setName(input.readString());
              break;
            }
            case 34: {
              setNameEn(input.readString());
              break;
            }
            case 40: {
              setIndexNameOffset(input.readInt32());
              break;
            }
            case 66: {
              net.osmand.binary.OsmandIndex.CityBlock.Builder subBuilder = net.osmand.binary.OsmandIndex.CityBlock.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addCities(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required int64 size = 1;
      public boolean hasSize() {
        return result.hasSize();
      }
      public long getSize() {
        return result.getSize();
      }
      public Builder setSize(long value) {
        result.hasSize = true;
        result.size_ = value;
        return this;
      }
      public Builder clearSize() {
        result.hasSize = false;
        result.size_ = 0L;
        return this;
      }
      
      // required int64 offset = 2;
      public boolean hasOffset() {
        return result.hasOffset();
      }
      public long getOffset() {
        return result.getOffset();
      }
      public Builder setOffset(long value) {
        result.hasOffset = true;
        result.offset_ = value;
        return this;
      }
      public Builder clearOffset() {
        result.hasOffset = false;
        result.offset_ = 0L;
        return this;
      }
      
      // optional string name = 3;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // optional string nameEn = 4;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public java.lang.String getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = getDefaultInstance().getNameEn();
        return this;
      }
      
      // optional int32 indexNameOffset = 5;
      public boolean hasIndexNameOffset() {
        return result.hasIndexNameOffset();
      }
      public int getIndexNameOffset() {
        return result.getIndexNameOffset();
      }
      public Builder setIndexNameOffset(int value) {
        result.hasIndexNameOffset = true;
        result.indexNameOffset_ = value;
        return this;
      }
      public Builder clearIndexNameOffset() {
        result.hasIndexNameOffset = false;
        result.indexNameOffset_ = 0;
        return this;
      }
      
      // repeated .CityBlock cities = 8;
      public java.util.List<net.osmand.binary.OsmandIndex.CityBlock> getCitiesList() {
        return java.util.Collections.unmodifiableList(result.cities_);
      }
      public int getCitiesCount() {
        return result.getCitiesCount();
      }
      public net.osmand.binary.OsmandIndex.CityBlock getCities(int index) {
        return result.getCities(index);
      }
      public Builder setCities(int index, net.osmand.binary.OsmandIndex.CityBlock value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.cities_.set(index, value);
        return this;
      }
      public Builder setCities(int index, net.osmand.binary.OsmandIndex.CityBlock.Builder builderForValue) {
        result.cities_.set(index, builderForValue.build());
        return this;
      }
      public Builder addCities(net.osmand.binary.OsmandIndex.CityBlock value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.cities_.isEmpty()) {
          result.cities_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.CityBlock>();
        }
        result.cities_.add(value);
        return this;
      }
      public Builder addCities(net.osmand.binary.OsmandIndex.CityBlock.Builder builderForValue) {
        if (result.cities_.isEmpty()) {
          result.cities_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.CityBlock>();
        }
        result.cities_.add(builderForValue.build());
        return this;
      }
      public Builder addAllCities(
          java.lang.Iterable<? extends net.osmand.binary.OsmandIndex.CityBlock> values) {
        if (result.cities_.isEmpty()) {
          result.cities_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.CityBlock>();
        }
        super.addAll(values, result.cities_);
        return this;
      }
      public Builder clearCities() {
        result.cities_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:AddressPart)
    }
    
    static {
      defaultInstance = new AddressPart(true);
      net.osmand.binary.OsmandIndex.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:AddressPart)
  }
  
  public static final class CityBlock extends
      com.google.protobuf.GeneratedMessageLite {
    // Use CityBlock.newBuilder() to construct.
    private CityBlock() {
      initFields();
    }
    private CityBlock(boolean noInit) {}
    
    private static final CityBlock defaultInstance;
    public static CityBlock getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public CityBlock getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    // required int64 size = 1;
    public static final int SIZE_FIELD_NUMBER = 1;
    private boolean hasSize;
    private long size_ = 0L;
    public boolean hasSize() { return hasSize; }
    public long getSize() { return size_; }
    
    // required int64 offset = 2;
    public static final int OFFSET_FIELD_NUMBER = 2;
    private boolean hasOffset;
    private long offset_ = 0L;
    public boolean hasOffset() { return hasOffset; }
    public long getOffset() { return offset_; }
    
    // required int32 type = 3;
    public static final int TYPE_FIELD_NUMBER = 3;
    private boolean hasType;
    private int type_ = 0;
    public boolean hasType() { return hasType; }
    public int getType() { return type_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasSize) return false;
      if (!hasOffset) return false;
      if (!hasType) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasSize()) {
        output.writeInt64(1, getSize());
      }
      if (hasOffset()) {
        output.writeInt64(2, getOffset());
      }
      if (hasType()) {
        output.writeInt32(3, getType());
      }
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasSize()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, getSize());
      }
      if (hasOffset()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, getOffset());
      }
      if (hasType()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, getType());
      }
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandIndex.CityBlock parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.CityBlock parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.CityBlock parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.CityBlock parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.CityBlock parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.CityBlock parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.CityBlock parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.CityBlock parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.CityBlock parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.CityBlock parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandIndex.CityBlock prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          net.osmand.binary.OsmandIndex.CityBlock, Builder> {
      private net.osmand.binary.OsmandIndex.CityBlock result;
      
      // Construct using net.osmand.binary.OsmandIndex.CityBlock.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandIndex.CityBlock();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandIndex.CityBlock internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandIndex.CityBlock();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.CityBlock getDefaultInstanceForType() {
        return net.osmand.binary.OsmandIndex.CityBlock.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandIndex.CityBlock build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandIndex.CityBlock buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.CityBlock buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandIndex.CityBlock returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(net.osmand.binary.OsmandIndex.CityBlock other) {
        if (other == net.osmand.binary.OsmandIndex.CityBlock.getDefaultInstance()) return this;
        if (other.hasSize()) {
          setSize(other.getSize());
        }
        if (other.hasOffset()) {
          setOffset(other.getOffset());
        }
        if (other.hasType()) {
          setType(other.getType());
        }
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              return this;
            default: {
              if (!parseUnknownField(input, extensionRegistry, tag)) {
                return this;
              }
              break;
            }
            case 8: {
              setSize(input.readInt64());
              break;
            }
            case 16: {
              setOffset(input.readInt64());
              break;
            }
            case 24: {
              setType(input.readInt32());
              break;
            }
          }
        }
      }
      
      
      // required int64 size = 1;
      public boolean hasSize() {
        return result.hasSize();
      }
      public long getSize() {
        return result.getSize();
      }
      public Builder setSize(long value) {
        result.hasSize = true;
        result.size_ = value;
        return this;
      }
      public Builder clearSize() {
        result.hasSize = false;
        result.size_ = 0L;
        return this;
      }
      
      // required int64 offset = 2;
      public boolean hasOffset() {
        return result.hasOffset();
      }
      public long getOffset() {
        return result.getOffset();
      }
      public Builder setOffset(long value) {
        result.hasOffset = true;
        result.offset_ = value;
        return this;
      }
      public Builder clearOffset() {
        result.hasOffset = false;
        result.offset_ = 0L;
        return this;
      }
      
      // required int32 type = 3;
      public boolean hasType() {
        return result.hasType();
      }
      public int getType() {
        return result.getType();
      }
      public Builder setType(int value) {
        result.hasType = true;
        result.type_ = value;
        return this;
      }
      public Builder clearType() {
        result.hasType = false;
        result.type_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:CityBlock)
    }
    
    static {
      defaultInstance = new CityBlock(true);
      net.osmand.binary.OsmandIndex.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:CityBlock)
  }
  
  public static final class PoiPart extends
      com.google.protobuf.GeneratedMessageLite {
    // Use PoiPart.newBuilder() to construct.
    private PoiPart() {
      initFields();
    }
    private PoiPart(boolean noInit) {}
    
    private static final PoiPart defaultInstance;
    public static PoiPart getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public PoiPart getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    // required int64 size = 1;
    public static final int SIZE_FIELD_NUMBER = 1;
    private boolean hasSize;
    private long size_ = 0L;
    public boolean hasSize() { return hasSize; }
    public long getSize() { return size_; }
    
    // required int64 offset = 2;
    public static final int OFFSET_FIELD_NUMBER = 2;
    private boolean hasOffset;
    private long offset_ = 0L;
    public boolean hasOffset() { return hasOffset; }
    public long getOffset() { return offset_; }
    
    // optional string name = 3;
    public static final int NAME_FIELD_NUMBER = 3;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // required int32 left = 4;
    public static final int LEFT_FIELD_NUMBER = 4;
    private boolean hasLeft;
    private int left_ = 0;
    public boolean hasLeft() { return hasLeft; }
    public int getLeft() { return left_; }
    
    // required int32 right = 5;
    public static final int RIGHT_FIELD_NUMBER = 5;
    private boolean hasRight;
    private int right_ = 0;
    public boolean hasRight() { return hasRight; }
    public int getRight() { return right_; }
    
    // required int32 top = 6;
    public static final int TOP_FIELD_NUMBER = 6;
    private boolean hasTop;
    private int top_ = 0;
    public boolean hasTop() { return hasTop; }
    public int getTop() { return top_; }
    
    // required int32 bottom = 7;
    public static final int BOTTOM_FIELD_NUMBER = 7;
    private boolean hasBottom;
    private int bottom_ = 0;
    public boolean hasBottom() { return hasBottom; }
    public int getBottom() { return bottom_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasSize) return false;
      if (!hasOffset) return false;
      if (!hasLeft) return false;
      if (!hasRight) return false;
      if (!hasTop) return false;
      if (!hasBottom) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasSize()) {
        output.writeInt64(1, getSize());
      }
      if (hasOffset()) {
        output.writeInt64(2, getOffset());
      }
      if (hasName()) {
        output.writeString(3, getName());
      }
      if (hasLeft()) {
        output.writeInt32(4, getLeft());
      }
      if (hasRight()) {
        output.writeInt32(5, getRight());
      }
      if (hasTop()) {
        output.writeInt32(6, getTop());
      }
      if (hasBottom()) {
        output.writeInt32(7, getBottom());
      }
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasSize()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, getSize());
      }
      if (hasOffset()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, getOffset());
      }
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(3, getName());
      }
      if (hasLeft()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, getLeft());
      }
      if (hasRight()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, getRight());
      }
      if (hasTop()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(6, getTop());
      }
      if (hasBottom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(7, getBottom());
      }
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandIndex.PoiPart parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.PoiPart parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.PoiPart parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.PoiPart parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.PoiPart parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.PoiPart parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.PoiPart parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.PoiPart parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.PoiPart parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.PoiPart parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandIndex.PoiPart prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          net.osmand.binary.OsmandIndex.PoiPart, Builder> {
      private net.osmand.binary.OsmandIndex.PoiPart result;
      
      // Construct using net.osmand.binary.OsmandIndex.PoiPart.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandIndex.PoiPart();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandIndex.PoiPart internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandIndex.PoiPart();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.PoiPart getDefaultInstanceForType() {
        return net.osmand.binary.OsmandIndex.PoiPart.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandIndex.PoiPart build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandIndex.PoiPart buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.PoiPart buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandIndex.PoiPart returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(net.osmand.binary.OsmandIndex.PoiPart other) {
        if (other == net.osmand.binary.OsmandIndex.PoiPart.getDefaultInstance()) return this;
        if (other.hasSize()) {
          setSize(other.getSize());
        }
        if (other.hasOffset()) {
          setOffset(other.getOffset());
        }
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasLeft()) {
          setLeft(other.getLeft());
        }
        if (other.hasRight()) {
          setRight(other.getRight());
        }
        if (other.hasTop()) {
          setTop(other.getTop());
        }
        if (other.hasBottom()) {
          setBottom(other.getBottom());
        }
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              return this;
            default: {
              if (!parseUnknownField(input, extensionRegistry, tag)) {
                return this;
              }
              break;
            }
            case 8: {
              setSize(input.readInt64());
              break;
            }
            case 16: {
              setOffset(input.readInt64());
              break;
            }
            case 26: {
              setName(input.readString());
              break;
            }
            case 32: {
              setLeft(input.readInt32());
              break;
            }
            case 40: {
              setRight(input.readInt32());
              break;
            }
            case 48: {
              setTop(input.readInt32());
              break;
            }
            case 56: {
              setBottom(input.readInt32());
              break;
            }
          }
        }
      }
      
      
      // required int64 size = 1;
      public boolean hasSize() {
        return result.hasSize();
      }
      public long getSize() {
        return result.getSize();
      }
      public Builder setSize(long value) {
        result.hasSize = true;
        result.size_ = value;
        return this;
      }
      public Builder clearSize() {
        result.hasSize = false;
        result.size_ = 0L;
        return this;
      }
      
      // required int64 offset = 2;
      public boolean hasOffset() {
        return result.hasOffset();
      }
      public long getOffset() {
        return result.getOffset();
      }
      public Builder setOffset(long value) {
        result.hasOffset = true;
        result.offset_ = value;
        return this;
      }
      public Builder clearOffset() {
        result.hasOffset = false;
        result.offset_ = 0L;
        return this;
      }
      
      // optional string name = 3;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // required int32 left = 4;
      public boolean hasLeft() {
        return result.hasLeft();
      }
      public int getLeft() {
        return result.getLeft();
      }
      public Builder setLeft(int value) {
        result.hasLeft = true;
        result.left_ = value;
        return this;
      }
      public Builder clearLeft() {
        result.hasLeft = false;
        result.left_ = 0;
        return this;
      }
      
      // required int32 right = 5;
      public boolean hasRight() {
        return result.hasRight();
      }
      public int getRight() {
        return result.getRight();
      }
      public Builder setRight(int value) {
        result.hasRight = true;
        result.right_ = value;
        return this;
      }
      public Builder clearRight() {
        result.hasRight = false;
        result.right_ = 0;
        return this;
      }
      
      // required int32 top = 6;
      public boolean hasTop() {
        return result.hasTop();
      }
      public int getTop() {
        return result.getTop();
      }
      public Builder setTop(int value) {
        result.hasTop = true;
        result.top_ = value;
        return this;
      }
      public Builder clearTop() {
        result.hasTop = false;
        result.top_ = 0;
        return this;
      }
      
      // required int32 bottom = 7;
      public boolean hasBottom() {
        return result.hasBottom();
      }
      public int getBottom() {
        return result.getBottom();
      }
      public Builder setBottom(int value) {
        result.hasBottom = true;
        result.bottom_ = value;
        return this;
      }
      public Builder clearBottom() {
        result.hasBottom = false;
        result.bottom_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:PoiPart)
    }
    
    static {
      defaultInstance = new PoiPart(true);
      net.osmand.binary.OsmandIndex.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:PoiPart)
  }
  
  public static final class MapLevel extends
      com.google.protobuf.GeneratedMessageLite {
    // Use MapLevel.newBuilder() to construct.
    private MapLevel() {
      initFields();
    }
    private MapLevel(boolean noInit) {}
    
    private static final MapLevel defaultInstance;
    public static MapLevel getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public MapLevel getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    // required int64 size = 1;
    public static final int SIZE_FIELD_NUMBER = 1;
    private boolean hasSize;
    private long size_ = 0L;
    public boolean hasSize() { return hasSize; }
    public long getSize() { return size_; }
    
    // required int64 offset = 2;
    public static final int OFFSET_FIELD_NUMBER = 2;
    private boolean hasOffset;
    private long offset_ = 0L;
    public boolean hasOffset() { return hasOffset; }
    public long getOffset() { return offset_; }
    
    // required int32 left = 4;
    public static final int LEFT_FIELD_NUMBER = 4;
    private boolean hasLeft;
    private int left_ = 0;
    public boolean hasLeft() { return hasLeft; }
    public int getLeft() { return left_; }
    
    // required int32 right = 5;
    public static final int RIGHT_FIELD_NUMBER = 5;
    private boolean hasRight;
    private int right_ = 0;
    public boolean hasRight() { return hasRight; }
    public int getRight() { return right_; }
    
    // required int32 top = 6;
    public static final int TOP_FIELD_NUMBER = 6;
    private boolean hasTop;
    private int top_ = 0;
    public boolean hasTop() { return hasTop; }
    public int getTop() { return top_; }
    
    // required int32 bottom = 7;
    public static final int BOTTOM_FIELD_NUMBER = 7;
    private boolean hasBottom;
    private int bottom_ = 0;
    public boolean hasBottom() { return hasBottom; }
    public int getBottom() { return bottom_; }
    
    // optional int32 minzoom = 8;
    public static final int MINZOOM_FIELD_NUMBER = 8;
    private boolean hasMinzoom;
    private int minzoom_ = 0;
    public boolean hasMinzoom() { return hasMinzoom; }
    public int getMinzoom() { return minzoom_; }
    
    // optional int32 maxzoom = 9;
    public static final int MAXZOOM_FIELD_NUMBER = 9;
    private boolean hasMaxzoom;
    private int maxzoom_ = 0;
    public boolean hasMaxzoom() { return hasMaxzoom; }
    public int getMaxzoom() { return maxzoom_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasSize) return false;
      if (!hasOffset) return false;
      if (!hasLeft) return false;
      if (!hasRight) return false;
      if (!hasTop) return false;
      if (!hasBottom) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasSize()) {
        output.writeInt64(1, getSize());
      }
      if (hasOffset()) {
        output.writeInt64(2, getOffset());
      }
      if (hasLeft()) {
        output.writeInt32(4, getLeft());
      }
      if (hasRight()) {
        output.writeInt32(5, getRight());
      }
      if (hasTop()) {
        output.writeInt32(6, getTop());
      }
      if (hasBottom()) {
        output.writeInt32(7, getBottom());
      }
      if (hasMinzoom()) {
        output.writeInt32(8, getMinzoom());
      }
      if (hasMaxzoom()) {
        output.writeInt32(9, getMaxzoom());
      }
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasSize()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, getSize());
      }
      if (hasOffset()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, getOffset());
      }
      if (hasLeft()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, getLeft());
      }
      if (hasRight()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, getRight());
      }
      if (hasTop()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(6, getTop());
      }
      if (hasBottom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(7, getBottom());
      }
      if (hasMinzoom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(8, getMinzoom());
      }
      if (hasMaxzoom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(9, getMaxzoom());
      }
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandIndex.MapLevel parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.MapLevel parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.MapLevel parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.MapLevel parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.MapLevel parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.MapLevel parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.MapLevel parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.MapLevel parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.MapLevel parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.MapLevel parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandIndex.MapLevel prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          net.osmand.binary.OsmandIndex.MapLevel, Builder> {
      private net.osmand.binary.OsmandIndex.MapLevel result;
      
      // Construct using net.osmand.binary.OsmandIndex.MapLevel.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandIndex.MapLevel();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandIndex.MapLevel internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandIndex.MapLevel();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.MapLevel getDefaultInstanceForType() {
        return net.osmand.binary.OsmandIndex.MapLevel.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandIndex.MapLevel build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandIndex.MapLevel buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.MapLevel buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandIndex.MapLevel returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(net.osmand.binary.OsmandIndex.MapLevel other) {
        if (other == net.osmand.binary.OsmandIndex.MapLevel.getDefaultInstance()) return this;
        if (other.hasSize()) {
          setSize(other.getSize());
        }
        if (other.hasOffset()) {
          setOffset(other.getOffset());
        }
        if (other.hasLeft()) {
          setLeft(other.getLeft());
        }
        if (other.hasRight()) {
          setRight(other.getRight());
        }
        if (other.hasTop()) {
          setTop(other.getTop());
        }
        if (other.hasBottom()) {
          setBottom(other.getBottom());
        }
        if (other.hasMinzoom()) {
          setMinzoom(other.getMinzoom());
        }
        if (other.hasMaxzoom()) {
          setMaxzoom(other.getMaxzoom());
        }
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              return this;
            default: {
              if (!parseUnknownField(input, extensionRegistry, tag)) {
                return this;
              }
              break;
            }
            case 8: {
              setSize(input.readInt64());
              break;
            }
            case 16: {
              setOffset(input.readInt64());
              break;
            }
            case 32: {
              setLeft(input.readInt32());
              break;
            }
            case 40: {
              setRight(input.readInt32());
              break;
            }
            case 48: {
              setTop(input.readInt32());
              break;
            }
            case 56: {
              setBottom(input.readInt32());
              break;
            }
            case 64: {
              setMinzoom(input.readInt32());
              break;
            }
            case 72: {
              setMaxzoom(input.readInt32());
              break;
            }
          }
        }
      }
      
      
      // required int64 size = 1;
      public boolean hasSize() {
        return result.hasSize();
      }
      public long getSize() {
        return result.getSize();
      }
      public Builder setSize(long value) {
        result.hasSize = true;
        result.size_ = value;
        return this;
      }
      public Builder clearSize() {
        result.hasSize = false;
        result.size_ = 0L;
        return this;
      }
      
      // required int64 offset = 2;
      public boolean hasOffset() {
        return result.hasOffset();
      }
      public long getOffset() {
        return result.getOffset();
      }
      public Builder setOffset(long value) {
        result.hasOffset = true;
        result.offset_ = value;
        return this;
      }
      public Builder clearOffset() {
        result.hasOffset = false;
        result.offset_ = 0L;
        return this;
      }
      
      // required int32 left = 4;
      public boolean hasLeft() {
        return result.hasLeft();
      }
      public int getLeft() {
        return result.getLeft();
      }
      public Builder setLeft(int value) {
        result.hasLeft = true;
        result.left_ = value;
        return this;
      }
      public Builder clearLeft() {
        result.hasLeft = false;
        result.left_ = 0;
        return this;
      }
      
      // required int32 right = 5;
      public boolean hasRight() {
        return result.hasRight();
      }
      public int getRight() {
        return result.getRight();
      }
      public Builder setRight(int value) {
        result.hasRight = true;
        result.right_ = value;
        return this;
      }
      public Builder clearRight() {
        result.hasRight = false;
        result.right_ = 0;
        return this;
      }
      
      // required int32 top = 6;
      public boolean hasTop() {
        return result.hasTop();
      }
      public int getTop() {
        return result.getTop();
      }
      public Builder setTop(int value) {
        result.hasTop = true;
        result.top_ = value;
        return this;
      }
      public Builder clearTop() {
        result.hasTop = false;
        result.top_ = 0;
        return this;
      }
      
      // required int32 bottom = 7;
      public boolean hasBottom() {
        return result.hasBottom();
      }
      public int getBottom() {
        return result.getBottom();
      }
      public Builder setBottom(int value) {
        result.hasBottom = true;
        result.bottom_ = value;
        return this;
      }
      public Builder clearBottom() {
        result.hasBottom = false;
        result.bottom_ = 0;
        return this;
      }
      
      // optional int32 minzoom = 8;
      public boolean hasMinzoom() {
        return result.hasMinzoom();
      }
      public int getMinzoom() {
        return result.getMinzoom();
      }
      public Builder setMinzoom(int value) {
        result.hasMinzoom = true;
        result.minzoom_ = value;
        return this;
      }
      public Builder clearMinzoom() {
        result.hasMinzoom = false;
        result.minzoom_ = 0;
        return this;
      }
      
      // optional int32 maxzoom = 9;
      public boolean hasMaxzoom() {
        return result.hasMaxzoom();
      }
      public int getMaxzoom() {
        return result.getMaxzoom();
      }
      public Builder setMaxzoom(int value) {
        result.hasMaxzoom = true;
        result.maxzoom_ = value;
        return this;
      }
      public Builder clearMaxzoom() {
        result.hasMaxzoom = false;
        result.maxzoom_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:MapLevel)
    }
    
    static {
      defaultInstance = new MapLevel(true);
      net.osmand.binary.OsmandIndex.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:MapLevel)
  }
  
  public static final class MapPart extends
      com.google.protobuf.GeneratedMessageLite {
    // Use MapPart.newBuilder() to construct.
    private MapPart() {
      initFields();
    }
    private MapPart(boolean noInit) {}
    
    private static final MapPart defaultInstance;
    public static MapPart getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public MapPart getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    // required int64 size = 1;
    public static final int SIZE_FIELD_NUMBER = 1;
    private boolean hasSize;
    private long size_ = 0L;
    public boolean hasSize() { return hasSize; }
    public long getSize() { return size_; }
    
    // required int64 offset = 2;
    public static final int OFFSET_FIELD_NUMBER = 2;
    private boolean hasOffset;
    private long offset_ = 0L;
    public boolean hasOffset() { return hasOffset; }
    public long getOffset() { return offset_; }
    
    // optional string name = 3;
    public static final int NAME_FIELD_NUMBER = 3;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // repeated .MapLevel levels = 5;
    public static final int LEVELS_FIELD_NUMBER = 5;
    private java.util.List<net.osmand.binary.OsmandIndex.MapLevel> levels_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandIndex.MapLevel> getLevelsList() {
      return levels_;
    }
    public int getLevelsCount() { return levels_.size(); }
    public net.osmand.binary.OsmandIndex.MapLevel getLevels(int index) {
      return levels_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasSize) return false;
      if (!hasOffset) return false;
      for (net.osmand.binary.OsmandIndex.MapLevel element : getLevelsList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasSize()) {
        output.writeInt64(1, getSize());
      }
      if (hasOffset()) {
        output.writeInt64(2, getOffset());
      }
      if (hasName()) {
        output.writeString(3, getName());
      }
      for (net.osmand.binary.OsmandIndex.MapLevel element : getLevelsList()) {
        output.writeMessage(5, element);
      }
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasSize()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, getSize());
      }
      if (hasOffset()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, getOffset());
      }
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(3, getName());
      }
      for (net.osmand.binary.OsmandIndex.MapLevel element : getLevelsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, element);
      }
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandIndex.MapPart parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.MapPart parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.MapPart parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.MapPart parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.MapPart parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.MapPart parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.MapPart parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.MapPart parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.MapPart parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.MapPart parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandIndex.MapPart prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          net.osmand.binary.OsmandIndex.MapPart, Builder> {
      private net.osmand.binary.OsmandIndex.MapPart result;
      
      // Construct using net.osmand.binary.OsmandIndex.MapPart.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandIndex.MapPart();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandIndex.MapPart internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandIndex.MapPart();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.MapPart getDefaultInstanceForType() {
        return net.osmand.binary.OsmandIndex.MapPart.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandIndex.MapPart build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandIndex.MapPart buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.MapPart buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.levels_ != java.util.Collections.EMPTY_LIST) {
          result.levels_ =
            java.util.Collections.unmodifiableList(result.levels_);
        }
        net.osmand.binary.OsmandIndex.MapPart returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(net.osmand.binary.OsmandIndex.MapPart other) {
        if (other == net.osmand.binary.OsmandIndex.MapPart.getDefaultInstance()) return this;
        if (other.hasSize()) {
          setSize(other.getSize());
        }
        if (other.hasOffset()) {
          setOffset(other.getOffset());
        }
        if (other.hasName()) {
          setName(other.getName());
        }
        if (!other.levels_.isEmpty()) {
          if (result.levels_.isEmpty()) {
            result.levels_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.MapLevel>();
          }
          result.levels_.addAll(other.levels_);
        }
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              return this;
            default: {
              if (!parseUnknownField(input, extensionRegistry, tag)) {
                return this;
              }
              break;
            }
            case 8: {
              setSize(input.readInt64());
              break;
            }
            case 16: {
              setOffset(input.readInt64());
              break;
            }
            case 26: {
              setName(input.readString());
              break;
            }
            case 42: {
              net.osmand.binary.OsmandIndex.MapLevel.Builder subBuilder = net.osmand.binary.OsmandIndex.MapLevel.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addLevels(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required int64 size = 1;
      public boolean hasSize() {
        return result.hasSize();
      }
      public long getSize() {
        return result.getSize();
      }
      public Builder setSize(long value) {
        result.hasSize = true;
        result.size_ = value;
        return this;
      }
      public Builder clearSize() {
        result.hasSize = false;
        result.size_ = 0L;
        return this;
      }
      
      // required int64 offset = 2;
      public boolean hasOffset() {
        return result.hasOffset();
      }
      public long getOffset() {
        return result.getOffset();
      }
      public Builder setOffset(long value) {
        result.hasOffset = true;
        result.offset_ = value;
        return this;
      }
      public Builder clearOffset() {
        result.hasOffset = false;
        result.offset_ = 0L;
        return this;
      }
      
      // optional string name = 3;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // repeated .MapLevel levels = 5;
      public java.util.List<net.osmand.binary.OsmandIndex.MapLevel> getLevelsList() {
        return java.util.Collections.unmodifiableList(result.levels_);
      }
      public int getLevelsCount() {
        return result.getLevelsCount();
      }
      public net.osmand.binary.OsmandIndex.MapLevel getLevels(int index) {
        return result.getLevels(index);
      }
      public Builder setLevels(int index, net.osmand.binary.OsmandIndex.MapLevel value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.levels_.set(index, value);
        return this;
      }
      public Builder setLevels(int index, net.osmand.binary.OsmandIndex.MapLevel.Builder builderForValue) {
        result.levels_.set(index, builderForValue.build());
        return this;
      }
      public Builder addLevels(net.osmand.binary.OsmandIndex.MapLevel value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.levels_.isEmpty()) {
          result.levels_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.MapLevel>();
        }
        result.levels_.add(value);
        return this;
      }
      public Builder addLevels(net.osmand.binary.OsmandIndex.MapLevel.Builder builderForValue) {
        if (result.levels_.isEmpty()) {
          result.levels_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.MapLevel>();
        }
        result.levels_.add(builderForValue.build());
        return this;
      }
      public Builder addAllLevels(
          java.lang.Iterable<? extends net.osmand.binary.OsmandIndex.MapLevel> values) {
        if (result.levels_.isEmpty()) {
          result.levels_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.MapLevel>();
        }
        super.addAll(values, result.levels_);
        return this;
      }
      public Builder clearLevels() {
        result.levels_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:MapPart)
    }
    
    static {
      defaultInstance = new MapPart(true);
      net.osmand.binary.OsmandIndex.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:MapPart)
  }
  
  public static final class RoutingSubregion extends
      com.google.protobuf.GeneratedMessageLite {
    // Use RoutingSubregion.newBuilder() to construct.
    private RoutingSubregion() {
      initFields();
    }
    private RoutingSubregion(boolean noInit) {}
    
    private static final RoutingSubregion defaultInstance;
    public static RoutingSubregion getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public RoutingSubregion getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    // required int64 size = 1;
    public static final int SIZE_FIELD_NUMBER = 1;
    private boolean hasSize;
    private long size_ = 0L;
    public boolean hasSize() { return hasSize; }
    public long getSize() { return size_; }
    
    // required int64 offset = 2;
    public static final int OFFSET_FIELD_NUMBER = 2;
    private boolean hasOffset;
    private long offset_ = 0L;
    public boolean hasOffset() { return hasOffset; }
    public long getOffset() { return offset_; }
    
    // optional bool basemap = 3;
    public static final int BASEMAP_FIELD_NUMBER = 3;
    private boolean hasBasemap;
    private boolean basemap_ = false;
    public boolean hasBasemap() { return hasBasemap; }
    public boolean getBasemap() { return basemap_; }
    
    // required int32 left = 4;
    public static final int LEFT_FIELD_NUMBER = 4;
    private boolean hasLeft;
    private int left_ = 0;
    public boolean hasLeft() { return hasLeft; }
    public int getLeft() { return left_; }
    
    // required int32 right = 5;
    public static final int RIGHT_FIELD_NUMBER = 5;
    private boolean hasRight;
    private int right_ = 0;
    public boolean hasRight() { return hasRight; }
    public int getRight() { return right_; }
    
    // required int32 top = 6;
    public static final int TOP_FIELD_NUMBER = 6;
    private boolean hasTop;
    private int top_ = 0;
    public boolean hasTop() { return hasTop; }
    public int getTop() { return top_; }
    
    // required int32 bottom = 7;
    public static final int BOTTOM_FIELD_NUMBER = 7;
    private boolean hasBottom;
    private int bottom_ = 0;
    public boolean hasBottom() { return hasBottom; }
    public int getBottom() { return bottom_; }
    
    // required uint32 shifToData = 8;
    public static final int SHIFTODATA_FIELD_NUMBER = 8;
    private boolean hasShifToData;
    private int shifToData_ = 0;
    public boolean hasShifToData() { return hasShifToData; }
    public int getShifToData() { return shifToData_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasSize) return false;
      if (!hasOffset) return false;
      if (!hasLeft) return false;
      if (!hasRight) return false;
      if (!hasTop) return false;
      if (!hasBottom) return false;
      if (!hasShifToData) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasSize()) {
        output.writeInt64(1, getSize());
      }
      if (hasOffset()) {
        output.writeInt64(2, getOffset());
      }
      if (hasBasemap()) {
        output.writeBool(3, getBasemap());
      }
      if (hasLeft()) {
        output.writeInt32(4, getLeft());
      }
      if (hasRight()) {
        output.writeInt32(5, getRight());
      }
      if (hasTop()) {
        output.writeInt32(6, getTop());
      }
      if (hasBottom()) {
        output.writeInt32(7, getBottom());
      }
      if (hasShifToData()) {
        output.writeUInt32(8, getShifToData());
      }
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasSize()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, getSize());
      }
      if (hasOffset()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, getOffset());
      }
      if (hasBasemap()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, getBasemap());
      }
      if (hasLeft()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, getLeft());
      }
      if (hasRight()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, getRight());
      }
      if (hasTop()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(6, getTop());
      }
      if (hasBottom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(7, getBottom());
      }
      if (hasShifToData()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(8, getShifToData());
      }
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandIndex.RoutingSubregion parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.RoutingSubregion parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.RoutingSubregion parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.RoutingSubregion parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.RoutingSubregion parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.RoutingSubregion parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.RoutingSubregion parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.RoutingSubregion parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.RoutingSubregion parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.RoutingSubregion parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandIndex.RoutingSubregion prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          net.osmand.binary.OsmandIndex.RoutingSubregion, Builder> {
      private net.osmand.binary.OsmandIndex.RoutingSubregion result;
      
      // Construct using net.osmand.binary.OsmandIndex.RoutingSubregion.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandIndex.RoutingSubregion();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandIndex.RoutingSubregion internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandIndex.RoutingSubregion();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.RoutingSubregion getDefaultInstanceForType() {
        return net.osmand.binary.OsmandIndex.RoutingSubregion.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandIndex.RoutingSubregion build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandIndex.RoutingSubregion buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.RoutingSubregion buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandIndex.RoutingSubregion returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(net.osmand.binary.OsmandIndex.RoutingSubregion other) {
        if (other == net.osmand.binary.OsmandIndex.RoutingSubregion.getDefaultInstance()) return this;
        if (other.hasSize()) {
          setSize(other.getSize());
        }
        if (other.hasOffset()) {
          setOffset(other.getOffset());
        }
        if (other.hasBasemap()) {
          setBasemap(other.getBasemap());
        }
        if (other.hasLeft()) {
          setLeft(other.getLeft());
        }
        if (other.hasRight()) {
          setRight(other.getRight());
        }
        if (other.hasTop()) {
          setTop(other.getTop());
        }
        if (other.hasBottom()) {
          setBottom(other.getBottom());
        }
        if (other.hasShifToData()) {
          setShifToData(other.getShifToData());
        }
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              return this;
            default: {
              if (!parseUnknownField(input, extensionRegistry, tag)) {
                return this;
              }
              break;
            }
            case 8: {
              setSize(input.readInt64());
              break;
            }
            case 16: {
              setOffset(input.readInt64());
              break;
            }
            case 24: {
              setBasemap(input.readBool());
              break;
            }
            case 32: {
              setLeft(input.readInt32());
              break;
            }
            case 40: {
              setRight(input.readInt32());
              break;
            }
            case 48: {
              setTop(input.readInt32());
              break;
            }
            case 56: {
              setBottom(input.readInt32());
              break;
            }
            case 64: {
              setShifToData(input.readUInt32());
              break;
            }
          }
        }
      }
      
      
      // required int64 size = 1;
      public boolean hasSize() {
        return result.hasSize();
      }
      public long getSize() {
        return result.getSize();
      }
      public Builder setSize(long value) {
        result.hasSize = true;
        result.size_ = value;
        return this;
      }
      public Builder clearSize() {
        result.hasSize = false;
        result.size_ = 0L;
        return this;
      }
      
      // required int64 offset = 2;
      public boolean hasOffset() {
        return result.hasOffset();
      }
      public long getOffset() {
        return result.getOffset();
      }
      public Builder setOffset(long value) {
        result.hasOffset = true;
        result.offset_ = value;
        return this;
      }
      public Builder clearOffset() {
        result.hasOffset = false;
        result.offset_ = 0L;
        return this;
      }
      
      // optional bool basemap = 3;
      public boolean hasBasemap() {
        return result.hasBasemap();
      }
      public boolean getBasemap() {
        return result.getBasemap();
      }
      public Builder setBasemap(boolean value) {
        result.hasBasemap = true;
        result.basemap_ = value;
        return this;
      }
      public Builder clearBasemap() {
        result.hasBasemap = false;
        result.basemap_ = false;
        return this;
      }
      
      // required int32 left = 4;
      public boolean hasLeft() {
        return result.hasLeft();
      }
      public int getLeft() {
        return result.getLeft();
      }
      public Builder setLeft(int value) {
        result.hasLeft = true;
        result.left_ = value;
        return this;
      }
      public Builder clearLeft() {
        result.hasLeft = false;
        result.left_ = 0;
        return this;
      }
      
      // required int32 right = 5;
      public boolean hasRight() {
        return result.hasRight();
      }
      public int getRight() {
        return result.getRight();
      }
      public Builder setRight(int value) {
        result.hasRight = true;
        result.right_ = value;
        return this;
      }
      public Builder clearRight() {
        result.hasRight = false;
        result.right_ = 0;
        return this;
      }
      
      // required int32 top = 6;
      public boolean hasTop() {
        return result.hasTop();
      }
      public int getTop() {
        return result.getTop();
      }
      public Builder setTop(int value) {
        result.hasTop = true;
        result.top_ = value;
        return this;
      }
      public Builder clearTop() {
        result.hasTop = false;
        result.top_ = 0;
        return this;
      }
      
      // required int32 bottom = 7;
      public boolean hasBottom() {
        return result.hasBottom();
      }
      public int getBottom() {
        return result.getBottom();
      }
      public Builder setBottom(int value) {
        result.hasBottom = true;
        result.bottom_ = value;
        return this;
      }
      public Builder clearBottom() {
        result.hasBottom = false;
        result.bottom_ = 0;
        return this;
      }
      
      // required uint32 shifToData = 8;
      public boolean hasShifToData() {
        return result.hasShifToData();
      }
      public int getShifToData() {
        return result.getShifToData();
      }
      public Builder setShifToData(int value) {
        result.hasShifToData = true;
        result.shifToData_ = value;
        return this;
      }
      public Builder clearShifToData() {
        result.hasShifToData = false;
        result.shifToData_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:RoutingSubregion)
    }
    
    static {
      defaultInstance = new RoutingSubregion(true);
      net.osmand.binary.OsmandIndex.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:RoutingSubregion)
  }
  
  public static final class RoutingPart extends
      com.google.protobuf.GeneratedMessageLite {
    // Use RoutingPart.newBuilder() to construct.
    private RoutingPart() {
      initFields();
    }
    private RoutingPart(boolean noInit) {}
    
    private static final RoutingPart defaultInstance;
    public static RoutingPart getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public RoutingPart getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    // required int64 size = 1;
    public static final int SIZE_FIELD_NUMBER = 1;
    private boolean hasSize;
    private long size_ = 0L;
    public boolean hasSize() { return hasSize; }
    public long getSize() { return size_; }
    
    // required int64 offset = 2;
    public static final int OFFSET_FIELD_NUMBER = 2;
    private boolean hasOffset;
    private long offset_ = 0L;
    public boolean hasOffset() { return hasOffset; }
    public long getOffset() { return offset_; }
    
    // optional string name = 3;
    public static final int NAME_FIELD_NUMBER = 3;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // repeated .RoutingSubregion subregions = 5;
    public static final int SUBREGIONS_FIELD_NUMBER = 5;
    private java.util.List<net.osmand.binary.OsmandIndex.RoutingSubregion> subregions_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandIndex.RoutingSubregion> getSubregionsList() {
      return subregions_;
    }
    public int getSubregionsCount() { return subregions_.size(); }
    public net.osmand.binary.OsmandIndex.RoutingSubregion getSubregions(int index) {
      return subregions_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasSize) return false;
      if (!hasOffset) return false;
      for (net.osmand.binary.OsmandIndex.RoutingSubregion element : getSubregionsList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasSize()) {
        output.writeInt64(1, getSize());
      }
      if (hasOffset()) {
        output.writeInt64(2, getOffset());
      }
      if (hasName()) {
        output.writeString(3, getName());
      }
      for (net.osmand.binary.OsmandIndex.RoutingSubregion element : getSubregionsList()) {
        output.writeMessage(5, element);
      }
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasSize()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, getSize());
      }
      if (hasOffset()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, getOffset());
      }
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(3, getName());
      }
      for (net.osmand.binary.OsmandIndex.RoutingSubregion element : getSubregionsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, element);
      }
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandIndex.RoutingPart parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.RoutingPart parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.RoutingPart parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.RoutingPart parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.RoutingPart parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.RoutingPart parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.RoutingPart parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.RoutingPart parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.RoutingPart parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.RoutingPart parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandIndex.RoutingPart prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          net.osmand.binary.OsmandIndex.RoutingPart, Builder> {
      private net.osmand.binary.OsmandIndex.RoutingPart result;
      
      // Construct using net.osmand.binary.OsmandIndex.RoutingPart.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandIndex.RoutingPart();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandIndex.RoutingPart internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandIndex.RoutingPart();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.RoutingPart getDefaultInstanceForType() {
        return net.osmand.binary.OsmandIndex.RoutingPart.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandIndex.RoutingPart build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandIndex.RoutingPart buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.RoutingPart buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.subregions_ != java.util.Collections.EMPTY_LIST) {
          result.subregions_ =
            java.util.Collections.unmodifiableList(result.subregions_);
        }
        net.osmand.binary.OsmandIndex.RoutingPart returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(net.osmand.binary.OsmandIndex.RoutingPart other) {
        if (other == net.osmand.binary.OsmandIndex.RoutingPart.getDefaultInstance()) return this;
        if (other.hasSize()) {
          setSize(other.getSize());
        }
        if (other.hasOffset()) {
          setOffset(other.getOffset());
        }
        if (other.hasName()) {
          setName(other.getName());
        }
        if (!other.subregions_.isEmpty()) {
          if (result.subregions_.isEmpty()) {
            result.subregions_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.RoutingSubregion>();
          }
          result.subregions_.addAll(other.subregions_);
        }
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              return this;
            default: {
              if (!parseUnknownField(input, extensionRegistry, tag)) {
                return this;
              }
              break;
            }
            case 8: {
              setSize(input.readInt64());
              break;
            }
            case 16: {
              setOffset(input.readInt64());
              break;
            }
            case 26: {
              setName(input.readString());
              break;
            }
            case 42: {
              net.osmand.binary.OsmandIndex.RoutingSubregion.Builder subBuilder = net.osmand.binary.OsmandIndex.RoutingSubregion.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addSubregions(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required int64 size = 1;
      public boolean hasSize() {
        return result.hasSize();
      }
      public long getSize() {
        return result.getSize();
      }
      public Builder setSize(long value) {
        result.hasSize = true;
        result.size_ = value;
        return this;
      }
      public Builder clearSize() {
        result.hasSize = false;
        result.size_ = 0L;
        return this;
      }
      
      // required int64 offset = 2;
      public boolean hasOffset() {
        return result.hasOffset();
      }
      public long getOffset() {
        return result.getOffset();
      }
      public Builder setOffset(long value) {
        result.hasOffset = true;
        result.offset_ = value;
        return this;
      }
      public Builder clearOffset() {
        result.hasOffset = false;
        result.offset_ = 0L;
        return this;
      }
      
      // optional string name = 3;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // repeated .RoutingSubregion subregions = 5;
      public java.util.List<net.osmand.binary.OsmandIndex.RoutingSubregion> getSubregionsList() {
        return java.util.Collections.unmodifiableList(result.subregions_);
      }
      public int getSubregionsCount() {
        return result.getSubregionsCount();
      }
      public net.osmand.binary.OsmandIndex.RoutingSubregion getSubregions(int index) {
        return result.getSubregions(index);
      }
      public Builder setSubregions(int index, net.osmand.binary.OsmandIndex.RoutingSubregion value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.subregions_.set(index, value);
        return this;
      }
      public Builder setSubregions(int index, net.osmand.binary.OsmandIndex.RoutingSubregion.Builder builderForValue) {
        result.subregions_.set(index, builderForValue.build());
        return this;
      }
      public Builder addSubregions(net.osmand.binary.OsmandIndex.RoutingSubregion value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.subregions_.isEmpty()) {
          result.subregions_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.RoutingSubregion>();
        }
        result.subregions_.add(value);
        return this;
      }
      public Builder addSubregions(net.osmand.binary.OsmandIndex.RoutingSubregion.Builder builderForValue) {
        if (result.subregions_.isEmpty()) {
          result.subregions_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.RoutingSubregion>();
        }
        result.subregions_.add(builderForValue.build());
        return this;
      }
      public Builder addAllSubregions(
          java.lang.Iterable<? extends net.osmand.binary.OsmandIndex.RoutingSubregion> values) {
        if (result.subregions_.isEmpty()) {
          result.subregions_ = new java.util.ArrayList<net.osmand.binary.OsmandIndex.RoutingSubregion>();
        }
        super.addAll(values, result.subregions_);
        return this;
      }
      public Builder clearSubregions() {
        result.subregions_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:RoutingPart)
    }
    
    static {
      defaultInstance = new RoutingPart(true);
      net.osmand.binary.OsmandIndex.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:RoutingPart)
  }
  
  public static final class TransportPart extends
      com.google.protobuf.GeneratedMessageLite {
    // Use TransportPart.newBuilder() to construct.
    private TransportPart() {
      initFields();
    }
    private TransportPart(boolean noInit) {}
    
    private static final TransportPart defaultInstance;
    public static TransportPart getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public TransportPart getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    // required int64 size = 1;
    public static final int SIZE_FIELD_NUMBER = 1;
    private boolean hasSize;
    private long size_ = 0L;
    public boolean hasSize() { return hasSize; }
    public long getSize() { return size_; }
    
    // required int64 offset = 2;
    public static final int OFFSET_FIELD_NUMBER = 2;
    private boolean hasOffset;
    private long offset_ = 0L;
    public boolean hasOffset() { return hasOffset; }
    public long getOffset() { return offset_; }
    
    // optional string name = 3;
    public static final int NAME_FIELD_NUMBER = 3;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // optional int32 left = 4;
    public static final int LEFT_FIELD_NUMBER = 4;
    private boolean hasLeft;
    private int left_ = 0;
    public boolean hasLeft() { return hasLeft; }
    public int getLeft() { return left_; }
    
    // optional int32 right = 5;
    public static final int RIGHT_FIELD_NUMBER = 5;
    private boolean hasRight;
    private int right_ = 0;
    public boolean hasRight() { return hasRight; }
    public int getRight() { return right_; }
    
    // optional int32 top = 6;
    public static final int TOP_FIELD_NUMBER = 6;
    private boolean hasTop;
    private int top_ = 0;
    public boolean hasTop() { return hasTop; }
    public int getTop() { return top_; }
    
    // optional int32 bottom = 7;
    public static final int BOTTOM_FIELD_NUMBER = 7;
    private boolean hasBottom;
    private int bottom_ = 0;
    public boolean hasBottom() { return hasBottom; }
    public int getBottom() { return bottom_; }
    
    // optional uint32 stringTableOffset = 8;
    public static final int STRINGTABLEOFFSET_FIELD_NUMBER = 8;
    private boolean hasStringTableOffset;
    private int stringTableOffset_ = 0;
    public boolean hasStringTableOffset() { return hasStringTableOffset; }
    public int getStringTableOffset() { return stringTableOffset_; }
    
    // optional uint32 stringTableLength = 9;
    public static final int STRINGTABLELENGTH_FIELD_NUMBER = 9;
    private boolean hasStringTableLength;
    private int stringTableLength_ = 0;
    public boolean hasStringTableLength() { return hasStringTableLength; }
    public int getStringTableLength() { return stringTableLength_; }
    
    // optional uint32 stopsTableOffset = 10;
    public static final int STOPSTABLEOFFSET_FIELD_NUMBER = 10;
    private boolean hasStopsTableOffset;
    private int stopsTableOffset_ = 0;
    public boolean hasStopsTableOffset() { return hasStopsTableOffset; }
    public int getStopsTableOffset() { return stopsTableOffset_; }
    
    // optional uint32 stopsTableLength = 11;
    public static final int STOPSTABLELENGTH_FIELD_NUMBER = 11;
    private boolean hasStopsTableLength;
    private int stopsTableLength_ = 0;
    public boolean hasStopsTableLength() { return hasStopsTableLength; }
    public int getStopsTableLength() { return stopsTableLength_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasSize) return false;
      if (!hasOffset) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasSize()) {
        output.writeInt64(1, getSize());
      }
      if (hasOffset()) {
        output.writeInt64(2, getOffset());
      }
      if (hasName()) {
        output.writeString(3, getName());
      }
      if (hasLeft()) {
        output.writeInt32(4, getLeft());
      }
      if (hasRight()) {
        output.writeInt32(5, getRight());
      }
      if (hasTop()) {
        output.writeInt32(6, getTop());
      }
      if (hasBottom()) {
        output.writeInt32(7, getBottom());
      }
      if (hasStringTableOffset()) {
        output.writeUInt32(8, getStringTableOffset());
      }
      if (hasStringTableLength()) {
        output.writeUInt32(9, getStringTableLength());
      }
      if (hasStopsTableOffset()) {
        output.writeUInt32(10, getStopsTableOffset());
      }
      if (hasStopsTableLength()) {
        output.writeUInt32(11, getStopsTableLength());
      }
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasSize()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, getSize());
      }
      if (hasOffset()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, getOffset());
      }
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(3, getName());
      }
      if (hasLeft()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, getLeft());
      }
      if (hasRight()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, getRight());
      }
      if (hasTop()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(6, getTop());
      }
      if (hasBottom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(7, getBottom());
      }
      if (hasStringTableOffset()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(8, getStringTableOffset());
      }
      if (hasStringTableLength()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(9, getStringTableLength());
      }
      if (hasStopsTableOffset()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(10, getStopsTableOffset());
      }
      if (hasStopsTableLength()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(11, getStopsTableLength());
      }
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandIndex.TransportPart parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.TransportPart parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.TransportPart parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.TransportPart parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.TransportPart parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.TransportPart parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.TransportPart parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.TransportPart parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandIndex.TransportPart parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandIndex.TransportPart parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandIndex.TransportPart prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          net.osmand.binary.OsmandIndex.TransportPart, Builder> {
      private net.osmand.binary.OsmandIndex.TransportPart result;
      
      // Construct using net.osmand.binary.OsmandIndex.TransportPart.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandIndex.TransportPart();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandIndex.TransportPart internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandIndex.TransportPart();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.TransportPart getDefaultInstanceForType() {
        return net.osmand.binary.OsmandIndex.TransportPart.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandIndex.TransportPart build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandIndex.TransportPart buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandIndex.TransportPart buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandIndex.TransportPart returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(net.osmand.binary.OsmandIndex.TransportPart other) {
        if (other == net.osmand.binary.OsmandIndex.TransportPart.getDefaultInstance()) return this;
        if (other.hasSize()) {
          setSize(other.getSize());
        }
        if (other.hasOffset()) {
          setOffset(other.getOffset());
        }
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasLeft()) {
          setLeft(other.getLeft());
        }
        if (other.hasRight()) {
          setRight(other.getRight());
        }
        if (other.hasTop()) {
          setTop(other.getTop());
        }
        if (other.hasBottom()) {
          setBottom(other.getBottom());
        }
        if (other.hasStringTableOffset()) {
          setStringTableOffset(other.getStringTableOffset());
        }
        if (other.hasStringTableLength()) {
          setStringTableLength(other.getStringTableLength());
        }
        if (other.hasStopsTableOffset()) {
          setStopsTableOffset(other.getStopsTableOffset());
        }
        if (other.hasStopsTableLength()) {
          setStopsTableLength(other.getStopsTableLength());
        }
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              return this;
            default: {
              if (!parseUnknownField(input, extensionRegistry, tag)) {
                return this;
              }
              break;
            }
            case 8: {
              setSize(input.readInt64());
              break;
            }
            case 16: {
              setOffset(input.readInt64());
              break;
            }
            case 26: {
              setName(input.readString());
              break;
            }
            case 32: {
              setLeft(input.readInt32());
              break;
            }
            case 40: {
              setRight(input.readInt32());
              break;
            }
            case 48: {
              setTop(input.readInt32());
              break;
            }
            case 56: {
              setBottom(input.readInt32());
              break;
            }
            case 64: {
              setStringTableOffset(input.readUInt32());
              break;
            }
            case 72: {
              setStringTableLength(input.readUInt32());
              break;
            }
            case 80: {
              setStopsTableOffset(input.readUInt32());
              break;
            }
            case 88: {
              setStopsTableLength(input.readUInt32());
              break;
            }
          }
        }
      }
      
      
      // required int64 size = 1;
      public boolean hasSize() {
        return result.hasSize();
      }
      public long getSize() {
        return result.getSize();
      }
      public Builder setSize(long value) {
        result.hasSize = true;
        result.size_ = value;
        return this;
      }
      public Builder clearSize() {
        result.hasSize = false;
        result.size_ = 0L;
        return this;
      }
      
      // required int64 offset = 2;
      public boolean hasOffset() {
        return result.hasOffset();
      }
      public long getOffset() {
        return result.getOffset();
      }
      public Builder setOffset(long value) {
        result.hasOffset = true;
        result.offset_ = value;
        return this;
      }
      public Builder clearOffset() {
        result.hasOffset = false;
        result.offset_ = 0L;
        return this;
      }
      
      // optional string name = 3;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // optional int32 left = 4;
      public boolean hasLeft() {
        return result.hasLeft();
      }
      public int getLeft() {
        return result.getLeft();
      }
      public Builder setLeft(int value) {
        result.hasLeft = true;
        result.left_ = value;
        return this;
      }
      public Builder clearLeft() {
        result.hasLeft = false;
        result.left_ = 0;
        return this;
      }
      
      // optional int32 right = 5;
      public boolean hasRight() {
        return result.hasRight();
      }
      public int getRight() {
        return result.getRight();
      }
      public Builder setRight(int value) {
        result.hasRight = true;
        result.right_ = value;
        return this;
      }
      public Builder clearRight() {
        result.hasRight = false;
        result.right_ = 0;
        return this;
      }
      
      // optional int32 top = 6;
      public boolean hasTop() {
        return result.hasTop();
      }
      public int getTop() {
        return result.getTop();
      }
      public Builder setTop(int value) {
        result.hasTop = true;
        result.top_ = value;
        return this;
      }
      public Builder clearTop() {
        result.hasTop = false;
        result.top_ = 0;
        return this;
      }
      
      // optional int32 bottom = 7;
      public boolean hasBottom() {
        return result.hasBottom();
      }
      public int getBottom() {
        return result.getBottom();
      }
      public Builder setBottom(int value) {
        result.hasBottom = true;
        result.bottom_ = value;
        return this;
      }
      public Builder clearBottom() {
        result.hasBottom = false;
        result.bottom_ = 0;
        return this;
      }
      
      // optional uint32 stringTableOffset = 8;
      public boolean hasStringTableOffset() {
        return result.hasStringTableOffset();
      }
      public int getStringTableOffset() {
        return result.getStringTableOffset();
      }
      public Builder setStringTableOffset(int value) {
        result.hasStringTableOffset = true;
        result.stringTableOffset_ = value;
        return this;
      }
      public Builder clearStringTableOffset() {
        result.hasStringTableOffset = false;
        result.stringTableOffset_ = 0;
        return this;
      }
      
      // optional uint32 stringTableLength = 9;
      public boolean hasStringTableLength() {
        return result.hasStringTableLength();
      }
      public int getStringTableLength() {
        return result.getStringTableLength();
      }
      public Builder setStringTableLength(int value) {
        result.hasStringTableLength = true;
        result.stringTableLength_ = value;
        return this;
      }
      public Builder clearStringTableLength() {
        result.hasStringTableLength = false;
        result.stringTableLength_ = 0;
        return this;
      }
      
      // optional uint32 stopsTableOffset = 10;
      public boolean hasStopsTableOffset() {
        return result.hasStopsTableOffset();
      }
      public int getStopsTableOffset() {
        return result.getStopsTableOffset();
      }
      public Builder setStopsTableOffset(int value) {
        result.hasStopsTableOffset = true;
        result.stopsTableOffset_ = value;
        return this;
      }
      public Builder clearStopsTableOffset() {
        result.hasStopsTableOffset = false;
        result.stopsTableOffset_ = 0;
        return this;
      }
      
      // optional uint32 stopsTableLength = 11;
      public boolean hasStopsTableLength() {
        return result.hasStopsTableLength();
      }
      public int getStopsTableLength() {
        return result.getStopsTableLength();
      }
      public Builder setStopsTableLength(int value) {
        result.hasStopsTableLength = true;
        result.stopsTableLength_ = value;
        return this;
      }
      public Builder clearStopsTableLength() {
        result.hasStopsTableLength = false;
        result.stopsTableLength_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:TransportPart)
    }
    
    static {
      defaultInstance = new TransportPart(true);
      net.osmand.binary.OsmandIndex.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:TransportPart)
  }
  
  
  static {
  }
  
  public static void internalForceInit() {}
  
  // @@protoc_insertion_point(outer_class_scope)
}
