Index: /applications/editors/josm/plugins/pbf/build.xml
===================================================================
--- /applications/editors/josm/plugins/pbf/build.xml	(revision 30489)
+++ /applications/editors/josm/plugins/pbf/build.xml	(revision 30490)
@@ -2,6 +2,4 @@
 <project name="pbf" default="dist" basedir=".">
 
-    <!-- enter the SVN commit message -->
-    <property name="commit.message" value="Commit message"/>
     <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
     <property name="plugin.main.version" value="7001"/>
@@ -15,7 +13,4 @@
     <!--<property name="plugin.icon" value="images/pbf_24.png"/>-->
     <property name="plugin.link" value="http://wiki.openstreetmap.org/wiki/JOSM/Plugins/PBF"/>
-    <!--<property name="plugin.early" value="..."/>-->
-    <!--<property name="plugin.requires" value="..."/>-->
-    <!--<property name="plugin.stage" value="..."/>-->
 
     <!-- ** include targets that all plugins have in common ** -->
@@ -28,5 +23,5 @@
     -->
     <target name="compile" depends="init">
-        <echo message="compiling sources for  ${plugin.jar} ... "/>
+        <echo message="compiling sources for ${plugin.jar} ... "/>
         <javac classpath="${josm}" debug="true" destdir="${plugin.build.dir}" includeAntRuntime="false">
             <compilerarg value="-Xlint:deprecation"/>
@@ -36,4 +31,3 @@
         </javac>
     </target>
-	
 </project>
Index: /applications/editors/josm/plugins/pbf/gen/com/google/protobuf/DescriptorProtos.java
===================================================================
--- /applications/editors/josm/plugins/pbf/gen/com/google/protobuf/DescriptorProtos.java	(revision 30489)
+++ /applications/editors/josm/plugins/pbf/gen/com/google/protobuf/DescriptorProtos.java	(revision 30490)
@@ -11,64 +11,172 @@
   public interface FileDescriptorSetOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
-    
+
     // repeated .google.protobuf.FileDescriptorProto file = 1;
+    /**
+     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.FileDescriptorProto> 
         getFileList();
+    /**
+     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+     */
     com.google.protobuf.DescriptorProtos.FileDescriptorProto getFile(int index);
+    /**
+     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+     */
     int getFileCount();
+    /**
+     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder> 
         getFileOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+     */
     com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder getFileOrBuilder(
         int index);
   }
+  /**
+   * Protobuf type {@code google.protobuf.FileDescriptorSet}
+   *
+   * <pre>
+   * The protocol compiler can output a FileDescriptorSet containing the .proto
+   * files it parses.
+   * </pre>
+   */
   public static final class FileDescriptorSet extends
       com.google.protobuf.GeneratedMessage
       implements FileDescriptorSetOrBuilder {
     // Use FileDescriptorSet.newBuilder() to construct.
-    private FileDescriptorSet(Builder builder) {
+    private FileDescriptorSet(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
       super(builder);
-    }
-    private FileDescriptorSet(boolean noInit) {}
-    
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private FileDescriptorSet(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
     private static final FileDescriptorSet defaultInstance;
     public static FileDescriptorSet getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public FileDescriptorSet getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private FileDescriptorSet(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+                file_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.FileDescriptorProto>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              file_.add(input.readMessage(com.google.protobuf.DescriptorProtos.FileDescriptorProto.PARSER, extensionRegistry));
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+          file_ = java.util.Collections.unmodifiableList(file_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
       return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_descriptor;
     }
-    
+
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable;
-    }
-    
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.protobuf.DescriptorProtos.FileDescriptorSet.class, com.google.protobuf.DescriptorProtos.FileDescriptorSet.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<FileDescriptorSet> PARSER =
+        new com.google.protobuf.AbstractParser<FileDescriptorSet>() {
+      public FileDescriptorSet parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new FileDescriptorSet(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<FileDescriptorSet> getParserForType() {
+      return PARSER;
+    }
+
     // repeated .google.protobuf.FileDescriptorProto file = 1;
     public static final int FILE_FIELD_NUMBER = 1;
     private java.util.List<com.google.protobuf.DescriptorProtos.FileDescriptorProto> file_;
+    /**
+     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+     */
     public java.util.List<com.google.protobuf.DescriptorProtos.FileDescriptorProto> getFileList() {
       return file_;
     }
+    /**
+     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+     */
     public java.util.List<? extends com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder> 
         getFileOrBuilderList() {
       return file_;
     }
+    /**
+     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+     */
     public int getFileCount() {
       return file_.size();
     }
+    /**
+     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+     */
     public com.google.protobuf.DescriptorProtos.FileDescriptorProto getFile(int index) {
       return file_.get(index);
     }
+    /**
+     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+     */
     public com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder getFileOrBuilder(
         int index) {
       return file_.get(index);
     }
-    
+
     private void initFields() {
       file_ = java.util.Collections.emptyList();
@@ -78,5 +186,5 @@
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
-      
+
       for (int i = 0; i < getFileCount(); i++) {
         if (!getFile(i).isInitialized()) {
@@ -88,5 +196,5 @@
       return true;
     }
-    
+
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
@@ -97,10 +205,10 @@
       getUnknownFields().writeTo(output);
     }
-    
+
     private int memoizedSerializedSize = -1;
     public int getSerializedSize() {
       int size = memoizedSerializedSize;
       if (size != -1) return size;
-    
+
       size = 0;
       for (int i = 0; i < file_.size(); i++) {
@@ -112,5 +220,5 @@
       return size;
     }
-    
+
     private static final long serialVersionUID = 0L;
     @java.lang.Override
@@ -119,9 +227,9 @@
       return super.writeReplace();
     }
-    
+
     public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(
@@ -129,10 +237,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(
@@ -140,10 +247,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(
@@ -151,15 +257,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseDelimitedFrom(
@@ -167,15 +267,10 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(
@@ -183,8 +278,7 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
@@ -193,5 +287,5 @@
     }
     public Builder toBuilder() { return newBuilder(this); }
-    
+
     @java.lang.Override
     protected Builder newBuilderForType(
@@ -200,4 +294,12 @@
       return builder;
     }
+    /**
+     * Protobuf type {@code google.protobuf.FileDescriptorSet}
+     *
+     * <pre>
+     * The protocol compiler can output a FileDescriptorSet containing the .proto
+     * files it parses.
+     * </pre>
+     */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
@@ -207,16 +309,19 @@
         return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_descriptor;
       }
-      
+
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable;
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.FileDescriptorSet.class, com.google.protobuf.DescriptorProtos.FileDescriptorSet.Builder.class);
+      }
+
       // Construct using com.google.protobuf.DescriptorProtos.FileDescriptorSet.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
-      
-      private Builder(BuilderParent parent) {
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
         super(parent);
         maybeForceBuilderInitialization();
@@ -230,5 +335,5 @@
         return new Builder();
       }
-      
+
       public Builder clear() {
         super.clear();
@@ -241,18 +346,18 @@
         return this;
       }
-      
+
       public Builder clone() {
         return create().mergeFrom(buildPartial());
       }
-      
+
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.google.protobuf.DescriptorProtos.FileDescriptorSet.getDescriptor();
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_descriptor;
+      }
+
       public com.google.protobuf.DescriptorProtos.FileDescriptorSet getDefaultInstanceForType() {
         return com.google.protobuf.DescriptorProtos.FileDescriptorSet.getDefaultInstance();
       }
-      
+
       public com.google.protobuf.DescriptorProtos.FileDescriptorSet build() {
         com.google.protobuf.DescriptorProtos.FileDescriptorSet result = buildPartial();
@@ -262,15 +367,5 @@
         return result;
       }
-      
-      private com.google.protobuf.DescriptorProtos.FileDescriptorSet buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        com.google.protobuf.DescriptorProtos.FileDescriptorSet result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
+
       public com.google.protobuf.DescriptorProtos.FileDescriptorSet buildPartial() {
         com.google.protobuf.DescriptorProtos.FileDescriptorSet result = new com.google.protobuf.DescriptorProtos.FileDescriptorSet(this);
@@ -288,5 +383,5 @@
         return result;
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.Message other) {
         if (other instanceof com.google.protobuf.DescriptorProtos.FileDescriptorSet) {
@@ -297,5 +392,5 @@
         }
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FileDescriptorSet other) {
         if (other == com.google.protobuf.DescriptorProtos.FileDescriptorSet.getDefaultInstance()) return this;
@@ -329,5 +424,5 @@
         return this;
       }
-      
+
       public final boolean isInitialized() {
         for (int i = 0; i < getFileCount(); i++) {
@@ -339,40 +434,24 @@
         return true;
       }
-      
+
       public Builder mergeFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder(
-            this.getUnknownFields());
-        while (true) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              this.setUnknownFields(unknownFields.build());
-              onChanged();
-              return this;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
-              }
-              break;
-            }
-            case 10: {
-              com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.FileDescriptorProto.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addFile(subBuilder.buildPartial());
-              break;
-            }
+        com.google.protobuf.DescriptorProtos.FileDescriptorSet parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.google.protobuf.DescriptorProtos.FileDescriptorSet) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
         }
-      }
-      
+        return this;
+      }
       private int bitField0_;
-      
+
       // repeated .google.protobuf.FileDescriptorProto file = 1;
       private java.util.List<com.google.protobuf.DescriptorProtos.FileDescriptorProto> file_ =
@@ -384,8 +463,11 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.FileDescriptorProto, com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder> fileBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.FileDescriptorProto> getFileList() {
         if (fileBuilder_ == null) {
@@ -395,4 +477,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+       */
       public int getFileCount() {
         if (fileBuilder_ == null) {
@@ -402,4 +487,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FileDescriptorProto getFile(int index) {
         if (fileBuilder_ == null) {
@@ -409,4 +497,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+       */
       public Builder setFile(
           int index, com.google.protobuf.DescriptorProtos.FileDescriptorProto value) {
@@ -423,4 +514,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+       */
       public Builder setFile(
           int index, com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder builderForValue) {
@@ -434,4 +528,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+       */
       public Builder addFile(com.google.protobuf.DescriptorProtos.FileDescriptorProto value) {
         if (fileBuilder_ == null) {
@@ -447,4 +544,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+       */
       public Builder addFile(
           int index, com.google.protobuf.DescriptorProtos.FileDescriptorProto value) {
@@ -461,4 +561,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+       */
       public Builder addFile(
           com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder builderForValue) {
@@ -472,4 +575,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+       */
       public Builder addFile(
           int index, com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder builderForValue) {
@@ -483,4 +589,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+       */
       public Builder addAllFile(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.FileDescriptorProto> values) {
@@ -494,4 +603,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+       */
       public Builder clearFile() {
         if (fileBuilder_ == null) {
@@ -504,4 +616,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+       */
       public Builder removeFile(int index) {
         if (fileBuilder_ == null) {
@@ -514,8 +629,14 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder getFileBuilder(
           int index) {
         return getFileFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder getFileOrBuilder(
           int index) {
@@ -525,4 +646,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder> 
            getFileOrBuilderList() {
@@ -533,8 +657,14 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder addFileBuilder() {
         return getFileFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder addFileBuilder(
           int index) {
@@ -542,4 +672,7 @@
             index, com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder> 
            getFileBuilderList() {
@@ -560,1003 +693,385 @@
         return fileBuilder_;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:google.protobuf.FileDescriptorSet)
     }
-    
+
     static {
       defaultInstance = new FileDescriptorSet(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:google.protobuf.FileDescriptorSet)
   }
-  
+
   public interface FileDescriptorProtoOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
-    
+
     // optional string name = 1;
+    /**
+     * <code>optional string name = 1;</code>
+     *
+     * <pre>
+     * file name, relative to root of source tree
+     * </pre>
+     */
     boolean hasName();
-    String getName();
-    
+    /**
+     * <code>optional string name = 1;</code>
+     *
+     * <pre>
+     * file name, relative to root of source tree
+     * </pre>
+     */
+    java.lang.String getName();
+    /**
+     * <code>optional string name = 1;</code>
+     *
+     * <pre>
+     * file name, relative to root of source tree
+     * </pre>
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
     // optional string package = 2;
+    /**
+     * <code>optional string package = 2;</code>
+     *
+     * <pre>
+     * e.g. "foo", "foo.bar", etc.
+     * </pre>
+     */
     boolean hasPackage();
-    String getPackage();
-    
+    /**
+     * <code>optional string package = 2;</code>
+     *
+     * <pre>
+     * e.g. "foo", "foo.bar", etc.
+     * </pre>
+     */
+    java.lang.String getPackage();
+    /**
+     * <code>optional string package = 2;</code>
+     *
+     * <pre>
+     * e.g. "foo", "foo.bar", etc.
+     * </pre>
+     */
+    com.google.protobuf.ByteString
+        getPackageBytes();
+
     // repeated string dependency = 3;
-    java.util.List<String> getDependencyList();
+    /**
+     * <code>repeated string dependency = 3;</code>
+     *
+     * <pre>
+     * Names of files imported by this file.
+     * </pre>
+     */
+    java.util.List<java.lang.String>
+    getDependencyList();
+    /**
+     * <code>repeated string dependency = 3;</code>
+     *
+     * <pre>
+     * Names of files imported by this file.
+     * </pre>
+     */
     int getDependencyCount();
-    String getDependency(int index);
-    
+    /**
+     * <code>repeated string dependency = 3;</code>
+     *
+     * <pre>
+     * Names of files imported by this file.
+     * </pre>
+     */
+    java.lang.String getDependency(int index);
+    /**
+     * <code>repeated string dependency = 3;</code>
+     *
+     * <pre>
+     * Names of files imported by this file.
+     * </pre>
+     */
+    com.google.protobuf.ByteString
+        getDependencyBytes(int index);
+
     // repeated int32 public_dependency = 10;
+    /**
+     * <code>repeated int32 public_dependency = 10;</code>
+     *
+     * <pre>
+     * Indexes of the public imported files in the dependency list above.
+     * </pre>
+     */
     java.util.List<java.lang.Integer> getPublicDependencyList();
+    /**
+     * <code>repeated int32 public_dependency = 10;</code>
+     *
+     * <pre>
+     * Indexes of the public imported files in the dependency list above.
+     * </pre>
+     */
     int getPublicDependencyCount();
+    /**
+     * <code>repeated int32 public_dependency = 10;</code>
+     *
+     * <pre>
+     * Indexes of the public imported files in the dependency list above.
+     * </pre>
+     */
     int getPublicDependency(int index);
-    
+
     // repeated int32 weak_dependency = 11;
+    /**
+     * <code>repeated int32 weak_dependency = 11;</code>
+     *
+     * <pre>
+     * Indexes of the weak imported files in the dependency list.
+     * For Google-internal migration only. Do not use.
+     * </pre>
+     */
     java.util.List<java.lang.Integer> getWeakDependencyList();
+    /**
+     * <code>repeated int32 weak_dependency = 11;</code>
+     *
+     * <pre>
+     * Indexes of the weak imported files in the dependency list.
+     * For Google-internal migration only. Do not use.
+     * </pre>
+     */
     int getWeakDependencyCount();
+    /**
+     * <code>repeated int32 weak_dependency = 11;</code>
+     *
+     * <pre>
+     * Indexes of the weak imported files in the dependency list.
+     * For Google-internal migration only. Do not use.
+     * </pre>
+     */
     int getWeakDependency(int index);
-    
+
     // repeated .google.protobuf.DescriptorProto message_type = 4;
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+     *
+     * <pre>
+     * All top-level definitions in this file.
+     * </pre>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> 
         getMessageTypeList();
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+     *
+     * <pre>
+     * All top-level definitions in this file.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.DescriptorProto getMessageType(int index);
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+     *
+     * <pre>
+     * All top-level definitions in this file.
+     * </pre>
+     */
     int getMessageTypeCount();
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+     *
+     * <pre>
+     * All top-level definitions in this file.
+     * </pre>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
         getMessageTypeOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+     *
+     * <pre>
+     * All top-level definitions in this file.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getMessageTypeOrBuilder(
         int index);
-    
+
     // repeated .google.protobuf.EnumDescriptorProto enum_type = 5;
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> 
         getEnumTypeList();
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+     */
     com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index);
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+     */
     int getEnumTypeCount();
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
         getEnumTypeOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+     */
     com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
         int index);
-    
+
     // repeated .google.protobuf.ServiceDescriptorProto service = 6;
+    /**
+     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> 
         getServiceList();
+    /**
+     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+     */
     com.google.protobuf.DescriptorProtos.ServiceDescriptorProto getService(int index);
+    /**
+     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+     */
     int getServiceCount();
+    /**
+     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder> 
         getServiceOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+     */
     com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder getServiceOrBuilder(
         int index);
-    
+
     // repeated .google.protobuf.FieldDescriptorProto extension = 7;
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> 
         getExtensionList();
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+     */
     com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index);
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+     */
     int getExtensionCount();
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
         getExtensionOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+     */
     com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
         int index);
-    
+
     // optional .google.protobuf.FileOptions options = 8;
+    /**
+     * <code>optional .google.protobuf.FileOptions options = 8;</code>
+     */
     boolean hasOptions();
+    /**
+     * <code>optional .google.protobuf.FileOptions options = 8;</code>
+     */
     com.google.protobuf.DescriptorProtos.FileOptions getOptions();
+    /**
+     * <code>optional .google.protobuf.FileOptions options = 8;</code>
+     */
     com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder getOptionsOrBuilder();
-    
+
     // optional .google.protobuf.SourceCodeInfo source_code_info = 9;
+    /**
+     * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
+     *
+     * <pre>
+     * This field contains optional information about the original source code.
+     * You may safely remove this entire field whithout harming runtime
+     * functionality of the descriptors -- the information is needed only by
+     * development tools.
+     * </pre>
+     */
     boolean hasSourceCodeInfo();
+    /**
+     * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
+     *
+     * <pre>
+     * This field contains optional information about the original source code.
+     * You may safely remove this entire field whithout harming runtime
+     * functionality of the descriptors -- the information is needed only by
+     * development tools.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.SourceCodeInfo getSourceCodeInfo();
+    /**
+     * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
+     *
+     * <pre>
+     * This field contains optional information about the original source code.
+     * You may safely remove this entire field whithout harming runtime
+     * functionality of the descriptors -- the information is needed only by
+     * development tools.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder getSourceCodeInfoOrBuilder();
   }
+  /**
+   * Protobuf type {@code google.protobuf.FileDescriptorProto}
+   *
+   * <pre>
+   * Describes a complete .proto file.
+   * </pre>
+   */
   public static final class FileDescriptorProto extends
       com.google.protobuf.GeneratedMessage
       implements FileDescriptorProtoOrBuilder {
     // Use FileDescriptorProto.newBuilder() to construct.
-    private FileDescriptorProto(Builder builder) {
+    private FileDescriptorProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
       super(builder);
-    }
-    private FileDescriptorProto(boolean noInit) {}
-    
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private FileDescriptorProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
     private static final FileDescriptorProto defaultInstance;
     public static FileDescriptorProto getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public FileDescriptorProto getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_descriptor;
-    }
-    
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable;
-    }
-    
-    private int bitField0_;
-    // optional string name = 1;
-    public static final int NAME_FIELD_NUMBER = 1;
-    private java.lang.Object name_;
-    public boolean hasName() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    public String getName() {
-      java.lang.Object ref = name_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          name_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getNameBytes() {
-      java.lang.Object ref = name_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        name_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    
-    // optional string package = 2;
-    public static final int PACKAGE_FIELD_NUMBER = 2;
-    private java.lang.Object package_;
-    public boolean hasPackage() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    public String getPackage() {
-      java.lang.Object ref = package_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          package_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getPackageBytes() {
-      java.lang.Object ref = package_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        package_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    
-    // repeated string dependency = 3;
-    public static final int DEPENDENCY_FIELD_NUMBER = 3;
-    private com.google.protobuf.LazyStringList dependency_;
-    public java.util.List<String>
-        getDependencyList() {
-      return dependency_;
-    }
-    public int getDependencyCount() {
-      return dependency_.size();
-    }
-    public String getDependency(int index) {
-      return dependency_.get(index);
-    }
-    
-    // repeated int32 public_dependency = 10;
-    public static final int PUBLIC_DEPENDENCY_FIELD_NUMBER = 10;
-    private java.util.List<java.lang.Integer> publicDependency_;
-    public java.util.List<java.lang.Integer>
-        getPublicDependencyList() {
-      return publicDependency_;
-    }
-    public int getPublicDependencyCount() {
-      return publicDependency_.size();
-    }
-    public int getPublicDependency(int index) {
-      return publicDependency_.get(index);
-    }
-    
-    // repeated int32 weak_dependency = 11;
-    public static final int WEAK_DEPENDENCY_FIELD_NUMBER = 11;
-    private java.util.List<java.lang.Integer> weakDependency_;
-    public java.util.List<java.lang.Integer>
-        getWeakDependencyList() {
-      return weakDependency_;
-    }
-    public int getWeakDependencyCount() {
-      return weakDependency_.size();
-    }
-    public int getWeakDependency(int index) {
-      return weakDependency_.get(index);
-    }
-    
-    // repeated .google.protobuf.DescriptorProto message_type = 4;
-    public static final int MESSAGE_TYPE_FIELD_NUMBER = 4;
-    private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> messageType_;
-    public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> getMessageTypeList() {
-      return messageType_;
-    }
-    public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
-        getMessageTypeOrBuilderList() {
-      return messageType_;
-    }
-    public int getMessageTypeCount() {
-      return messageType_.size();
-    }
-    public com.google.protobuf.DescriptorProtos.DescriptorProto getMessageType(int index) {
-      return messageType_.get(index);
-    }
-    public com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getMessageTypeOrBuilder(
-        int index) {
-      return messageType_.get(index);
-    }
-    
-    // repeated .google.protobuf.EnumDescriptorProto enum_type = 5;
-    public static final int ENUM_TYPE_FIELD_NUMBER = 5;
-    private java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> enumType_;
-    public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> getEnumTypeList() {
-      return enumType_;
-    }
-    public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
-        getEnumTypeOrBuilderList() {
-      return enumType_;
-    }
-    public int getEnumTypeCount() {
-      return enumType_.size();
-    }
-    public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index) {
-      return enumType_.get(index);
-    }
-    public com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
-        int index) {
-      return enumType_.get(index);
-    }
-    
-    // repeated .google.protobuf.ServiceDescriptorProto service = 6;
-    public static final int SERVICE_FIELD_NUMBER = 6;
-    private java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> service_;
-    public java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> getServiceList() {
-      return service_;
-    }
-    public java.util.List<? extends com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder> 
-        getServiceOrBuilderList() {
-      return service_;
-    }
-    public int getServiceCount() {
-      return service_.size();
-    }
-    public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto getService(int index) {
-      return service_.get(index);
-    }
-    public com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder getServiceOrBuilder(
-        int index) {
-      return service_.get(index);
-    }
-    
-    // repeated .google.protobuf.FieldDescriptorProto extension = 7;
-    public static final int EXTENSION_FIELD_NUMBER = 7;
-    private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> extension_;
-    public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getExtensionList() {
-      return extension_;
-    }
-    public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
-        getExtensionOrBuilderList() {
-      return extension_;
-    }
-    public int getExtensionCount() {
-      return extension_.size();
-    }
-    public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index) {
-      return extension_.get(index);
-    }
-    public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
-        int index) {
-      return extension_.get(index);
-    }
-    
-    // optional .google.protobuf.FileOptions options = 8;
-    public static final int OPTIONS_FIELD_NUMBER = 8;
-    private com.google.protobuf.DescriptorProtos.FileOptions options_;
-    public boolean hasOptions() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
-    }
-    public com.google.protobuf.DescriptorProtos.FileOptions getOptions() {
-      return options_;
-    }
-    public com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder getOptionsOrBuilder() {
-      return options_;
-    }
-    
-    // optional .google.protobuf.SourceCodeInfo source_code_info = 9;
-    public static final int SOURCE_CODE_INFO_FIELD_NUMBER = 9;
-    private com.google.protobuf.DescriptorProtos.SourceCodeInfo sourceCodeInfo_;
-    public boolean hasSourceCodeInfo() {
-      return ((bitField0_ & 0x00000008) == 0x00000008);
-    }
-    public com.google.protobuf.DescriptorProtos.SourceCodeInfo getSourceCodeInfo() {
-      return sourceCodeInfo_;
-    }
-    public com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder getSourceCodeInfoOrBuilder() {
-      return sourceCodeInfo_;
-    }
-    
-    private void initFields() {
-      name_ = "";
-      package_ = "";
-      dependency_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-      publicDependency_ = java.util.Collections.emptyList();;
-      weakDependency_ = java.util.Collections.emptyList();;
-      messageType_ = java.util.Collections.emptyList();
-      enumType_ = java.util.Collections.emptyList();
-      service_ = java.util.Collections.emptyList();
-      extension_ = java.util.Collections.emptyList();
-      options_ = com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance();
-      sourceCodeInfo_ = com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance();
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
-      
-      for (int i = 0; i < getMessageTypeCount(); i++) {
-        if (!getMessageType(i).isInitialized()) {
-          memoizedIsInitialized = 0;
-          return false;
-        }
-      }
-      for (int i = 0; i < getEnumTypeCount(); i++) {
-        if (!getEnumType(i).isInitialized()) {
-          memoizedIsInitialized = 0;
-          return false;
-        }
-      }
-      for (int i = 0; i < getServiceCount(); i++) {
-        if (!getService(i).isInitialized()) {
-          memoizedIsInitialized = 0;
-          return false;
-        }
-      }
-      for (int i = 0; i < getExtensionCount(); i++) {
-        if (!getExtension(i).isInitialized()) {
-          memoizedIsInitialized = 0;
-          return false;
-        }
-      }
-      if (hasOptions()) {
-        if (!getOptions().isInitialized()) {
-          memoizedIsInitialized = 0;
-          return false;
-        }
-      }
-      memoizedIsInitialized = 1;
-      return true;
-    }
-    
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBytes(1, getNameBytes());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeBytes(2, getPackageBytes());
-      }
-      for (int i = 0; i < dependency_.size(); i++) {
-        output.writeBytes(3, dependency_.getByteString(i));
-      }
-      for (int i = 0; i < messageType_.size(); i++) {
-        output.writeMessage(4, messageType_.get(i));
-      }
-      for (int i = 0; i < enumType_.size(); i++) {
-        output.writeMessage(5, enumType_.get(i));
-      }
-      for (int i = 0; i < service_.size(); i++) {
-        output.writeMessage(6, service_.get(i));
-      }
-      for (int i = 0; i < extension_.size(); i++) {
-        output.writeMessage(7, extension_.get(i));
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeMessage(8, options_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        output.writeMessage(9, sourceCodeInfo_);
-      }
-      for (int i = 0; i < publicDependency_.size(); i++) {
-        output.writeInt32(10, publicDependency_.get(i));
-      }
-      for (int i = 0; i < weakDependency_.size(); i++) {
-        output.writeInt32(11, weakDependency_.get(i));
-      }
-      getUnknownFields().writeTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-    
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(1, getNameBytes());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(2, getPackageBytes());
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < dependency_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeBytesSizeNoTag(dependency_.getByteString(i));
-        }
-        size += dataSize;
-        size += 1 * getDependencyList().size();
-      }
-      for (int i = 0; i < messageType_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, messageType_.get(i));
-      }
-      for (int i = 0; i < enumType_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, enumType_.get(i));
-      }
-      for (int i = 0; i < service_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, service_.get(i));
-      }
-      for (int i = 0; i < extension_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(7, extension_.get(i));
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(8, options_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(9, sourceCodeInfo_);
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < publicDependency_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeInt32SizeNoTag(publicDependency_.get(i));
-        }
-        size += dataSize;
-        size += 1 * getPublicDependencyList().size();
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < weakDependency_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeInt32SizeNoTag(weakDependency_.get(i));
-        }
-        size += dataSize;
-        size += 1 * getWeakDependencyList().size();
-      }
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-    
-    private static final long serialVersionUID = 0L;
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
     @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-    
-    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
-        com.google.protobuf.ByteString data,
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private FileDescriptorProto(
+        com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
-    }
-    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto 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 com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto 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(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FileDescriptorProto prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-    
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_descriptor;
-      }
-      
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable;
-      }
-      
-      // Construct using com.google.protobuf.DescriptorProtos.FileDescriptorProto.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-      
-      private Builder(BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getMessageTypeFieldBuilder();
-          getEnumTypeFieldBuilder();
-          getServiceFieldBuilder();
-          getExtensionFieldBuilder();
-          getOptionsFieldBuilder();
-          getSourceCodeInfoFieldBuilder();
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-      
-      public Builder clear() {
-        super.clear();
-        name_ = "";
-        bitField0_ = (bitField0_ & ~0x00000001);
-        package_ = "";
-        bitField0_ = (bitField0_ & ~0x00000002);
-        dependency_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000004);
-        publicDependency_ = java.util.Collections.emptyList();;
-        bitField0_ = (bitField0_ & ~0x00000008);
-        weakDependency_ = java.util.Collections.emptyList();;
-        bitField0_ = (bitField0_ & ~0x00000010);
-        if (messageTypeBuilder_ == null) {
-          messageType_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000020);
-        } else {
-          messageTypeBuilder_.clear();
-        }
-        if (enumTypeBuilder_ == null) {
-          enumType_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000040);
-        } else {
-          enumTypeBuilder_.clear();
-        }
-        if (serviceBuilder_ == null) {
-          service_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000080);
-        } else {
-          serviceBuilder_.clear();
-        }
-        if (extensionBuilder_ == null) {
-          extension_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000100);
-        } else {
-          extensionBuilder_.clear();
-        }
-        if (optionsBuilder_ == null) {
-          options_ = com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance();
-        } else {
-          optionsBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000200);
-        if (sourceCodeInfoBuilder_ == null) {
-          sourceCodeInfo_ = com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance();
-        } else {
-          sourceCodeInfoBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000400);
-        return this;
-      }
-      
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-      
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDescriptor();
-      }
-      
-      public com.google.protobuf.DescriptorProtos.FileDescriptorProto getDefaultInstanceForType() {
-        return com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDefaultInstance();
-      }
-      
-      public com.google.protobuf.DescriptorProtos.FileDescriptorProto build() {
-        com.google.protobuf.DescriptorProtos.FileDescriptorProto result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-      
-      private com.google.protobuf.DescriptorProtos.FileDescriptorProto buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        com.google.protobuf.DescriptorProtos.FileDescriptorProto result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
-      public com.google.protobuf.DescriptorProtos.FileDescriptorProto buildPartial() {
-        com.google.protobuf.DescriptorProtos.FileDescriptorProto result = new com.google.protobuf.DescriptorProtos.FileDescriptorProto(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.name_ = name_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.package_ = package_;
-        if (((bitField0_ & 0x00000004) == 0x00000004)) {
-          dependency_ = new com.google.protobuf.UnmodifiableLazyStringList(
-              dependency_);
-          bitField0_ = (bitField0_ & ~0x00000004);
-        }
-        result.dependency_ = dependency_;
-        if (((bitField0_ & 0x00000008) == 0x00000008)) {
-          publicDependency_ = java.util.Collections.unmodifiableList(publicDependency_);
-          bitField0_ = (bitField0_ & ~0x00000008);
-        }
-        result.publicDependency_ = publicDependency_;
-        if (((bitField0_ & 0x00000010) == 0x00000010)) {
-          weakDependency_ = java.util.Collections.unmodifiableList(weakDependency_);
-          bitField0_ = (bitField0_ & ~0x00000010);
-        }
-        result.weakDependency_ = weakDependency_;
-        if (messageTypeBuilder_ == null) {
-          if (((bitField0_ & 0x00000020) == 0x00000020)) {
-            messageType_ = java.util.Collections.unmodifiableList(messageType_);
-            bitField0_ = (bitField0_ & ~0x00000020);
-          }
-          result.messageType_ = messageType_;
-        } else {
-          result.messageType_ = messageTypeBuilder_.build();
-        }
-        if (enumTypeBuilder_ == null) {
-          if (((bitField0_ & 0x00000040) == 0x00000040)) {
-            enumType_ = java.util.Collections.unmodifiableList(enumType_);
-            bitField0_ = (bitField0_ & ~0x00000040);
-          }
-          result.enumType_ = enumType_;
-        } else {
-          result.enumType_ = enumTypeBuilder_.build();
-        }
-        if (serviceBuilder_ == null) {
-          if (((bitField0_ & 0x00000080) == 0x00000080)) {
-            service_ = java.util.Collections.unmodifiableList(service_);
-            bitField0_ = (bitField0_ & ~0x00000080);
-          }
-          result.service_ = service_;
-        } else {
-          result.service_ = serviceBuilder_.build();
-        }
-        if (extensionBuilder_ == null) {
-          if (((bitField0_ & 0x00000100) == 0x00000100)) {
-            extension_ = java.util.Collections.unmodifiableList(extension_);
-            bitField0_ = (bitField0_ & ~0x00000100);
-          }
-          result.extension_ = extension_;
-        } else {
-          result.extension_ = extensionBuilder_.build();
-        }
-        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
-          to_bitField0_ |= 0x00000004;
-        }
-        if (optionsBuilder_ == null) {
-          result.options_ = options_;
-        } else {
-          result.options_ = optionsBuilder_.build();
-        }
-        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
-          to_bitField0_ |= 0x00000008;
-        }
-        if (sourceCodeInfoBuilder_ == null) {
-          result.sourceCodeInfo_ = sourceCodeInfo_;
-        } else {
-          result.sourceCodeInfo_ = sourceCodeInfoBuilder_.build();
-        }
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-      
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.google.protobuf.DescriptorProtos.FileDescriptorProto) {
-          return mergeFrom((com.google.protobuf.DescriptorProtos.FileDescriptorProto)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-      
-      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FileDescriptorProto other) {
-        if (other == com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDefaultInstance()) return this;
-        if (other.hasName()) {
-          setName(other.getName());
-        }
-        if (other.hasPackage()) {
-          setPackage(other.getPackage());
-        }
-        if (!other.dependency_.isEmpty()) {
-          if (dependency_.isEmpty()) {
-            dependency_ = other.dependency_;
-            bitField0_ = (bitField0_ & ~0x00000004);
-          } else {
-            ensureDependencyIsMutable();
-            dependency_.addAll(other.dependency_);
-          }
-          onChanged();
-        }
-        if (!other.publicDependency_.isEmpty()) {
-          if (publicDependency_.isEmpty()) {
-            publicDependency_ = other.publicDependency_;
-            bitField0_ = (bitField0_ & ~0x00000008);
-          } else {
-            ensurePublicDependencyIsMutable();
-            publicDependency_.addAll(other.publicDependency_);
-          }
-          onChanged();
-        }
-        if (!other.weakDependency_.isEmpty()) {
-          if (weakDependency_.isEmpty()) {
-            weakDependency_ = other.weakDependency_;
-            bitField0_ = (bitField0_ & ~0x00000010);
-          } else {
-            ensureWeakDependencyIsMutable();
-            weakDependency_.addAll(other.weakDependency_);
-          }
-          onChanged();
-        }
-        if (messageTypeBuilder_ == null) {
-          if (!other.messageType_.isEmpty()) {
-            if (messageType_.isEmpty()) {
-              messageType_ = other.messageType_;
-              bitField0_ = (bitField0_ & ~0x00000020);
-            } else {
-              ensureMessageTypeIsMutable();
-              messageType_.addAll(other.messageType_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.messageType_.isEmpty()) {
-            if (messageTypeBuilder_.isEmpty()) {
-              messageTypeBuilder_.dispose();
-              messageTypeBuilder_ = null;
-              messageType_ = other.messageType_;
-              bitField0_ = (bitField0_ & ~0x00000020);
-              messageTypeBuilder_ = 
-                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
-                   getMessageTypeFieldBuilder() : null;
-            } else {
-              messageTypeBuilder_.addAllMessages(other.messageType_);
-            }
-          }
-        }
-        if (enumTypeBuilder_ == null) {
-          if (!other.enumType_.isEmpty()) {
-            if (enumType_.isEmpty()) {
-              enumType_ = other.enumType_;
-              bitField0_ = (bitField0_ & ~0x00000040);
-            } else {
-              ensureEnumTypeIsMutable();
-              enumType_.addAll(other.enumType_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.enumType_.isEmpty()) {
-            if (enumTypeBuilder_.isEmpty()) {
-              enumTypeBuilder_.dispose();
-              enumTypeBuilder_ = null;
-              enumType_ = other.enumType_;
-              bitField0_ = (bitField0_ & ~0x00000040);
-              enumTypeBuilder_ = 
-                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
-                   getEnumTypeFieldBuilder() : null;
-            } else {
-              enumTypeBuilder_.addAllMessages(other.enumType_);
-            }
-          }
-        }
-        if (serviceBuilder_ == null) {
-          if (!other.service_.isEmpty()) {
-            if (service_.isEmpty()) {
-              service_ = other.service_;
-              bitField0_ = (bitField0_ & ~0x00000080);
-            } else {
-              ensureServiceIsMutable();
-              service_.addAll(other.service_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.service_.isEmpty()) {
-            if (serviceBuilder_.isEmpty()) {
-              serviceBuilder_.dispose();
-              serviceBuilder_ = null;
-              service_ = other.service_;
-              bitField0_ = (bitField0_ & ~0x00000080);
-              serviceBuilder_ = 
-                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
-                   getServiceFieldBuilder() : null;
-            } else {
-              serviceBuilder_.addAllMessages(other.service_);
-            }
-          }
-        }
-        if (extensionBuilder_ == null) {
-          if (!other.extension_.isEmpty()) {
-            if (extension_.isEmpty()) {
-              extension_ = other.extension_;
-              bitField0_ = (bitField0_ & ~0x00000100);
-            } else {
-              ensureExtensionIsMutable();
-              extension_.addAll(other.extension_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.extension_.isEmpty()) {
-            if (extensionBuilder_.isEmpty()) {
-              extensionBuilder_.dispose();
-              extensionBuilder_ = null;
-              extension_ = other.extension_;
-              bitField0_ = (bitField0_ & ~0x00000100);
-              extensionBuilder_ = 
-                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
-                   getExtensionFieldBuilder() : null;
-            } else {
-              extensionBuilder_.addAllMessages(other.extension_);
-            }
-          }
-        }
-        if (other.hasOptions()) {
-          mergeOptions(other.getOptions());
-        }
-        if (other.hasSourceCodeInfo()) {
-          mergeSourceCodeInfo(other.getSourceCodeInfo());
-        }
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-      
-      public final boolean isInitialized() {
-        for (int i = 0; i < getMessageTypeCount(); i++) {
-          if (!getMessageType(i).isInitialized()) {
-            
-            return false;
-          }
-        }
-        for (int i = 0; i < getEnumTypeCount(); i++) {
-          if (!getEnumType(i).isInitialized()) {
-            
-            return false;
-          }
-        }
-        for (int i = 0; i < getServiceCount(); i++) {
-          if (!getService(i).isInitialized()) {
-            
-            return false;
-          }
-        }
-        for (int i = 0; i < getExtensionCount(); i++) {
-          if (!getExtension(i).isInitialized()) {
-            
-            return false;
-          }
-        }
-        if (hasOptions()) {
-          if (!getOptions().isInitialized()) {
-            
-            return false;
-          }
-        }
-        return true;
-      }
-      
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder(
-            this.getUnknownFields());
-        while (true) {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
           int tag = input.readTag();
           switch (tag) {
             case 0:
-              this.setUnknownFields(unknownFields.build());
-              onChanged();
-              return this;
+              done = true;
+              break;
             default: {
               if (!parseUnknownField(input, unknownFields,
                                      extensionRegistry, tag)) {
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
+                done = true;
               }
               break;
@@ -1573,52 +1088,74 @@
             }
             case 26: {
-              ensureDependencyIsMutable();
+              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+                dependency_ = new com.google.protobuf.LazyStringArrayList();
+                mutable_bitField0_ |= 0x00000004;
+              }
               dependency_.add(input.readBytes());
               break;
             }
             case 34: {
-              com.google.protobuf.DescriptorProtos.DescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.DescriptorProto.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addMessageType(subBuilder.buildPartial());
+              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
+                messageType_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.DescriptorProto>();
+                mutable_bitField0_ |= 0x00000020;
+              }
+              messageType_.add(input.readMessage(com.google.protobuf.DescriptorProtos.DescriptorProto.PARSER, extensionRegistry));
               break;
             }
             case 42: {
-              com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.EnumDescriptorProto.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addEnumType(subBuilder.buildPartial());
+              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
+                enumType_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.EnumDescriptorProto>();
+                mutable_bitField0_ |= 0x00000040;
+              }
+              enumType_.add(input.readMessage(com.google.protobuf.DescriptorProtos.EnumDescriptorProto.PARSER, extensionRegistry));
               break;
             }
             case 50: {
-              com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addService(subBuilder.buildPartial());
+              if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
+                service_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto>();
+                mutable_bitField0_ |= 0x00000080;
+              }
+              service_.add(input.readMessage(com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.PARSER, extensionRegistry));
               break;
             }
             case 58: {
-              com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addExtension(subBuilder.buildPartial());
+              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
+                extension_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.FieldDescriptorProto>();
+                mutable_bitField0_ |= 0x00000100;
+              }
+              extension_.add(input.readMessage(com.google.protobuf.DescriptorProtos.FieldDescriptorProto.PARSER, extensionRegistry));
               break;
             }
             case 66: {
-              com.google.protobuf.DescriptorProtos.FileOptions.Builder subBuilder = com.google.protobuf.DescriptorProtos.FileOptions.newBuilder();
-              if (hasOptions()) {
-                subBuilder.mergeFrom(getOptions());
+              com.google.protobuf.DescriptorProtos.FileOptions.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000004) == 0x00000004)) {
+                subBuilder = options_.toBuilder();
               }
-              input.readMessage(subBuilder, extensionRegistry);
-              setOptions(subBuilder.buildPartial());
+              options_ = input.readMessage(com.google.protobuf.DescriptorProtos.FileOptions.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(options_);
+                options_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000004;
               break;
             }
             case 74: {
-              com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder subBuilder = com.google.protobuf.DescriptorProtos.SourceCodeInfo.newBuilder();
-              if (hasSourceCodeInfo()) {
-                subBuilder.mergeFrom(getSourceCodeInfo());
+              com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000008) == 0x00000008)) {
+                subBuilder = sourceCodeInfo_.toBuilder();
               }
-              input.readMessage(subBuilder, extensionRegistry);
-              setSourceCodeInfo(subBuilder.buildPartial());
+              sourceCodeInfo_ = input.readMessage(com.google.protobuf.DescriptorProtos.SourceCodeInfo.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sourceCodeInfo_);
+                sourceCodeInfo_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000008;
               break;
             }
             case 80: {
-              ensurePublicDependencyIsMutable();
+              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
+                publicDependency_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000008;
+              }
               publicDependency_.add(input.readInt32());
               break;
@@ -1627,6 +1164,10 @@
               int length = input.readRawVarint32();
               int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008) && input.getBytesUntilLimit() > 0) {
+                publicDependency_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000008;
+              }
               while (input.getBytesUntilLimit() > 0) {
-                addPublicDependency(input.readInt32());
+                publicDependency_.add(input.readInt32());
               }
               input.popLimit(limit);
@@ -1634,5 +1175,8 @@
             }
             case 88: {
-              ensureWeakDependencyIsMutable();
+              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
+                weakDependency_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000010;
+              }
               weakDependency_.add(input.readInt32());
               break;
@@ -1641,6 +1185,10 @@
               int length = input.readRawVarint32();
               int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010) && input.getBytesUntilLimit() > 0) {
+                weakDependency_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000010;
+              }
               while (input.getBytesUntilLimit() > 0) {
-                addWeakDependency(input.readInt32());
+                weakDependency_.add(input.readInt32());
               }
               input.popLimit(limit);
@@ -1649,24 +1197,1235 @@
           }
         }
-      }
-      
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+          dependency_ = new com.google.protobuf.UnmodifiableLazyStringList(dependency_);
+        }
+        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
+          messageType_ = java.util.Collections.unmodifiableList(messageType_);
+        }
+        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
+          enumType_ = java.util.Collections.unmodifiableList(enumType_);
+        }
+        if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
+          service_ = java.util.Collections.unmodifiableList(service_);
+        }
+        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
+          extension_ = java.util.Collections.unmodifiableList(extension_);
+        }
+        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
+          publicDependency_ = java.util.Collections.unmodifiableList(publicDependency_);
+        }
+        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
+          weakDependency_ = java.util.Collections.unmodifiableList(weakDependency_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.protobuf.DescriptorProtos.FileDescriptorProto.class, com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<FileDescriptorProto> PARSER =
+        new com.google.protobuf.AbstractParser<FileDescriptorProto>() {
+      public FileDescriptorProto parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new FileDescriptorProto(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<FileDescriptorProto> getParserForType() {
+      return PARSER;
+    }
+
+    private int bitField0_;
+    // optional string name = 1;
+    public static final int NAME_FIELD_NUMBER = 1;
+    private java.lang.Object name_;
+    /**
+     * <code>optional string name = 1;</code>
+     *
+     * <pre>
+     * file name, relative to root of source tree
+     * </pre>
+     */
+    public boolean hasName() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>optional string name = 1;</code>
+     *
+     * <pre>
+     * file name, relative to root of source tree
+     * </pre>
+     */
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          name_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string name = 1;</code>
+     *
+     * <pre>
+     * file name, relative to root of source tree
+     * </pre>
+     */
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    // optional string package = 2;
+    public static final int PACKAGE_FIELD_NUMBER = 2;
+    private java.lang.Object package_;
+    /**
+     * <code>optional string package = 2;</code>
+     *
+     * <pre>
+     * e.g. "foo", "foo.bar", etc.
+     * </pre>
+     */
+    public boolean hasPackage() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>optional string package = 2;</code>
+     *
+     * <pre>
+     * e.g. "foo", "foo.bar", etc.
+     * </pre>
+     */
+    public java.lang.String getPackage() {
+      java.lang.Object ref = package_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          package_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string package = 2;</code>
+     *
+     * <pre>
+     * e.g. "foo", "foo.bar", etc.
+     * </pre>
+     */
+    public com.google.protobuf.ByteString
+        getPackageBytes() {
+      java.lang.Object ref = package_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        package_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    // repeated string dependency = 3;
+    public static final int DEPENDENCY_FIELD_NUMBER = 3;
+    private com.google.protobuf.LazyStringList dependency_;
+    /**
+     * <code>repeated string dependency = 3;</code>
+     *
+     * <pre>
+     * Names of files imported by this file.
+     * </pre>
+     */
+    public java.util.List<java.lang.String>
+        getDependencyList() {
+      return dependency_;
+    }
+    /**
+     * <code>repeated string dependency = 3;</code>
+     *
+     * <pre>
+     * Names of files imported by this file.
+     * </pre>
+     */
+    public int getDependencyCount() {
+      return dependency_.size();
+    }
+    /**
+     * <code>repeated string dependency = 3;</code>
+     *
+     * <pre>
+     * Names of files imported by this file.
+     * </pre>
+     */
+    public java.lang.String getDependency(int index) {
+      return dependency_.get(index);
+    }
+    /**
+     * <code>repeated string dependency = 3;</code>
+     *
+     * <pre>
+     * Names of files imported by this file.
+     * </pre>
+     */
+    public com.google.protobuf.ByteString
+        getDependencyBytes(int index) {
+      return dependency_.getByteString(index);
+    }
+
+    // repeated int32 public_dependency = 10;
+    public static final int PUBLIC_DEPENDENCY_FIELD_NUMBER = 10;
+    private java.util.List<java.lang.Integer> publicDependency_;
+    /**
+     * <code>repeated int32 public_dependency = 10;</code>
+     *
+     * <pre>
+     * Indexes of the public imported files in the dependency list above.
+     * </pre>
+     */
+    public java.util.List<java.lang.Integer>
+        getPublicDependencyList() {
+      return publicDependency_;
+    }
+    /**
+     * <code>repeated int32 public_dependency = 10;</code>
+     *
+     * <pre>
+     * Indexes of the public imported files in the dependency list above.
+     * </pre>
+     */
+    public int getPublicDependencyCount() {
+      return publicDependency_.size();
+    }
+    /**
+     * <code>repeated int32 public_dependency = 10;</code>
+     *
+     * <pre>
+     * Indexes of the public imported files in the dependency list above.
+     * </pre>
+     */
+    public int getPublicDependency(int index) {
+      return publicDependency_.get(index);
+    }
+
+    // repeated int32 weak_dependency = 11;
+    public static final int WEAK_DEPENDENCY_FIELD_NUMBER = 11;
+    private java.util.List<java.lang.Integer> weakDependency_;
+    /**
+     * <code>repeated int32 weak_dependency = 11;</code>
+     *
+     * <pre>
+     * Indexes of the weak imported files in the dependency list.
+     * For Google-internal migration only. Do not use.
+     * </pre>
+     */
+    public java.util.List<java.lang.Integer>
+        getWeakDependencyList() {
+      return weakDependency_;
+    }
+    /**
+     * <code>repeated int32 weak_dependency = 11;</code>
+     *
+     * <pre>
+     * Indexes of the weak imported files in the dependency list.
+     * For Google-internal migration only. Do not use.
+     * </pre>
+     */
+    public int getWeakDependencyCount() {
+      return weakDependency_.size();
+    }
+    /**
+     * <code>repeated int32 weak_dependency = 11;</code>
+     *
+     * <pre>
+     * Indexes of the weak imported files in the dependency list.
+     * For Google-internal migration only. Do not use.
+     * </pre>
+     */
+    public int getWeakDependency(int index) {
+      return weakDependency_.get(index);
+    }
+
+    // repeated .google.protobuf.DescriptorProto message_type = 4;
+    public static final int MESSAGE_TYPE_FIELD_NUMBER = 4;
+    private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> messageType_;
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+     *
+     * <pre>
+     * All top-level definitions in this file.
+     * </pre>
+     */
+    public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> getMessageTypeList() {
+      return messageType_;
+    }
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+     *
+     * <pre>
+     * All top-level definitions in this file.
+     * </pre>
+     */
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
+        getMessageTypeOrBuilderList() {
+      return messageType_;
+    }
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+     *
+     * <pre>
+     * All top-level definitions in this file.
+     * </pre>
+     */
+    public int getMessageTypeCount() {
+      return messageType_.size();
+    }
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+     *
+     * <pre>
+     * All top-level definitions in this file.
+     * </pre>
+     */
+    public com.google.protobuf.DescriptorProtos.DescriptorProto getMessageType(int index) {
+      return messageType_.get(index);
+    }
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+     *
+     * <pre>
+     * All top-level definitions in this file.
+     * </pre>
+     */
+    public com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getMessageTypeOrBuilder(
+        int index) {
+      return messageType_.get(index);
+    }
+
+    // repeated .google.protobuf.EnumDescriptorProto enum_type = 5;
+    public static final int ENUM_TYPE_FIELD_NUMBER = 5;
+    private java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> enumType_;
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+     */
+    public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> getEnumTypeList() {
+      return enumType_;
+    }
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+     */
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
+        getEnumTypeOrBuilderList() {
+      return enumType_;
+    }
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+     */
+    public int getEnumTypeCount() {
+      return enumType_.size();
+    }
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+     */
+    public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index) {
+      return enumType_.get(index);
+    }
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+     */
+    public com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
+        int index) {
+      return enumType_.get(index);
+    }
+
+    // repeated .google.protobuf.ServiceDescriptorProto service = 6;
+    public static final int SERVICE_FIELD_NUMBER = 6;
+    private java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> service_;
+    /**
+     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+     */
+    public java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> getServiceList() {
+      return service_;
+    }
+    /**
+     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+     */
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder> 
+        getServiceOrBuilderList() {
+      return service_;
+    }
+    /**
+     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+     */
+    public int getServiceCount() {
+      return service_.size();
+    }
+    /**
+     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+     */
+    public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto getService(int index) {
+      return service_.get(index);
+    }
+    /**
+     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+     */
+    public com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder getServiceOrBuilder(
+        int index) {
+      return service_.get(index);
+    }
+
+    // repeated .google.protobuf.FieldDescriptorProto extension = 7;
+    public static final int EXTENSION_FIELD_NUMBER = 7;
+    private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> extension_;
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+     */
+    public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getExtensionList() {
+      return extension_;
+    }
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+     */
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
+        getExtensionOrBuilderList() {
+      return extension_;
+    }
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+     */
+    public int getExtensionCount() {
+      return extension_.size();
+    }
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+     */
+    public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index) {
+      return extension_.get(index);
+    }
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+     */
+    public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
+        int index) {
+      return extension_.get(index);
+    }
+
+    // optional .google.protobuf.FileOptions options = 8;
+    public static final int OPTIONS_FIELD_NUMBER = 8;
+    private com.google.protobuf.DescriptorProtos.FileOptions options_;
+    /**
+     * <code>optional .google.protobuf.FileOptions options = 8;</code>
+     */
+    public boolean hasOptions() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    /**
+     * <code>optional .google.protobuf.FileOptions options = 8;</code>
+     */
+    public com.google.protobuf.DescriptorProtos.FileOptions getOptions() {
+      return options_;
+    }
+    /**
+     * <code>optional .google.protobuf.FileOptions options = 8;</code>
+     */
+    public com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder getOptionsOrBuilder() {
+      return options_;
+    }
+
+    // optional .google.protobuf.SourceCodeInfo source_code_info = 9;
+    public static final int SOURCE_CODE_INFO_FIELD_NUMBER = 9;
+    private com.google.protobuf.DescriptorProtos.SourceCodeInfo sourceCodeInfo_;
+    /**
+     * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
+     *
+     * <pre>
+     * This field contains optional information about the original source code.
+     * You may safely remove this entire field whithout harming runtime
+     * functionality of the descriptors -- the information is needed only by
+     * development tools.
+     * </pre>
+     */
+    public boolean hasSourceCodeInfo() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    /**
+     * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
+     *
+     * <pre>
+     * This field contains optional information about the original source code.
+     * You may safely remove this entire field whithout harming runtime
+     * functionality of the descriptors -- the information is needed only by
+     * development tools.
+     * </pre>
+     */
+    public com.google.protobuf.DescriptorProtos.SourceCodeInfo getSourceCodeInfo() {
+      return sourceCodeInfo_;
+    }
+    /**
+     * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
+     *
+     * <pre>
+     * This field contains optional information about the original source code.
+     * You may safely remove this entire field whithout harming runtime
+     * functionality of the descriptors -- the information is needed only by
+     * development tools.
+     * </pre>
+     */
+    public com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder getSourceCodeInfoOrBuilder() {
+      return sourceCodeInfo_;
+    }
+
+    private void initFields() {
+      name_ = "";
+      package_ = "";
+      dependency_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      publicDependency_ = java.util.Collections.emptyList();
+      weakDependency_ = java.util.Collections.emptyList();
+      messageType_ = java.util.Collections.emptyList();
+      enumType_ = java.util.Collections.emptyList();
+      service_ = java.util.Collections.emptyList();
+      extension_ = java.util.Collections.emptyList();
+      options_ = com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance();
+      sourceCodeInfo_ = com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+
+      for (int i = 0; i < getMessageTypeCount(); i++) {
+        if (!getMessageType(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      for (int i = 0; i < getEnumTypeCount(); i++) {
+        if (!getEnumType(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      for (int i = 0; i < getServiceCount(); i++) {
+        if (!getService(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      for (int i = 0; i < getExtensionCount(); i++) {
+        if (!getExtension(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      if (hasOptions()) {
+        if (!getOptions().isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBytes(2, getPackageBytes());
+      }
+      for (int i = 0; i < dependency_.size(); i++) {
+        output.writeBytes(3, dependency_.getByteString(i));
+      }
+      for (int i = 0; i < messageType_.size(); i++) {
+        output.writeMessage(4, messageType_.get(i));
+      }
+      for (int i = 0; i < enumType_.size(); i++) {
+        output.writeMessage(5, enumType_.get(i));
+      }
+      for (int i = 0; i < service_.size(); i++) {
+        output.writeMessage(6, service_.get(i));
+      }
+      for (int i = 0; i < extension_.size(); i++) {
+        output.writeMessage(7, extension_.get(i));
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeMessage(8, options_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeMessage(9, sourceCodeInfo_);
+      }
+      for (int i = 0; i < publicDependency_.size(); i++) {
+        output.writeInt32(10, publicDependency_.get(i));
+      }
+      for (int i = 0; i < weakDependency_.size(); i++) {
+        output.writeInt32(11, weakDependency_.get(i));
+      }
+      getUnknownFields().writeTo(output);
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(2, getPackageBytes());
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < dependency_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeBytesSizeNoTag(dependency_.getByteString(i));
+        }
+        size += dataSize;
+        size += 1 * getDependencyList().size();
+      }
+      for (int i = 0; i < messageType_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, messageType_.get(i));
+      }
+      for (int i = 0; i < enumType_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, enumType_.get(i));
+      }
+      for (int i = 0; i < service_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, service_.get(i));
+      }
+      for (int i = 0; i < extension_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, extension_.get(i));
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, options_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(9, sourceCodeInfo_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < publicDependency_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(publicDependency_.get(i));
+        }
+        size += dataSize;
+        size += 1 * getPublicDependencyList().size();
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < weakDependency_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(weakDependency_.get(i));
+        }
+        size += dataSize;
+        size += 1 * getWeakDependencyList().size();
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FileDescriptorProto prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code google.protobuf.FileDescriptorProto}
+     *
+     * <pre>
+     * Describes a complete .proto file.
+     * </pre>
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.FileDescriptorProto.class, com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder.class);
+      }
+
+      // Construct using com.google.protobuf.DescriptorProtos.FileDescriptorProto.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getMessageTypeFieldBuilder();
+          getEnumTypeFieldBuilder();
+          getServiceFieldBuilder();
+          getExtensionFieldBuilder();
+          getOptionsFieldBuilder();
+          getSourceCodeInfoFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        name_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        package_ = "";
+        bitField0_ = (bitField0_ & ~0x00000002);
+        dependency_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        publicDependency_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000008);
+        weakDependency_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000010);
+        if (messageTypeBuilder_ == null) {
+          messageType_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000020);
+        } else {
+          messageTypeBuilder_.clear();
+        }
+        if (enumTypeBuilder_ == null) {
+          enumType_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000040);
+        } else {
+          enumTypeBuilder_.clear();
+        }
+        if (serviceBuilder_ == null) {
+          service_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000080);
+        } else {
+          serviceBuilder_.clear();
+        }
+        if (extensionBuilder_ == null) {
+          extension_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000100);
+        } else {
+          extensionBuilder_.clear();
+        }
+        if (optionsBuilder_ == null) {
+          options_ = com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance();
+        } else {
+          optionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000200);
+        if (sourceCodeInfoBuilder_ == null) {
+          sourceCodeInfo_ = com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance();
+        } else {
+          sourceCodeInfoBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000400);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_descriptor;
+      }
+
+      public com.google.protobuf.DescriptorProtos.FileDescriptorProto getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDefaultInstance();
+      }
+
+      public com.google.protobuf.DescriptorProtos.FileDescriptorProto build() {
+        com.google.protobuf.DescriptorProtos.FileDescriptorProto result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public com.google.protobuf.DescriptorProtos.FileDescriptorProto buildPartial() {
+        com.google.protobuf.DescriptorProtos.FileDescriptorProto result = new com.google.protobuf.DescriptorProtos.FileDescriptorProto(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.name_ = name_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.package_ = package_;
+        if (((bitField0_ & 0x00000004) == 0x00000004)) {
+          dependency_ = new com.google.protobuf.UnmodifiableLazyStringList(
+              dependency_);
+          bitField0_ = (bitField0_ & ~0x00000004);
+        }
+        result.dependency_ = dependency_;
+        if (((bitField0_ & 0x00000008) == 0x00000008)) {
+          publicDependency_ = java.util.Collections.unmodifiableList(publicDependency_);
+          bitField0_ = (bitField0_ & ~0x00000008);
+        }
+        result.publicDependency_ = publicDependency_;
+        if (((bitField0_ & 0x00000010) == 0x00000010)) {
+          weakDependency_ = java.util.Collections.unmodifiableList(weakDependency_);
+          bitField0_ = (bitField0_ & ~0x00000010);
+        }
+        result.weakDependency_ = weakDependency_;
+        if (messageTypeBuilder_ == null) {
+          if (((bitField0_ & 0x00000020) == 0x00000020)) {
+            messageType_ = java.util.Collections.unmodifiableList(messageType_);
+            bitField0_ = (bitField0_ & ~0x00000020);
+          }
+          result.messageType_ = messageType_;
+        } else {
+          result.messageType_ = messageTypeBuilder_.build();
+        }
+        if (enumTypeBuilder_ == null) {
+          if (((bitField0_ & 0x00000040) == 0x00000040)) {
+            enumType_ = java.util.Collections.unmodifiableList(enumType_);
+            bitField0_ = (bitField0_ & ~0x00000040);
+          }
+          result.enumType_ = enumType_;
+        } else {
+          result.enumType_ = enumTypeBuilder_.build();
+        }
+        if (serviceBuilder_ == null) {
+          if (((bitField0_ & 0x00000080) == 0x00000080)) {
+            service_ = java.util.Collections.unmodifiableList(service_);
+            bitField0_ = (bitField0_ & ~0x00000080);
+          }
+          result.service_ = service_;
+        } else {
+          result.service_ = serviceBuilder_.build();
+        }
+        if (extensionBuilder_ == null) {
+          if (((bitField0_ & 0x00000100) == 0x00000100)) {
+            extension_ = java.util.Collections.unmodifiableList(extension_);
+            bitField0_ = (bitField0_ & ~0x00000100);
+          }
+          result.extension_ = extension_;
+        } else {
+          result.extension_ = extensionBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        if (optionsBuilder_ == null) {
+          result.options_ = options_;
+        } else {
+          result.options_ = optionsBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        if (sourceCodeInfoBuilder_ == null) {
+          result.sourceCodeInfo_ = sourceCodeInfo_;
+        } else {
+          result.sourceCodeInfo_ = sourceCodeInfoBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.FileDescriptorProto) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.FileDescriptorProto)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FileDescriptorProto other) {
+        if (other == com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDefaultInstance()) return this;
+        if (other.hasName()) {
+          bitField0_ |= 0x00000001;
+          name_ = other.name_;
+          onChanged();
+        }
+        if (other.hasPackage()) {
+          bitField0_ |= 0x00000002;
+          package_ = other.package_;
+          onChanged();
+        }
+        if (!other.dependency_.isEmpty()) {
+          if (dependency_.isEmpty()) {
+            dependency_ = other.dependency_;
+            bitField0_ = (bitField0_ & ~0x00000004);
+          } else {
+            ensureDependencyIsMutable();
+            dependency_.addAll(other.dependency_);
+          }
+          onChanged();
+        }
+        if (!other.publicDependency_.isEmpty()) {
+          if (publicDependency_.isEmpty()) {
+            publicDependency_ = other.publicDependency_;
+            bitField0_ = (bitField0_ & ~0x00000008);
+          } else {
+            ensurePublicDependencyIsMutable();
+            publicDependency_.addAll(other.publicDependency_);
+          }
+          onChanged();
+        }
+        if (!other.weakDependency_.isEmpty()) {
+          if (weakDependency_.isEmpty()) {
+            weakDependency_ = other.weakDependency_;
+            bitField0_ = (bitField0_ & ~0x00000010);
+          } else {
+            ensureWeakDependencyIsMutable();
+            weakDependency_.addAll(other.weakDependency_);
+          }
+          onChanged();
+        }
+        if (messageTypeBuilder_ == null) {
+          if (!other.messageType_.isEmpty()) {
+            if (messageType_.isEmpty()) {
+              messageType_ = other.messageType_;
+              bitField0_ = (bitField0_ & ~0x00000020);
+            } else {
+              ensureMessageTypeIsMutable();
+              messageType_.addAll(other.messageType_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.messageType_.isEmpty()) {
+            if (messageTypeBuilder_.isEmpty()) {
+              messageTypeBuilder_.dispose();
+              messageTypeBuilder_ = null;
+              messageType_ = other.messageType_;
+              bitField0_ = (bitField0_ & ~0x00000020);
+              messageTypeBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getMessageTypeFieldBuilder() : null;
+            } else {
+              messageTypeBuilder_.addAllMessages(other.messageType_);
+            }
+          }
+        }
+        if (enumTypeBuilder_ == null) {
+          if (!other.enumType_.isEmpty()) {
+            if (enumType_.isEmpty()) {
+              enumType_ = other.enumType_;
+              bitField0_ = (bitField0_ & ~0x00000040);
+            } else {
+              ensureEnumTypeIsMutable();
+              enumType_.addAll(other.enumType_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.enumType_.isEmpty()) {
+            if (enumTypeBuilder_.isEmpty()) {
+              enumTypeBuilder_.dispose();
+              enumTypeBuilder_ = null;
+              enumType_ = other.enumType_;
+              bitField0_ = (bitField0_ & ~0x00000040);
+              enumTypeBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getEnumTypeFieldBuilder() : null;
+            } else {
+              enumTypeBuilder_.addAllMessages(other.enumType_);
+            }
+          }
+        }
+        if (serviceBuilder_ == null) {
+          if (!other.service_.isEmpty()) {
+            if (service_.isEmpty()) {
+              service_ = other.service_;
+              bitField0_ = (bitField0_ & ~0x00000080);
+            } else {
+              ensureServiceIsMutable();
+              service_.addAll(other.service_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.service_.isEmpty()) {
+            if (serviceBuilder_.isEmpty()) {
+              serviceBuilder_.dispose();
+              serviceBuilder_ = null;
+              service_ = other.service_;
+              bitField0_ = (bitField0_ & ~0x00000080);
+              serviceBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getServiceFieldBuilder() : null;
+            } else {
+              serviceBuilder_.addAllMessages(other.service_);
+            }
+          }
+        }
+        if (extensionBuilder_ == null) {
+          if (!other.extension_.isEmpty()) {
+            if (extension_.isEmpty()) {
+              extension_ = other.extension_;
+              bitField0_ = (bitField0_ & ~0x00000100);
+            } else {
+              ensureExtensionIsMutable();
+              extension_.addAll(other.extension_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.extension_.isEmpty()) {
+            if (extensionBuilder_.isEmpty()) {
+              extensionBuilder_.dispose();
+              extensionBuilder_ = null;
+              extension_ = other.extension_;
+              bitField0_ = (bitField0_ & ~0x00000100);
+              extensionBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getExtensionFieldBuilder() : null;
+            } else {
+              extensionBuilder_.addAllMessages(other.extension_);
+            }
+          }
+        }
+        if (other.hasOptions()) {
+          mergeOptions(other.getOptions());
+        }
+        if (other.hasSourceCodeInfo()) {
+          mergeSourceCodeInfo(other.getSourceCodeInfo());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+
+      public final boolean isInitialized() {
+        for (int i = 0; i < getMessageTypeCount(); i++) {
+          if (!getMessageType(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        for (int i = 0; i < getEnumTypeCount(); i++) {
+          if (!getEnumType(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        for (int i = 0; i < getServiceCount(); i++) {
+          if (!getService(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        for (int i = 0; i < getExtensionCount(); i++) {
+          if (!getExtension(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        if (hasOptions()) {
+          if (!getOptions().isInitialized()) {
+            
+            return false;
+          }
+        }
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.DescriptorProtos.FileDescriptorProto parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.google.protobuf.DescriptorProtos.FileDescriptorProto) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
       private int bitField0_;
-      
+
       // optional string name = 1;
       private java.lang.Object name_ = "";
+      /**
+       * <code>optional string name = 1;</code>
+       *
+       * <pre>
+       * file name, relative to root of source tree
+       * </pre>
+       */
       public boolean hasName() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public String getName() {
+      /**
+       * <code>optional string name = 1;</code>
+       *
+       * <pre>
+       * file name, relative to root of source tree
+       * </pre>
+       */
+      public java.lang.String getName() {
         java.lang.Object ref = name_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           name_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setName(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       *
+       * <pre>
+       * file name, relative to root of source tree
+       * </pre>
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       *
+       * <pre>
+       * file name, relative to root of source tree
+       * </pre>
+       */
+      public Builder setName(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -1677,4 +2436,11 @@
         return this;
       }
+      /**
+       * <code>optional string name = 1;</code>
+       *
+       * <pre>
+       * file name, relative to root of source tree
+       * </pre>
+       */
       public Builder clearName() {
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -1683,26 +2449,81 @@
         return this;
       }
-      void setName(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000001;
+      /**
+       * <code>optional string name = 1;</code>
+       *
+       * <pre>
+       * file name, relative to root of source tree
+       * </pre>
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
         name_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // optional string package = 2;
       private java.lang.Object package_ = "";
+      /**
+       * <code>optional string package = 2;</code>
+       *
+       * <pre>
+       * e.g. "foo", "foo.bar", etc.
+       * </pre>
+       */
       public boolean hasPackage() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
-      public String getPackage() {
+      /**
+       * <code>optional string package = 2;</code>
+       *
+       * <pre>
+       * e.g. "foo", "foo.bar", etc.
+       * </pre>
+       */
+      public java.lang.String getPackage() {
         java.lang.Object ref = package_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           package_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setPackage(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string package = 2;</code>
+       *
+       * <pre>
+       * e.g. "foo", "foo.bar", etc.
+       * </pre>
+       */
+      public com.google.protobuf.ByteString
+          getPackageBytes() {
+        java.lang.Object ref = package_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          package_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string package = 2;</code>
+       *
+       * <pre>
+       * e.g. "foo", "foo.bar", etc.
+       * </pre>
+       */
+      public Builder setPackage(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -1713,4 +2534,11 @@
         return this;
       }
+      /**
+       * <code>optional string package = 2;</code>
+       *
+       * <pre>
+       * e.g. "foo", "foo.bar", etc.
+       * </pre>
+       */
       public Builder clearPackage() {
         bitField0_ = (bitField0_ & ~0x00000002);
@@ -1719,10 +2547,22 @@
         return this;
       }
-      void setPackage(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000002;
+      /**
+       * <code>optional string package = 2;</code>
+       *
+       * <pre>
+       * e.g. "foo", "foo.bar", etc.
+       * </pre>
+       */
+      public Builder setPackageBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000002;
         package_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // repeated string dependency = 3;
       private com.google.protobuf.LazyStringList dependency_ = com.google.protobuf.LazyStringArrayList.EMPTY;
@@ -1733,16 +2573,55 @@
          }
       }
-      public java.util.List<String>
+      /**
+       * <code>repeated string dependency = 3;</code>
+       *
+       * <pre>
+       * Names of files imported by this file.
+       * </pre>
+       */
+      public java.util.List<java.lang.String>
           getDependencyList() {
         return java.util.Collections.unmodifiableList(dependency_);
       }
+      /**
+       * <code>repeated string dependency = 3;</code>
+       *
+       * <pre>
+       * Names of files imported by this file.
+       * </pre>
+       */
       public int getDependencyCount() {
         return dependency_.size();
       }
-      public String getDependency(int index) {
+      /**
+       * <code>repeated string dependency = 3;</code>
+       *
+       * <pre>
+       * Names of files imported by this file.
+       * </pre>
+       */
+      public java.lang.String getDependency(int index) {
         return dependency_.get(index);
       }
+      /**
+       * <code>repeated string dependency = 3;</code>
+       *
+       * <pre>
+       * Names of files imported by this file.
+       * </pre>
+       */
+      public com.google.protobuf.ByteString
+          getDependencyBytes(int index) {
+        return dependency_.getByteString(index);
+      }
+      /**
+       * <code>repeated string dependency = 3;</code>
+       *
+       * <pre>
+       * Names of files imported by this file.
+       * </pre>
+       */
       public Builder setDependency(
-          int index, String value) {
+          int index, java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -1753,5 +2632,13 @@
         return this;
       }
-      public Builder addDependency(String value) {
+      /**
+       * <code>repeated string dependency = 3;</code>
+       *
+       * <pre>
+       * Names of files imported by this file.
+       * </pre>
+       */
+      public Builder addDependency(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -1762,6 +2649,13 @@
         return this;
       }
+      /**
+       * <code>repeated string dependency = 3;</code>
+       *
+       * <pre>
+       * Names of files imported by this file.
+       * </pre>
+       */
       public Builder addAllDependency(
-          java.lang.Iterable<String> values) {
+          java.lang.Iterable<java.lang.String> values) {
         ensureDependencyIsMutable();
         super.addAll(values, dependency_);
@@ -1769,4 +2663,11 @@
         return this;
       }
+      /**
+       * <code>repeated string dependency = 3;</code>
+       *
+       * <pre>
+       * Names of files imported by this file.
+       * </pre>
+       */
       public Builder clearDependency() {
         dependency_ = com.google.protobuf.LazyStringArrayList.EMPTY;
@@ -1775,12 +2676,24 @@
         return this;
       }
-      void addDependency(com.google.protobuf.ByteString value) {
-        ensureDependencyIsMutable();
+      /**
+       * <code>repeated string dependency = 3;</code>
+       *
+       * <pre>
+       * Names of files imported by this file.
+       * </pre>
+       */
+      public Builder addDependencyBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureDependencyIsMutable();
         dependency_.add(value);
         onChanged();
-      }
-      
+        return this;
+      }
+
       // repeated int32 public_dependency = 10;
-      private java.util.List<java.lang.Integer> publicDependency_ = java.util.Collections.emptyList();;
+      private java.util.List<java.lang.Integer> publicDependency_ = java.util.Collections.emptyList();
       private void ensurePublicDependencyIsMutable() {
         if (!((bitField0_ & 0x00000008) == 0x00000008)) {
@@ -1789,14 +2702,42 @@
          }
       }
+      /**
+       * <code>repeated int32 public_dependency = 10;</code>
+       *
+       * <pre>
+       * Indexes of the public imported files in the dependency list above.
+       * </pre>
+       */
       public java.util.List<java.lang.Integer>
           getPublicDependencyList() {
         return java.util.Collections.unmodifiableList(publicDependency_);
       }
+      /**
+       * <code>repeated int32 public_dependency = 10;</code>
+       *
+       * <pre>
+       * Indexes of the public imported files in the dependency list above.
+       * </pre>
+       */
       public int getPublicDependencyCount() {
         return publicDependency_.size();
       }
+      /**
+       * <code>repeated int32 public_dependency = 10;</code>
+       *
+       * <pre>
+       * Indexes of the public imported files in the dependency list above.
+       * </pre>
+       */
       public int getPublicDependency(int index) {
         return publicDependency_.get(index);
       }
+      /**
+       * <code>repeated int32 public_dependency = 10;</code>
+       *
+       * <pre>
+       * Indexes of the public imported files in the dependency list above.
+       * </pre>
+       */
       public Builder setPublicDependency(
           int index, int value) {
@@ -1806,4 +2747,11 @@
         return this;
       }
+      /**
+       * <code>repeated int32 public_dependency = 10;</code>
+       *
+       * <pre>
+       * Indexes of the public imported files in the dependency list above.
+       * </pre>
+       */
       public Builder addPublicDependency(int value) {
         ensurePublicDependencyIsMutable();
@@ -1812,4 +2760,11 @@
         return this;
       }
+      /**
+       * <code>repeated int32 public_dependency = 10;</code>
+       *
+       * <pre>
+       * Indexes of the public imported files in the dependency list above.
+       * </pre>
+       */
       public Builder addAllPublicDependency(
           java.lang.Iterable<? extends java.lang.Integer> values) {
@@ -1819,13 +2774,20 @@
         return this;
       }
+      /**
+       * <code>repeated int32 public_dependency = 10;</code>
+       *
+       * <pre>
+       * Indexes of the public imported files in the dependency list above.
+       * </pre>
+       */
       public Builder clearPublicDependency() {
-        publicDependency_ = java.util.Collections.emptyList();;
+        publicDependency_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000008);
         onChanged();
         return this;
       }
-      
+
       // repeated int32 weak_dependency = 11;
-      private java.util.List<java.lang.Integer> weakDependency_ = java.util.Collections.emptyList();;
+      private java.util.List<java.lang.Integer> weakDependency_ = java.util.Collections.emptyList();
       private void ensureWeakDependencyIsMutable() {
         if (!((bitField0_ & 0x00000010) == 0x00000010)) {
@@ -1834,14 +2796,46 @@
          }
       }
+      /**
+       * <code>repeated int32 weak_dependency = 11;</code>
+       *
+       * <pre>
+       * Indexes of the weak imported files in the dependency list.
+       * For Google-internal migration only. Do not use.
+       * </pre>
+       */
       public java.util.List<java.lang.Integer>
           getWeakDependencyList() {
         return java.util.Collections.unmodifiableList(weakDependency_);
       }
+      /**
+       * <code>repeated int32 weak_dependency = 11;</code>
+       *
+       * <pre>
+       * Indexes of the weak imported files in the dependency list.
+       * For Google-internal migration only. Do not use.
+       * </pre>
+       */
       public int getWeakDependencyCount() {
         return weakDependency_.size();
       }
+      /**
+       * <code>repeated int32 weak_dependency = 11;</code>
+       *
+       * <pre>
+       * Indexes of the weak imported files in the dependency list.
+       * For Google-internal migration only. Do not use.
+       * </pre>
+       */
       public int getWeakDependency(int index) {
         return weakDependency_.get(index);
       }
+      /**
+       * <code>repeated int32 weak_dependency = 11;</code>
+       *
+       * <pre>
+       * Indexes of the weak imported files in the dependency list.
+       * For Google-internal migration only. Do not use.
+       * </pre>
+       */
       public Builder setWeakDependency(
           int index, int value) {
@@ -1851,4 +2845,12 @@
         return this;
       }
+      /**
+       * <code>repeated int32 weak_dependency = 11;</code>
+       *
+       * <pre>
+       * Indexes of the weak imported files in the dependency list.
+       * For Google-internal migration only. Do not use.
+       * </pre>
+       */
       public Builder addWeakDependency(int value) {
         ensureWeakDependencyIsMutable();
@@ -1857,4 +2859,12 @@
         return this;
       }
+      /**
+       * <code>repeated int32 weak_dependency = 11;</code>
+       *
+       * <pre>
+       * Indexes of the weak imported files in the dependency list.
+       * For Google-internal migration only. Do not use.
+       * </pre>
+       */
       public Builder addAllWeakDependency(
           java.lang.Iterable<? extends java.lang.Integer> values) {
@@ -1864,11 +2874,19 @@
         return this;
       }
+      /**
+       * <code>repeated int32 weak_dependency = 11;</code>
+       *
+       * <pre>
+       * Indexes of the weak imported files in the dependency list.
+       * For Google-internal migration only. Do not use.
+       * </pre>
+       */
       public Builder clearWeakDependency() {
-        weakDependency_ = java.util.Collections.emptyList();;
+        weakDependency_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000010);
         onChanged();
         return this;
       }
-      
+
       // repeated .google.protobuf.DescriptorProto message_type = 4;
       private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> messageType_ =
@@ -1880,8 +2898,15 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.DescriptorProto, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder, com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> messageTypeBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+       *
+       * <pre>
+       * All top-level definitions in this file.
+       * </pre>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> getMessageTypeList() {
         if (messageTypeBuilder_ == null) {
@@ -1891,4 +2916,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+       *
+       * <pre>
+       * All top-level definitions in this file.
+       * </pre>
+       */
       public int getMessageTypeCount() {
         if (messageTypeBuilder_ == null) {
@@ -1898,4 +2930,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+       *
+       * <pre>
+       * All top-level definitions in this file.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.DescriptorProto getMessageType(int index) {
         if (messageTypeBuilder_ == null) {
@@ -1905,4 +2944,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+       *
+       * <pre>
+       * All top-level definitions in this file.
+       * </pre>
+       */
       public Builder setMessageType(
           int index, com.google.protobuf.DescriptorProtos.DescriptorProto value) {
@@ -1919,4 +2965,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+       *
+       * <pre>
+       * All top-level definitions in this file.
+       * </pre>
+       */
       public Builder setMessageType(
           int index, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) {
@@ -1930,4 +2983,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+       *
+       * <pre>
+       * All top-level definitions in this file.
+       * </pre>
+       */
       public Builder addMessageType(com.google.protobuf.DescriptorProtos.DescriptorProto value) {
         if (messageTypeBuilder_ == null) {
@@ -1943,4 +3003,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+       *
+       * <pre>
+       * All top-level definitions in this file.
+       * </pre>
+       */
       public Builder addMessageType(
           int index, com.google.protobuf.DescriptorProtos.DescriptorProto value) {
@@ -1957,4 +3024,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+       *
+       * <pre>
+       * All top-level definitions in this file.
+       * </pre>
+       */
       public Builder addMessageType(
           com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) {
@@ -1968,4 +3042,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+       *
+       * <pre>
+       * All top-level definitions in this file.
+       * </pre>
+       */
       public Builder addMessageType(
           int index, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) {
@@ -1979,4 +3060,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+       *
+       * <pre>
+       * All top-level definitions in this file.
+       * </pre>
+       */
       public Builder addAllMessageType(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.DescriptorProto> values) {
@@ -1990,4 +3078,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+       *
+       * <pre>
+       * All top-level definitions in this file.
+       * </pre>
+       */
       public Builder clearMessageType() {
         if (messageTypeBuilder_ == null) {
@@ -2000,4 +3095,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+       *
+       * <pre>
+       * All top-level definitions in this file.
+       * </pre>
+       */
       public Builder removeMessageType(int index) {
         if (messageTypeBuilder_ == null) {
@@ -2010,8 +3112,22 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+       *
+       * <pre>
+       * All top-level definitions in this file.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.DescriptorProto.Builder getMessageTypeBuilder(
           int index) {
         return getMessageTypeFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+       *
+       * <pre>
+       * All top-level definitions in this file.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getMessageTypeOrBuilder(
           int index) {
@@ -2021,4 +3137,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+       *
+       * <pre>
+       * All top-level definitions in this file.
+       * </pre>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
            getMessageTypeOrBuilderList() {
@@ -2029,8 +3152,22 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+       *
+       * <pre>
+       * All top-level definitions in this file.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.DescriptorProto.Builder addMessageTypeBuilder() {
         return getMessageTypeFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+       *
+       * <pre>
+       * All top-level definitions in this file.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.DescriptorProto.Builder addMessageTypeBuilder(
           int index) {
@@ -2038,4 +3175,11 @@
             index, com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
+       *
+       * <pre>
+       * All top-level definitions in this file.
+       * </pre>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.Builder> 
            getMessageTypeBuilderList() {
@@ -2056,5 +3200,5 @@
         return messageTypeBuilder_;
       }
-      
+
       // repeated .google.protobuf.EnumDescriptorProto enum_type = 5;
       private java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> enumType_ =
@@ -2066,8 +3210,11 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.EnumDescriptorProto, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> enumTypeBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> getEnumTypeList() {
         if (enumTypeBuilder_ == null) {
@@ -2077,4 +3224,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+       */
       public int getEnumTypeCount() {
         if (enumTypeBuilder_ == null) {
@@ -2084,4 +3234,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index) {
         if (enumTypeBuilder_ == null) {
@@ -2091,4 +3244,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+       */
       public Builder setEnumType(
           int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) {
@@ -2105,4 +3261,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+       */
       public Builder setEnumType(
           int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
@@ -2116,4 +3275,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+       */
       public Builder addEnumType(com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) {
         if (enumTypeBuilder_ == null) {
@@ -2129,4 +3291,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+       */
       public Builder addEnumType(
           int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) {
@@ -2143,4 +3308,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+       */
       public Builder addEnumType(
           com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
@@ -2154,4 +3322,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+       */
       public Builder addEnumType(
           int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
@@ -2165,4 +3336,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+       */
       public Builder addAllEnumType(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProto> values) {
@@ -2176,4 +3350,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+       */
       public Builder clearEnumType() {
         if (enumTypeBuilder_ == null) {
@@ -2186,4 +3363,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+       */
       public Builder removeEnumType(int index) {
         if (enumTypeBuilder_ == null) {
@@ -2196,8 +3376,14 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder getEnumTypeBuilder(
           int index) {
         return getEnumTypeFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
           int index) {
@@ -2207,4 +3393,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
            getEnumTypeOrBuilderList() {
@@ -2215,8 +3404,14 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder addEnumTypeBuilder() {
         return getEnumTypeFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder addEnumTypeBuilder(
           int index) {
@@ -2224,4 +3419,7 @@
             index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder> 
            getEnumTypeBuilderList() {
@@ -2242,5 +3440,5 @@
         return enumTypeBuilder_;
       }
-      
+
       // repeated .google.protobuf.ServiceDescriptorProto service = 6;
       private java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> service_ =
@@ -2252,8 +3450,11 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.ServiceDescriptorProto, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder> serviceBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> getServiceList() {
         if (serviceBuilder_ == null) {
@@ -2263,4 +3464,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+       */
       public int getServiceCount() {
         if (serviceBuilder_ == null) {
@@ -2270,4 +3474,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+       */
       public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto getService(int index) {
         if (serviceBuilder_ == null) {
@@ -2277,4 +3484,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+       */
       public Builder setService(
           int index, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto value) {
@@ -2291,4 +3501,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+       */
       public Builder setService(
           int index, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) {
@@ -2302,4 +3515,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+       */
       public Builder addService(com.google.protobuf.DescriptorProtos.ServiceDescriptorProto value) {
         if (serviceBuilder_ == null) {
@@ -2315,4 +3531,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+       */
       public Builder addService(
           int index, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto value) {
@@ -2329,4 +3548,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+       */
       public Builder addService(
           com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) {
@@ -2340,4 +3562,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+       */
       public Builder addService(
           int index, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) {
@@ -2351,4 +3576,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+       */
       public Builder addAllService(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> values) {
@@ -2362,4 +3590,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+       */
       public Builder clearService() {
         if (serviceBuilder_ == null) {
@@ -2372,4 +3603,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+       */
       public Builder removeService(int index) {
         if (serviceBuilder_ == null) {
@@ -2382,8 +3616,14 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+       */
       public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder getServiceBuilder(
           int index) {
         return getServiceFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+       */
       public com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder getServiceOrBuilder(
           int index) {
@@ -2393,4 +3633,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder> 
            getServiceOrBuilderList() {
@@ -2401,8 +3644,14 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+       */
       public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder addServiceBuilder() {
         return getServiceFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+       */
       public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder addServiceBuilder(
           int index) {
@@ -2410,4 +3659,7 @@
             index, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder> 
            getServiceBuilderList() {
@@ -2428,5 +3680,5 @@
         return serviceBuilder_;
       }
-      
+
       // repeated .google.protobuf.FieldDescriptorProto extension = 7;
       private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> extension_ =
@@ -2438,8 +3690,11 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.FieldDescriptorProto, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> extensionBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getExtensionList() {
         if (extensionBuilder_ == null) {
@@ -2449,4 +3704,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+       */
       public int getExtensionCount() {
         if (extensionBuilder_ == null) {
@@ -2456,4 +3714,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index) {
         if (extensionBuilder_ == null) {
@@ -2463,4 +3724,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+       */
       public Builder setExtension(
           int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
@@ -2477,4 +3741,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+       */
       public Builder setExtension(
           int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
@@ -2488,4 +3755,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+       */
       public Builder addExtension(com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
         if (extensionBuilder_ == null) {
@@ -2501,4 +3771,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+       */
       public Builder addExtension(
           int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
@@ -2515,4 +3788,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+       */
       public Builder addExtension(
           com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
@@ -2526,4 +3802,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+       */
       public Builder addExtension(
           int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
@@ -2537,4 +3816,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+       */
       public Builder addAllExtension(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProto> values) {
@@ -2548,4 +3830,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+       */
       public Builder clearExtension() {
         if (extensionBuilder_ == null) {
@@ -2558,4 +3843,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+       */
       public Builder removeExtension(int index) {
         if (extensionBuilder_ == null) {
@@ -2568,8 +3856,14 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder getExtensionBuilder(
           int index) {
         return getExtensionFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
           int index) {
@@ -2579,4 +3873,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
            getExtensionOrBuilderList() {
@@ -2587,8 +3884,14 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder addExtensionBuilder() {
         return getExtensionFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder addExtensionBuilder(
           int index) {
@@ -2596,4 +3899,7 @@
             index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder> 
            getExtensionBuilderList() {
@@ -2614,12 +3920,18 @@
         return extensionBuilder_;
       }
-      
+
       // optional .google.protobuf.FileOptions options = 8;
       private com.google.protobuf.DescriptorProtos.FileOptions options_ = com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
           com.google.protobuf.DescriptorProtos.FileOptions, com.google.protobuf.DescriptorProtos.FileOptions.Builder, com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder> optionsBuilder_;
+      /**
+       * <code>optional .google.protobuf.FileOptions options = 8;</code>
+       */
       public boolean hasOptions() {
         return ((bitField0_ & 0x00000200) == 0x00000200);
       }
+      /**
+       * <code>optional .google.protobuf.FileOptions options = 8;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FileOptions getOptions() {
         if (optionsBuilder_ == null) {
@@ -2629,4 +3941,7 @@
         }
       }
+      /**
+       * <code>optional .google.protobuf.FileOptions options = 8;</code>
+       */
       public Builder setOptions(com.google.protobuf.DescriptorProtos.FileOptions value) {
         if (optionsBuilder_ == null) {
@@ -2642,4 +3957,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.FileOptions options = 8;</code>
+       */
       public Builder setOptions(
           com.google.protobuf.DescriptorProtos.FileOptions.Builder builderForValue) {
@@ -2653,4 +3971,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.FileOptions options = 8;</code>
+       */
       public Builder mergeOptions(com.google.protobuf.DescriptorProtos.FileOptions value) {
         if (optionsBuilder_ == null) {
@@ -2669,4 +3990,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.FileOptions options = 8;</code>
+       */
       public Builder clearOptions() {
         if (optionsBuilder_ == null) {
@@ -2679,4 +4003,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.FileOptions options = 8;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FileOptions.Builder getOptionsBuilder() {
         bitField0_ |= 0x00000200;
@@ -2684,4 +4011,7 @@
         return getOptionsFieldBuilder().getBuilder();
       }
+      /**
+       * <code>optional .google.protobuf.FileOptions options = 8;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder getOptionsOrBuilder() {
         if (optionsBuilder_ != null) {
@@ -2691,4 +4021,7 @@
         }
       }
+      /**
+       * <code>optional .google.protobuf.FileOptions options = 8;</code>
+       */
       private com.google.protobuf.SingleFieldBuilder<
           com.google.protobuf.DescriptorProtos.FileOptions, com.google.protobuf.DescriptorProtos.FileOptions.Builder, com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder> 
@@ -2704,12 +4037,32 @@
         return optionsBuilder_;
       }
-      
+
       // optional .google.protobuf.SourceCodeInfo source_code_info = 9;
       private com.google.protobuf.DescriptorProtos.SourceCodeInfo sourceCodeInfo_ = com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
           com.google.protobuf.DescriptorProtos.SourceCodeInfo, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder, com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder> sourceCodeInfoBuilder_;
+      /**
+       * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
+       *
+       * <pre>
+       * This field contains optional information about the original source code.
+       * You may safely remove this entire field whithout harming runtime
+       * functionality of the descriptors -- the information is needed only by
+       * development tools.
+       * </pre>
+       */
       public boolean hasSourceCodeInfo() {
         return ((bitField0_ & 0x00000400) == 0x00000400);
       }
+      /**
+       * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
+       *
+       * <pre>
+       * This field contains optional information about the original source code.
+       * You may safely remove this entire field whithout harming runtime
+       * functionality of the descriptors -- the information is needed only by
+       * development tools.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.SourceCodeInfo getSourceCodeInfo() {
         if (sourceCodeInfoBuilder_ == null) {
@@ -2719,4 +4072,14 @@
         }
       }
+      /**
+       * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
+       *
+       * <pre>
+       * This field contains optional information about the original source code.
+       * You may safely remove this entire field whithout harming runtime
+       * functionality of the descriptors -- the information is needed only by
+       * development tools.
+       * </pre>
+       */
       public Builder setSourceCodeInfo(com.google.protobuf.DescriptorProtos.SourceCodeInfo value) {
         if (sourceCodeInfoBuilder_ == null) {
@@ -2732,4 +4095,14 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
+       *
+       * <pre>
+       * This field contains optional information about the original source code.
+       * You may safely remove this entire field whithout harming runtime
+       * functionality of the descriptors -- the information is needed only by
+       * development tools.
+       * </pre>
+       */
       public Builder setSourceCodeInfo(
           com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder builderForValue) {
@@ -2743,4 +4116,14 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
+       *
+       * <pre>
+       * This field contains optional information about the original source code.
+       * You may safely remove this entire field whithout harming runtime
+       * functionality of the descriptors -- the information is needed only by
+       * development tools.
+       * </pre>
+       */
       public Builder mergeSourceCodeInfo(com.google.protobuf.DescriptorProtos.SourceCodeInfo value) {
         if (sourceCodeInfoBuilder_ == null) {
@@ -2759,4 +4142,14 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
+       *
+       * <pre>
+       * This field contains optional information about the original source code.
+       * You may safely remove this entire field whithout harming runtime
+       * functionality of the descriptors -- the information is needed only by
+       * development tools.
+       * </pre>
+       */
       public Builder clearSourceCodeInfo() {
         if (sourceCodeInfoBuilder_ == null) {
@@ -2769,4 +4162,14 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
+       *
+       * <pre>
+       * This field contains optional information about the original source code.
+       * You may safely remove this entire field whithout harming runtime
+       * functionality of the descriptors -- the information is needed only by
+       * development tools.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder getSourceCodeInfoBuilder() {
         bitField0_ |= 0x00000400;
@@ -2774,4 +4177,14 @@
         return getSourceCodeInfoFieldBuilder().getBuilder();
       }
+      /**
+       * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
+       *
+       * <pre>
+       * This field contains optional information about the original source code.
+       * You may safely remove this entire field whithout harming runtime
+       * functionality of the descriptors -- the information is needed only by
+       * development tools.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder getSourceCodeInfoOrBuilder() {
         if (sourceCodeInfoBuilder_ != null) {
@@ -2781,4 +4194,14 @@
         }
       }
+      /**
+       * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
+       *
+       * <pre>
+       * This field contains optional information about the original source code.
+       * You may safely remove this entire field whithout harming runtime
+       * functionality of the descriptors -- the information is needed only by
+       * development tools.
+       * </pre>
+       */
       private com.google.protobuf.SingleFieldBuilder<
           com.google.protobuf.DescriptorProtos.SourceCodeInfo, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder, com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder> 
@@ -2794,166 +4217,496 @@
         return sourceCodeInfoBuilder_;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:google.protobuf.FileDescriptorProto)
     }
-    
+
     static {
       defaultInstance = new FileDescriptorProto(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:google.protobuf.FileDescriptorProto)
   }
-  
+
   public interface DescriptorProtoOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
-    
+
     // optional string name = 1;
+    /**
+     * <code>optional string name = 1;</code>
+     */
     boolean hasName();
-    String getName();
-    
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    java.lang.String getName();
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
     // repeated .google.protobuf.FieldDescriptorProto field = 2;
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> 
         getFieldList();
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+     */
     com.google.protobuf.DescriptorProtos.FieldDescriptorProto getField(int index);
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+     */
     int getFieldCount();
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
         getFieldOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+     */
     com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getFieldOrBuilder(
         int index);
-    
+
     // repeated .google.protobuf.FieldDescriptorProto extension = 6;
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> 
         getExtensionList();
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+     */
     com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index);
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+     */
     int getExtensionCount();
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
         getExtensionOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+     */
     com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
         int index);
-    
+
     // repeated .google.protobuf.DescriptorProto nested_type = 3;
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> 
         getNestedTypeList();
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+     */
     com.google.protobuf.DescriptorProtos.DescriptorProto getNestedType(int index);
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+     */
     int getNestedTypeCount();
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
         getNestedTypeOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+     */
     com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getNestedTypeOrBuilder(
         int index);
-    
+
     // repeated .google.protobuf.EnumDescriptorProto enum_type = 4;
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> 
         getEnumTypeList();
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+     */
     com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index);
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+     */
     int getEnumTypeCount();
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
         getEnumTypeOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+     */
     com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
         int index);
-    
+
     // repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange> 
         getExtensionRangeList();
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+     */
     com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange getExtensionRange(int index);
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+     */
     int getExtensionRangeCount();
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder> 
         getExtensionRangeOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+     */
     com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder getExtensionRangeOrBuilder(
         int index);
-    
+
     // optional .google.protobuf.MessageOptions options = 7;
+    /**
+     * <code>optional .google.protobuf.MessageOptions options = 7;</code>
+     */
     boolean hasOptions();
+    /**
+     * <code>optional .google.protobuf.MessageOptions options = 7;</code>
+     */
     com.google.protobuf.DescriptorProtos.MessageOptions getOptions();
+    /**
+     * <code>optional .google.protobuf.MessageOptions options = 7;</code>
+     */
     com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder getOptionsOrBuilder();
   }
+  /**
+   * Protobuf type {@code google.protobuf.DescriptorProto}
+   *
+   * <pre>
+   * Describes a message type.
+   * </pre>
+   */
   public static final class DescriptorProto extends
       com.google.protobuf.GeneratedMessage
       implements DescriptorProtoOrBuilder {
     // Use DescriptorProto.newBuilder() to construct.
-    private DescriptorProto(Builder builder) {
+    private DescriptorProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
       super(builder);
-    }
-    private DescriptorProto(boolean noInit) {}
-    
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private DescriptorProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
     private static final DescriptorProto defaultInstance;
     public static DescriptorProto getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public DescriptorProto getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DescriptorProto(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              name_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+                field_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.FieldDescriptorProto>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              field_.add(input.readMessage(com.google.protobuf.DescriptorProtos.FieldDescriptorProto.PARSER, extensionRegistry));
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
+                nestedType_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.DescriptorProto>();
+                mutable_bitField0_ |= 0x00000008;
+              }
+              nestedType_.add(input.readMessage(com.google.protobuf.DescriptorProtos.DescriptorProto.PARSER, extensionRegistry));
+              break;
+            }
+            case 34: {
+              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
+                enumType_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.EnumDescriptorProto>();
+                mutable_bitField0_ |= 0x00000010;
+              }
+              enumType_.add(input.readMessage(com.google.protobuf.DescriptorProtos.EnumDescriptorProto.PARSER, extensionRegistry));
+              break;
+            }
+            case 42: {
+              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
+                extensionRange_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange>();
+                mutable_bitField0_ |= 0x00000020;
+              }
+              extensionRange_.add(input.readMessage(com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.PARSER, extensionRegistry));
+              break;
+            }
+            case 50: {
+              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+                extension_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.FieldDescriptorProto>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              extension_.add(input.readMessage(com.google.protobuf.DescriptorProtos.FieldDescriptorProto.PARSER, extensionRegistry));
+              break;
+            }
+            case 58: {
+              com.google.protobuf.DescriptorProtos.MessageOptions.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000002) == 0x00000002)) {
+                subBuilder = options_.toBuilder();
+              }
+              options_ = input.readMessage(com.google.protobuf.DescriptorProtos.MessageOptions.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(options_);
+                options_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000002;
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+          field_ = java.util.Collections.unmodifiableList(field_);
+        }
+        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
+          nestedType_ = java.util.Collections.unmodifiableList(nestedType_);
+        }
+        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
+          enumType_ = java.util.Collections.unmodifiableList(enumType_);
+        }
+        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
+          extensionRange_ = java.util.Collections.unmodifiableList(extensionRange_);
+        }
+        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+          extension_ = java.util.Collections.unmodifiableList(extension_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
       return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_descriptor;
     }
-    
+
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_fieldAccessorTable;
-    }
-    
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.protobuf.DescriptorProtos.DescriptorProto.class, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<DescriptorProto> PARSER =
+        new com.google.protobuf.AbstractParser<DescriptorProto>() {
+      public DescriptorProto parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DescriptorProto(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DescriptorProto> getParserForType() {
+      return PARSER;
+    }
+
     public interface ExtensionRangeOrBuilder
         extends com.google.protobuf.MessageOrBuilder {
-      
+
       // optional int32 start = 1;
+      /**
+       * <code>optional int32 start = 1;</code>
+       */
       boolean hasStart();
+      /**
+       * <code>optional int32 start = 1;</code>
+       */
       int getStart();
-      
+
       // optional int32 end = 2;
+      /**
+       * <code>optional int32 end = 2;</code>
+       */
       boolean hasEnd();
+      /**
+       * <code>optional int32 end = 2;</code>
+       */
       int getEnd();
     }
+    /**
+     * Protobuf type {@code google.protobuf.DescriptorProto.ExtensionRange}
+     */
     public static final class ExtensionRange extends
         com.google.protobuf.GeneratedMessage
         implements ExtensionRangeOrBuilder {
       // Use ExtensionRange.newBuilder() to construct.
-      private ExtensionRange(Builder builder) {
+      private ExtensionRange(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
         super(builder);
-      }
-      private ExtensionRange(boolean noInit) {}
-      
+        this.unknownFields = builder.getUnknownFields();
+      }
+      private ExtensionRange(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
       private static final ExtensionRange defaultInstance;
       public static ExtensionRange getDefaultInstance() {
         return defaultInstance;
       }
-      
+
       public ExtensionRange getDefaultInstanceForType() {
         return defaultInstance;
       }
-      
+
+      private final com.google.protobuf.UnknownFieldSet unknownFields;
+      @java.lang.Override
+      public final com.google.protobuf.UnknownFieldSet
+          getUnknownFields() {
+        return this.unknownFields;
+      }
+      private ExtensionRange(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        initFields();
+        int mutable_bitField0_ = 0;
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+            com.google.protobuf.UnknownFieldSet.newBuilder();
+        try {
+          boolean done = false;
+          while (!done) {
+            int tag = input.readTag();
+            switch (tag) {
+              case 0:
+                done = true;
+                break;
+              default: {
+                if (!parseUnknownField(input, unknownFields,
+                                       extensionRegistry, tag)) {
+                  done = true;
+                }
+                break;
+              }
+              case 8: {
+                bitField0_ |= 0x00000001;
+                start_ = input.readInt32();
+                break;
+              }
+              case 16: {
+                bitField0_ |= 0x00000002;
+                end_ = input.readInt32();
+                break;
+              }
+            }
+          }
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          throw e.setUnfinishedMessage(this);
+        } catch (java.io.IOException e) {
+          throw new com.google.protobuf.InvalidProtocolBufferException(
+              e.getMessage()).setUnfinishedMessage(this);
+        } finally {
+          this.unknownFields = unknownFields.build();
+          makeExtensionsImmutable();
+        }
+      }
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
         return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor;
       }
-      
+
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable;
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.class, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder.class);
+      }
+
+      public static com.google.protobuf.Parser<ExtensionRange> PARSER =
+          new com.google.protobuf.AbstractParser<ExtensionRange>() {
+        public ExtensionRange parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new ExtensionRange(input, extensionRegistry);
+        }
+      };
+
+      @java.lang.Override
+      public com.google.protobuf.Parser<ExtensionRange> getParserForType() {
+        return PARSER;
+      }
+
       private int bitField0_;
       // optional int32 start = 1;
       public static final int START_FIELD_NUMBER = 1;
       private int start_;
+      /**
+       * <code>optional int32 start = 1;</code>
+       */
       public boolean hasStart() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
+      /**
+       * <code>optional int32 start = 1;</code>
+       */
       public int getStart() {
         return start_;
       }
-      
+
       // optional int32 end = 2;
       public static final int END_FIELD_NUMBER = 2;
       private int end_;
+      /**
+       * <code>optional int32 end = 2;</code>
+       */
       public boolean hasEnd() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
+      /**
+       * <code>optional int32 end = 2;</code>
+       */
       public int getEnd() {
         return end_;
       }
-      
+
       private void initFields() {
         start_ = 0;
@@ -2964,9 +4717,9 @@
         byte isInitialized = memoizedIsInitialized;
         if (isInitialized != -1) return isInitialized == 1;
-        
+
         memoizedIsInitialized = 1;
         return true;
       }
-      
+
       public void writeTo(com.google.protobuf.CodedOutputStream output)
                           throws java.io.IOException {
@@ -2980,10 +4733,10 @@
         getUnknownFields().writeTo(output);
       }
-      
+
       private int memoizedSerializedSize = -1;
       public int getSerializedSize() {
         int size = memoizedSerializedSize;
         if (size != -1) return size;
-      
+
         size = 0;
         if (((bitField0_ & 0x00000001) == 0x00000001)) {
@@ -2999,5 +4752,5 @@
         return size;
       }
-      
+
       private static final long serialVersionUID = 0L;
       @java.lang.Override
@@ -3006,9 +4759,9 @@
         return super.writeReplace();
       }
-      
+
       public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(
           com.google.protobuf.ByteString data)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return newBuilder().mergeFrom(data).buildParsed();
+        return PARSER.parseFrom(data);
       }
       public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(
@@ -3016,10 +4769,9 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return newBuilder().mergeFrom(data, extensionRegistry)
-                 .buildParsed();
+        return PARSER.parseFrom(data, extensionRegistry);
       }
       public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(byte[] data)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return newBuilder().mergeFrom(data).buildParsed();
+        return PARSER.parseFrom(data);
       }
       public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(
@@ -3027,10 +4779,9 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return newBuilder().mergeFrom(data, extensionRegistry)
-                 .buildParsed();
+        return PARSER.parseFrom(data, extensionRegistry);
       }
       public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(java.io.InputStream input)
           throws java.io.IOException {
-        return newBuilder().mergeFrom(input).buildParsed();
+        return PARSER.parseFrom(input);
       }
       public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(
@@ -3038,15 +4789,9 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        return newBuilder().mergeFrom(input, extensionRegistry)
-                 .buildParsed();
+        return PARSER.parseFrom(input, extensionRegistry);
       }
       public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseDelimitedFrom(java.io.InputStream input)
           throws java.io.IOException {
-        Builder builder = newBuilder();
-        if (builder.mergeDelimitedFrom(input)) {
-          return builder.buildParsed();
-        } else {
-          return null;
-        }
+        return PARSER.parseDelimitedFrom(input);
       }
       public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseDelimitedFrom(
@@ -3054,15 +4799,10 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        Builder builder = newBuilder();
-        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-          return builder.buildParsed();
-        } else {
-          return null;
-        }
+        return PARSER.parseDelimitedFrom(input, extensionRegistry);
       }
       public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(
           com.google.protobuf.CodedInputStream input)
           throws java.io.IOException {
-        return newBuilder().mergeFrom(input).buildParsed();
+        return PARSER.parseFrom(input);
       }
       public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(
@@ -3070,8 +4810,7 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        return newBuilder().mergeFrom(input, extensionRegistry)
-                 .buildParsed();
-      }
-      
+        return PARSER.parseFrom(input, extensionRegistry);
+      }
+
       public static Builder newBuilder() { return Builder.create(); }
       public Builder newBuilderForType() { return newBuilder(); }
@@ -3080,5 +4819,5 @@
       }
       public Builder toBuilder() { return newBuilder(this); }
-      
+
       @java.lang.Override
       protected Builder newBuilderForType(
@@ -3087,4 +4826,7 @@
         return builder;
       }
+      /**
+       * Protobuf type {@code google.protobuf.DescriptorProto.ExtensionRange}
+       */
       public static final class Builder extends
           com.google.protobuf.GeneratedMessage.Builder<Builder>
@@ -3094,16 +4836,19 @@
           return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor;
         }
-        
+
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
-          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable;
-        }
-        
+          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable
+              .ensureFieldAccessorsInitialized(
+                  com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.class, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder.class);
+        }
+
         // Construct using com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.newBuilder()
         private Builder() {
           maybeForceBuilderInitialization();
         }
-        
-        private Builder(BuilderParent parent) {
+
+        private Builder(
+            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
           super(parent);
           maybeForceBuilderInitialization();
@@ -3116,5 +4861,5 @@
           return new Builder();
         }
-        
+
         public Builder clear() {
           super.clear();
@@ -3125,18 +4870,18 @@
           return this;
         }
-        
+
         public Builder clone() {
           return create().mergeFrom(buildPartial());
         }
-        
+
         public com.google.protobuf.Descriptors.Descriptor
             getDescriptorForType() {
-          return com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.getDescriptor();
-        }
-        
+          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor;
+        }
+
         public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange getDefaultInstanceForType() {
           return com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.getDefaultInstance();
         }
-        
+
         public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange build() {
           com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange result = buildPartial();
@@ -3146,15 +4891,5 @@
           return result;
         }
-        
-        private com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange buildParsed()
-            throws com.google.protobuf.InvalidProtocolBufferException {
-          com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange result = buildPartial();
-          if (!result.isInitialized()) {
-            throw newUninitializedMessageException(
-              result).asInvalidProtocolBufferException();
-          }
-          return result;
-        }
-        
+
         public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange buildPartial() {
           com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange result = new com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange(this);
@@ -3173,5 +4908,5 @@
           return result;
         }
-        
+
         public Builder mergeFrom(com.google.protobuf.Message other) {
           if (other instanceof com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange) {
@@ -3182,5 +4917,5 @@
           }
         }
-        
+
         public Builder mergeFrom(com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange other) {
           if (other == com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.getDefaultInstance()) return this;
@@ -3194,56 +4929,45 @@
           return this;
         }
-        
+
         public final boolean isInitialized() {
           return true;
         }
-        
+
         public Builder mergeFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
-          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-            com.google.protobuf.UnknownFieldSet.newBuilder(
-              this.getUnknownFields());
-          while (true) {
-            int tag = input.readTag();
-            switch (tag) {
-              case 0:
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
-              default: {
-                if (!parseUnknownField(input, unknownFields,
-                                       extensionRegistry, tag)) {
-                  this.setUnknownFields(unknownFields.build());
-                  onChanged();
-                  return this;
-                }
-                break;
-              }
-              case 8: {
-                bitField0_ |= 0x00000001;
-                start_ = input.readInt32();
-                break;
-              }
-              case 16: {
-                bitField0_ |= 0x00000002;
-                end_ = input.readInt32();
-                break;
-              }
+          com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parsedMessage = null;
+          try {
+            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+            parsedMessage = (com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange) e.getUnfinishedMessage();
+            throw e;
+          } finally {
+            if (parsedMessage != null) {
+              mergeFrom(parsedMessage);
             }
           }
-        }
-        
+          return this;
+        }
         private int bitField0_;
-        
+
         // optional int32 start = 1;
         private int start_ ;
+        /**
+         * <code>optional int32 start = 1;</code>
+         */
         public boolean hasStart() {
           return ((bitField0_ & 0x00000001) == 0x00000001);
         }
+        /**
+         * <code>optional int32 start = 1;</code>
+         */
         public int getStart() {
           return start_;
         }
+        /**
+         * <code>optional int32 start = 1;</code>
+         */
         public Builder setStart(int value) {
           bitField0_ |= 0x00000001;
@@ -3252,4 +4976,7 @@
           return this;
         }
+        /**
+         * <code>optional int32 start = 1;</code>
+         */
         public Builder clearStart() {
           bitField0_ = (bitField0_ & ~0x00000001);
@@ -3258,13 +4985,22 @@
           return this;
         }
-        
+
         // optional int32 end = 2;
         private int end_ ;
+        /**
+         * <code>optional int32 end = 2;</code>
+         */
         public boolean hasEnd() {
           return ((bitField0_ & 0x00000002) == 0x00000002);
         }
+        /**
+         * <code>optional int32 end = 2;</code>
+         */
         public int getEnd() {
           return end_;
         }
+        /**
+         * <code>optional int32 end = 2;</code>
+         */
         public Builder setEnd(int value) {
           bitField0_ |= 0x00000002;
@@ -3273,4 +5009,7 @@
           return this;
         }
+        /**
+         * <code>optional int32 end = 2;</code>
+         */
         public Builder clearEnd() {
           bitField0_ = (bitField0_ & ~0x00000002);
@@ -3279,32 +5018,38 @@
           return this;
         }
-        
+
         // @@protoc_insertion_point(builder_scope:google.protobuf.DescriptorProto.ExtensionRange)
       }
-      
+
       static {
         defaultInstance = new ExtensionRange(true);
         defaultInstance.initFields();
       }
-      
+
       // @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto.ExtensionRange)
     }
-    
+
     private int bitField0_;
     // optional string name = 1;
     public static final int NAME_FIELD_NUMBER = 1;
     private java.lang.Object name_;
+    /**
+     * <code>optional string name = 1;</code>
+     */
     public boolean hasName() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
-    public String getName() {
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    public java.lang.String getName() {
       java.lang.Object ref = name_;
-      if (ref instanceof String) {
-        return (String) ref;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
           name_ = s;
         }
@@ -3312,9 +5057,14 @@
       }
     }
-    private com.google.protobuf.ByteString getNameBytes() {
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    public com.google.protobuf.ByteString
+        getNameBytes() {
       java.lang.Object ref = name_;
-      if (ref instanceof String) {
+      if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
         name_ = b;
         return b;
@@ -3323,123 +5073,207 @@
       }
     }
-    
+
     // repeated .google.protobuf.FieldDescriptorProto field = 2;
     public static final int FIELD_FIELD_NUMBER = 2;
     private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> field_;
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+     */
     public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getFieldList() {
       return field_;
     }
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+     */
     public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
         getFieldOrBuilderList() {
       return field_;
     }
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+     */
     public int getFieldCount() {
       return field_.size();
     }
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+     */
     public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getField(int index) {
       return field_.get(index);
     }
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+     */
     public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getFieldOrBuilder(
         int index) {
       return field_.get(index);
     }
-    
+
     // repeated .google.protobuf.FieldDescriptorProto extension = 6;
     public static final int EXTENSION_FIELD_NUMBER = 6;
     private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> extension_;
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+     */
     public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getExtensionList() {
       return extension_;
     }
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+     */
     public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
         getExtensionOrBuilderList() {
       return extension_;
     }
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+     */
     public int getExtensionCount() {
       return extension_.size();
     }
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+     */
     public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index) {
       return extension_.get(index);
     }
+    /**
+     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+     */
     public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
         int index) {
       return extension_.get(index);
     }
-    
+
     // repeated .google.protobuf.DescriptorProto nested_type = 3;
     public static final int NESTED_TYPE_FIELD_NUMBER = 3;
     private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> nestedType_;
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+     */
     public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> getNestedTypeList() {
       return nestedType_;
     }
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+     */
     public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
         getNestedTypeOrBuilderList() {
       return nestedType_;
     }
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+     */
     public int getNestedTypeCount() {
       return nestedType_.size();
     }
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+     */
     public com.google.protobuf.DescriptorProtos.DescriptorProto getNestedType(int index) {
       return nestedType_.get(index);
     }
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+     */
     public com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getNestedTypeOrBuilder(
         int index) {
       return nestedType_.get(index);
     }
-    
+
     // repeated .google.protobuf.EnumDescriptorProto enum_type = 4;
     public static final int ENUM_TYPE_FIELD_NUMBER = 4;
     private java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> enumType_;
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+     */
     public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> getEnumTypeList() {
       return enumType_;
     }
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+     */
     public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
         getEnumTypeOrBuilderList() {
       return enumType_;
     }
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+     */
     public int getEnumTypeCount() {
       return enumType_.size();
     }
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+     */
     public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index) {
       return enumType_.get(index);
     }
+    /**
+     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+     */
     public com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
         int index) {
       return enumType_.get(index);
     }
-    
+
     // repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;
     public static final int EXTENSION_RANGE_FIELD_NUMBER = 5;
     private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange> extensionRange_;
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+     */
     public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange> getExtensionRangeList() {
       return extensionRange_;
     }
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+     */
     public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder> 
         getExtensionRangeOrBuilderList() {
       return extensionRange_;
     }
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+     */
     public int getExtensionRangeCount() {
       return extensionRange_.size();
     }
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+     */
     public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange getExtensionRange(int index) {
       return extensionRange_.get(index);
     }
+    /**
+     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+     */
     public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder getExtensionRangeOrBuilder(
         int index) {
       return extensionRange_.get(index);
     }
-    
+
     // optional .google.protobuf.MessageOptions options = 7;
     public static final int OPTIONS_FIELD_NUMBER = 7;
     private com.google.protobuf.DescriptorProtos.MessageOptions options_;
+    /**
+     * <code>optional .google.protobuf.MessageOptions options = 7;</code>
+     */
     public boolean hasOptions() {
       return ((bitField0_ & 0x00000002) == 0x00000002);
     }
+    /**
+     * <code>optional .google.protobuf.MessageOptions options = 7;</code>
+     */
     public com.google.protobuf.DescriptorProtos.MessageOptions getOptions() {
       return options_;
     }
+    /**
+     * <code>optional .google.protobuf.MessageOptions options = 7;</code>
+     */
     public com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder getOptionsOrBuilder() {
       return options_;
     }
-    
+
     private void initFields() {
       name_ = "";
@@ -3455,5 +5289,5 @@
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
-      
+
       for (int i = 0; i < getFieldCount(); i++) {
         if (!getField(i).isInitialized()) {
@@ -3489,5 +5323,5 @@
       return true;
     }
-    
+
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
@@ -3516,10 +5350,10 @@
       getUnknownFields().writeTo(output);
     }
-    
+
     private int memoizedSerializedSize = -1;
     public int getSerializedSize() {
       int size = memoizedSerializedSize;
       if (size != -1) return size;
-    
+
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
@@ -3555,5 +5389,5 @@
       return size;
     }
-    
+
     private static final long serialVersionUID = 0L;
     @java.lang.Override
@@ -3562,9 +5396,9 @@
       return super.writeReplace();
     }
-    
+
     public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(
@@ -3572,10 +5406,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(
@@ -3583,10 +5416,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(
@@ -3594,15 +5426,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.DescriptorProto parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.DescriptorProto parseDelimitedFrom(
@@ -3610,15 +5436,10 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(
@@ -3626,8 +5447,7 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
@@ -3636,5 +5456,5 @@
     }
     public Builder toBuilder() { return newBuilder(this); }
-    
+
     @java.lang.Override
     protected Builder newBuilderForType(
@@ -3643,4 +5463,11 @@
       return builder;
     }
+    /**
+     * Protobuf type {@code google.protobuf.DescriptorProto}
+     *
+     * <pre>
+     * Describes a message type.
+     * </pre>
+     */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
@@ -3650,16 +5477,19 @@
         return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_descriptor;
       }
-      
+
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_fieldAccessorTable;
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.DescriptorProto.class, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder.class);
+      }
+
       // Construct using com.google.protobuf.DescriptorProtos.DescriptorProto.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
-      
-      private Builder(BuilderParent parent) {
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
         super(parent);
         maybeForceBuilderInitialization();
@@ -3678,5 +5508,5 @@
         return new Builder();
       }
-      
+
       public Builder clear() {
         super.clear();
@@ -3721,18 +5551,18 @@
         return this;
       }
-      
+
       public Builder clone() {
         return create().mergeFrom(buildPartial());
       }
-      
+
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.google.protobuf.DescriptorProtos.DescriptorProto.getDescriptor();
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_descriptor;
+      }
+
       public com.google.protobuf.DescriptorProtos.DescriptorProto getDefaultInstanceForType() {
         return com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance();
       }
-      
+
       public com.google.protobuf.DescriptorProtos.DescriptorProto build() {
         com.google.protobuf.DescriptorProtos.DescriptorProto result = buildPartial();
@@ -3742,15 +5572,5 @@
         return result;
       }
-      
-      private com.google.protobuf.DescriptorProtos.DescriptorProto buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        com.google.protobuf.DescriptorProtos.DescriptorProto result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
+
       public com.google.protobuf.DescriptorProtos.DescriptorProto buildPartial() {
         com.google.protobuf.DescriptorProtos.DescriptorProto result = new com.google.protobuf.DescriptorProtos.DescriptorProto(this);
@@ -3818,5 +5638,5 @@
         return result;
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.Message other) {
         if (other instanceof com.google.protobuf.DescriptorProtos.DescriptorProto) {
@@ -3827,9 +5647,11 @@
         }
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.DescriptorProtos.DescriptorProto other) {
         if (other == com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance()) return this;
         if (other.hasName()) {
-          setName(other.getName());
+          bitField0_ |= 0x00000001;
+          name_ = other.name_;
+          onChanged();
         }
         if (fieldBuilder_ == null) {
@@ -3969,5 +5791,5 @@
         return this;
       }
-      
+
       public final boolean isInitialized() {
         for (int i = 0; i < getFieldCount(); i++) {
@@ -4003,94 +5825,67 @@
         return true;
       }
-      
+
       public Builder mergeFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder(
-            this.getUnknownFields());
-        while (true) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              this.setUnknownFields(unknownFields.build());
-              onChanged();
-              return this;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
-              }
-              break;
-            }
-            case 10: {
-              bitField0_ |= 0x00000001;
-              name_ = input.readBytes();
-              break;
-            }
-            case 18: {
-              com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addField(subBuilder.buildPartial());
-              break;
-            }
-            case 26: {
-              com.google.protobuf.DescriptorProtos.DescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.DescriptorProto.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addNestedType(subBuilder.buildPartial());
-              break;
-            }
-            case 34: {
-              com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.EnumDescriptorProto.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addEnumType(subBuilder.buildPartial());
-              break;
-            }
-            case 42: {
-              com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder subBuilder = com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addExtensionRange(subBuilder.buildPartial());
-              break;
-            }
-            case 50: {
-              com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addExtension(subBuilder.buildPartial());
-              break;
-            }
-            case 58: {
-              com.google.protobuf.DescriptorProtos.MessageOptions.Builder subBuilder = com.google.protobuf.DescriptorProtos.MessageOptions.newBuilder();
-              if (hasOptions()) {
-                subBuilder.mergeFrom(getOptions());
-              }
-              input.readMessage(subBuilder, extensionRegistry);
-              setOptions(subBuilder.buildPartial());
-              break;
-            }
+        com.google.protobuf.DescriptorProtos.DescriptorProto parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.google.protobuf.DescriptorProtos.DescriptorProto) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
         }
-      }
-      
+        return this;
+      }
       private int bitField0_;
-      
+
       // optional string name = 1;
       private java.lang.Object name_ = "";
+      /**
+       * <code>optional string name = 1;</code>
+       */
       public boolean hasName() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public String getName() {
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public java.lang.String getName() {
         java.lang.Object ref = name_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           name_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setName(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public Builder setName(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -4101,4 +5896,7 @@
         return this;
       }
+      /**
+       * <code>optional string name = 1;</code>
+       */
       public Builder clearName() {
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -4107,10 +5905,18 @@
         return this;
       }
-      void setName(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000001;
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
         name_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // repeated .google.protobuf.FieldDescriptorProto field = 2;
       private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> field_ =
@@ -4122,8 +5928,11 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.FieldDescriptorProto, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> fieldBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getFieldList() {
         if (fieldBuilder_ == null) {
@@ -4133,4 +5942,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+       */
       public int getFieldCount() {
         if (fieldBuilder_ == null) {
@@ -4140,4 +5952,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getField(int index) {
         if (fieldBuilder_ == null) {
@@ -4147,4 +5962,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+       */
       public Builder setField(
           int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
@@ -4161,4 +5979,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+       */
       public Builder setField(
           int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
@@ -4172,4 +5993,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+       */
       public Builder addField(com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
         if (fieldBuilder_ == null) {
@@ -4185,4 +6009,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+       */
       public Builder addField(
           int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
@@ -4199,4 +6026,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+       */
       public Builder addField(
           com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
@@ -4210,4 +6040,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+       */
       public Builder addField(
           int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
@@ -4221,4 +6054,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+       */
       public Builder addAllField(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProto> values) {
@@ -4232,4 +6068,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+       */
       public Builder clearField() {
         if (fieldBuilder_ == null) {
@@ -4242,4 +6081,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+       */
       public Builder removeField(int index) {
         if (fieldBuilder_ == null) {
@@ -4252,8 +6094,14 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder getFieldBuilder(
           int index) {
         return getFieldFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getFieldOrBuilder(
           int index) {
@@ -4263,4 +6111,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
            getFieldOrBuilderList() {
@@ -4271,8 +6122,14 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder addFieldBuilder() {
         return getFieldFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder addFieldBuilder(
           int index) {
@@ -4280,4 +6137,7 @@
             index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder> 
            getFieldBuilderList() {
@@ -4298,5 +6158,5 @@
         return fieldBuilder_;
       }
-      
+
       // repeated .google.protobuf.FieldDescriptorProto extension = 6;
       private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> extension_ =
@@ -4308,8 +6168,11 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.FieldDescriptorProto, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> extensionBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getExtensionList() {
         if (extensionBuilder_ == null) {
@@ -4319,4 +6182,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+       */
       public int getExtensionCount() {
         if (extensionBuilder_ == null) {
@@ -4326,4 +6192,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index) {
         if (extensionBuilder_ == null) {
@@ -4333,4 +6202,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+       */
       public Builder setExtension(
           int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
@@ -4347,4 +6219,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+       */
       public Builder setExtension(
           int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
@@ -4358,4 +6233,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+       */
       public Builder addExtension(com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
         if (extensionBuilder_ == null) {
@@ -4371,4 +6249,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+       */
       public Builder addExtension(
           int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
@@ -4385,4 +6266,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+       */
       public Builder addExtension(
           com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
@@ -4396,4 +6280,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+       */
       public Builder addExtension(
           int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
@@ -4407,4 +6294,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+       */
       public Builder addAllExtension(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProto> values) {
@@ -4418,4 +6308,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+       */
       public Builder clearExtension() {
         if (extensionBuilder_ == null) {
@@ -4428,4 +6321,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+       */
       public Builder removeExtension(int index) {
         if (extensionBuilder_ == null) {
@@ -4438,8 +6334,14 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder getExtensionBuilder(
           int index) {
         return getExtensionFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
           int index) {
@@ -4449,4 +6351,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
            getExtensionOrBuilderList() {
@@ -4457,8 +6362,14 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder addExtensionBuilder() {
         return getExtensionFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder addExtensionBuilder(
           int index) {
@@ -4466,4 +6377,7 @@
             index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder> 
            getExtensionBuilderList() {
@@ -4484,5 +6398,5 @@
         return extensionBuilder_;
       }
-      
+
       // repeated .google.protobuf.DescriptorProto nested_type = 3;
       private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> nestedType_ =
@@ -4494,8 +6408,11 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.DescriptorProto, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder, com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> nestedTypeBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> getNestedTypeList() {
         if (nestedTypeBuilder_ == null) {
@@ -4505,4 +6422,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+       */
       public int getNestedTypeCount() {
         if (nestedTypeBuilder_ == null) {
@@ -4512,4 +6432,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+       */
       public com.google.protobuf.DescriptorProtos.DescriptorProto getNestedType(int index) {
         if (nestedTypeBuilder_ == null) {
@@ -4519,4 +6442,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+       */
       public Builder setNestedType(
           int index, com.google.protobuf.DescriptorProtos.DescriptorProto value) {
@@ -4533,4 +6459,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+       */
       public Builder setNestedType(
           int index, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) {
@@ -4544,4 +6473,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+       */
       public Builder addNestedType(com.google.protobuf.DescriptorProtos.DescriptorProto value) {
         if (nestedTypeBuilder_ == null) {
@@ -4557,4 +6489,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+       */
       public Builder addNestedType(
           int index, com.google.protobuf.DescriptorProtos.DescriptorProto value) {
@@ -4571,4 +6506,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+       */
       public Builder addNestedType(
           com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) {
@@ -4582,4 +6520,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+       */
       public Builder addNestedType(
           int index, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) {
@@ -4593,4 +6534,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+       */
       public Builder addAllNestedType(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.DescriptorProto> values) {
@@ -4604,4 +6548,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+       */
       public Builder clearNestedType() {
         if (nestedTypeBuilder_ == null) {
@@ -4614,4 +6561,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+       */
       public Builder removeNestedType(int index) {
         if (nestedTypeBuilder_ == null) {
@@ -4624,8 +6574,14 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+       */
       public com.google.protobuf.DescriptorProtos.DescriptorProto.Builder getNestedTypeBuilder(
           int index) {
         return getNestedTypeFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+       */
       public com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getNestedTypeOrBuilder(
           int index) {
@@ -4635,4 +6591,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
            getNestedTypeOrBuilderList() {
@@ -4643,8 +6602,14 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+       */
       public com.google.protobuf.DescriptorProtos.DescriptorProto.Builder addNestedTypeBuilder() {
         return getNestedTypeFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+       */
       public com.google.protobuf.DescriptorProtos.DescriptorProto.Builder addNestedTypeBuilder(
           int index) {
@@ -4652,4 +6617,7 @@
             index, com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.Builder> 
            getNestedTypeBuilderList() {
@@ -4670,5 +6638,5 @@
         return nestedTypeBuilder_;
       }
-      
+
       // repeated .google.protobuf.EnumDescriptorProto enum_type = 4;
       private java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> enumType_ =
@@ -4680,8 +6648,11 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.EnumDescriptorProto, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> enumTypeBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> getEnumTypeList() {
         if (enumTypeBuilder_ == null) {
@@ -4691,4 +6662,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+       */
       public int getEnumTypeCount() {
         if (enumTypeBuilder_ == null) {
@@ -4698,4 +6672,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index) {
         if (enumTypeBuilder_ == null) {
@@ -4705,4 +6682,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+       */
       public Builder setEnumType(
           int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) {
@@ -4719,4 +6699,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+       */
       public Builder setEnumType(
           int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
@@ -4730,4 +6713,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+       */
       public Builder addEnumType(com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) {
         if (enumTypeBuilder_ == null) {
@@ -4743,4 +6729,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+       */
       public Builder addEnumType(
           int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) {
@@ -4757,4 +6746,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+       */
       public Builder addEnumType(
           com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
@@ -4768,4 +6760,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+       */
       public Builder addEnumType(
           int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
@@ -4779,4 +6774,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+       */
       public Builder addAllEnumType(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProto> values) {
@@ -4790,4 +6788,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+       */
       public Builder clearEnumType() {
         if (enumTypeBuilder_ == null) {
@@ -4800,4 +6801,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+       */
       public Builder removeEnumType(int index) {
         if (enumTypeBuilder_ == null) {
@@ -4810,8 +6814,14 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder getEnumTypeBuilder(
           int index) {
         return getEnumTypeFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
           int index) {
@@ -4821,4 +6831,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
            getEnumTypeOrBuilderList() {
@@ -4829,8 +6842,14 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder addEnumTypeBuilder() {
         return getEnumTypeFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder addEnumTypeBuilder(
           int index) {
@@ -4838,4 +6857,7 @@
             index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder> 
            getEnumTypeBuilderList() {
@@ -4856,5 +6878,5 @@
         return enumTypeBuilder_;
       }
-      
+
       // repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;
       private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange> extensionRange_ =
@@ -4866,8 +6888,11 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder> extensionRangeBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange> getExtensionRangeList() {
         if (extensionRangeBuilder_ == null) {
@@ -4877,4 +6902,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+       */
       public int getExtensionRangeCount() {
         if (extensionRangeBuilder_ == null) {
@@ -4884,4 +6912,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+       */
       public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange getExtensionRange(int index) {
         if (extensionRangeBuilder_ == null) {
@@ -4891,4 +6922,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+       */
       public Builder setExtensionRange(
           int index, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange value) {
@@ -4905,4 +6939,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+       */
       public Builder setExtensionRange(
           int index, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder builderForValue) {
@@ -4916,4 +6953,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+       */
       public Builder addExtensionRange(com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange value) {
         if (extensionRangeBuilder_ == null) {
@@ -4929,4 +6969,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+       */
       public Builder addExtensionRange(
           int index, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange value) {
@@ -4943,4 +6986,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+       */
       public Builder addExtensionRange(
           com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder builderForValue) {
@@ -4954,4 +7000,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+       */
       public Builder addExtensionRange(
           int index, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder builderForValue) {
@@ -4965,4 +7014,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+       */
       public Builder addAllExtensionRange(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange> values) {
@@ -4976,4 +7028,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+       */
       public Builder clearExtensionRange() {
         if (extensionRangeBuilder_ == null) {
@@ -4986,4 +7041,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+       */
       public Builder removeExtensionRange(int index) {
         if (extensionRangeBuilder_ == null) {
@@ -4996,8 +7054,14 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+       */
       public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder getExtensionRangeBuilder(
           int index) {
         return getExtensionRangeFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+       */
       public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder getExtensionRangeOrBuilder(
           int index) {
@@ -5007,4 +7071,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder> 
            getExtensionRangeOrBuilderList() {
@@ -5015,8 +7082,14 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+       */
       public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder addExtensionRangeBuilder() {
         return getExtensionRangeFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+       */
       public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder addExtensionRangeBuilder(
           int index) {
@@ -5024,4 +7097,7 @@
             index, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder> 
            getExtensionRangeBuilderList() {
@@ -5042,12 +7118,18 @@
         return extensionRangeBuilder_;
       }
-      
+
       // optional .google.protobuf.MessageOptions options = 7;
       private com.google.protobuf.DescriptorProtos.MessageOptions options_ = com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
           com.google.protobuf.DescriptorProtos.MessageOptions, com.google.protobuf.DescriptorProtos.MessageOptions.Builder, com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder> optionsBuilder_;
+      /**
+       * <code>optional .google.protobuf.MessageOptions options = 7;</code>
+       */
       public boolean hasOptions() {
         return ((bitField0_ & 0x00000040) == 0x00000040);
       }
+      /**
+       * <code>optional .google.protobuf.MessageOptions options = 7;</code>
+       */
       public com.google.protobuf.DescriptorProtos.MessageOptions getOptions() {
         if (optionsBuilder_ == null) {
@@ -5057,4 +7139,7 @@
         }
       }
+      /**
+       * <code>optional .google.protobuf.MessageOptions options = 7;</code>
+       */
       public Builder setOptions(com.google.protobuf.DescriptorProtos.MessageOptions value) {
         if (optionsBuilder_ == null) {
@@ -5070,4 +7155,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.MessageOptions options = 7;</code>
+       */
       public Builder setOptions(
           com.google.protobuf.DescriptorProtos.MessageOptions.Builder builderForValue) {
@@ -5081,4 +7169,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.MessageOptions options = 7;</code>
+       */
       public Builder mergeOptions(com.google.protobuf.DescriptorProtos.MessageOptions value) {
         if (optionsBuilder_ == null) {
@@ -5097,4 +7188,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.MessageOptions options = 7;</code>
+       */
       public Builder clearOptions() {
         if (optionsBuilder_ == null) {
@@ -5107,4 +7201,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.MessageOptions options = 7;</code>
+       */
       public com.google.protobuf.DescriptorProtos.MessageOptions.Builder getOptionsBuilder() {
         bitField0_ |= 0x00000040;
@@ -5112,4 +7209,7 @@
         return getOptionsFieldBuilder().getBuilder();
       }
+      /**
+       * <code>optional .google.protobuf.MessageOptions options = 7;</code>
+       */
       public com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder getOptionsOrBuilder() {
         if (optionsBuilder_ != null) {
@@ -5119,4 +7219,7 @@
         }
       }
+      /**
+       * <code>optional .google.protobuf.MessageOptions options = 7;</code>
+       */
       private com.google.protobuf.SingleFieldBuilder<
           com.google.protobuf.DescriptorProtos.MessageOptions, com.google.protobuf.DescriptorProtos.MessageOptions.Builder, com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder> 
@@ -5132,827 +7235,248 @@
         return optionsBuilder_;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:google.protobuf.DescriptorProto)
     }
-    
+
     static {
       defaultInstance = new DescriptorProto(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto)
   }
-  
+
   public interface FieldDescriptorProtoOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
-    
+
     // optional string name = 1;
+    /**
+     * <code>optional string name = 1;</code>
+     */
     boolean hasName();
-    String getName();
-    
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    java.lang.String getName();
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
     // optional int32 number = 3;
+    /**
+     * <code>optional int32 number = 3;</code>
+     */
     boolean hasNumber();
+    /**
+     * <code>optional int32 number = 3;</code>
+     */
     int getNumber();
-    
+
     // optional .google.protobuf.FieldDescriptorProto.Label label = 4;
+    /**
+     * <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>
+     */
     boolean hasLabel();
+    /**
+     * <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>
+     */
     com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label getLabel();
-    
+
     // optional .google.protobuf.FieldDescriptorProto.Type type = 5;
+    /**
+     * <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>
+     *
+     * <pre>
+     * If type_name is set, this need not be set.  If both this and type_name
+     * are set, this must be either TYPE_ENUM or TYPE_MESSAGE.
+     * </pre>
+     */
     boolean hasType();
+    /**
+     * <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>
+     *
+     * <pre>
+     * If type_name is set, this need not be set.  If both this and type_name
+     * are set, this must be either TYPE_ENUM or TYPE_MESSAGE.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type getType();
-    
+
     // optional string type_name = 6;
+    /**
+     * <code>optional string type_name = 6;</code>
+     *
+     * <pre>
+     * For message and enum types, this is the name of the type.  If the name
+     * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+     * rules are used to find the type (i.e. first the nested types within this
+     * message are searched, then within the parent, on up to the root
+     * namespace).
+     * </pre>
+     */
     boolean hasTypeName();
-    String getTypeName();
-    
+    /**
+     * <code>optional string type_name = 6;</code>
+     *
+     * <pre>
+     * For message and enum types, this is the name of the type.  If the name
+     * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+     * rules are used to find the type (i.e. first the nested types within this
+     * message are searched, then within the parent, on up to the root
+     * namespace).
+     * </pre>
+     */
+    java.lang.String getTypeName();
+    /**
+     * <code>optional string type_name = 6;</code>
+     *
+     * <pre>
+     * For message and enum types, this is the name of the type.  If the name
+     * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+     * rules are used to find the type (i.e. first the nested types within this
+     * message are searched, then within the parent, on up to the root
+     * namespace).
+     * </pre>
+     */
+    com.google.protobuf.ByteString
+        getTypeNameBytes();
+
     // optional string extendee = 2;
+    /**
+     * <code>optional string extendee = 2;</code>
+     *
+     * <pre>
+     * For extensions, this is the name of the type being extended.  It is
+     * resolved in the same manner as type_name.
+     * </pre>
+     */
     boolean hasExtendee();
-    String getExtendee();
-    
+    /**
+     * <code>optional string extendee = 2;</code>
+     *
+     * <pre>
+     * For extensions, this is the name of the type being extended.  It is
+     * resolved in the same manner as type_name.
+     * </pre>
+     */
+    java.lang.String getExtendee();
+    /**
+     * <code>optional string extendee = 2;</code>
+     *
+     * <pre>
+     * For extensions, this is the name of the type being extended.  It is
+     * resolved in the same manner as type_name.
+     * </pre>
+     */
+    com.google.protobuf.ByteString
+        getExtendeeBytes();
+
     // optional string default_value = 7;
+    /**
+     * <code>optional string default_value = 7;</code>
+     *
+     * <pre>
+     * For numeric types, contains the original text representation of the value.
+     * For booleans, "true" or "false".
+     * For strings, contains the default text contents (not escaped in any way).
+     * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
+     * TODO(kenton):  Base-64 encode?
+     * </pre>
+     */
     boolean hasDefaultValue();
-    String getDefaultValue();
-    
+    /**
+     * <code>optional string default_value = 7;</code>
+     *
+     * <pre>
+     * For numeric types, contains the original text representation of the value.
+     * For booleans, "true" or "false".
+     * For strings, contains the default text contents (not escaped in any way).
+     * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
+     * TODO(kenton):  Base-64 encode?
+     * </pre>
+     */
+    java.lang.String getDefaultValue();
+    /**
+     * <code>optional string default_value = 7;</code>
+     *
+     * <pre>
+     * For numeric types, contains the original text representation of the value.
+     * For booleans, "true" or "false".
+     * For strings, contains the default text contents (not escaped in any way).
+     * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
+     * TODO(kenton):  Base-64 encode?
+     * </pre>
+     */
+    com.google.protobuf.ByteString
+        getDefaultValueBytes();
+
     // optional .google.protobuf.FieldOptions options = 8;
+    /**
+     * <code>optional .google.protobuf.FieldOptions options = 8;</code>
+     */
     boolean hasOptions();
+    /**
+     * <code>optional .google.protobuf.FieldOptions options = 8;</code>
+     */
     com.google.protobuf.DescriptorProtos.FieldOptions getOptions();
+    /**
+     * <code>optional .google.protobuf.FieldOptions options = 8;</code>
+     */
     com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder getOptionsOrBuilder();
   }
+  /**
+   * Protobuf type {@code google.protobuf.FieldDescriptorProto}
+   *
+   * <pre>
+   * Describes a field within a message.
+   * </pre>
+   */
   public static final class FieldDescriptorProto extends
       com.google.protobuf.GeneratedMessage
       implements FieldDescriptorProtoOrBuilder {
     // Use FieldDescriptorProto.newBuilder() to construct.
-    private FieldDescriptorProto(Builder builder) {
+    private FieldDescriptorProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
       super(builder);
-    }
-    private FieldDescriptorProto(boolean noInit) {}
-    
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private FieldDescriptorProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
     private static final FieldDescriptorProto defaultInstance;
     public static FieldDescriptorProto getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public FieldDescriptorProto getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_descriptor;
-    }
-    
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable;
-    }
-    
-    public enum Type
-        implements com.google.protobuf.ProtocolMessageEnum {
-      TYPE_DOUBLE(0, 1),
-      TYPE_FLOAT(1, 2),
-      TYPE_INT64(2, 3),
-      TYPE_UINT64(3, 4),
-      TYPE_INT32(4, 5),
-      TYPE_FIXED64(5, 6),
-      TYPE_FIXED32(6, 7),
-      TYPE_BOOL(7, 8),
-      TYPE_STRING(8, 9),
-      TYPE_GROUP(9, 10),
-      TYPE_MESSAGE(10, 11),
-      TYPE_BYTES(11, 12),
-      TYPE_UINT32(12, 13),
-      TYPE_ENUM(13, 14),
-      TYPE_SFIXED32(14, 15),
-      TYPE_SFIXED64(15, 16),
-      TYPE_SINT32(16, 17),
-      TYPE_SINT64(17, 18),
-      ;
-      
-      public static final int TYPE_DOUBLE_VALUE = 1;
-      public static final int TYPE_FLOAT_VALUE = 2;
-      public static final int TYPE_INT64_VALUE = 3;
-      public static final int TYPE_UINT64_VALUE = 4;
-      public static final int TYPE_INT32_VALUE = 5;
-      public static final int TYPE_FIXED64_VALUE = 6;
-      public static final int TYPE_FIXED32_VALUE = 7;
-      public static final int TYPE_BOOL_VALUE = 8;
-      public static final int TYPE_STRING_VALUE = 9;
-      public static final int TYPE_GROUP_VALUE = 10;
-      public static final int TYPE_MESSAGE_VALUE = 11;
-      public static final int TYPE_BYTES_VALUE = 12;
-      public static final int TYPE_UINT32_VALUE = 13;
-      public static final int TYPE_ENUM_VALUE = 14;
-      public static final int TYPE_SFIXED32_VALUE = 15;
-      public static final int TYPE_SFIXED64_VALUE = 16;
-      public static final int TYPE_SINT32_VALUE = 17;
-      public static final int TYPE_SINT64_VALUE = 18;
-      
-      
-      public final int getNumber() { return value; }
-      
-      public static Type valueOf(int value) {
-        switch (value) {
-          case 1: return TYPE_DOUBLE;
-          case 2: return TYPE_FLOAT;
-          case 3: return TYPE_INT64;
-          case 4: return TYPE_UINT64;
-          case 5: return TYPE_INT32;
-          case 6: return TYPE_FIXED64;
-          case 7: return TYPE_FIXED32;
-          case 8: return TYPE_BOOL;
-          case 9: return TYPE_STRING;
-          case 10: return TYPE_GROUP;
-          case 11: return TYPE_MESSAGE;
-          case 12: return TYPE_BYTES;
-          case 13: return TYPE_UINT32;
-          case 14: return TYPE_ENUM;
-          case 15: return TYPE_SFIXED32;
-          case 16: return TYPE_SFIXED64;
-          case 17: return TYPE_SINT32;
-          case 18: return TYPE_SINT64;
-          default: return null;
-        }
-      }
-      
-      public static com.google.protobuf.Internal.EnumLiteMap<Type>
-          internalGetValueMap() {
-        return internalValueMap;
-      }
-      private static com.google.protobuf.Internal.EnumLiteMap<Type>
-          internalValueMap =
-            new com.google.protobuf.Internal.EnumLiteMap<Type>() {
-              public Type findValueByNumber(int number) {
-                return Type.valueOf(number);
-              }
-            };
-      
-      public final com.google.protobuf.Descriptors.EnumValueDescriptor
-          getValueDescriptor() {
-        return getDescriptor().getValues().get(index);
-      }
-      public final com.google.protobuf.Descriptors.EnumDescriptor
-          getDescriptorForType() {
-        return getDescriptor();
-      }
-      public static final com.google.protobuf.Descriptors.EnumDescriptor
-          getDescriptor() {
-        return com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDescriptor().getEnumTypes().get(0);
-      }
-      
-      private static final Type[] VALUES = {
-        TYPE_DOUBLE, TYPE_FLOAT, TYPE_INT64, TYPE_UINT64, TYPE_INT32, TYPE_FIXED64, TYPE_FIXED32, TYPE_BOOL, TYPE_STRING, TYPE_GROUP, TYPE_MESSAGE, TYPE_BYTES, TYPE_UINT32, TYPE_ENUM, TYPE_SFIXED32, TYPE_SFIXED64, TYPE_SINT32, TYPE_SINT64, 
-      };
-      
-      public static Type valueOf(
-          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
-        if (desc.getType() != getDescriptor()) {
-          throw new java.lang.IllegalArgumentException(
-            "EnumValueDescriptor is not for this type.");
-        }
-        return VALUES[desc.getIndex()];
-      }
-      
-      private final int index;
-      private final int value;
-      
-      private Type(int index, int value) {
-        this.index = index;
-        this.value = value;
-      }
-      
-      // @@protoc_insertion_point(enum_scope:google.protobuf.FieldDescriptorProto.Type)
-    }
-    
-    public enum Label
-        implements com.google.protobuf.ProtocolMessageEnum {
-      LABEL_OPTIONAL(0, 1),
-      LABEL_REQUIRED(1, 2),
-      LABEL_REPEATED(2, 3),
-      ;
-      
-      public static final int LABEL_OPTIONAL_VALUE = 1;
-      public static final int LABEL_REQUIRED_VALUE = 2;
-      public static final int LABEL_REPEATED_VALUE = 3;
-      
-      
-      public final int getNumber() { return value; }
-      
-      public static Label valueOf(int value) {
-        switch (value) {
-          case 1: return LABEL_OPTIONAL;
-          case 2: return LABEL_REQUIRED;
-          case 3: return LABEL_REPEATED;
-          default: return null;
-        }
-      }
-      
-      public static com.google.protobuf.Internal.EnumLiteMap<Label>
-          internalGetValueMap() {
-        return internalValueMap;
-      }
-      private static com.google.protobuf.Internal.EnumLiteMap<Label>
-          internalValueMap =
-            new com.google.protobuf.Internal.EnumLiteMap<Label>() {
-              public Label findValueByNumber(int number) {
-                return Label.valueOf(number);
-              }
-            };
-      
-      public final com.google.protobuf.Descriptors.EnumValueDescriptor
-          getValueDescriptor() {
-        return getDescriptor().getValues().get(index);
-      }
-      public final com.google.protobuf.Descriptors.EnumDescriptor
-          getDescriptorForType() {
-        return getDescriptor();
-      }
-      public static final com.google.protobuf.Descriptors.EnumDescriptor
-          getDescriptor() {
-        return com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDescriptor().getEnumTypes().get(1);
-      }
-      
-      private static final Label[] VALUES = {
-        LABEL_OPTIONAL, LABEL_REQUIRED, LABEL_REPEATED, 
-      };
-      
-      public static Label valueOf(
-          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
-        if (desc.getType() != getDescriptor()) {
-          throw new java.lang.IllegalArgumentException(
-            "EnumValueDescriptor is not for this type.");
-        }
-        return VALUES[desc.getIndex()];
-      }
-      
-      private final int index;
-      private final int value;
-      
-      private Label(int index, int value) {
-        this.index = index;
-        this.value = value;
-      }
-      
-      // @@protoc_insertion_point(enum_scope:google.protobuf.FieldDescriptorProto.Label)
-    }
-    
-    private int bitField0_;
-    // optional string name = 1;
-    public static final int NAME_FIELD_NUMBER = 1;
-    private java.lang.Object name_;
-    public boolean hasName() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    public String getName() {
-      java.lang.Object ref = name_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          name_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getNameBytes() {
-      java.lang.Object ref = name_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        name_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    
-    // optional int32 number = 3;
-    public static final int NUMBER_FIELD_NUMBER = 3;
-    private int number_;
-    public boolean hasNumber() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    public int getNumber() {
-      return number_;
-    }
-    
-    // optional .google.protobuf.FieldDescriptorProto.Label label = 4;
-    public static final int LABEL_FIELD_NUMBER = 4;
-    private com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label label_;
-    public boolean hasLabel() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
-    }
-    public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label getLabel() {
-      return label_;
-    }
-    
-    // optional .google.protobuf.FieldDescriptorProto.Type type = 5;
-    public static final int TYPE_FIELD_NUMBER = 5;
-    private com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type type_;
-    public boolean hasType() {
-      return ((bitField0_ & 0x00000008) == 0x00000008);
-    }
-    public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type getType() {
-      return type_;
-    }
-    
-    // optional string type_name = 6;
-    public static final int TYPE_NAME_FIELD_NUMBER = 6;
-    private java.lang.Object typeName_;
-    public boolean hasTypeName() {
-      return ((bitField0_ & 0x00000010) == 0x00000010);
-    }
-    public String getTypeName() {
-      java.lang.Object ref = typeName_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          typeName_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getTypeNameBytes() {
-      java.lang.Object ref = typeName_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        typeName_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    
-    // optional string extendee = 2;
-    public static final int EXTENDEE_FIELD_NUMBER = 2;
-    private java.lang.Object extendee_;
-    public boolean hasExtendee() {
-      return ((bitField0_ & 0x00000020) == 0x00000020);
-    }
-    public String getExtendee() {
-      java.lang.Object ref = extendee_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          extendee_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getExtendeeBytes() {
-      java.lang.Object ref = extendee_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        extendee_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    
-    // optional string default_value = 7;
-    public static final int DEFAULT_VALUE_FIELD_NUMBER = 7;
-    private java.lang.Object defaultValue_;
-    public boolean hasDefaultValue() {
-      return ((bitField0_ & 0x00000040) == 0x00000040);
-    }
-    public String getDefaultValue() {
-      java.lang.Object ref = defaultValue_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          defaultValue_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getDefaultValueBytes() {
-      java.lang.Object ref = defaultValue_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        defaultValue_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    
-    // optional .google.protobuf.FieldOptions options = 8;
-    public static final int OPTIONS_FIELD_NUMBER = 8;
-    private com.google.protobuf.DescriptorProtos.FieldOptions options_;
-    public boolean hasOptions() {
-      return ((bitField0_ & 0x00000080) == 0x00000080);
-    }
-    public com.google.protobuf.DescriptorProtos.FieldOptions getOptions() {
-      return options_;
-    }
-    public com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder getOptionsOrBuilder() {
-      return options_;
-    }
-    
-    private void initFields() {
-      name_ = "";
-      number_ = 0;
-      label_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL;
-      type_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type.TYPE_DOUBLE;
-      typeName_ = "";
-      extendee_ = "";
-      defaultValue_ = "";
-      options_ = com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance();
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
-      
-      if (hasOptions()) {
-        if (!getOptions().isInitialized()) {
-          memoizedIsInitialized = 0;
-          return false;
-        }
-      }
-      memoizedIsInitialized = 1;
-      return true;
-    }
-    
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBytes(1, getNameBytes());
-      }
-      if (((bitField0_ & 0x00000020) == 0x00000020)) {
-        output.writeBytes(2, getExtendeeBytes());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeInt32(3, number_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeEnum(4, label_.getNumber());
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        output.writeEnum(5, type_.getNumber());
-      }
-      if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        output.writeBytes(6, getTypeNameBytes());
-      }
-      if (((bitField0_ & 0x00000040) == 0x00000040)) {
-        output.writeBytes(7, getDefaultValueBytes());
-      }
-      if (((bitField0_ & 0x00000080) == 0x00000080)) {
-        output.writeMessage(8, options_);
-      }
-      getUnknownFields().writeTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-    
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(1, getNameBytes());
-      }
-      if (((bitField0_ & 0x00000020) == 0x00000020)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(2, getExtendeeBytes());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(3, number_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(4, label_.getNumber());
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(5, type_.getNumber());
-      }
-      if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(6, getTypeNameBytes());
-      }
-      if (((bitField0_ & 0x00000040) == 0x00000040)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(7, getDefaultValueBytes());
-      }
-      if (((bitField0_ & 0x00000080) == 0x00000080)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(8, options_);
-      }
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-    
-    private static final long serialVersionUID = 0L;
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
     @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-    
-    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
-        com.google.protobuf.ByteString data,
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private FieldDescriptorProto(
+        com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
-    }
-    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto 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 com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto 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(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FieldDescriptorProto prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-    
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_descriptor;
-      }
-      
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable;
-      }
-      
-      // Construct using com.google.protobuf.DescriptorProtos.FieldDescriptorProto.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-      
-      private Builder(BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getOptionsFieldBuilder();
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-      
-      public Builder clear() {
-        super.clear();
-        name_ = "";
-        bitField0_ = (bitField0_ & ~0x00000001);
-        number_ = 0;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        label_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL;
-        bitField0_ = (bitField0_ & ~0x00000004);
-        type_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type.TYPE_DOUBLE;
-        bitField0_ = (bitField0_ & ~0x00000008);
-        typeName_ = "";
-        bitField0_ = (bitField0_ & ~0x00000010);
-        extendee_ = "";
-        bitField0_ = (bitField0_ & ~0x00000020);
-        defaultValue_ = "";
-        bitField0_ = (bitField0_ & ~0x00000040);
-        if (optionsBuilder_ == null) {
-          options_ = com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance();
-        } else {
-          optionsBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000080);
-        return this;
-      }
-      
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-      
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDescriptor();
-      }
-      
-      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getDefaultInstanceForType() {
-        return com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance();
-      }
-      
-      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto build() {
-        com.google.protobuf.DescriptorProtos.FieldDescriptorProto result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-      
-      private com.google.protobuf.DescriptorProtos.FieldDescriptorProto buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        com.google.protobuf.DescriptorProtos.FieldDescriptorProto result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
-      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto buildPartial() {
-        com.google.protobuf.DescriptorProtos.FieldDescriptorProto result = new com.google.protobuf.DescriptorProtos.FieldDescriptorProto(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.name_ = name_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.number_ = number_;
-        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
-          to_bitField0_ |= 0x00000004;
-        }
-        result.label_ = label_;
-        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
-          to_bitField0_ |= 0x00000008;
-        }
-        result.type_ = type_;
-        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
-          to_bitField0_ |= 0x00000010;
-        }
-        result.typeName_ = typeName_;
-        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
-          to_bitField0_ |= 0x00000020;
-        }
-        result.extendee_ = extendee_;
-        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
-          to_bitField0_ |= 0x00000040;
-        }
-        result.defaultValue_ = defaultValue_;
-        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
-          to_bitField0_ |= 0x00000080;
-        }
-        if (optionsBuilder_ == null) {
-          result.options_ = options_;
-        } else {
-          result.options_ = optionsBuilder_.build();
-        }
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-      
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.google.protobuf.DescriptorProtos.FieldDescriptorProto) {
-          return mergeFrom((com.google.protobuf.DescriptorProtos.FieldDescriptorProto)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-      
-      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FieldDescriptorProto other) {
-        if (other == com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance()) return this;
-        if (other.hasName()) {
-          setName(other.getName());
-        }
-        if (other.hasNumber()) {
-          setNumber(other.getNumber());
-        }
-        if (other.hasLabel()) {
-          setLabel(other.getLabel());
-        }
-        if (other.hasType()) {
-          setType(other.getType());
-        }
-        if (other.hasTypeName()) {
-          setTypeName(other.getTypeName());
-        }
-        if (other.hasExtendee()) {
-          setExtendee(other.getExtendee());
-        }
-        if (other.hasDefaultValue()) {
-          setDefaultValue(other.getDefaultValue());
-        }
-        if (other.hasOptions()) {
-          mergeOptions(other.getOptions());
-        }
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-      
-      public final boolean isInitialized() {
-        if (hasOptions()) {
-          if (!getOptions().isInitialized()) {
-            
-            return false;
-          }
-        }
-        return true;
-      }
-      
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder(
-            this.getUnknownFields());
-        while (true) {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
           int tag = input.readTag();
           switch (tag) {
             case 0:
-              this.setUnknownFields(unknownFields.build());
-              onChanged();
-              return this;
+              done = true;
+              break;
             default: {
               if (!parseUnknownField(input, unknownFields,
                                      extensionRegistry, tag)) {
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
+                done = true;
               }
               break;
@@ -6006,34 +7530,1196 @@
             }
             case 66: {
-              com.google.protobuf.DescriptorProtos.FieldOptions.Builder subBuilder = com.google.protobuf.DescriptorProtos.FieldOptions.newBuilder();
-              if (hasOptions()) {
-                subBuilder.mergeFrom(getOptions());
+              com.google.protobuf.DescriptorProtos.FieldOptions.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000080) == 0x00000080)) {
+                subBuilder = options_.toBuilder();
               }
-              input.readMessage(subBuilder, extensionRegistry);
-              setOptions(subBuilder.buildPartial());
+              options_ = input.readMessage(com.google.protobuf.DescriptorProtos.FieldOptions.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(options_);
+                options_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000080;
               break;
             }
           }
         }
-      }
-      
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.protobuf.DescriptorProtos.FieldDescriptorProto.class, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<FieldDescriptorProto> PARSER =
+        new com.google.protobuf.AbstractParser<FieldDescriptorProto>() {
+      public FieldDescriptorProto parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new FieldDescriptorProto(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<FieldDescriptorProto> getParserForType() {
+      return PARSER;
+    }
+
+    /**
+     * Protobuf enum {@code google.protobuf.FieldDescriptorProto.Type}
+     */
+    public enum Type
+        implements com.google.protobuf.ProtocolMessageEnum {
+      /**
+       * <code>TYPE_DOUBLE = 1;</code>
+       *
+       * <pre>
+       * 0 is reserved for errors.
+       * Order is weird for historical reasons.
+       * </pre>
+       */
+      TYPE_DOUBLE(0, 1),
+      /**
+       * <code>TYPE_FLOAT = 2;</code>
+       */
+      TYPE_FLOAT(1, 2),
+      /**
+       * <code>TYPE_INT64 = 3;</code>
+       *
+       * <pre>
+       * Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
+       * negative values are likely.
+       * </pre>
+       */
+      TYPE_INT64(2, 3),
+      /**
+       * <code>TYPE_UINT64 = 4;</code>
+       */
+      TYPE_UINT64(3, 4),
+      /**
+       * <code>TYPE_INT32 = 5;</code>
+       *
+       * <pre>
+       * Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
+       * negative values are likely.
+       * </pre>
+       */
+      TYPE_INT32(4, 5),
+      /**
+       * <code>TYPE_FIXED64 = 6;</code>
+       */
+      TYPE_FIXED64(5, 6),
+      /**
+       * <code>TYPE_FIXED32 = 7;</code>
+       */
+      TYPE_FIXED32(6, 7),
+      /**
+       * <code>TYPE_BOOL = 8;</code>
+       */
+      TYPE_BOOL(7, 8),
+      /**
+       * <code>TYPE_STRING = 9;</code>
+       */
+      TYPE_STRING(8, 9),
+      /**
+       * <code>TYPE_GROUP = 10;</code>
+       *
+       * <pre>
+       * Tag-delimited aggregate.
+       * </pre>
+       */
+      TYPE_GROUP(9, 10),
+      /**
+       * <code>TYPE_MESSAGE = 11;</code>
+       *
+       * <pre>
+       * Length-delimited aggregate.
+       * </pre>
+       */
+      TYPE_MESSAGE(10, 11),
+      /**
+       * <code>TYPE_BYTES = 12;</code>
+       *
+       * <pre>
+       * New in version 2.
+       * </pre>
+       */
+      TYPE_BYTES(11, 12),
+      /**
+       * <code>TYPE_UINT32 = 13;</code>
+       */
+      TYPE_UINT32(12, 13),
+      /**
+       * <code>TYPE_ENUM = 14;</code>
+       */
+      TYPE_ENUM(13, 14),
+      /**
+       * <code>TYPE_SFIXED32 = 15;</code>
+       */
+      TYPE_SFIXED32(14, 15),
+      /**
+       * <code>TYPE_SFIXED64 = 16;</code>
+       */
+      TYPE_SFIXED64(15, 16),
+      /**
+       * <code>TYPE_SINT32 = 17;</code>
+       *
+       * <pre>
+       * Uses ZigZag encoding.
+       * </pre>
+       */
+      TYPE_SINT32(16, 17),
+      /**
+       * <code>TYPE_SINT64 = 18;</code>
+       *
+       * <pre>
+       * Uses ZigZag encoding.
+       * </pre>
+       */
+      TYPE_SINT64(17, 18),
+      ;
+
+      /**
+       * <code>TYPE_DOUBLE = 1;</code>
+       *
+       * <pre>
+       * 0 is reserved for errors.
+       * Order is weird for historical reasons.
+       * </pre>
+       */
+      public static final int TYPE_DOUBLE_VALUE = 1;
+      /**
+       * <code>TYPE_FLOAT = 2;</code>
+       */
+      public static final int TYPE_FLOAT_VALUE = 2;
+      /**
+       * <code>TYPE_INT64 = 3;</code>
+       *
+       * <pre>
+       * Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
+       * negative values are likely.
+       * </pre>
+       */
+      public static final int TYPE_INT64_VALUE = 3;
+      /**
+       * <code>TYPE_UINT64 = 4;</code>
+       */
+      public static final int TYPE_UINT64_VALUE = 4;
+      /**
+       * <code>TYPE_INT32 = 5;</code>
+       *
+       * <pre>
+       * Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
+       * negative values are likely.
+       * </pre>
+       */
+      public static final int TYPE_INT32_VALUE = 5;
+      /**
+       * <code>TYPE_FIXED64 = 6;</code>
+       */
+      public static final int TYPE_FIXED64_VALUE = 6;
+      /**
+       * <code>TYPE_FIXED32 = 7;</code>
+       */
+      public static final int TYPE_FIXED32_VALUE = 7;
+      /**
+       * <code>TYPE_BOOL = 8;</code>
+       */
+      public static final int TYPE_BOOL_VALUE = 8;
+      /**
+       * <code>TYPE_STRING = 9;</code>
+       */
+      public static final int TYPE_STRING_VALUE = 9;
+      /**
+       * <code>TYPE_GROUP = 10;</code>
+       *
+       * <pre>
+       * Tag-delimited aggregate.
+       * </pre>
+       */
+      public static final int TYPE_GROUP_VALUE = 10;
+      /**
+       * <code>TYPE_MESSAGE = 11;</code>
+       *
+       * <pre>
+       * Length-delimited aggregate.
+       * </pre>
+       */
+      public static final int TYPE_MESSAGE_VALUE = 11;
+      /**
+       * <code>TYPE_BYTES = 12;</code>
+       *
+       * <pre>
+       * New in version 2.
+       * </pre>
+       */
+      public static final int TYPE_BYTES_VALUE = 12;
+      /**
+       * <code>TYPE_UINT32 = 13;</code>
+       */
+      public static final int TYPE_UINT32_VALUE = 13;
+      /**
+       * <code>TYPE_ENUM = 14;</code>
+       */
+      public static final int TYPE_ENUM_VALUE = 14;
+      /**
+       * <code>TYPE_SFIXED32 = 15;</code>
+       */
+      public static final int TYPE_SFIXED32_VALUE = 15;
+      /**
+       * <code>TYPE_SFIXED64 = 16;</code>
+       */
+      public static final int TYPE_SFIXED64_VALUE = 16;
+      /**
+       * <code>TYPE_SINT32 = 17;</code>
+       *
+       * <pre>
+       * Uses ZigZag encoding.
+       * </pre>
+       */
+      public static final int TYPE_SINT32_VALUE = 17;
+      /**
+       * <code>TYPE_SINT64 = 18;</code>
+       *
+       * <pre>
+       * Uses ZigZag encoding.
+       * </pre>
+       */
+      public static final int TYPE_SINT64_VALUE = 18;
+
+
+      public final int getNumber() { return value; }
+
+      public static Type valueOf(int value) {
+        switch (value) {
+          case 1: return TYPE_DOUBLE;
+          case 2: return TYPE_FLOAT;
+          case 3: return TYPE_INT64;
+          case 4: return TYPE_UINT64;
+          case 5: return TYPE_INT32;
+          case 6: return TYPE_FIXED64;
+          case 7: return TYPE_FIXED32;
+          case 8: return TYPE_BOOL;
+          case 9: return TYPE_STRING;
+          case 10: return TYPE_GROUP;
+          case 11: return TYPE_MESSAGE;
+          case 12: return TYPE_BYTES;
+          case 13: return TYPE_UINT32;
+          case 14: return TYPE_ENUM;
+          case 15: return TYPE_SFIXED32;
+          case 16: return TYPE_SFIXED64;
+          case 17: return TYPE_SINT32;
+          case 18: return TYPE_SINT64;
+          default: return null;
+        }
+      }
+
+      public static com.google.protobuf.Internal.EnumLiteMap<Type>
+          internalGetValueMap() {
+        return internalValueMap;
+      }
+      private static com.google.protobuf.Internal.EnumLiteMap<Type>
+          internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<Type>() {
+              public Type findValueByNumber(int number) {
+                return Type.valueOf(number);
+              }
+            };
+
+      public final com.google.protobuf.Descriptors.EnumValueDescriptor
+          getValueDescriptor() {
+        return getDescriptor().getValues().get(index);
+      }
+      public final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptorForType() {
+        return getDescriptor();
+      }
+      public static final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDescriptor().getEnumTypes().get(0);
+      }
+
+      private static final Type[] VALUES = values();
+
+      public static Type valueOf(
+          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+        if (desc.getType() != getDescriptor()) {
+          throw new java.lang.IllegalArgumentException(
+            "EnumValueDescriptor is not for this type.");
+        }
+        return VALUES[desc.getIndex()];
+      }
+
+      private final int index;
+      private final int value;
+
+      private Type(int index, int value) {
+        this.index = index;
+        this.value = value;
+      }
+
+      // @@protoc_insertion_point(enum_scope:google.protobuf.FieldDescriptorProto.Type)
+    }
+
+    /**
+     * Protobuf enum {@code google.protobuf.FieldDescriptorProto.Label}
+     */
+    public enum Label
+        implements com.google.protobuf.ProtocolMessageEnum {
+      /**
+       * <code>LABEL_OPTIONAL = 1;</code>
+       *
+       * <pre>
+       * 0 is reserved for errors
+       * </pre>
+       */
+      LABEL_OPTIONAL(0, 1),
+      /**
+       * <code>LABEL_REQUIRED = 2;</code>
+       */
+      LABEL_REQUIRED(1, 2),
+      /**
+       * <code>LABEL_REPEATED = 3;</code>
+       *
+       * <pre>
+       * TODO(sanjay): Should we add LABEL_MAP?
+       * </pre>
+       */
+      LABEL_REPEATED(2, 3),
+      ;
+
+      /**
+       * <code>LABEL_OPTIONAL = 1;</code>
+       *
+       * <pre>
+       * 0 is reserved for errors
+       * </pre>
+       */
+      public static final int LABEL_OPTIONAL_VALUE = 1;
+      /**
+       * <code>LABEL_REQUIRED = 2;</code>
+       */
+      public static final int LABEL_REQUIRED_VALUE = 2;
+      /**
+       * <code>LABEL_REPEATED = 3;</code>
+       *
+       * <pre>
+       * TODO(sanjay): Should we add LABEL_MAP?
+       * </pre>
+       */
+      public static final int LABEL_REPEATED_VALUE = 3;
+
+
+      public final int getNumber() { return value; }
+
+      public static Label valueOf(int value) {
+        switch (value) {
+          case 1: return LABEL_OPTIONAL;
+          case 2: return LABEL_REQUIRED;
+          case 3: return LABEL_REPEATED;
+          default: return null;
+        }
+      }
+
+      public static com.google.protobuf.Internal.EnumLiteMap<Label>
+          internalGetValueMap() {
+        return internalValueMap;
+      }
+      private static com.google.protobuf.Internal.EnumLiteMap<Label>
+          internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<Label>() {
+              public Label findValueByNumber(int number) {
+                return Label.valueOf(number);
+              }
+            };
+
+      public final com.google.protobuf.Descriptors.EnumValueDescriptor
+          getValueDescriptor() {
+        return getDescriptor().getValues().get(index);
+      }
+      public final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptorForType() {
+        return getDescriptor();
+      }
+      public static final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDescriptor().getEnumTypes().get(1);
+      }
+
+      private static final Label[] VALUES = values();
+
+      public static Label valueOf(
+          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+        if (desc.getType() != getDescriptor()) {
+          throw new java.lang.IllegalArgumentException(
+            "EnumValueDescriptor is not for this type.");
+        }
+        return VALUES[desc.getIndex()];
+      }
+
+      private final int index;
+      private final int value;
+
+      private Label(int index, int value) {
+        this.index = index;
+        this.value = value;
+      }
+
+      // @@protoc_insertion_point(enum_scope:google.protobuf.FieldDescriptorProto.Label)
+    }
+
+    private int bitField0_;
+    // optional string name = 1;
+    public static final int NAME_FIELD_NUMBER = 1;
+    private java.lang.Object name_;
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    public boolean hasName() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          name_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    // optional int32 number = 3;
+    public static final int NUMBER_FIELD_NUMBER = 3;
+    private int number_;
+    /**
+     * <code>optional int32 number = 3;</code>
+     */
+    public boolean hasNumber() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>optional int32 number = 3;</code>
+     */
+    public int getNumber() {
+      return number_;
+    }
+
+    // optional .google.protobuf.FieldDescriptorProto.Label label = 4;
+    public static final int LABEL_FIELD_NUMBER = 4;
+    private com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label label_;
+    /**
+     * <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>
+     */
+    public boolean hasLabel() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    /**
+     * <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>
+     */
+    public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label getLabel() {
+      return label_;
+    }
+
+    // optional .google.protobuf.FieldDescriptorProto.Type type = 5;
+    public static final int TYPE_FIELD_NUMBER = 5;
+    private com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type type_;
+    /**
+     * <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>
+     *
+     * <pre>
+     * If type_name is set, this need not be set.  If both this and type_name
+     * are set, this must be either TYPE_ENUM or TYPE_MESSAGE.
+     * </pre>
+     */
+    public boolean hasType() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    /**
+     * <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>
+     *
+     * <pre>
+     * If type_name is set, this need not be set.  If both this and type_name
+     * are set, this must be either TYPE_ENUM or TYPE_MESSAGE.
+     * </pre>
+     */
+    public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type getType() {
+      return type_;
+    }
+
+    // optional string type_name = 6;
+    public static final int TYPE_NAME_FIELD_NUMBER = 6;
+    private java.lang.Object typeName_;
+    /**
+     * <code>optional string type_name = 6;</code>
+     *
+     * <pre>
+     * For message and enum types, this is the name of the type.  If the name
+     * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+     * rules are used to find the type (i.e. first the nested types within this
+     * message are searched, then within the parent, on up to the root
+     * namespace).
+     * </pre>
+     */
+    public boolean hasTypeName() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    /**
+     * <code>optional string type_name = 6;</code>
+     *
+     * <pre>
+     * For message and enum types, this is the name of the type.  If the name
+     * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+     * rules are used to find the type (i.e. first the nested types within this
+     * message are searched, then within the parent, on up to the root
+     * namespace).
+     * </pre>
+     */
+    public java.lang.String getTypeName() {
+      java.lang.Object ref = typeName_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          typeName_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string type_name = 6;</code>
+     *
+     * <pre>
+     * For message and enum types, this is the name of the type.  If the name
+     * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+     * rules are used to find the type (i.e. first the nested types within this
+     * message are searched, then within the parent, on up to the root
+     * namespace).
+     * </pre>
+     */
+    public com.google.protobuf.ByteString
+        getTypeNameBytes() {
+      java.lang.Object ref = typeName_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        typeName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    // optional string extendee = 2;
+    public static final int EXTENDEE_FIELD_NUMBER = 2;
+    private java.lang.Object extendee_;
+    /**
+     * <code>optional string extendee = 2;</code>
+     *
+     * <pre>
+     * For extensions, this is the name of the type being extended.  It is
+     * resolved in the same manner as type_name.
+     * </pre>
+     */
+    public boolean hasExtendee() {
+      return ((bitField0_ & 0x00000020) == 0x00000020);
+    }
+    /**
+     * <code>optional string extendee = 2;</code>
+     *
+     * <pre>
+     * For extensions, this is the name of the type being extended.  It is
+     * resolved in the same manner as type_name.
+     * </pre>
+     */
+    public java.lang.String getExtendee() {
+      java.lang.Object ref = extendee_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          extendee_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string extendee = 2;</code>
+     *
+     * <pre>
+     * For extensions, this is the name of the type being extended.  It is
+     * resolved in the same manner as type_name.
+     * </pre>
+     */
+    public com.google.protobuf.ByteString
+        getExtendeeBytes() {
+      java.lang.Object ref = extendee_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        extendee_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    // optional string default_value = 7;
+    public static final int DEFAULT_VALUE_FIELD_NUMBER = 7;
+    private java.lang.Object defaultValue_;
+    /**
+     * <code>optional string default_value = 7;</code>
+     *
+     * <pre>
+     * For numeric types, contains the original text representation of the value.
+     * For booleans, "true" or "false".
+     * For strings, contains the default text contents (not escaped in any way).
+     * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
+     * TODO(kenton):  Base-64 encode?
+     * </pre>
+     */
+    public boolean hasDefaultValue() {
+      return ((bitField0_ & 0x00000040) == 0x00000040);
+    }
+    /**
+     * <code>optional string default_value = 7;</code>
+     *
+     * <pre>
+     * For numeric types, contains the original text representation of the value.
+     * For booleans, "true" or "false".
+     * For strings, contains the default text contents (not escaped in any way).
+     * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
+     * TODO(kenton):  Base-64 encode?
+     * </pre>
+     */
+    public java.lang.String getDefaultValue() {
+      java.lang.Object ref = defaultValue_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          defaultValue_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string default_value = 7;</code>
+     *
+     * <pre>
+     * For numeric types, contains the original text representation of the value.
+     * For booleans, "true" or "false".
+     * For strings, contains the default text contents (not escaped in any way).
+     * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
+     * TODO(kenton):  Base-64 encode?
+     * </pre>
+     */
+    public com.google.protobuf.ByteString
+        getDefaultValueBytes() {
+      java.lang.Object ref = defaultValue_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        defaultValue_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    // optional .google.protobuf.FieldOptions options = 8;
+    public static final int OPTIONS_FIELD_NUMBER = 8;
+    private com.google.protobuf.DescriptorProtos.FieldOptions options_;
+    /**
+     * <code>optional .google.protobuf.FieldOptions options = 8;</code>
+     */
+    public boolean hasOptions() {
+      return ((bitField0_ & 0x00000080) == 0x00000080);
+    }
+    /**
+     * <code>optional .google.protobuf.FieldOptions options = 8;</code>
+     */
+    public com.google.protobuf.DescriptorProtos.FieldOptions getOptions() {
+      return options_;
+    }
+    /**
+     * <code>optional .google.protobuf.FieldOptions options = 8;</code>
+     */
+    public com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder getOptionsOrBuilder() {
+      return options_;
+    }
+
+    private void initFields() {
+      name_ = "";
+      number_ = 0;
+      label_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL;
+      type_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type.TYPE_DOUBLE;
+      typeName_ = "";
+      extendee_ = "";
+      defaultValue_ = "";
+      options_ = com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+
+      if (hasOptions()) {
+        if (!getOptions().isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        output.writeBytes(2, getExtendeeBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeInt32(3, number_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeEnum(4, label_.getNumber());
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeEnum(5, type_.getNumber());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeBytes(6, getTypeNameBytes());
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        output.writeBytes(7, getDefaultValueBytes());
+      }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        output.writeMessage(8, options_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(2, getExtendeeBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(3, number_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(4, label_.getNumber());
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(5, type_.getNumber());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(6, getTypeNameBytes());
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(7, getDefaultValueBytes());
+      }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, options_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FieldDescriptorProto prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code google.protobuf.FieldDescriptorProto}
+     *
+     * <pre>
+     * Describes a field within a message.
+     * </pre>
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.FieldDescriptorProto.class, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder.class);
+      }
+
+      // Construct using com.google.protobuf.DescriptorProtos.FieldDescriptorProto.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getOptionsFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        name_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        number_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        label_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        type_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type.TYPE_DOUBLE;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        typeName_ = "";
+        bitField0_ = (bitField0_ & ~0x00000010);
+        extendee_ = "";
+        bitField0_ = (bitField0_ & ~0x00000020);
+        defaultValue_ = "";
+        bitField0_ = (bitField0_ & ~0x00000040);
+        if (optionsBuilder_ == null) {
+          options_ = com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance();
+        } else {
+          optionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000080);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_descriptor;
+      }
+
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance();
+      }
+
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto build() {
+        com.google.protobuf.DescriptorProtos.FieldDescriptorProto result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto buildPartial() {
+        com.google.protobuf.DescriptorProtos.FieldDescriptorProto result = new com.google.protobuf.DescriptorProtos.FieldDescriptorProto(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.name_ = name_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.number_ = number_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.label_ = label_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.type_ = type_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.typeName_ = typeName_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000020;
+        }
+        result.extendee_ = extendee_;
+        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
+          to_bitField0_ |= 0x00000040;
+        }
+        result.defaultValue_ = defaultValue_;
+        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
+          to_bitField0_ |= 0x00000080;
+        }
+        if (optionsBuilder_ == null) {
+          result.options_ = options_;
+        } else {
+          result.options_ = optionsBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.FieldDescriptorProto) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.FieldDescriptorProto)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FieldDescriptorProto other) {
+        if (other == com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance()) return this;
+        if (other.hasName()) {
+          bitField0_ |= 0x00000001;
+          name_ = other.name_;
+          onChanged();
+        }
+        if (other.hasNumber()) {
+          setNumber(other.getNumber());
+        }
+        if (other.hasLabel()) {
+          setLabel(other.getLabel());
+        }
+        if (other.hasType()) {
+          setType(other.getType());
+        }
+        if (other.hasTypeName()) {
+          bitField0_ |= 0x00000010;
+          typeName_ = other.typeName_;
+          onChanged();
+        }
+        if (other.hasExtendee()) {
+          bitField0_ |= 0x00000020;
+          extendee_ = other.extendee_;
+          onChanged();
+        }
+        if (other.hasDefaultValue()) {
+          bitField0_ |= 0x00000040;
+          defaultValue_ = other.defaultValue_;
+          onChanged();
+        }
+        if (other.hasOptions()) {
+          mergeOptions(other.getOptions());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+
+      public final boolean isInitialized() {
+        if (hasOptions()) {
+          if (!getOptions().isInitialized()) {
+            
+            return false;
+          }
+        }
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.DescriptorProtos.FieldDescriptorProto parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.google.protobuf.DescriptorProtos.FieldDescriptorProto) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
       private int bitField0_;
-      
+
       // optional string name = 1;
       private java.lang.Object name_ = "";
+      /**
+       * <code>optional string name = 1;</code>
+       */
       public boolean hasName() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public String getName() {
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public java.lang.String getName() {
         java.lang.Object ref = name_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           name_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setName(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public Builder setName(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -6044,4 +8730,7 @@
         return this;
       }
+      /**
+       * <code>optional string name = 1;</code>
+       */
       public Builder clearName() {
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -6050,18 +8739,35 @@
         return this;
       }
-      void setName(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000001;
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
         name_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // optional int32 number = 3;
       private int number_ ;
+      /**
+       * <code>optional int32 number = 3;</code>
+       */
       public boolean hasNumber() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
+      /**
+       * <code>optional int32 number = 3;</code>
+       */
       public int getNumber() {
         return number_;
       }
+      /**
+       * <code>optional int32 number = 3;</code>
+       */
       public Builder setNumber(int value) {
         bitField0_ |= 0x00000002;
@@ -6070,4 +8776,7 @@
         return this;
       }
+      /**
+       * <code>optional int32 number = 3;</code>
+       */
       public Builder clearNumber() {
         bitField0_ = (bitField0_ & ~0x00000002);
@@ -6076,13 +8785,22 @@
         return this;
       }
-      
+
       // optional .google.protobuf.FieldDescriptorProto.Label label = 4;
       private com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label label_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL;
+      /**
+       * <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>
+       */
       public boolean hasLabel() {
         return ((bitField0_ & 0x00000004) == 0x00000004);
       }
+      /**
+       * <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label getLabel() {
         return label_;
       }
+      /**
+       * <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>
+       */
       public Builder setLabel(com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label value) {
         if (value == null) {
@@ -6094,4 +8812,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>
+       */
       public Builder clearLabel() {
         bitField0_ = (bitField0_ & ~0x00000004);
@@ -6100,13 +8821,37 @@
         return this;
       }
-      
+
       // optional .google.protobuf.FieldDescriptorProto.Type type = 5;
       private com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type type_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type.TYPE_DOUBLE;
+      /**
+       * <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>
+       *
+       * <pre>
+       * If type_name is set, this need not be set.  If both this and type_name
+       * are set, this must be either TYPE_ENUM or TYPE_MESSAGE.
+       * </pre>
+       */
       public boolean hasType() {
         return ((bitField0_ & 0x00000008) == 0x00000008);
       }
+      /**
+       * <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>
+       *
+       * <pre>
+       * If type_name is set, this need not be set.  If both this and type_name
+       * are set, this must be either TYPE_ENUM or TYPE_MESSAGE.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type getType() {
         return type_;
       }
+      /**
+       * <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>
+       *
+       * <pre>
+       * If type_name is set, this need not be set.  If both this and type_name
+       * are set, this must be either TYPE_ENUM or TYPE_MESSAGE.
+       * </pre>
+       */
       public Builder setType(com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type value) {
         if (value == null) {
@@ -6118,4 +8863,12 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>
+       *
+       * <pre>
+       * If type_name is set, this need not be set.  If both this and type_name
+       * are set, this must be either TYPE_ENUM or TYPE_MESSAGE.
+       * </pre>
+       */
       public Builder clearType() {
         bitField0_ = (bitField0_ & ~0x00000008);
@@ -6124,21 +8877,80 @@
         return this;
       }
-      
+
       // optional string type_name = 6;
       private java.lang.Object typeName_ = "";
+      /**
+       * <code>optional string type_name = 6;</code>
+       *
+       * <pre>
+       * For message and enum types, this is the name of the type.  If the name
+       * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+       * rules are used to find the type (i.e. first the nested types within this
+       * message are searched, then within the parent, on up to the root
+       * namespace).
+       * </pre>
+       */
       public boolean hasTypeName() {
         return ((bitField0_ & 0x00000010) == 0x00000010);
       }
-      public String getTypeName() {
+      /**
+       * <code>optional string type_name = 6;</code>
+       *
+       * <pre>
+       * For message and enum types, this is the name of the type.  If the name
+       * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+       * rules are used to find the type (i.e. first the nested types within this
+       * message are searched, then within the parent, on up to the root
+       * namespace).
+       * </pre>
+       */
+      public java.lang.String getTypeName() {
         java.lang.Object ref = typeName_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           typeName_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setTypeName(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string type_name = 6;</code>
+       *
+       * <pre>
+       * For message and enum types, this is the name of the type.  If the name
+       * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+       * rules are used to find the type (i.e. first the nested types within this
+       * message are searched, then within the parent, on up to the root
+       * namespace).
+       * </pre>
+       */
+      public com.google.protobuf.ByteString
+          getTypeNameBytes() {
+        java.lang.Object ref = typeName_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          typeName_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string type_name = 6;</code>
+       *
+       * <pre>
+       * For message and enum types, this is the name of the type.  If the name
+       * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+       * rules are used to find the type (i.e. first the nested types within this
+       * message are searched, then within the parent, on up to the root
+       * namespace).
+       * </pre>
+       */
+      public Builder setTypeName(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -6149,4 +8961,15 @@
         return this;
       }
+      /**
+       * <code>optional string type_name = 6;</code>
+       *
+       * <pre>
+       * For message and enum types, this is the name of the type.  If the name
+       * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+       * rules are used to find the type (i.e. first the nested types within this
+       * message are searched, then within the parent, on up to the root
+       * namespace).
+       * </pre>
+       */
       public Builder clearTypeName() {
         bitField0_ = (bitField0_ & ~0x00000010);
@@ -6155,26 +8978,89 @@
         return this;
       }
-      void setTypeName(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000010;
+      /**
+       * <code>optional string type_name = 6;</code>
+       *
+       * <pre>
+       * For message and enum types, this is the name of the type.  If the name
+       * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+       * rules are used to find the type (i.e. first the nested types within this
+       * message are searched, then within the parent, on up to the root
+       * namespace).
+       * </pre>
+       */
+      public Builder setTypeNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000010;
         typeName_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // optional string extendee = 2;
       private java.lang.Object extendee_ = "";
+      /**
+       * <code>optional string extendee = 2;</code>
+       *
+       * <pre>
+       * For extensions, this is the name of the type being extended.  It is
+       * resolved in the same manner as type_name.
+       * </pre>
+       */
       public boolean hasExtendee() {
         return ((bitField0_ & 0x00000020) == 0x00000020);
       }
-      public String getExtendee() {
+      /**
+       * <code>optional string extendee = 2;</code>
+       *
+       * <pre>
+       * For extensions, this is the name of the type being extended.  It is
+       * resolved in the same manner as type_name.
+       * </pre>
+       */
+      public java.lang.String getExtendee() {
         java.lang.Object ref = extendee_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           extendee_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setExtendee(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string extendee = 2;</code>
+       *
+       * <pre>
+       * For extensions, this is the name of the type being extended.  It is
+       * resolved in the same manner as type_name.
+       * </pre>
+       */
+      public com.google.protobuf.ByteString
+          getExtendeeBytes() {
+        java.lang.Object ref = extendee_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          extendee_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string extendee = 2;</code>
+       *
+       * <pre>
+       * For extensions, this is the name of the type being extended.  It is
+       * resolved in the same manner as type_name.
+       * </pre>
+       */
+      public Builder setExtendee(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -6185,4 +9071,12 @@
         return this;
       }
+      /**
+       * <code>optional string extendee = 2;</code>
+       *
+       * <pre>
+       * For extensions, this is the name of the type being extended.  It is
+       * resolved in the same manner as type_name.
+       * </pre>
+       */
       public Builder clearExtendee() {
         bitField0_ = (bitField0_ & ~0x00000020);
@@ -6191,26 +9085,98 @@
         return this;
       }
-      void setExtendee(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000020;
+      /**
+       * <code>optional string extendee = 2;</code>
+       *
+       * <pre>
+       * For extensions, this is the name of the type being extended.  It is
+       * resolved in the same manner as type_name.
+       * </pre>
+       */
+      public Builder setExtendeeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000020;
         extendee_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // optional string default_value = 7;
       private java.lang.Object defaultValue_ = "";
+      /**
+       * <code>optional string default_value = 7;</code>
+       *
+       * <pre>
+       * For numeric types, contains the original text representation of the value.
+       * For booleans, "true" or "false".
+       * For strings, contains the default text contents (not escaped in any way).
+       * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
+       * TODO(kenton):  Base-64 encode?
+       * </pre>
+       */
       public boolean hasDefaultValue() {
         return ((bitField0_ & 0x00000040) == 0x00000040);
       }
-      public String getDefaultValue() {
+      /**
+       * <code>optional string default_value = 7;</code>
+       *
+       * <pre>
+       * For numeric types, contains the original text representation of the value.
+       * For booleans, "true" or "false".
+       * For strings, contains the default text contents (not escaped in any way).
+       * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
+       * TODO(kenton):  Base-64 encode?
+       * </pre>
+       */
+      public java.lang.String getDefaultValue() {
         java.lang.Object ref = defaultValue_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           defaultValue_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setDefaultValue(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string default_value = 7;</code>
+       *
+       * <pre>
+       * For numeric types, contains the original text representation of the value.
+       * For booleans, "true" or "false".
+       * For strings, contains the default text contents (not escaped in any way).
+       * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
+       * TODO(kenton):  Base-64 encode?
+       * </pre>
+       */
+      public com.google.protobuf.ByteString
+          getDefaultValueBytes() {
+        java.lang.Object ref = defaultValue_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          defaultValue_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string default_value = 7;</code>
+       *
+       * <pre>
+       * For numeric types, contains the original text representation of the value.
+       * For booleans, "true" or "false".
+       * For strings, contains the default text contents (not escaped in any way).
+       * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
+       * TODO(kenton):  Base-64 encode?
+       * </pre>
+       */
+      public Builder setDefaultValue(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -6221,4 +9187,15 @@
         return this;
       }
+      /**
+       * <code>optional string default_value = 7;</code>
+       *
+       * <pre>
+       * For numeric types, contains the original text representation of the value.
+       * For booleans, "true" or "false".
+       * For strings, contains the default text contents (not escaped in any way).
+       * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
+       * TODO(kenton):  Base-64 encode?
+       * </pre>
+       */
       public Builder clearDefaultValue() {
         bitField0_ = (bitField0_ & ~0x00000040);
@@ -6227,17 +9204,39 @@
         return this;
       }
-      void setDefaultValue(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000040;
+      /**
+       * <code>optional string default_value = 7;</code>
+       *
+       * <pre>
+       * For numeric types, contains the original text representation of the value.
+       * For booleans, "true" or "false".
+       * For strings, contains the default text contents (not escaped in any way).
+       * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
+       * TODO(kenton):  Base-64 encode?
+       * </pre>
+       */
+      public Builder setDefaultValueBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000040;
         defaultValue_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // optional .google.protobuf.FieldOptions options = 8;
       private com.google.protobuf.DescriptorProtos.FieldOptions options_ = com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
           com.google.protobuf.DescriptorProtos.FieldOptions, com.google.protobuf.DescriptorProtos.FieldOptions.Builder, com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder> optionsBuilder_;
+      /**
+       * <code>optional .google.protobuf.FieldOptions options = 8;</code>
+       */
       public boolean hasOptions() {
         return ((bitField0_ & 0x00000080) == 0x00000080);
       }
+      /**
+       * <code>optional .google.protobuf.FieldOptions options = 8;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldOptions getOptions() {
         if (optionsBuilder_ == null) {
@@ -6247,4 +9246,7 @@
         }
       }
+      /**
+       * <code>optional .google.protobuf.FieldOptions options = 8;</code>
+       */
       public Builder setOptions(com.google.protobuf.DescriptorProtos.FieldOptions value) {
         if (optionsBuilder_ == null) {
@@ -6260,4 +9262,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.FieldOptions options = 8;</code>
+       */
       public Builder setOptions(
           com.google.protobuf.DescriptorProtos.FieldOptions.Builder builderForValue) {
@@ -6271,4 +9276,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.FieldOptions options = 8;</code>
+       */
       public Builder mergeOptions(com.google.protobuf.DescriptorProtos.FieldOptions value) {
         if (optionsBuilder_ == null) {
@@ -6287,4 +9295,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.FieldOptions options = 8;</code>
+       */
       public Builder clearOptions() {
         if (optionsBuilder_ == null) {
@@ -6297,4 +9308,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.FieldOptions options = 8;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldOptions.Builder getOptionsBuilder() {
         bitField0_ |= 0x00000080;
@@ -6302,4 +9316,7 @@
         return getOptionsFieldBuilder().getBuilder();
       }
+      /**
+       * <code>optional .google.protobuf.FieldOptions options = 8;</code>
+       */
       public com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder getOptionsOrBuilder() {
         if (optionsBuilder_ != null) {
@@ -6309,4 +9326,7 @@
         }
       }
+      /**
+       * <code>optional .google.protobuf.FieldOptions options = 8;</code>
+       */
       private com.google.protobuf.SingleFieldBuilder<
           com.google.protobuf.DescriptorProtos.FieldOptions, com.google.protobuf.DescriptorProtos.FieldOptions.Builder, com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder> 
@@ -6322,82 +9342,218 @@
         return optionsBuilder_;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:google.protobuf.FieldDescriptorProto)
     }
-    
+
     static {
       defaultInstance = new FieldDescriptorProto(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:google.protobuf.FieldDescriptorProto)
   }
-  
+
   public interface EnumDescriptorProtoOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
-    
+
     // optional string name = 1;
+    /**
+     * <code>optional string name = 1;</code>
+     */
     boolean hasName();
-    String getName();
-    
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    java.lang.String getName();
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
     // repeated .google.protobuf.EnumValueDescriptorProto value = 2;
+    /**
+     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto> 
         getValueList();
+    /**
+     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+     */
     com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto getValue(int index);
+    /**
+     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+     */
     int getValueCount();
+    /**
+     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder> 
         getValueOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+     */
     com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder getValueOrBuilder(
         int index);
-    
+
     // optional .google.protobuf.EnumOptions options = 3;
+    /**
+     * <code>optional .google.protobuf.EnumOptions options = 3;</code>
+     */
     boolean hasOptions();
+    /**
+     * <code>optional .google.protobuf.EnumOptions options = 3;</code>
+     */
     com.google.protobuf.DescriptorProtos.EnumOptions getOptions();
+    /**
+     * <code>optional .google.protobuf.EnumOptions options = 3;</code>
+     */
     com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder getOptionsOrBuilder();
   }
+  /**
+   * Protobuf type {@code google.protobuf.EnumDescriptorProto}
+   *
+   * <pre>
+   * Describes an enum type.
+   * </pre>
+   */
   public static final class EnumDescriptorProto extends
       com.google.protobuf.GeneratedMessage
       implements EnumDescriptorProtoOrBuilder {
     // Use EnumDescriptorProto.newBuilder() to construct.
-    private EnumDescriptorProto(Builder builder) {
+    private EnumDescriptorProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
       super(builder);
-    }
-    private EnumDescriptorProto(boolean noInit) {}
-    
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private EnumDescriptorProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
     private static final EnumDescriptorProto defaultInstance;
     public static EnumDescriptorProto getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public EnumDescriptorProto getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private EnumDescriptorProto(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              name_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+                value_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              value_.add(input.readMessage(com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.PARSER, extensionRegistry));
+              break;
+            }
+            case 26: {
+              com.google.protobuf.DescriptorProtos.EnumOptions.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000002) == 0x00000002)) {
+                subBuilder = options_.toBuilder();
+              }
+              options_ = input.readMessage(com.google.protobuf.DescriptorProtos.EnumOptions.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(options_);
+                options_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000002;
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+          value_ = java.util.Collections.unmodifiableList(value_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
       return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_descriptor;
     }
-    
+
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_fieldAccessorTable;
-    }
-    
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.protobuf.DescriptorProtos.EnumDescriptorProto.class, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<EnumDescriptorProto> PARSER =
+        new com.google.protobuf.AbstractParser<EnumDescriptorProto>() {
+      public EnumDescriptorProto parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new EnumDescriptorProto(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<EnumDescriptorProto> getParserForType() {
+      return PARSER;
+    }
+
     private int bitField0_;
     // optional string name = 1;
     public static final int NAME_FIELD_NUMBER = 1;
     private java.lang.Object name_;
+    /**
+     * <code>optional string name = 1;</code>
+     */
     public boolean hasName() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
-    public String getName() {
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    public java.lang.String getName() {
       java.lang.Object ref = name_;
-      if (ref instanceof String) {
-        return (String) ref;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
           name_ = s;
         }
@@ -6405,9 +9561,14 @@
       }
     }
-    private com.google.protobuf.ByteString getNameBytes() {
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    public com.google.protobuf.ByteString
+        getNameBytes() {
       java.lang.Object ref = name_;
-      if (ref instanceof String) {
+      if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
         name_ = b;
         return b;
@@ -6416,39 +9577,63 @@
       }
     }
-    
+
     // repeated .google.protobuf.EnumValueDescriptorProto value = 2;
     public static final int VALUE_FIELD_NUMBER = 2;
     private java.util.List<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto> value_;
+    /**
+     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+     */
     public java.util.List<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto> getValueList() {
       return value_;
     }
+    /**
+     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+     */
     public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder> 
         getValueOrBuilderList() {
       return value_;
     }
+    /**
+     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+     */
     public int getValueCount() {
       return value_.size();
     }
+    /**
+     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+     */
     public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto getValue(int index) {
       return value_.get(index);
     }
+    /**
+     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+     */
     public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder getValueOrBuilder(
         int index) {
       return value_.get(index);
     }
-    
+
     // optional .google.protobuf.EnumOptions options = 3;
     public static final int OPTIONS_FIELD_NUMBER = 3;
     private com.google.protobuf.DescriptorProtos.EnumOptions options_;
+    /**
+     * <code>optional .google.protobuf.EnumOptions options = 3;</code>
+     */
     public boolean hasOptions() {
       return ((bitField0_ & 0x00000002) == 0x00000002);
     }
+    /**
+     * <code>optional .google.protobuf.EnumOptions options = 3;</code>
+     */
     public com.google.protobuf.DescriptorProtos.EnumOptions getOptions() {
       return options_;
     }
+    /**
+     * <code>optional .google.protobuf.EnumOptions options = 3;</code>
+     */
     public com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder getOptionsOrBuilder() {
       return options_;
     }
-    
+
     private void initFields() {
       name_ = "";
@@ -6460,5 +9645,5 @@
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
-      
+
       for (int i = 0; i < getValueCount(); i++) {
         if (!getValue(i).isInitialized()) {
@@ -6476,5 +9661,5 @@
       return true;
     }
-    
+
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
@@ -6491,10 +9676,10 @@
       getUnknownFields().writeTo(output);
     }
-    
+
     private int memoizedSerializedSize = -1;
     public int getSerializedSize() {
       int size = memoizedSerializedSize;
       if (size != -1) return size;
-    
+
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
@@ -6514,5 +9699,5 @@
       return size;
     }
-    
+
     private static final long serialVersionUID = 0L;
     @java.lang.Override
@@ -6521,9 +9706,9 @@
       return super.writeReplace();
     }
-    
+
     public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(
@@ -6531,10 +9716,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(
@@ -6542,10 +9726,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(
@@ -6553,15 +9736,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseDelimitedFrom(
@@ -6569,15 +9746,10 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(
@@ -6585,8 +9757,7 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
@@ -6595,5 +9766,5 @@
     }
     public Builder toBuilder() { return newBuilder(this); }
-    
+
     @java.lang.Override
     protected Builder newBuilderForType(
@@ -6602,4 +9773,11 @@
       return builder;
     }
+    /**
+     * Protobuf type {@code google.protobuf.EnumDescriptorProto}
+     *
+     * <pre>
+     * Describes an enum type.
+     * </pre>
+     */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
@@ -6609,16 +9787,19 @@
         return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_descriptor;
       }
-      
+
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_fieldAccessorTable;
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.EnumDescriptorProto.class, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder.class);
+      }
+
       // Construct using com.google.protobuf.DescriptorProtos.EnumDescriptorProto.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
-      
-      private Builder(BuilderParent parent) {
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
         super(parent);
         maybeForceBuilderInitialization();
@@ -6633,5 +9814,5 @@
         return new Builder();
       }
-      
+
       public Builder clear() {
         super.clear();
@@ -6652,18 +9833,18 @@
         return this;
       }
-      
+
       public Builder clone() {
         return create().mergeFrom(buildPartial());
       }
-      
+
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDescriptor();
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_descriptor;
+      }
+
       public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getDefaultInstanceForType() {
         return com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDefaultInstance();
       }
-      
+
       public com.google.protobuf.DescriptorProtos.EnumDescriptorProto build() {
         com.google.protobuf.DescriptorProtos.EnumDescriptorProto result = buildPartial();
@@ -6673,15 +9854,5 @@
         return result;
       }
-      
-      private com.google.protobuf.DescriptorProtos.EnumDescriptorProto buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        com.google.protobuf.DescriptorProtos.EnumDescriptorProto result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
+
       public com.google.protobuf.DescriptorProtos.EnumDescriptorProto buildPartial() {
         com.google.protobuf.DescriptorProtos.EnumDescriptorProto result = new com.google.protobuf.DescriptorProtos.EnumDescriptorProto(this);
@@ -6713,5 +9884,5 @@
         return result;
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.Message other) {
         if (other instanceof com.google.protobuf.DescriptorProtos.EnumDescriptorProto) {
@@ -6722,9 +9893,11 @@
         }
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.DescriptorProtos.EnumDescriptorProto other) {
         if (other == com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDefaultInstance()) return this;
         if (other.hasName()) {
-          setName(other.getName());
+          bitField0_ |= 0x00000001;
+          name_ = other.name_;
+          onChanged();
         }
         if (valueBuilder_ == null) {
@@ -6760,5 +9933,5 @@
         return this;
       }
-      
+
       public final boolean isInitialized() {
         for (int i = 0; i < getValueCount(); i++) {
@@ -6776,70 +9949,67 @@
         return true;
       }
-      
+
       public Builder mergeFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder(
-            this.getUnknownFields());
-        while (true) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              this.setUnknownFields(unknownFields.build());
-              onChanged();
-              return this;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
-              }
-              break;
-            }
-            case 10: {
-              bitField0_ |= 0x00000001;
-              name_ = input.readBytes();
-              break;
-            }
-            case 18: {
-              com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addValue(subBuilder.buildPartial());
-              break;
-            }
-            case 26: {
-              com.google.protobuf.DescriptorProtos.EnumOptions.Builder subBuilder = com.google.protobuf.DescriptorProtos.EnumOptions.newBuilder();
-              if (hasOptions()) {
-                subBuilder.mergeFrom(getOptions());
-              }
-              input.readMessage(subBuilder, extensionRegistry);
-              setOptions(subBuilder.buildPartial());
-              break;
-            }
+        com.google.protobuf.DescriptorProtos.EnumDescriptorProto parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.google.protobuf.DescriptorProtos.EnumDescriptorProto) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
         }
-      }
-      
+        return this;
+      }
       private int bitField0_;
-      
+
       // optional string name = 1;
       private java.lang.Object name_ = "";
+      /**
+       * <code>optional string name = 1;</code>
+       */
       public boolean hasName() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public String getName() {
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public java.lang.String getName() {
         java.lang.Object ref = name_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           name_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setName(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public Builder setName(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -6850,4 +10020,7 @@
         return this;
       }
+      /**
+       * <code>optional string name = 1;</code>
+       */
       public Builder clearName() {
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -6856,10 +10029,18 @@
         return this;
       }
-      void setName(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000001;
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
         name_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // repeated .google.protobuf.EnumValueDescriptorProto value = 2;
       private java.util.List<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto> value_ =
@@ -6871,8 +10052,11 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder> valueBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto> getValueList() {
         if (valueBuilder_ == null) {
@@ -6882,4 +10066,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+       */
       public int getValueCount() {
         if (valueBuilder_ == null) {
@@ -6889,4 +10076,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto getValue(int index) {
         if (valueBuilder_ == null) {
@@ -6896,4 +10086,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+       */
       public Builder setValue(
           int index, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto value) {
@@ -6910,4 +10103,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+       */
       public Builder setValue(
           int index, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) {
@@ -6921,4 +10117,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+       */
       public Builder addValue(com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto value) {
         if (valueBuilder_ == null) {
@@ -6934,4 +10133,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+       */
       public Builder addValue(
           int index, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto value) {
@@ -6948,4 +10150,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+       */
       public Builder addValue(
           com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) {
@@ -6959,4 +10164,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+       */
       public Builder addValue(
           int index, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) {
@@ -6970,4 +10178,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+       */
       public Builder addAllValue(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto> values) {
@@ -6981,4 +10192,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+       */
       public Builder clearValue() {
         if (valueBuilder_ == null) {
@@ -6991,4 +10205,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+       */
       public Builder removeValue(int index) {
         if (valueBuilder_ == null) {
@@ -7001,8 +10218,14 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder getValueBuilder(
           int index) {
         return getValueFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder getValueOrBuilder(
           int index) {
@@ -7012,4 +10235,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder> 
            getValueOrBuilderList() {
@@ -7020,8 +10246,14 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder addValueBuilder() {
         return getValueFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder addValueBuilder(
           int index) {
@@ -7029,4 +10261,7 @@
             index, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder> 
            getValueBuilderList() {
@@ -7047,12 +10282,18 @@
         return valueBuilder_;
       }
-      
+
       // optional .google.protobuf.EnumOptions options = 3;
       private com.google.protobuf.DescriptorProtos.EnumOptions options_ = com.google.protobuf.DescriptorProtos.EnumOptions.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
           com.google.protobuf.DescriptorProtos.EnumOptions, com.google.protobuf.DescriptorProtos.EnumOptions.Builder, com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder> optionsBuilder_;
+      /**
+       * <code>optional .google.protobuf.EnumOptions options = 3;</code>
+       */
       public boolean hasOptions() {
         return ((bitField0_ & 0x00000004) == 0x00000004);
       }
+      /**
+       * <code>optional .google.protobuf.EnumOptions options = 3;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumOptions getOptions() {
         if (optionsBuilder_ == null) {
@@ -7062,4 +10303,7 @@
         }
       }
+      /**
+       * <code>optional .google.protobuf.EnumOptions options = 3;</code>
+       */
       public Builder setOptions(com.google.protobuf.DescriptorProtos.EnumOptions value) {
         if (optionsBuilder_ == null) {
@@ -7075,4 +10319,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.EnumOptions options = 3;</code>
+       */
       public Builder setOptions(
           com.google.protobuf.DescriptorProtos.EnumOptions.Builder builderForValue) {
@@ -7086,4 +10333,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.EnumOptions options = 3;</code>
+       */
       public Builder mergeOptions(com.google.protobuf.DescriptorProtos.EnumOptions value) {
         if (optionsBuilder_ == null) {
@@ -7102,4 +10352,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.EnumOptions options = 3;</code>
+       */
       public Builder clearOptions() {
         if (optionsBuilder_ == null) {
@@ -7112,4 +10365,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.EnumOptions options = 3;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumOptions.Builder getOptionsBuilder() {
         bitField0_ |= 0x00000004;
@@ -7117,4 +10373,7 @@
         return getOptionsFieldBuilder().getBuilder();
       }
+      /**
+       * <code>optional .google.protobuf.EnumOptions options = 3;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder getOptionsOrBuilder() {
         if (optionsBuilder_ != null) {
@@ -7124,4 +10383,7 @@
         }
       }
+      /**
+       * <code>optional .google.protobuf.EnumOptions options = 3;</code>
+       */
       private com.google.protobuf.SingleFieldBuilder<
           com.google.protobuf.DescriptorProtos.EnumOptions, com.google.protobuf.DescriptorProtos.EnumOptions.Builder, com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder> 
@@ -7137,417 +10399,110 @@
         return optionsBuilder_;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:google.protobuf.EnumDescriptorProto)
     }
-    
+
     static {
       defaultInstance = new EnumDescriptorProto(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:google.protobuf.EnumDescriptorProto)
   }
-  
+
   public interface EnumValueDescriptorProtoOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
-    
+
     // optional string name = 1;
+    /**
+     * <code>optional string name = 1;</code>
+     */
     boolean hasName();
-    String getName();
-    
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    java.lang.String getName();
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
     // optional int32 number = 2;
+    /**
+     * <code>optional int32 number = 2;</code>
+     */
     boolean hasNumber();
+    /**
+     * <code>optional int32 number = 2;</code>
+     */
     int getNumber();
-    
+
     // optional .google.protobuf.EnumValueOptions options = 3;
+    /**
+     * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
+     */
     boolean hasOptions();
+    /**
+     * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
+     */
     com.google.protobuf.DescriptorProtos.EnumValueOptions getOptions();
+    /**
+     * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
+     */
     com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder getOptionsOrBuilder();
   }
+  /**
+   * Protobuf type {@code google.protobuf.EnumValueDescriptorProto}
+   *
+   * <pre>
+   * Describes a value within an enum.
+   * </pre>
+   */
   public static final class EnumValueDescriptorProto extends
       com.google.protobuf.GeneratedMessage
       implements EnumValueDescriptorProtoOrBuilder {
     // Use EnumValueDescriptorProto.newBuilder() to construct.
-    private EnumValueDescriptorProto(Builder builder) {
+    private EnumValueDescriptorProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
       super(builder);
-    }
-    private EnumValueDescriptorProto(boolean noInit) {}
-    
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private EnumValueDescriptorProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
     private static final EnumValueDescriptorProto defaultInstance;
     public static EnumValueDescriptorProto getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public EnumValueDescriptorProto getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_descriptor;
-    }
-    
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_fieldAccessorTable;
-    }
-    
-    private int bitField0_;
-    // optional string name = 1;
-    public static final int NAME_FIELD_NUMBER = 1;
-    private java.lang.Object name_;
-    public boolean hasName() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    public String getName() {
-      java.lang.Object ref = name_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          name_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getNameBytes() {
-      java.lang.Object ref = name_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        name_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    
-    // optional int32 number = 2;
-    public static final int NUMBER_FIELD_NUMBER = 2;
-    private int number_;
-    public boolean hasNumber() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    public int getNumber() {
-      return number_;
-    }
-    
-    // optional .google.protobuf.EnumValueOptions options = 3;
-    public static final int OPTIONS_FIELD_NUMBER = 3;
-    private com.google.protobuf.DescriptorProtos.EnumValueOptions options_;
-    public boolean hasOptions() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
-    }
-    public com.google.protobuf.DescriptorProtos.EnumValueOptions getOptions() {
-      return options_;
-    }
-    public com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder getOptionsOrBuilder() {
-      return options_;
-    }
-    
-    private void initFields() {
-      name_ = "";
-      number_ = 0;
-      options_ = com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance();
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
-      
-      if (hasOptions()) {
-        if (!getOptions().isInitialized()) {
-          memoizedIsInitialized = 0;
-          return false;
-        }
-      }
-      memoizedIsInitialized = 1;
-      return true;
-    }
-    
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBytes(1, getNameBytes());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeInt32(2, number_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeMessage(3, options_);
-      }
-      getUnknownFields().writeTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-    
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(1, getNameBytes());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(2, number_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, options_);
-      }
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-    
-    private static final long serialVersionUID = 0L;
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
     @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-    
-    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
-        com.google.protobuf.ByteString data,
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private EnumValueDescriptorProto(
+        com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
-    }
-    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto 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 com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto 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(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-    
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_descriptor;
-      }
-      
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_fieldAccessorTable;
-      }
-      
-      // Construct using com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-      
-      private Builder(BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getOptionsFieldBuilder();
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-      
-      public Builder clear() {
-        super.clear();
-        name_ = "";
-        bitField0_ = (bitField0_ & ~0x00000001);
-        number_ = 0;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        if (optionsBuilder_ == null) {
-          options_ = com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance();
-        } else {
-          optionsBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000004);
-        return this;
-      }
-      
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-      
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.getDescriptor();
-      }
-      
-      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto getDefaultInstanceForType() {
-        return com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.getDefaultInstance();
-      }
-      
-      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto build() {
-        com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-      
-      private com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
-      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto buildPartial() {
-        com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto result = new com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.name_ = name_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.number_ = number_;
-        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
-          to_bitField0_ |= 0x00000004;
-        }
-        if (optionsBuilder_ == null) {
-          result.options_ = options_;
-        } else {
-          result.options_ = optionsBuilder_.build();
-        }
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-      
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto) {
-          return mergeFrom((com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-      
-      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto other) {
-        if (other == com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.getDefaultInstance()) return this;
-        if (other.hasName()) {
-          setName(other.getName());
-        }
-        if (other.hasNumber()) {
-          setNumber(other.getNumber());
-        }
-        if (other.hasOptions()) {
-          mergeOptions(other.getOptions());
-        }
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-      
-      public final boolean isInitialized() {
-        if (hasOptions()) {
-          if (!getOptions().isInitialized()) {
-            
-            return false;
-          }
-        }
-        return true;
-      }
-      
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder(
-            this.getUnknownFields());
-        while (true) {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
           int tag = input.readTag();
           switch (tag) {
             case 0:
-              this.setUnknownFields(unknownFields.build());
-              onChanged();
-              return this;
+              done = true;
+              break;
             default: {
               if (!parseUnknownField(input, unknownFields,
                                      extensionRegistry, tag)) {
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
+                done = true;
               }
               break;
@@ -7564,34 +10519,468 @@
             }
             case 26: {
-              com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder subBuilder = com.google.protobuf.DescriptorProtos.EnumValueOptions.newBuilder();
-              if (hasOptions()) {
-                subBuilder.mergeFrom(getOptions());
+              com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000004) == 0x00000004)) {
+                subBuilder = options_.toBuilder();
               }
-              input.readMessage(subBuilder, extensionRegistry);
-              setOptions(subBuilder.buildPartial());
+              options_ = input.readMessage(com.google.protobuf.DescriptorProtos.EnumValueOptions.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(options_);
+                options_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000004;
               break;
             }
           }
         }
-      }
-      
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.class, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<EnumValueDescriptorProto> PARSER =
+        new com.google.protobuf.AbstractParser<EnumValueDescriptorProto>() {
+      public EnumValueDescriptorProto parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new EnumValueDescriptorProto(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<EnumValueDescriptorProto> getParserForType() {
+      return PARSER;
+    }
+
+    private int bitField0_;
+    // optional string name = 1;
+    public static final int NAME_FIELD_NUMBER = 1;
+    private java.lang.Object name_;
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    public boolean hasName() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          name_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    // optional int32 number = 2;
+    public static final int NUMBER_FIELD_NUMBER = 2;
+    private int number_;
+    /**
+     * <code>optional int32 number = 2;</code>
+     */
+    public boolean hasNumber() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>optional int32 number = 2;</code>
+     */
+    public int getNumber() {
+      return number_;
+    }
+
+    // optional .google.protobuf.EnumValueOptions options = 3;
+    public static final int OPTIONS_FIELD_NUMBER = 3;
+    private com.google.protobuf.DescriptorProtos.EnumValueOptions options_;
+    /**
+     * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
+     */
+    public boolean hasOptions() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    /**
+     * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
+     */
+    public com.google.protobuf.DescriptorProtos.EnumValueOptions getOptions() {
+      return options_;
+    }
+    /**
+     * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
+     */
+    public com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder getOptionsOrBuilder() {
+      return options_;
+    }
+
+    private void initFields() {
+      name_ = "";
+      number_ = 0;
+      options_ = com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+
+      if (hasOptions()) {
+        if (!getOptions().isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeInt32(2, number_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeMessage(3, options_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(2, number_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, options_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code google.protobuf.EnumValueDescriptorProto}
+     *
+     * <pre>
+     * Describes a value within an enum.
+     * </pre>
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.class, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder.class);
+      }
+
+      // Construct using com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getOptionsFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        name_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        number_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        if (optionsBuilder_ == null) {
+          options_ = com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance();
+        } else {
+          optionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000004);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_descriptor;
+      }
+
+      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.getDefaultInstance();
+      }
+
+      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto build() {
+        com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto buildPartial() {
+        com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto result = new com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.name_ = name_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.number_ = number_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        if (optionsBuilder_ == null) {
+          result.options_ = options_;
+        } else {
+          result.options_ = optionsBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto other) {
+        if (other == com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.getDefaultInstance()) return this;
+        if (other.hasName()) {
+          bitField0_ |= 0x00000001;
+          name_ = other.name_;
+          onChanged();
+        }
+        if (other.hasNumber()) {
+          setNumber(other.getNumber());
+        }
+        if (other.hasOptions()) {
+          mergeOptions(other.getOptions());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+
+      public final boolean isInitialized() {
+        if (hasOptions()) {
+          if (!getOptions().isInitialized()) {
+            
+            return false;
+          }
+        }
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
       private int bitField0_;
-      
+
       // optional string name = 1;
       private java.lang.Object name_ = "";
+      /**
+       * <code>optional string name = 1;</code>
+       */
       public boolean hasName() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public String getName() {
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public java.lang.String getName() {
         java.lang.Object ref = name_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           name_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setName(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public Builder setName(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -7602,4 +10991,7 @@
         return this;
       }
+      /**
+       * <code>optional string name = 1;</code>
+       */
       public Builder clearName() {
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -7608,18 +11000,35 @@
         return this;
       }
-      void setName(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000001;
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
         name_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // optional int32 number = 2;
       private int number_ ;
+      /**
+       * <code>optional int32 number = 2;</code>
+       */
       public boolean hasNumber() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
+      /**
+       * <code>optional int32 number = 2;</code>
+       */
       public int getNumber() {
         return number_;
       }
+      /**
+       * <code>optional int32 number = 2;</code>
+       */
       public Builder setNumber(int value) {
         bitField0_ |= 0x00000002;
@@ -7628,4 +11037,7 @@
         return this;
       }
+      /**
+       * <code>optional int32 number = 2;</code>
+       */
       public Builder clearNumber() {
         bitField0_ = (bitField0_ & ~0x00000002);
@@ -7634,12 +11046,18 @@
         return this;
       }
-      
+
       // optional .google.protobuf.EnumValueOptions options = 3;
       private com.google.protobuf.DescriptorProtos.EnumValueOptions options_ = com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
           com.google.protobuf.DescriptorProtos.EnumValueOptions, com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder, com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder> optionsBuilder_;
+      /**
+       * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
+       */
       public boolean hasOptions() {
         return ((bitField0_ & 0x00000004) == 0x00000004);
       }
+      /**
+       * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumValueOptions getOptions() {
         if (optionsBuilder_ == null) {
@@ -7649,4 +11067,7 @@
         }
       }
+      /**
+       * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
+       */
       public Builder setOptions(com.google.protobuf.DescriptorProtos.EnumValueOptions value) {
         if (optionsBuilder_ == null) {
@@ -7662,4 +11083,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
+       */
       public Builder setOptions(
           com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder builderForValue) {
@@ -7673,4 +11097,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
+       */
       public Builder mergeOptions(com.google.protobuf.DescriptorProtos.EnumValueOptions value) {
         if (optionsBuilder_ == null) {
@@ -7689,4 +11116,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
+       */
       public Builder clearOptions() {
         if (optionsBuilder_ == null) {
@@ -7699,4 +11129,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder getOptionsBuilder() {
         bitField0_ |= 0x00000004;
@@ -7704,4 +11137,7 @@
         return getOptionsFieldBuilder().getBuilder();
       }
+      /**
+       * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
+       */
       public com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder getOptionsOrBuilder() {
         if (optionsBuilder_ != null) {
@@ -7711,4 +11147,7 @@
         }
       }
+      /**
+       * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
+       */
       private com.google.protobuf.SingleFieldBuilder<
           com.google.protobuf.DescriptorProtos.EnumValueOptions, com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder, com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder> 
@@ -7724,82 +11163,218 @@
         return optionsBuilder_;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:google.protobuf.EnumValueDescriptorProto)
     }
-    
+
     static {
       defaultInstance = new EnumValueDescriptorProto(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:google.protobuf.EnumValueDescriptorProto)
   }
-  
+
   public interface ServiceDescriptorProtoOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
-    
+
     // optional string name = 1;
+    /**
+     * <code>optional string name = 1;</code>
+     */
     boolean hasName();
-    String getName();
-    
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    java.lang.String getName();
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
     // repeated .google.protobuf.MethodDescriptorProto method = 2;
+    /**
+     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.MethodDescriptorProto> 
         getMethodList();
+    /**
+     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+     */
     com.google.protobuf.DescriptorProtos.MethodDescriptorProto getMethod(int index);
+    /**
+     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+     */
     int getMethodCount();
+    /**
+     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder> 
         getMethodOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+     */
     com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder getMethodOrBuilder(
         int index);
-    
+
     // optional .google.protobuf.ServiceOptions options = 3;
+    /**
+     * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
+     */
     boolean hasOptions();
+    /**
+     * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
+     */
     com.google.protobuf.DescriptorProtos.ServiceOptions getOptions();
+    /**
+     * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
+     */
     com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder getOptionsOrBuilder();
   }
+  /**
+   * Protobuf type {@code google.protobuf.ServiceDescriptorProto}
+   *
+   * <pre>
+   * Describes a service.
+   * </pre>
+   */
   public static final class ServiceDescriptorProto extends
       com.google.protobuf.GeneratedMessage
       implements ServiceDescriptorProtoOrBuilder {
     // Use ServiceDescriptorProto.newBuilder() to construct.
-    private ServiceDescriptorProto(Builder builder) {
+    private ServiceDescriptorProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
       super(builder);
-    }
-    private ServiceDescriptorProto(boolean noInit) {}
-    
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private ServiceDescriptorProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
     private static final ServiceDescriptorProto defaultInstance;
     public static ServiceDescriptorProto getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public ServiceDescriptorProto getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceDescriptorProto(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              name_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+                method_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.MethodDescriptorProto>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              method_.add(input.readMessage(com.google.protobuf.DescriptorProtos.MethodDescriptorProto.PARSER, extensionRegistry));
+              break;
+            }
+            case 26: {
+              com.google.protobuf.DescriptorProtos.ServiceOptions.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000002) == 0x00000002)) {
+                subBuilder = options_.toBuilder();
+              }
+              options_ = input.readMessage(com.google.protobuf.DescriptorProtos.ServiceOptions.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(options_);
+                options_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000002;
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+          method_ = java.util.Collections.unmodifiableList(method_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
       return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_descriptor;
     }
-    
+
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_fieldAccessorTable;
-    }
-    
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.class, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<ServiceDescriptorProto> PARSER =
+        new com.google.protobuf.AbstractParser<ServiceDescriptorProto>() {
+      public ServiceDescriptorProto parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceDescriptorProto(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceDescriptorProto> getParserForType() {
+      return PARSER;
+    }
+
     private int bitField0_;
     // optional string name = 1;
     public static final int NAME_FIELD_NUMBER = 1;
     private java.lang.Object name_;
+    /**
+     * <code>optional string name = 1;</code>
+     */
     public boolean hasName() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
-    public String getName() {
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    public java.lang.String getName() {
       java.lang.Object ref = name_;
-      if (ref instanceof String) {
-        return (String) ref;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
           name_ = s;
         }
@@ -7807,9 +11382,14 @@
       }
     }
-    private com.google.protobuf.ByteString getNameBytes() {
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    public com.google.protobuf.ByteString
+        getNameBytes() {
       java.lang.Object ref = name_;
-      if (ref instanceof String) {
+      if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
         name_ = b;
         return b;
@@ -7818,39 +11398,63 @@
       }
     }
-    
+
     // repeated .google.protobuf.MethodDescriptorProto method = 2;
     public static final int METHOD_FIELD_NUMBER = 2;
     private java.util.List<com.google.protobuf.DescriptorProtos.MethodDescriptorProto> method_;
+    /**
+     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+     */
     public java.util.List<com.google.protobuf.DescriptorProtos.MethodDescriptorProto> getMethodList() {
       return method_;
     }
+    /**
+     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+     */
     public java.util.List<? extends com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder> 
         getMethodOrBuilderList() {
       return method_;
     }
+    /**
+     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+     */
     public int getMethodCount() {
       return method_.size();
     }
+    /**
+     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+     */
     public com.google.protobuf.DescriptorProtos.MethodDescriptorProto getMethod(int index) {
       return method_.get(index);
     }
+    /**
+     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+     */
     public com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder getMethodOrBuilder(
         int index) {
       return method_.get(index);
     }
-    
+
     // optional .google.protobuf.ServiceOptions options = 3;
     public static final int OPTIONS_FIELD_NUMBER = 3;
     private com.google.protobuf.DescriptorProtos.ServiceOptions options_;
+    /**
+     * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
+     */
     public boolean hasOptions() {
       return ((bitField0_ & 0x00000002) == 0x00000002);
     }
+    /**
+     * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
+     */
     public com.google.protobuf.DescriptorProtos.ServiceOptions getOptions() {
       return options_;
     }
+    /**
+     * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
+     */
     public com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder getOptionsOrBuilder() {
       return options_;
     }
-    
+
     private void initFields() {
       name_ = "";
@@ -7862,5 +11466,5 @@
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
-      
+
       for (int i = 0; i < getMethodCount(); i++) {
         if (!getMethod(i).isInitialized()) {
@@ -7878,5 +11482,5 @@
       return true;
     }
-    
+
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
@@ -7893,10 +11497,10 @@
       getUnknownFields().writeTo(output);
     }
-    
+
     private int memoizedSerializedSize = -1;
     public int getSerializedSize() {
       int size = memoizedSerializedSize;
       if (size != -1) return size;
-    
+
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
@@ -7916,5 +11520,5 @@
       return size;
     }
-    
+
     private static final long serialVersionUID = 0L;
     @java.lang.Override
@@ -7923,9 +11527,9 @@
       return super.writeReplace();
     }
-    
+
     public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(
@@ -7933,10 +11537,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(
@@ -7944,10 +11547,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(
@@ -7955,15 +11557,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseDelimitedFrom(
@@ -7971,15 +11567,10 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(
@@ -7987,8 +11578,7 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
@@ -7997,5 +11587,5 @@
     }
     public Builder toBuilder() { return newBuilder(this); }
-    
+
     @java.lang.Override
     protected Builder newBuilderForType(
@@ -8004,4 +11594,11 @@
       return builder;
     }
+    /**
+     * Protobuf type {@code google.protobuf.ServiceDescriptorProto}
+     *
+     * <pre>
+     * Describes a service.
+     * </pre>
+     */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
@@ -8011,16 +11608,19 @@
         return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_descriptor;
       }
-      
+
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_fieldAccessorTable;
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.class, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder.class);
+      }
+
       // Construct using com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
-      
-      private Builder(BuilderParent parent) {
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
         super(parent);
         maybeForceBuilderInitialization();
@@ -8035,5 +11635,5 @@
         return new Builder();
       }
-      
+
       public Builder clear() {
         super.clear();
@@ -8054,18 +11654,18 @@
         return this;
       }
-      
+
       public Builder clone() {
         return create().mergeFrom(buildPartial());
       }
-      
+
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.getDescriptor();
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_descriptor;
+      }
+
       public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto getDefaultInstanceForType() {
         return com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.getDefaultInstance();
       }
-      
+
       public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto build() {
         com.google.protobuf.DescriptorProtos.ServiceDescriptorProto result = buildPartial();
@@ -8075,15 +11675,5 @@
         return result;
       }
-      
-      private com.google.protobuf.DescriptorProtos.ServiceDescriptorProto buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        com.google.protobuf.DescriptorProtos.ServiceDescriptorProto result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
+
       public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto buildPartial() {
         com.google.protobuf.DescriptorProtos.ServiceDescriptorProto result = new com.google.protobuf.DescriptorProtos.ServiceDescriptorProto(this);
@@ -8115,5 +11705,5 @@
         return result;
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.Message other) {
         if (other instanceof com.google.protobuf.DescriptorProtos.ServiceDescriptorProto) {
@@ -8124,9 +11714,11 @@
         }
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.DescriptorProtos.ServiceDescriptorProto other) {
         if (other == com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.getDefaultInstance()) return this;
         if (other.hasName()) {
-          setName(other.getName());
+          bitField0_ |= 0x00000001;
+          name_ = other.name_;
+          onChanged();
         }
         if (methodBuilder_ == null) {
@@ -8162,5 +11754,5 @@
         return this;
       }
-      
+
       public final boolean isInitialized() {
         for (int i = 0; i < getMethodCount(); i++) {
@@ -8178,70 +11770,67 @@
         return true;
       }
-      
+
       public Builder mergeFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder(
-            this.getUnknownFields());
-        while (true) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              this.setUnknownFields(unknownFields.build());
-              onChanged();
-              return this;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
-              }
-              break;
-            }
-            case 10: {
-              bitField0_ |= 0x00000001;
-              name_ = input.readBytes();
-              break;
-            }
-            case 18: {
-              com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.MethodDescriptorProto.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addMethod(subBuilder.buildPartial());
-              break;
-            }
-            case 26: {
-              com.google.protobuf.DescriptorProtos.ServiceOptions.Builder subBuilder = com.google.protobuf.DescriptorProtos.ServiceOptions.newBuilder();
-              if (hasOptions()) {
-                subBuilder.mergeFrom(getOptions());
-              }
-              input.readMessage(subBuilder, extensionRegistry);
-              setOptions(subBuilder.buildPartial());
-              break;
-            }
+        com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.google.protobuf.DescriptorProtos.ServiceDescriptorProto) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
         }
-      }
-      
+        return this;
+      }
       private int bitField0_;
-      
+
       // optional string name = 1;
       private java.lang.Object name_ = "";
+      /**
+       * <code>optional string name = 1;</code>
+       */
       public boolean hasName() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public String getName() {
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public java.lang.String getName() {
         java.lang.Object ref = name_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           name_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setName(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public Builder setName(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -8252,4 +11841,7 @@
         return this;
       }
+      /**
+       * <code>optional string name = 1;</code>
+       */
       public Builder clearName() {
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -8258,10 +11850,18 @@
         return this;
       }
-      void setName(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000001;
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
         name_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // repeated .google.protobuf.MethodDescriptorProto method = 2;
       private java.util.List<com.google.protobuf.DescriptorProtos.MethodDescriptorProto> method_ =
@@ -8273,8 +11873,11 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.MethodDescriptorProto, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder> methodBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.MethodDescriptorProto> getMethodList() {
         if (methodBuilder_ == null) {
@@ -8284,4 +11887,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+       */
       public int getMethodCount() {
         if (methodBuilder_ == null) {
@@ -8291,4 +11897,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.MethodDescriptorProto getMethod(int index) {
         if (methodBuilder_ == null) {
@@ -8298,4 +11907,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+       */
       public Builder setMethod(
           int index, com.google.protobuf.DescriptorProtos.MethodDescriptorProto value) {
@@ -8312,4 +11924,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+       */
       public Builder setMethod(
           int index, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) {
@@ -8323,4 +11938,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+       */
       public Builder addMethod(com.google.protobuf.DescriptorProtos.MethodDescriptorProto value) {
         if (methodBuilder_ == null) {
@@ -8336,4 +11954,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+       */
       public Builder addMethod(
           int index, com.google.protobuf.DescriptorProtos.MethodDescriptorProto value) {
@@ -8350,4 +11971,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+       */
       public Builder addMethod(
           com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) {
@@ -8361,4 +11985,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+       */
       public Builder addMethod(
           int index, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) {
@@ -8372,4 +11999,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+       */
       public Builder addAllMethod(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.MethodDescriptorProto> values) {
@@ -8383,4 +12013,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+       */
       public Builder clearMethod() {
         if (methodBuilder_ == null) {
@@ -8393,4 +12026,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+       */
       public Builder removeMethod(int index) {
         if (methodBuilder_ == null) {
@@ -8403,8 +12039,14 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder getMethodBuilder(
           int index) {
         return getMethodFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder getMethodOrBuilder(
           int index) {
@@ -8414,4 +12056,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder> 
            getMethodOrBuilderList() {
@@ -8422,8 +12067,14 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder addMethodBuilder() {
         return getMethodFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.MethodDescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder addMethodBuilder(
           int index) {
@@ -8431,4 +12082,7 @@
             index, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder> 
            getMethodBuilderList() {
@@ -8449,12 +12103,18 @@
         return methodBuilder_;
       }
-      
+
       // optional .google.protobuf.ServiceOptions options = 3;
       private com.google.protobuf.DescriptorProtos.ServiceOptions options_ = com.google.protobuf.DescriptorProtos.ServiceOptions.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
           com.google.protobuf.DescriptorProtos.ServiceOptions, com.google.protobuf.DescriptorProtos.ServiceOptions.Builder, com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder> optionsBuilder_;
+      /**
+       * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
+       */
       public boolean hasOptions() {
         return ((bitField0_ & 0x00000004) == 0x00000004);
       }
+      /**
+       * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
+       */
       public com.google.protobuf.DescriptorProtos.ServiceOptions getOptions() {
         if (optionsBuilder_ == null) {
@@ -8464,4 +12124,7 @@
         }
       }
+      /**
+       * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
+       */
       public Builder setOptions(com.google.protobuf.DescriptorProtos.ServiceOptions value) {
         if (optionsBuilder_ == null) {
@@ -8477,4 +12140,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
+       */
       public Builder setOptions(
           com.google.protobuf.DescriptorProtos.ServiceOptions.Builder builderForValue) {
@@ -8488,4 +12154,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
+       */
       public Builder mergeOptions(com.google.protobuf.DescriptorProtos.ServiceOptions value) {
         if (optionsBuilder_ == null) {
@@ -8504,4 +12173,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
+       */
       public Builder clearOptions() {
         if (optionsBuilder_ == null) {
@@ -8514,4 +12186,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
+       */
       public com.google.protobuf.DescriptorProtos.ServiceOptions.Builder getOptionsBuilder() {
         bitField0_ |= 0x00000004;
@@ -8519,4 +12194,7 @@
         return getOptionsFieldBuilder().getBuilder();
       }
+      /**
+       * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
+       */
       public com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder getOptionsOrBuilder() {
         if (optionsBuilder_ != null) {
@@ -8526,4 +12204,7 @@
         }
       }
+      /**
+       * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
+       */
       private com.google.protobuf.SingleFieldBuilder<
           com.google.protobuf.DescriptorProtos.ServiceOptions, com.google.protobuf.DescriptorProtos.ServiceOptions.Builder, com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder> 
@@ -8539,492 +12220,145 @@
         return optionsBuilder_;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:google.protobuf.ServiceDescriptorProto)
     }
-    
+
     static {
       defaultInstance = new ServiceDescriptorProto(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:google.protobuf.ServiceDescriptorProto)
   }
-  
+
   public interface MethodDescriptorProtoOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
-    
+
     // optional string name = 1;
+    /**
+     * <code>optional string name = 1;</code>
+     */
     boolean hasName();
-    String getName();
-    
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    java.lang.String getName();
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
     // optional string input_type = 2;
+    /**
+     * <code>optional string input_type = 2;</code>
+     *
+     * <pre>
+     * Input and output type names.  These are resolved in the same way as
+     * FieldDescriptorProto.type_name, but must refer to a message type.
+     * </pre>
+     */
     boolean hasInputType();
-    String getInputType();
-    
+    /**
+     * <code>optional string input_type = 2;</code>
+     *
+     * <pre>
+     * Input and output type names.  These are resolved in the same way as
+     * FieldDescriptorProto.type_name, but must refer to a message type.
+     * </pre>
+     */
+    java.lang.String getInputType();
+    /**
+     * <code>optional string input_type = 2;</code>
+     *
+     * <pre>
+     * Input and output type names.  These are resolved in the same way as
+     * FieldDescriptorProto.type_name, but must refer to a message type.
+     * </pre>
+     */
+    com.google.protobuf.ByteString
+        getInputTypeBytes();
+
     // optional string output_type = 3;
+    /**
+     * <code>optional string output_type = 3;</code>
+     */
     boolean hasOutputType();
-    String getOutputType();
-    
+    /**
+     * <code>optional string output_type = 3;</code>
+     */
+    java.lang.String getOutputType();
+    /**
+     * <code>optional string output_type = 3;</code>
+     */
+    com.google.protobuf.ByteString
+        getOutputTypeBytes();
+
     // optional .google.protobuf.MethodOptions options = 4;
+    /**
+     * <code>optional .google.protobuf.MethodOptions options = 4;</code>
+     */
     boolean hasOptions();
+    /**
+     * <code>optional .google.protobuf.MethodOptions options = 4;</code>
+     */
     com.google.protobuf.DescriptorProtos.MethodOptions getOptions();
+    /**
+     * <code>optional .google.protobuf.MethodOptions options = 4;</code>
+     */
     com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder getOptionsOrBuilder();
   }
+  /**
+   * Protobuf type {@code google.protobuf.MethodDescriptorProto}
+   *
+   * <pre>
+   * Describes a method of a service.
+   * </pre>
+   */
   public static final class MethodDescriptorProto extends
       com.google.protobuf.GeneratedMessage
       implements MethodDescriptorProtoOrBuilder {
     // Use MethodDescriptorProto.newBuilder() to construct.
-    private MethodDescriptorProto(Builder builder) {
+    private MethodDescriptorProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
       super(builder);
-    }
-    private MethodDescriptorProto(boolean noInit) {}
-    
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private MethodDescriptorProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
     private static final MethodDescriptorProto defaultInstance;
     public static MethodDescriptorProto getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public MethodDescriptorProto getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_descriptor;
-    }
-    
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_fieldAccessorTable;
-    }
-    
-    private int bitField0_;
-    // optional string name = 1;
-    public static final int NAME_FIELD_NUMBER = 1;
-    private java.lang.Object name_;
-    public boolean hasName() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    public String getName() {
-      java.lang.Object ref = name_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          name_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getNameBytes() {
-      java.lang.Object ref = name_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        name_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    
-    // optional string input_type = 2;
-    public static final int INPUT_TYPE_FIELD_NUMBER = 2;
-    private java.lang.Object inputType_;
-    public boolean hasInputType() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    public String getInputType() {
-      java.lang.Object ref = inputType_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          inputType_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getInputTypeBytes() {
-      java.lang.Object ref = inputType_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        inputType_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    
-    // optional string output_type = 3;
-    public static final int OUTPUT_TYPE_FIELD_NUMBER = 3;
-    private java.lang.Object outputType_;
-    public boolean hasOutputType() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
-    }
-    public String getOutputType() {
-      java.lang.Object ref = outputType_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          outputType_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getOutputTypeBytes() {
-      java.lang.Object ref = outputType_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        outputType_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    
-    // optional .google.protobuf.MethodOptions options = 4;
-    public static final int OPTIONS_FIELD_NUMBER = 4;
-    private com.google.protobuf.DescriptorProtos.MethodOptions options_;
-    public boolean hasOptions() {
-      return ((bitField0_ & 0x00000008) == 0x00000008);
-    }
-    public com.google.protobuf.DescriptorProtos.MethodOptions getOptions() {
-      return options_;
-    }
-    public com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder getOptionsOrBuilder() {
-      return options_;
-    }
-    
-    private void initFields() {
-      name_ = "";
-      inputType_ = "";
-      outputType_ = "";
-      options_ = com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance();
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
-      
-      if (hasOptions()) {
-        if (!getOptions().isInitialized()) {
-          memoizedIsInitialized = 0;
-          return false;
-        }
-      }
-      memoizedIsInitialized = 1;
-      return true;
-    }
-    
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBytes(1, getNameBytes());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeBytes(2, getInputTypeBytes());
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeBytes(3, getOutputTypeBytes());
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        output.writeMessage(4, options_);
-      }
-      getUnknownFields().writeTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-    
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(1, getNameBytes());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(2, getInputTypeBytes());
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(3, getOutputTypeBytes());
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, options_);
-      }
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-    
-    private static final long serialVersionUID = 0L;
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
     @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-    
-    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
-        com.google.protobuf.ByteString data,
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private MethodDescriptorProto(
+        com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
-    }
-    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto 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 com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto 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(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.MethodDescriptorProto prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-    
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_descriptor;
-      }
-      
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_fieldAccessorTable;
-      }
-      
-      // Construct using com.google.protobuf.DescriptorProtos.MethodDescriptorProto.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-      
-      private Builder(BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getOptionsFieldBuilder();
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-      
-      public Builder clear() {
-        super.clear();
-        name_ = "";
-        bitField0_ = (bitField0_ & ~0x00000001);
-        inputType_ = "";
-        bitField0_ = (bitField0_ & ~0x00000002);
-        outputType_ = "";
-        bitField0_ = (bitField0_ & ~0x00000004);
-        if (optionsBuilder_ == null) {
-          options_ = com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance();
-        } else {
-          optionsBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000008);
-        return this;
-      }
-      
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-      
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return com.google.protobuf.DescriptorProtos.MethodDescriptorProto.getDescriptor();
-      }
-      
-      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto getDefaultInstanceForType() {
-        return com.google.protobuf.DescriptorProtos.MethodDescriptorProto.getDefaultInstance();
-      }
-      
-      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto build() {
-        com.google.protobuf.DescriptorProtos.MethodDescriptorProto result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-      
-      private com.google.protobuf.DescriptorProtos.MethodDescriptorProto buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        com.google.protobuf.DescriptorProtos.MethodDescriptorProto result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
-      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto buildPartial() {
-        com.google.protobuf.DescriptorProtos.MethodDescriptorProto result = new com.google.protobuf.DescriptorProtos.MethodDescriptorProto(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.name_ = name_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.inputType_ = inputType_;
-        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
-          to_bitField0_ |= 0x00000004;
-        }
-        result.outputType_ = outputType_;
-        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
-          to_bitField0_ |= 0x00000008;
-        }
-        if (optionsBuilder_ == null) {
-          result.options_ = options_;
-        } else {
-          result.options_ = optionsBuilder_.build();
-        }
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-      
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.google.protobuf.DescriptorProtos.MethodDescriptorProto) {
-          return mergeFrom((com.google.protobuf.DescriptorProtos.MethodDescriptorProto)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-      
-      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.MethodDescriptorProto other) {
-        if (other == com.google.protobuf.DescriptorProtos.MethodDescriptorProto.getDefaultInstance()) return this;
-        if (other.hasName()) {
-          setName(other.getName());
-        }
-        if (other.hasInputType()) {
-          setInputType(other.getInputType());
-        }
-        if (other.hasOutputType()) {
-          setOutputType(other.getOutputType());
-        }
-        if (other.hasOptions()) {
-          mergeOptions(other.getOptions());
-        }
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-      
-      public final boolean isInitialized() {
-        if (hasOptions()) {
-          if (!getOptions().isInitialized()) {
-            
-            return false;
-          }
-        }
-        return true;
-      }
-      
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder(
-            this.getUnknownFields());
-        while (true) {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
           int tag = input.readTag();
           switch (tag) {
             case 0:
-              this.setUnknownFields(unknownFields.build());
-              onChanged();
-              return this;
+              done = true;
+              break;
             default: {
               if (!parseUnknownField(input, unknownFields,
                                      extensionRegistry, tag)) {
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
+                done = true;
               }
               break;
@@ -9046,34 +12380,574 @@
             }
             case 34: {
-              com.google.protobuf.DescriptorProtos.MethodOptions.Builder subBuilder = com.google.protobuf.DescriptorProtos.MethodOptions.newBuilder();
-              if (hasOptions()) {
-                subBuilder.mergeFrom(getOptions());
+              com.google.protobuf.DescriptorProtos.MethodOptions.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000008) == 0x00000008)) {
+                subBuilder = options_.toBuilder();
               }
-              input.readMessage(subBuilder, extensionRegistry);
-              setOptions(subBuilder.buildPartial());
+              options_ = input.readMessage(com.google.protobuf.DescriptorProtos.MethodOptions.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(options_);
+                options_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000008;
               break;
             }
           }
         }
-      }
-      
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.protobuf.DescriptorProtos.MethodDescriptorProto.class, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<MethodDescriptorProto> PARSER =
+        new com.google.protobuf.AbstractParser<MethodDescriptorProto>() {
+      public MethodDescriptorProto parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new MethodDescriptorProto(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<MethodDescriptorProto> getParserForType() {
+      return PARSER;
+    }
+
+    private int bitField0_;
+    // optional string name = 1;
+    public static final int NAME_FIELD_NUMBER = 1;
+    private java.lang.Object name_;
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    public boolean hasName() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          name_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    // optional string input_type = 2;
+    public static final int INPUT_TYPE_FIELD_NUMBER = 2;
+    private java.lang.Object inputType_;
+    /**
+     * <code>optional string input_type = 2;</code>
+     *
+     * <pre>
+     * Input and output type names.  These are resolved in the same way as
+     * FieldDescriptorProto.type_name, but must refer to a message type.
+     * </pre>
+     */
+    public boolean hasInputType() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>optional string input_type = 2;</code>
+     *
+     * <pre>
+     * Input and output type names.  These are resolved in the same way as
+     * FieldDescriptorProto.type_name, but must refer to a message type.
+     * </pre>
+     */
+    public java.lang.String getInputType() {
+      java.lang.Object ref = inputType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          inputType_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string input_type = 2;</code>
+     *
+     * <pre>
+     * Input and output type names.  These are resolved in the same way as
+     * FieldDescriptorProto.type_name, but must refer to a message type.
+     * </pre>
+     */
+    public com.google.protobuf.ByteString
+        getInputTypeBytes() {
+      java.lang.Object ref = inputType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        inputType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    // optional string output_type = 3;
+    public static final int OUTPUT_TYPE_FIELD_NUMBER = 3;
+    private java.lang.Object outputType_;
+    /**
+     * <code>optional string output_type = 3;</code>
+     */
+    public boolean hasOutputType() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    /**
+     * <code>optional string output_type = 3;</code>
+     */
+    public java.lang.String getOutputType() {
+      java.lang.Object ref = outputType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          outputType_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string output_type = 3;</code>
+     */
+    public com.google.protobuf.ByteString
+        getOutputTypeBytes() {
+      java.lang.Object ref = outputType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        outputType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    // optional .google.protobuf.MethodOptions options = 4;
+    public static final int OPTIONS_FIELD_NUMBER = 4;
+    private com.google.protobuf.DescriptorProtos.MethodOptions options_;
+    /**
+     * <code>optional .google.protobuf.MethodOptions options = 4;</code>
+     */
+    public boolean hasOptions() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    /**
+     * <code>optional .google.protobuf.MethodOptions options = 4;</code>
+     */
+    public com.google.protobuf.DescriptorProtos.MethodOptions getOptions() {
+      return options_;
+    }
+    /**
+     * <code>optional .google.protobuf.MethodOptions options = 4;</code>
+     */
+    public com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder getOptionsOrBuilder() {
+      return options_;
+    }
+
+    private void initFields() {
+      name_ = "";
+      inputType_ = "";
+      outputType_ = "";
+      options_ = com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+
+      if (hasOptions()) {
+        if (!getOptions().isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBytes(2, getInputTypeBytes());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBytes(3, getOutputTypeBytes());
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeMessage(4, options_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(2, getInputTypeBytes());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(3, getOutputTypeBytes());
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, options_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.MethodDescriptorProto prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code google.protobuf.MethodDescriptorProto}
+     *
+     * <pre>
+     * Describes a method of a service.
+     * </pre>
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.MethodDescriptorProto.class, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder.class);
+      }
+
+      // Construct using com.google.protobuf.DescriptorProtos.MethodDescriptorProto.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getOptionsFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        name_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        inputType_ = "";
+        bitField0_ = (bitField0_ & ~0x00000002);
+        outputType_ = "";
+        bitField0_ = (bitField0_ & ~0x00000004);
+        if (optionsBuilder_ == null) {
+          options_ = com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance();
+        } else {
+          optionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000008);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_descriptor;
+      }
+
+      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.MethodDescriptorProto.getDefaultInstance();
+      }
+
+      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto build() {
+        com.google.protobuf.DescriptorProtos.MethodDescriptorProto result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto buildPartial() {
+        com.google.protobuf.DescriptorProtos.MethodDescriptorProto result = new com.google.protobuf.DescriptorProtos.MethodDescriptorProto(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.name_ = name_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.inputType_ = inputType_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.outputType_ = outputType_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        if (optionsBuilder_ == null) {
+          result.options_ = options_;
+        } else {
+          result.options_ = optionsBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.MethodDescriptorProto) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.MethodDescriptorProto)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.MethodDescriptorProto other) {
+        if (other == com.google.protobuf.DescriptorProtos.MethodDescriptorProto.getDefaultInstance()) return this;
+        if (other.hasName()) {
+          bitField0_ |= 0x00000001;
+          name_ = other.name_;
+          onChanged();
+        }
+        if (other.hasInputType()) {
+          bitField0_ |= 0x00000002;
+          inputType_ = other.inputType_;
+          onChanged();
+        }
+        if (other.hasOutputType()) {
+          bitField0_ |= 0x00000004;
+          outputType_ = other.outputType_;
+          onChanged();
+        }
+        if (other.hasOptions()) {
+          mergeOptions(other.getOptions());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+
+      public final boolean isInitialized() {
+        if (hasOptions()) {
+          if (!getOptions().isInitialized()) {
+            
+            return false;
+          }
+        }
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.DescriptorProtos.MethodDescriptorProto parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.google.protobuf.DescriptorProtos.MethodDescriptorProto) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
       private int bitField0_;
-      
+
       // optional string name = 1;
       private java.lang.Object name_ = "";
+      /**
+       * <code>optional string name = 1;</code>
+       */
       public boolean hasName() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public String getName() {
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public java.lang.String getName() {
         java.lang.Object ref = name_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           name_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setName(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public Builder setName(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -9084,4 +12958,7 @@
         return this;
       }
+      /**
+       * <code>optional string name = 1;</code>
+       */
       public Builder clearName() {
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -9090,26 +12967,81 @@
         return this;
       }
-      void setName(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000001;
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
         name_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // optional string input_type = 2;
       private java.lang.Object inputType_ = "";
+      /**
+       * <code>optional string input_type = 2;</code>
+       *
+       * <pre>
+       * Input and output type names.  These are resolved in the same way as
+       * FieldDescriptorProto.type_name, but must refer to a message type.
+       * </pre>
+       */
       public boolean hasInputType() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
-      public String getInputType() {
+      /**
+       * <code>optional string input_type = 2;</code>
+       *
+       * <pre>
+       * Input and output type names.  These are resolved in the same way as
+       * FieldDescriptorProto.type_name, but must refer to a message type.
+       * </pre>
+       */
+      public java.lang.String getInputType() {
         java.lang.Object ref = inputType_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           inputType_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setInputType(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string input_type = 2;</code>
+       *
+       * <pre>
+       * Input and output type names.  These are resolved in the same way as
+       * FieldDescriptorProto.type_name, but must refer to a message type.
+       * </pre>
+       */
+      public com.google.protobuf.ByteString
+          getInputTypeBytes() {
+        java.lang.Object ref = inputType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          inputType_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string input_type = 2;</code>
+       *
+       * <pre>
+       * Input and output type names.  These are resolved in the same way as
+       * FieldDescriptorProto.type_name, but must refer to a message type.
+       * </pre>
+       */
+      public Builder setInputType(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -9120,4 +13052,12 @@
         return this;
       }
+      /**
+       * <code>optional string input_type = 2;</code>
+       *
+       * <pre>
+       * Input and output type names.  These are resolved in the same way as
+       * FieldDescriptorProto.type_name, but must refer to a message type.
+       * </pre>
+       */
       public Builder clearInputType() {
         bitField0_ = (bitField0_ & ~0x00000002);
@@ -9126,26 +13066,66 @@
         return this;
       }
-      void setInputType(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000002;
+      /**
+       * <code>optional string input_type = 2;</code>
+       *
+       * <pre>
+       * Input and output type names.  These are resolved in the same way as
+       * FieldDescriptorProto.type_name, but must refer to a message type.
+       * </pre>
+       */
+      public Builder setInputTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000002;
         inputType_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // optional string output_type = 3;
       private java.lang.Object outputType_ = "";
+      /**
+       * <code>optional string output_type = 3;</code>
+       */
       public boolean hasOutputType() {
         return ((bitField0_ & 0x00000004) == 0x00000004);
       }
-      public String getOutputType() {
+      /**
+       * <code>optional string output_type = 3;</code>
+       */
+      public java.lang.String getOutputType() {
         java.lang.Object ref = outputType_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           outputType_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setOutputType(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string output_type = 3;</code>
+       */
+      public com.google.protobuf.ByteString
+          getOutputTypeBytes() {
+        java.lang.Object ref = outputType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          outputType_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string output_type = 3;</code>
+       */
+      public Builder setOutputType(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -9156,4 +13136,7 @@
         return this;
       }
+      /**
+       * <code>optional string output_type = 3;</code>
+       */
       public Builder clearOutputType() {
         bitField0_ = (bitField0_ & ~0x00000004);
@@ -9162,17 +13145,31 @@
         return this;
       }
-      void setOutputType(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000004;
+      /**
+       * <code>optional string output_type = 3;</code>
+       */
+      public Builder setOutputTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000004;
         outputType_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // optional .google.protobuf.MethodOptions options = 4;
       private com.google.protobuf.DescriptorProtos.MethodOptions options_ = com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
           com.google.protobuf.DescriptorProtos.MethodOptions, com.google.protobuf.DescriptorProtos.MethodOptions.Builder, com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder> optionsBuilder_;
+      /**
+       * <code>optional .google.protobuf.MethodOptions options = 4;</code>
+       */
       public boolean hasOptions() {
         return ((bitField0_ & 0x00000008) == 0x00000008);
       }
+      /**
+       * <code>optional .google.protobuf.MethodOptions options = 4;</code>
+       */
       public com.google.protobuf.DescriptorProtos.MethodOptions getOptions() {
         if (optionsBuilder_ == null) {
@@ -9182,4 +13179,7 @@
         }
       }
+      /**
+       * <code>optional .google.protobuf.MethodOptions options = 4;</code>
+       */
       public Builder setOptions(com.google.protobuf.DescriptorProtos.MethodOptions value) {
         if (optionsBuilder_ == null) {
@@ -9195,4 +13195,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.MethodOptions options = 4;</code>
+       */
       public Builder setOptions(
           com.google.protobuf.DescriptorProtos.MethodOptions.Builder builderForValue) {
@@ -9206,4 +13209,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.MethodOptions options = 4;</code>
+       */
       public Builder mergeOptions(com.google.protobuf.DescriptorProtos.MethodOptions value) {
         if (optionsBuilder_ == null) {
@@ -9222,4 +13228,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.MethodOptions options = 4;</code>
+       */
       public Builder clearOptions() {
         if (optionsBuilder_ == null) {
@@ -9232,4 +13241,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.MethodOptions options = 4;</code>
+       */
       public com.google.protobuf.DescriptorProtos.MethodOptions.Builder getOptionsBuilder() {
         bitField0_ |= 0x00000008;
@@ -9237,4 +13249,7 @@
         return getOptionsFieldBuilder().getBuilder();
       }
+      /**
+       * <code>optional .google.protobuf.MethodOptions options = 4;</code>
+       */
       public com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder getOptionsOrBuilder() {
         if (optionsBuilder_ != null) {
@@ -9244,4 +13259,7 @@
         }
       }
+      /**
+       * <code>optional .google.protobuf.MethodOptions options = 4;</code>
+       */
       private com.google.protobuf.SingleFieldBuilder<
           com.google.protobuf.DescriptorProtos.MethodOptions, com.google.protobuf.DescriptorProtos.MethodOptions.Builder, com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder> 
@@ -9257,802 +13275,336 @@
         return optionsBuilder_;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:google.protobuf.MethodDescriptorProto)
     }
-    
+
     static {
       defaultInstance = new MethodDescriptorProto(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:google.protobuf.MethodDescriptorProto)
   }
-  
+
   public interface FileOptionsOrBuilder extends
       com.google.protobuf.GeneratedMessage.
           ExtendableMessageOrBuilder<FileOptions> {
-    
+
     // optional string java_package = 1;
+    /**
+     * <code>optional string java_package = 1;</code>
+     *
+     * <pre>
+     * Sets the Java package where classes generated from this .proto will be
+     * placed.  By default, the proto package is used, but this is often
+     * inappropriate because proto packages do not normally start with backwards
+     * domain names.
+     * </pre>
+     */
     boolean hasJavaPackage();
-    String getJavaPackage();
-    
+    /**
+     * <code>optional string java_package = 1;</code>
+     *
+     * <pre>
+     * Sets the Java package where classes generated from this .proto will be
+     * placed.  By default, the proto package is used, but this is often
+     * inappropriate because proto packages do not normally start with backwards
+     * domain names.
+     * </pre>
+     */
+    java.lang.String getJavaPackage();
+    /**
+     * <code>optional string java_package = 1;</code>
+     *
+     * <pre>
+     * Sets the Java package where classes generated from this .proto will be
+     * placed.  By default, the proto package is used, but this is often
+     * inappropriate because proto packages do not normally start with backwards
+     * domain names.
+     * </pre>
+     */
+    com.google.protobuf.ByteString
+        getJavaPackageBytes();
+
     // optional string java_outer_classname = 8;
+    /**
+     * <code>optional string java_outer_classname = 8;</code>
+     *
+     * <pre>
+     * If set, all the classes from the .proto file are wrapped in a single
+     * outer class with the given name.  This applies to both Proto1
+     * (equivalent to the old "--one_java_file" option) and Proto2 (where
+     * a .proto always translates to a single class, but you may want to
+     * explicitly choose the class name).
+     * </pre>
+     */
     boolean hasJavaOuterClassname();
-    String getJavaOuterClassname();
-    
+    /**
+     * <code>optional string java_outer_classname = 8;</code>
+     *
+     * <pre>
+     * If set, all the classes from the .proto file are wrapped in a single
+     * outer class with the given name.  This applies to both Proto1
+     * (equivalent to the old "--one_java_file" option) and Proto2 (where
+     * a .proto always translates to a single class, but you may want to
+     * explicitly choose the class name).
+     * </pre>
+     */
+    java.lang.String getJavaOuterClassname();
+    /**
+     * <code>optional string java_outer_classname = 8;</code>
+     *
+     * <pre>
+     * If set, all the classes from the .proto file are wrapped in a single
+     * outer class with the given name.  This applies to both Proto1
+     * (equivalent to the old "--one_java_file" option) and Proto2 (where
+     * a .proto always translates to a single class, but you may want to
+     * explicitly choose the class name).
+     * </pre>
+     */
+    com.google.protobuf.ByteString
+        getJavaOuterClassnameBytes();
+
     // optional bool java_multiple_files = 10 [default = false];
+    /**
+     * <code>optional bool java_multiple_files = 10 [default = false];</code>
+     *
+     * <pre>
+     * If set true, then the Java code generator will generate a separate .java
+     * file for each top-level message, enum, and service defined in the .proto
+     * file.  Thus, these types will *not* be nested inside the outer class
+     * named by java_outer_classname.  However, the outer class will still be
+     * generated to contain the file's getDescriptor() method as well as any
+     * top-level extensions defined in the file.
+     * </pre>
+     */
     boolean hasJavaMultipleFiles();
+    /**
+     * <code>optional bool java_multiple_files = 10 [default = false];</code>
+     *
+     * <pre>
+     * If set true, then the Java code generator will generate a separate .java
+     * file for each top-level message, enum, and service defined in the .proto
+     * file.  Thus, these types will *not* be nested inside the outer class
+     * named by java_outer_classname.  However, the outer class will still be
+     * generated to contain the file's getDescriptor() method as well as any
+     * top-level extensions defined in the file.
+     * </pre>
+     */
     boolean getJavaMultipleFiles();
-    
+
     // optional bool java_generate_equals_and_hash = 20 [default = false];
+    /**
+     * <code>optional bool java_generate_equals_and_hash = 20 [default = false];</code>
+     *
+     * <pre>
+     * If set true, then the Java code generator will generate equals() and
+     * hashCode() methods for all messages defined in the .proto file. This is
+     * purely a speed optimization, as the AbstractMessage base class includes
+     * reflection-based implementations of these methods.
+     * </pre>
+     */
     boolean hasJavaGenerateEqualsAndHash();
+    /**
+     * <code>optional bool java_generate_equals_and_hash = 20 [default = false];</code>
+     *
+     * <pre>
+     * If set true, then the Java code generator will generate equals() and
+     * hashCode() methods for all messages defined in the .proto file. This is
+     * purely a speed optimization, as the AbstractMessage base class includes
+     * reflection-based implementations of these methods.
+     * </pre>
+     */
     boolean getJavaGenerateEqualsAndHash();
-    
+
     // optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];
+    /**
+     * <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>
+     */
     boolean hasOptimizeFor();
+    /**
+     * <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>
+     */
     com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode getOptimizeFor();
-    
+
     // optional string go_package = 11;
+    /**
+     * <code>optional string go_package = 11;</code>
+     *
+     * <pre>
+     * Sets the Go package where structs generated from this .proto will be
+     * placed.  There is no default.
+     * </pre>
+     */
     boolean hasGoPackage();
-    String getGoPackage();
-    
+    /**
+     * <code>optional string go_package = 11;</code>
+     *
+     * <pre>
+     * Sets the Go package where structs generated from this .proto will be
+     * placed.  There is no default.
+     * </pre>
+     */
+    java.lang.String getGoPackage();
+    /**
+     * <code>optional string go_package = 11;</code>
+     *
+     * <pre>
+     * Sets the Go package where structs generated from this .proto will be
+     * placed.  There is no default.
+     * </pre>
+     */
+    com.google.protobuf.ByteString
+        getGoPackageBytes();
+
     // optional bool cc_generic_services = 16 [default = false];
+    /**
+     * <code>optional bool cc_generic_services = 16 [default = false];</code>
+     *
+     * <pre>
+     * Should generic services be generated in each language?  "Generic" services
+     * are not specific to any particular RPC system.  They are generated by the
+     * main code generators in each language (without additional plugins).
+     * Generic services were the only kind of service generation supported by
+     * early versions of proto2.
+     *
+     * Generic services are now considered deprecated in favor of using plugins
+     * that generate code specific to your particular RPC system.  Therefore,
+     * these default to false.  Old code which depends on generic services should
+     * explicitly set them to true.
+     * </pre>
+     */
     boolean hasCcGenericServices();
+    /**
+     * <code>optional bool cc_generic_services = 16 [default = false];</code>
+     *
+     * <pre>
+     * Should generic services be generated in each language?  "Generic" services
+     * are not specific to any particular RPC system.  They are generated by the
+     * main code generators in each language (without additional plugins).
+     * Generic services were the only kind of service generation supported by
+     * early versions of proto2.
+     *
+     * Generic services are now considered deprecated in favor of using plugins
+     * that generate code specific to your particular RPC system.  Therefore,
+     * these default to false.  Old code which depends on generic services should
+     * explicitly set them to true.
+     * </pre>
+     */
     boolean getCcGenericServices();
-    
+
     // optional bool java_generic_services = 17 [default = false];
+    /**
+     * <code>optional bool java_generic_services = 17 [default = false];</code>
+     */
     boolean hasJavaGenericServices();
+    /**
+     * <code>optional bool java_generic_services = 17 [default = false];</code>
+     */
     boolean getJavaGenericServices();
-    
+
     // optional bool py_generic_services = 18 [default = false];
+    /**
+     * <code>optional bool py_generic_services = 18 [default = false];</code>
+     */
     boolean hasPyGenericServices();
+    /**
+     * <code>optional bool py_generic_services = 18 [default = false];</code>
+     */
     boolean getPyGenericServices();
-    
+
     // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
         getUninterpretedOptionList();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     int getUninterpretedOptionCount();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
         getUninterpretedOptionOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
         int index);
   }
+  /**
+   * Protobuf type {@code google.protobuf.FileOptions}
+   */
   public static final class FileOptions extends
       com.google.protobuf.GeneratedMessage.ExtendableMessage<
         FileOptions> implements FileOptionsOrBuilder {
     // Use FileOptions.newBuilder() to construct.
-    private FileOptions(Builder builder) {
+    private FileOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.FileOptions, ?> builder) {
       super(builder);
-    }
-    private FileOptions(boolean noInit) {}
-    
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private FileOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
     private static final FileOptions defaultInstance;
     public static FileOptions getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public FileOptions getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileOptions_descriptor;
-    }
-    
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileOptions_fieldAccessorTable;
-    }
-    
-    public enum OptimizeMode
-        implements com.google.protobuf.ProtocolMessageEnum {
-      SPEED(0, 1),
-      CODE_SIZE(1, 2),
-      LITE_RUNTIME(2, 3),
-      ;
-      
-      public static final int SPEED_VALUE = 1;
-      public static final int CODE_SIZE_VALUE = 2;
-      public static final int LITE_RUNTIME_VALUE = 3;
-      
-      
-      public final int getNumber() { return value; }
-      
-      public static OptimizeMode valueOf(int value) {
-        switch (value) {
-          case 1: return SPEED;
-          case 2: return CODE_SIZE;
-          case 3: return LITE_RUNTIME;
-          default: return null;
-        }
-      }
-      
-      public static com.google.protobuf.Internal.EnumLiteMap<OptimizeMode>
-          internalGetValueMap() {
-        return internalValueMap;
-      }
-      private static com.google.protobuf.Internal.EnumLiteMap<OptimizeMode>
-          internalValueMap =
-            new com.google.protobuf.Internal.EnumLiteMap<OptimizeMode>() {
-              public OptimizeMode findValueByNumber(int number) {
-                return OptimizeMode.valueOf(number);
-              }
-            };
-      
-      public final com.google.protobuf.Descriptors.EnumValueDescriptor
-          getValueDescriptor() {
-        return getDescriptor().getValues().get(index);
-      }
-      public final com.google.protobuf.Descriptors.EnumDescriptor
-          getDescriptorForType() {
-        return getDescriptor();
-      }
-      public static final com.google.protobuf.Descriptors.EnumDescriptor
-          getDescriptor() {
-        return com.google.protobuf.DescriptorProtos.FileOptions.getDescriptor().getEnumTypes().get(0);
-      }
-      
-      private static final OptimizeMode[] VALUES = {
-        SPEED, CODE_SIZE, LITE_RUNTIME, 
-      };
-      
-      public static OptimizeMode valueOf(
-          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
-        if (desc.getType() != getDescriptor()) {
-          throw new java.lang.IllegalArgumentException(
-            "EnumValueDescriptor is not for this type.");
-        }
-        return VALUES[desc.getIndex()];
-      }
-      
-      private final int index;
-      private final int value;
-      
-      private OptimizeMode(int index, int value) {
-        this.index = index;
-        this.value = value;
-      }
-      
-      // @@protoc_insertion_point(enum_scope:google.protobuf.FileOptions.OptimizeMode)
-    }
-    
-    private int bitField0_;
-    // optional string java_package = 1;
-    public static final int JAVA_PACKAGE_FIELD_NUMBER = 1;
-    private java.lang.Object javaPackage_;
-    public boolean hasJavaPackage() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    public String getJavaPackage() {
-      java.lang.Object ref = javaPackage_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          javaPackage_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getJavaPackageBytes() {
-      java.lang.Object ref = javaPackage_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        javaPackage_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    
-    // optional string java_outer_classname = 8;
-    public static final int JAVA_OUTER_CLASSNAME_FIELD_NUMBER = 8;
-    private java.lang.Object javaOuterClassname_;
-    public boolean hasJavaOuterClassname() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    public String getJavaOuterClassname() {
-      java.lang.Object ref = javaOuterClassname_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          javaOuterClassname_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getJavaOuterClassnameBytes() {
-      java.lang.Object ref = javaOuterClassname_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        javaOuterClassname_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    
-    // optional bool java_multiple_files = 10 [default = false];
-    public static final int JAVA_MULTIPLE_FILES_FIELD_NUMBER = 10;
-    private boolean javaMultipleFiles_;
-    public boolean hasJavaMultipleFiles() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
-    }
-    public boolean getJavaMultipleFiles() {
-      return javaMultipleFiles_;
-    }
-    
-    // optional bool java_generate_equals_and_hash = 20 [default = false];
-    public static final int JAVA_GENERATE_EQUALS_AND_HASH_FIELD_NUMBER = 20;
-    private boolean javaGenerateEqualsAndHash_;
-    public boolean hasJavaGenerateEqualsAndHash() {
-      return ((bitField0_ & 0x00000008) == 0x00000008);
-    }
-    public boolean getJavaGenerateEqualsAndHash() {
-      return javaGenerateEqualsAndHash_;
-    }
-    
-    // optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];
-    public static final int OPTIMIZE_FOR_FIELD_NUMBER = 9;
-    private com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode optimizeFor_;
-    public boolean hasOptimizeFor() {
-      return ((bitField0_ & 0x00000010) == 0x00000010);
-    }
-    public com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode getOptimizeFor() {
-      return optimizeFor_;
-    }
-    
-    // optional string go_package = 11;
-    public static final int GO_PACKAGE_FIELD_NUMBER = 11;
-    private java.lang.Object goPackage_;
-    public boolean hasGoPackage() {
-      return ((bitField0_ & 0x00000020) == 0x00000020);
-    }
-    public String getGoPackage() {
-      java.lang.Object ref = goPackage_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          goPackage_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getGoPackageBytes() {
-      java.lang.Object ref = goPackage_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        goPackage_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    
-    // optional bool cc_generic_services = 16 [default = false];
-    public static final int CC_GENERIC_SERVICES_FIELD_NUMBER = 16;
-    private boolean ccGenericServices_;
-    public boolean hasCcGenericServices() {
-      return ((bitField0_ & 0x00000040) == 0x00000040);
-    }
-    public boolean getCcGenericServices() {
-      return ccGenericServices_;
-    }
-    
-    // optional bool java_generic_services = 17 [default = false];
-    public static final int JAVA_GENERIC_SERVICES_FIELD_NUMBER = 17;
-    private boolean javaGenericServices_;
-    public boolean hasJavaGenericServices() {
-      return ((bitField0_ & 0x00000080) == 0x00000080);
-    }
-    public boolean getJavaGenericServices() {
-      return javaGenericServices_;
-    }
-    
-    // optional bool py_generic_services = 18 [default = false];
-    public static final int PY_GENERIC_SERVICES_FIELD_NUMBER = 18;
-    private boolean pyGenericServices_;
-    public boolean hasPyGenericServices() {
-      return ((bitField0_ & 0x00000100) == 0x00000100);
-    }
-    public boolean getPyGenericServices() {
-      return pyGenericServices_;
-    }
-    
-    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
-    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
-    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
-    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
-      return uninterpretedOption_;
-    }
-    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
-        getUninterpretedOptionOrBuilderList() {
-      return uninterpretedOption_;
-    }
-    public int getUninterpretedOptionCount() {
-      return uninterpretedOption_.size();
-    }
-    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
-      return uninterpretedOption_.get(index);
-    }
-    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
-        int index) {
-      return uninterpretedOption_.get(index);
-    }
-    
-    private void initFields() {
-      javaPackage_ = "";
-      javaOuterClassname_ = "";
-      javaMultipleFiles_ = false;
-      javaGenerateEqualsAndHash_ = false;
-      optimizeFor_ = com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode.SPEED;
-      goPackage_ = "";
-      ccGenericServices_ = false;
-      javaGenericServices_ = false;
-      pyGenericServices_ = false;
-      uninterpretedOption_ = java.util.Collections.emptyList();
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
-      
-      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
-        if (!getUninterpretedOption(i).isInitialized()) {
-          memoizedIsInitialized = 0;
-          return false;
-        }
-      }
-      if (!extensionsAreInitialized()) {
-        memoizedIsInitialized = 0;
-        return false;
-      }
-      memoizedIsInitialized = 1;
-      return true;
-    }
-    
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      com.google.protobuf.GeneratedMessage
-        .ExtendableMessage<com.google.protobuf.DescriptorProtos.FileOptions>.ExtensionWriter extensionWriter =
-          newExtensionWriter();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBytes(1, getJavaPackageBytes());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeBytes(8, getJavaOuterClassnameBytes());
-      }
-      if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        output.writeEnum(9, optimizeFor_.getNumber());
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeBool(10, javaMultipleFiles_);
-      }
-      if (((bitField0_ & 0x00000020) == 0x00000020)) {
-        output.writeBytes(11, getGoPackageBytes());
-      }
-      if (((bitField0_ & 0x00000040) == 0x00000040)) {
-        output.writeBool(16, ccGenericServices_);
-      }
-      if (((bitField0_ & 0x00000080) == 0x00000080)) {
-        output.writeBool(17, javaGenericServices_);
-      }
-      if (((bitField0_ & 0x00000100) == 0x00000100)) {
-        output.writeBool(18, pyGenericServices_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        output.writeBool(20, javaGenerateEqualsAndHash_);
-      }
-      for (int i = 0; i < uninterpretedOption_.size(); i++) {
-        output.writeMessage(999, uninterpretedOption_.get(i));
-      }
-      extensionWriter.writeUntil(536870912, output);
-      getUnknownFields().writeTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-    
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(1, getJavaPackageBytes());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(8, getJavaOuterClassnameBytes());
-      }
-      if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(9, optimizeFor_.getNumber());
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(10, javaMultipleFiles_);
-      }
-      if (((bitField0_ & 0x00000020) == 0x00000020)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(11, getGoPackageBytes());
-      }
-      if (((bitField0_ & 0x00000040) == 0x00000040)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(16, ccGenericServices_);
-      }
-      if (((bitField0_ & 0x00000080) == 0x00000080)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(17, javaGenericServices_);
-      }
-      if (((bitField0_ & 0x00000100) == 0x00000100)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(18, pyGenericServices_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(20, javaGenerateEqualsAndHash_);
-      }
-      for (int i = 0; i < uninterpretedOption_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(999, uninterpretedOption_.get(i));
-      }
-      size += extensionsSerializedSize();
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-    
-    private static final long serialVersionUID = 0L;
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
     @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-    
-    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
-        com.google.protobuf.ByteString data,
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private FileOptions(
+        com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FileOptions parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
-    }
-    public static com.google.protobuf.DescriptorProtos.FileOptions 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 com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FileOptions 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(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FileOptions prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-    
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
-          com.google.protobuf.DescriptorProtos.FileOptions, Builder> implements com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileOptions_descriptor;
-      }
-      
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileOptions_fieldAccessorTable;
-      }
-      
-      // Construct using com.google.protobuf.DescriptorProtos.FileOptions.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-      
-      private Builder(BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getUninterpretedOptionFieldBuilder();
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-      
-      public Builder clear() {
-        super.clear();
-        javaPackage_ = "";
-        bitField0_ = (bitField0_ & ~0x00000001);
-        javaOuterClassname_ = "";
-        bitField0_ = (bitField0_ & ~0x00000002);
-        javaMultipleFiles_ = false;
-        bitField0_ = (bitField0_ & ~0x00000004);
-        javaGenerateEqualsAndHash_ = false;
-        bitField0_ = (bitField0_ & ~0x00000008);
-        optimizeFor_ = com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode.SPEED;
-        bitField0_ = (bitField0_ & ~0x00000010);
-        goPackage_ = "";
-        bitField0_ = (bitField0_ & ~0x00000020);
-        ccGenericServices_ = false;
-        bitField0_ = (bitField0_ & ~0x00000040);
-        javaGenericServices_ = false;
-        bitField0_ = (bitField0_ & ~0x00000080);
-        pyGenericServices_ = false;
-        bitField0_ = (bitField0_ & ~0x00000100);
-        if (uninterpretedOptionBuilder_ == null) {
-          uninterpretedOption_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000200);
-        } else {
-          uninterpretedOptionBuilder_.clear();
-        }
-        return this;
-      }
-      
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-      
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return com.google.protobuf.DescriptorProtos.FileOptions.getDescriptor();
-      }
-      
-      public com.google.protobuf.DescriptorProtos.FileOptions getDefaultInstanceForType() {
-        return com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance();
-      }
-      
-      public com.google.protobuf.DescriptorProtos.FileOptions build() {
-        com.google.protobuf.DescriptorProtos.FileOptions result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-      
-      private com.google.protobuf.DescriptorProtos.FileOptions buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        com.google.protobuf.DescriptorProtos.FileOptions result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
-      public com.google.protobuf.DescriptorProtos.FileOptions buildPartial() {
-        com.google.protobuf.DescriptorProtos.FileOptions result = new com.google.protobuf.DescriptorProtos.FileOptions(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.javaPackage_ = javaPackage_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.javaOuterClassname_ = javaOuterClassname_;
-        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
-          to_bitField0_ |= 0x00000004;
-        }
-        result.javaMultipleFiles_ = javaMultipleFiles_;
-        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
-          to_bitField0_ |= 0x00000008;
-        }
-        result.javaGenerateEqualsAndHash_ = javaGenerateEqualsAndHash_;
-        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
-          to_bitField0_ |= 0x00000010;
-        }
-        result.optimizeFor_ = optimizeFor_;
-        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
-          to_bitField0_ |= 0x00000020;
-        }
-        result.goPackage_ = goPackage_;
-        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
-          to_bitField0_ |= 0x00000040;
-        }
-        result.ccGenericServices_ = ccGenericServices_;
-        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
-          to_bitField0_ |= 0x00000080;
-        }
-        result.javaGenericServices_ = javaGenericServices_;
-        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
-          to_bitField0_ |= 0x00000100;
-        }
-        result.pyGenericServices_ = pyGenericServices_;
-        if (uninterpretedOptionBuilder_ == null) {
-          if (((bitField0_ & 0x00000200) == 0x00000200)) {
-            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
-            bitField0_ = (bitField0_ & ~0x00000200);
-          }
-          result.uninterpretedOption_ = uninterpretedOption_;
-        } else {
-          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
-        }
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-      
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.google.protobuf.DescriptorProtos.FileOptions) {
-          return mergeFrom((com.google.protobuf.DescriptorProtos.FileOptions)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-      
-      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FileOptions other) {
-        if (other == com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance()) return this;
-        if (other.hasJavaPackage()) {
-          setJavaPackage(other.getJavaPackage());
-        }
-        if (other.hasJavaOuterClassname()) {
-          setJavaOuterClassname(other.getJavaOuterClassname());
-        }
-        if (other.hasJavaMultipleFiles()) {
-          setJavaMultipleFiles(other.getJavaMultipleFiles());
-        }
-        if (other.hasJavaGenerateEqualsAndHash()) {
-          setJavaGenerateEqualsAndHash(other.getJavaGenerateEqualsAndHash());
-        }
-        if (other.hasOptimizeFor()) {
-          setOptimizeFor(other.getOptimizeFor());
-        }
-        if (other.hasGoPackage()) {
-          setGoPackage(other.getGoPackage());
-        }
-        if (other.hasCcGenericServices()) {
-          setCcGenericServices(other.getCcGenericServices());
-        }
-        if (other.hasJavaGenericServices()) {
-          setJavaGenericServices(other.getJavaGenericServices());
-        }
-        if (other.hasPyGenericServices()) {
-          setPyGenericServices(other.getPyGenericServices());
-        }
-        if (uninterpretedOptionBuilder_ == null) {
-          if (!other.uninterpretedOption_.isEmpty()) {
-            if (uninterpretedOption_.isEmpty()) {
-              uninterpretedOption_ = other.uninterpretedOption_;
-              bitField0_ = (bitField0_ & ~0x00000200);
-            } else {
-              ensureUninterpretedOptionIsMutable();
-              uninterpretedOption_.addAll(other.uninterpretedOption_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.uninterpretedOption_.isEmpty()) {
-            if (uninterpretedOptionBuilder_.isEmpty()) {
-              uninterpretedOptionBuilder_.dispose();
-              uninterpretedOptionBuilder_ = null;
-              uninterpretedOption_ = other.uninterpretedOption_;
-              bitField0_ = (bitField0_ & ~0x00000200);
-              uninterpretedOptionBuilder_ = 
-                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
-                   getUninterpretedOptionFieldBuilder() : null;
-            } else {
-              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
-            }
-          }
-        }
-        this.mergeExtensionFields(other);
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-      
-      public final boolean isInitialized() {
-        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
-          if (!getUninterpretedOption(i).isInitialized()) {
-            
-            return false;
-          }
-        }
-        if (!extensionsAreInitialized()) {
-          
-          return false;
-        }
-        return true;
-      }
-      
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder(
-            this.getUnknownFields());
-        while (true) {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
           int tag = input.readTag();
           switch (tag) {
             case 0:
-              this.setUnknownFields(unknownFields.build());
-              onChanged();
-              return this;
+              done = true;
+              break;
             default: {
               if (!parseUnknownField(input, unknownFields,
                                      extensionRegistry, tag)) {
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
+                done = true;
               }
               break;
@@ -10110,31 +13662,1088 @@
             }
             case 7994: {
-              com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder subBuilder = com.google.protobuf.DescriptorProtos.UninterpretedOption.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addUninterpretedOption(subBuilder.buildPartial());
+              if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
+                uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>();
+                mutable_bitField0_ |= 0x00000200;
+              }
+              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.PARSER, extensionRegistry));
               break;
             }
           }
         }
-      }
-      
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
+          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileOptions_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileOptions_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.protobuf.DescriptorProtos.FileOptions.class, com.google.protobuf.DescriptorProtos.FileOptions.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<FileOptions> PARSER =
+        new com.google.protobuf.AbstractParser<FileOptions>() {
+      public FileOptions parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new FileOptions(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<FileOptions> getParserForType() {
+      return PARSER;
+    }
+
+    /**
+     * Protobuf enum {@code google.protobuf.FileOptions.OptimizeMode}
+     *
+     * <pre>
+     * Generated classes can be optimized for speed or code size.
+     * </pre>
+     */
+    public enum OptimizeMode
+        implements com.google.protobuf.ProtocolMessageEnum {
+      /**
+       * <code>SPEED = 1;</code>
+       *
+       * <pre>
+       * Generate complete code for parsing, serialization,
+       * </pre>
+       */
+      SPEED(0, 1),
+      /**
+       * <code>CODE_SIZE = 2;</code>
+       *
+       * <pre>
+       * etc.
+       * </pre>
+       */
+      CODE_SIZE(1, 2),
+      /**
+       * <code>LITE_RUNTIME = 3;</code>
+       *
+       * <pre>
+       * Generate code using MessageLite and the lite runtime.
+       * </pre>
+       */
+      LITE_RUNTIME(2, 3),
+      ;
+
+      /**
+       * <code>SPEED = 1;</code>
+       *
+       * <pre>
+       * Generate complete code for parsing, serialization,
+       * </pre>
+       */
+      public static final int SPEED_VALUE = 1;
+      /**
+       * <code>CODE_SIZE = 2;</code>
+       *
+       * <pre>
+       * etc.
+       * </pre>
+       */
+      public static final int CODE_SIZE_VALUE = 2;
+      /**
+       * <code>LITE_RUNTIME = 3;</code>
+       *
+       * <pre>
+       * Generate code using MessageLite and the lite runtime.
+       * </pre>
+       */
+      public static final int LITE_RUNTIME_VALUE = 3;
+
+
+      public final int getNumber() { return value; }
+
+      public static OptimizeMode valueOf(int value) {
+        switch (value) {
+          case 1: return SPEED;
+          case 2: return CODE_SIZE;
+          case 3: return LITE_RUNTIME;
+          default: return null;
+        }
+      }
+
+      public static com.google.protobuf.Internal.EnumLiteMap<OptimizeMode>
+          internalGetValueMap() {
+        return internalValueMap;
+      }
+      private static com.google.protobuf.Internal.EnumLiteMap<OptimizeMode>
+          internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<OptimizeMode>() {
+              public OptimizeMode findValueByNumber(int number) {
+                return OptimizeMode.valueOf(number);
+              }
+            };
+
+      public final com.google.protobuf.Descriptors.EnumValueDescriptor
+          getValueDescriptor() {
+        return getDescriptor().getValues().get(index);
+      }
+      public final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptorForType() {
+        return getDescriptor();
+      }
+      public static final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.FileOptions.getDescriptor().getEnumTypes().get(0);
+      }
+
+      private static final OptimizeMode[] VALUES = values();
+
+      public static OptimizeMode valueOf(
+          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+        if (desc.getType() != getDescriptor()) {
+          throw new java.lang.IllegalArgumentException(
+            "EnumValueDescriptor is not for this type.");
+        }
+        return VALUES[desc.getIndex()];
+      }
+
+      private final int index;
+      private final int value;
+
+      private OptimizeMode(int index, int value) {
+        this.index = index;
+        this.value = value;
+      }
+
+      // @@protoc_insertion_point(enum_scope:google.protobuf.FileOptions.OptimizeMode)
+    }
+
+    private int bitField0_;
+    // optional string java_package = 1;
+    public static final int JAVA_PACKAGE_FIELD_NUMBER = 1;
+    private java.lang.Object javaPackage_;
+    /**
+     * <code>optional string java_package = 1;</code>
+     *
+     * <pre>
+     * Sets the Java package where classes generated from this .proto will be
+     * placed.  By default, the proto package is used, but this is often
+     * inappropriate because proto packages do not normally start with backwards
+     * domain names.
+     * </pre>
+     */
+    public boolean hasJavaPackage() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>optional string java_package = 1;</code>
+     *
+     * <pre>
+     * Sets the Java package where classes generated from this .proto will be
+     * placed.  By default, the proto package is used, but this is often
+     * inappropriate because proto packages do not normally start with backwards
+     * domain names.
+     * </pre>
+     */
+    public java.lang.String getJavaPackage() {
+      java.lang.Object ref = javaPackage_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          javaPackage_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string java_package = 1;</code>
+     *
+     * <pre>
+     * Sets the Java package where classes generated from this .proto will be
+     * placed.  By default, the proto package is used, but this is often
+     * inappropriate because proto packages do not normally start with backwards
+     * domain names.
+     * </pre>
+     */
+    public com.google.protobuf.ByteString
+        getJavaPackageBytes() {
+      java.lang.Object ref = javaPackage_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        javaPackage_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    // optional string java_outer_classname = 8;
+    public static final int JAVA_OUTER_CLASSNAME_FIELD_NUMBER = 8;
+    private java.lang.Object javaOuterClassname_;
+    /**
+     * <code>optional string java_outer_classname = 8;</code>
+     *
+     * <pre>
+     * If set, all the classes from the .proto file are wrapped in a single
+     * outer class with the given name.  This applies to both Proto1
+     * (equivalent to the old "--one_java_file" option) and Proto2 (where
+     * a .proto always translates to a single class, but you may want to
+     * explicitly choose the class name).
+     * </pre>
+     */
+    public boolean hasJavaOuterClassname() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>optional string java_outer_classname = 8;</code>
+     *
+     * <pre>
+     * If set, all the classes from the .proto file are wrapped in a single
+     * outer class with the given name.  This applies to both Proto1
+     * (equivalent to the old "--one_java_file" option) and Proto2 (where
+     * a .proto always translates to a single class, but you may want to
+     * explicitly choose the class name).
+     * </pre>
+     */
+    public java.lang.String getJavaOuterClassname() {
+      java.lang.Object ref = javaOuterClassname_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          javaOuterClassname_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string java_outer_classname = 8;</code>
+     *
+     * <pre>
+     * If set, all the classes from the .proto file are wrapped in a single
+     * outer class with the given name.  This applies to both Proto1
+     * (equivalent to the old "--one_java_file" option) and Proto2 (where
+     * a .proto always translates to a single class, but you may want to
+     * explicitly choose the class name).
+     * </pre>
+     */
+    public com.google.protobuf.ByteString
+        getJavaOuterClassnameBytes() {
+      java.lang.Object ref = javaOuterClassname_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        javaOuterClassname_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    // optional bool java_multiple_files = 10 [default = false];
+    public static final int JAVA_MULTIPLE_FILES_FIELD_NUMBER = 10;
+    private boolean javaMultipleFiles_;
+    /**
+     * <code>optional bool java_multiple_files = 10 [default = false];</code>
+     *
+     * <pre>
+     * If set true, then the Java code generator will generate a separate .java
+     * file for each top-level message, enum, and service defined in the .proto
+     * file.  Thus, these types will *not* be nested inside the outer class
+     * named by java_outer_classname.  However, the outer class will still be
+     * generated to contain the file's getDescriptor() method as well as any
+     * top-level extensions defined in the file.
+     * </pre>
+     */
+    public boolean hasJavaMultipleFiles() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    /**
+     * <code>optional bool java_multiple_files = 10 [default = false];</code>
+     *
+     * <pre>
+     * If set true, then the Java code generator will generate a separate .java
+     * file for each top-level message, enum, and service defined in the .proto
+     * file.  Thus, these types will *not* be nested inside the outer class
+     * named by java_outer_classname.  However, the outer class will still be
+     * generated to contain the file's getDescriptor() method as well as any
+     * top-level extensions defined in the file.
+     * </pre>
+     */
+    public boolean getJavaMultipleFiles() {
+      return javaMultipleFiles_;
+    }
+
+    // optional bool java_generate_equals_and_hash = 20 [default = false];
+    public static final int JAVA_GENERATE_EQUALS_AND_HASH_FIELD_NUMBER = 20;
+    private boolean javaGenerateEqualsAndHash_;
+    /**
+     * <code>optional bool java_generate_equals_and_hash = 20 [default = false];</code>
+     *
+     * <pre>
+     * If set true, then the Java code generator will generate equals() and
+     * hashCode() methods for all messages defined in the .proto file. This is
+     * purely a speed optimization, as the AbstractMessage base class includes
+     * reflection-based implementations of these methods.
+     * </pre>
+     */
+    public boolean hasJavaGenerateEqualsAndHash() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    /**
+     * <code>optional bool java_generate_equals_and_hash = 20 [default = false];</code>
+     *
+     * <pre>
+     * If set true, then the Java code generator will generate equals() and
+     * hashCode() methods for all messages defined in the .proto file. This is
+     * purely a speed optimization, as the AbstractMessage base class includes
+     * reflection-based implementations of these methods.
+     * </pre>
+     */
+    public boolean getJavaGenerateEqualsAndHash() {
+      return javaGenerateEqualsAndHash_;
+    }
+
+    // optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];
+    public static final int OPTIMIZE_FOR_FIELD_NUMBER = 9;
+    private com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode optimizeFor_;
+    /**
+     * <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>
+     */
+    public boolean hasOptimizeFor() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    /**
+     * <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>
+     */
+    public com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode getOptimizeFor() {
+      return optimizeFor_;
+    }
+
+    // optional string go_package = 11;
+    public static final int GO_PACKAGE_FIELD_NUMBER = 11;
+    private java.lang.Object goPackage_;
+    /**
+     * <code>optional string go_package = 11;</code>
+     *
+     * <pre>
+     * Sets the Go package where structs generated from this .proto will be
+     * placed.  There is no default.
+     * </pre>
+     */
+    public boolean hasGoPackage() {
+      return ((bitField0_ & 0x00000020) == 0x00000020);
+    }
+    /**
+     * <code>optional string go_package = 11;</code>
+     *
+     * <pre>
+     * Sets the Go package where structs generated from this .proto will be
+     * placed.  There is no default.
+     * </pre>
+     */
+    public java.lang.String getGoPackage() {
+      java.lang.Object ref = goPackage_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          goPackage_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string go_package = 11;</code>
+     *
+     * <pre>
+     * Sets the Go package where structs generated from this .proto will be
+     * placed.  There is no default.
+     * </pre>
+     */
+    public com.google.protobuf.ByteString
+        getGoPackageBytes() {
+      java.lang.Object ref = goPackage_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        goPackage_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    // optional bool cc_generic_services = 16 [default = false];
+    public static final int CC_GENERIC_SERVICES_FIELD_NUMBER = 16;
+    private boolean ccGenericServices_;
+    /**
+     * <code>optional bool cc_generic_services = 16 [default = false];</code>
+     *
+     * <pre>
+     * Should generic services be generated in each language?  "Generic" services
+     * are not specific to any particular RPC system.  They are generated by the
+     * main code generators in each language (without additional plugins).
+     * Generic services were the only kind of service generation supported by
+     * early versions of proto2.
+     *
+     * Generic services are now considered deprecated in favor of using plugins
+     * that generate code specific to your particular RPC system.  Therefore,
+     * these default to false.  Old code which depends on generic services should
+     * explicitly set them to true.
+     * </pre>
+     */
+    public boolean hasCcGenericServices() {
+      return ((bitField0_ & 0x00000040) == 0x00000040);
+    }
+    /**
+     * <code>optional bool cc_generic_services = 16 [default = false];</code>
+     *
+     * <pre>
+     * Should generic services be generated in each language?  "Generic" services
+     * are not specific to any particular RPC system.  They are generated by the
+     * main code generators in each language (without additional plugins).
+     * Generic services were the only kind of service generation supported by
+     * early versions of proto2.
+     *
+     * Generic services are now considered deprecated in favor of using plugins
+     * that generate code specific to your particular RPC system.  Therefore,
+     * these default to false.  Old code which depends on generic services should
+     * explicitly set them to true.
+     * </pre>
+     */
+    public boolean getCcGenericServices() {
+      return ccGenericServices_;
+    }
+
+    // optional bool java_generic_services = 17 [default = false];
+    public static final int JAVA_GENERIC_SERVICES_FIELD_NUMBER = 17;
+    private boolean javaGenericServices_;
+    /**
+     * <code>optional bool java_generic_services = 17 [default = false];</code>
+     */
+    public boolean hasJavaGenericServices() {
+      return ((bitField0_ & 0x00000080) == 0x00000080);
+    }
+    /**
+     * <code>optional bool java_generic_services = 17 [default = false];</code>
+     */
+    public boolean getJavaGenericServices() {
+      return javaGenericServices_;
+    }
+
+    // optional bool py_generic_services = 18 [default = false];
+    public static final int PY_GENERIC_SERVICES_FIELD_NUMBER = 18;
+    private boolean pyGenericServices_;
+    /**
+     * <code>optional bool py_generic_services = 18 [default = false];</code>
+     */
+    public boolean hasPyGenericServices() {
+      return ((bitField0_ & 0x00000100) == 0x00000100);
+    }
+    /**
+     * <code>optional bool py_generic_services = 18 [default = false];</code>
+     */
+    public boolean getPyGenericServices() {
+      return pyGenericServices_;
+    }
+
+    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
+    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
+    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
+      return uninterpretedOption_;
+    }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+        getUninterpretedOptionOrBuilderList() {
+      return uninterpretedOption_;
+    }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
+    public int getUninterpretedOptionCount() {
+      return uninterpretedOption_.size();
+    }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
+    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
+      return uninterpretedOption_.get(index);
+    }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
+    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+        int index) {
+      return uninterpretedOption_.get(index);
+    }
+
+    private void initFields() {
+      javaPackage_ = "";
+      javaOuterClassname_ = "";
+      javaMultipleFiles_ = false;
+      javaGenerateEqualsAndHash_ = false;
+      optimizeFor_ = com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode.SPEED;
+      goPackage_ = "";
+      ccGenericServices_ = false;
+      javaGenericServices_ = false;
+      pyGenericServices_ = false;
+      uninterpretedOption_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+
+      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+        if (!getUninterpretedOption(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      if (!extensionsAreInitialized()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      com.google.protobuf.GeneratedMessage
+        .ExtendableMessage<com.google.protobuf.DescriptorProtos.FileOptions>.ExtensionWriter extensionWriter =
+          newExtensionWriter();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getJavaPackageBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBytes(8, getJavaOuterClassnameBytes());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeEnum(9, optimizeFor_.getNumber());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBool(10, javaMultipleFiles_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        output.writeBytes(11, getGoPackageBytes());
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        output.writeBool(16, ccGenericServices_);
+      }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        output.writeBool(17, javaGenericServices_);
+      }
+      if (((bitField0_ & 0x00000100) == 0x00000100)) {
+        output.writeBool(18, pyGenericServices_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeBool(20, javaGenerateEqualsAndHash_);
+      }
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        output.writeMessage(999, uninterpretedOption_.get(i));
+      }
+      extensionWriter.writeUntil(536870912, output);
+      getUnknownFields().writeTo(output);
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getJavaPackageBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(8, getJavaOuterClassnameBytes());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(9, optimizeFor_.getNumber());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(10, javaMultipleFiles_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(11, getGoPackageBytes());
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(16, ccGenericServices_);
+      }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(17, javaGenericServices_);
+      }
+      if (((bitField0_ & 0x00000100) == 0x00000100)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(18, pyGenericServices_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(20, javaGenerateEqualsAndHash_);
+      }
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(999, uninterpretedOption_.get(i));
+      }
+      size += extensionsSerializedSize();
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FileOptions prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code google.protobuf.FileOptions}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
+          com.google.protobuf.DescriptorProtos.FileOptions, Builder> implements com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileOptions_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileOptions_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.FileOptions.class, com.google.protobuf.DescriptorProtos.FileOptions.Builder.class);
+      }
+
+      // Construct using com.google.protobuf.DescriptorProtos.FileOptions.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getUninterpretedOptionFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        javaPackage_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        javaOuterClassname_ = "";
+        bitField0_ = (bitField0_ & ~0x00000002);
+        javaMultipleFiles_ = false;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        javaGenerateEqualsAndHash_ = false;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        optimizeFor_ = com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode.SPEED;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        goPackage_ = "";
+        bitField0_ = (bitField0_ & ~0x00000020);
+        ccGenericServices_ = false;
+        bitField0_ = (bitField0_ & ~0x00000040);
+        javaGenericServices_ = false;
+        bitField0_ = (bitField0_ & ~0x00000080);
+        pyGenericServices_ = false;
+        bitField0_ = (bitField0_ & ~0x00000100);
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOption_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000200);
+        } else {
+          uninterpretedOptionBuilder_.clear();
+        }
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileOptions_descriptor;
+      }
+
+      public com.google.protobuf.DescriptorProtos.FileOptions getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance();
+      }
+
+      public com.google.protobuf.DescriptorProtos.FileOptions build() {
+        com.google.protobuf.DescriptorProtos.FileOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public com.google.protobuf.DescriptorProtos.FileOptions buildPartial() {
+        com.google.protobuf.DescriptorProtos.FileOptions result = new com.google.protobuf.DescriptorProtos.FileOptions(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.javaPackage_ = javaPackage_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.javaOuterClassname_ = javaOuterClassname_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.javaMultipleFiles_ = javaMultipleFiles_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.javaGenerateEqualsAndHash_ = javaGenerateEqualsAndHash_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.optimizeFor_ = optimizeFor_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000020;
+        }
+        result.goPackage_ = goPackage_;
+        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
+          to_bitField0_ |= 0x00000040;
+        }
+        result.ccGenericServices_ = ccGenericServices_;
+        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
+          to_bitField0_ |= 0x00000080;
+        }
+        result.javaGenericServices_ = javaGenericServices_;
+        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
+          to_bitField0_ |= 0x00000100;
+        }
+        result.pyGenericServices_ = pyGenericServices_;
+        if (uninterpretedOptionBuilder_ == null) {
+          if (((bitField0_ & 0x00000200) == 0x00000200)) {
+            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
+            bitField0_ = (bitField0_ & ~0x00000200);
+          }
+          result.uninterpretedOption_ = uninterpretedOption_;
+        } else {
+          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.FileOptions) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.FileOptions)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FileOptions other) {
+        if (other == com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance()) return this;
+        if (other.hasJavaPackage()) {
+          bitField0_ |= 0x00000001;
+          javaPackage_ = other.javaPackage_;
+          onChanged();
+        }
+        if (other.hasJavaOuterClassname()) {
+          bitField0_ |= 0x00000002;
+          javaOuterClassname_ = other.javaOuterClassname_;
+          onChanged();
+        }
+        if (other.hasJavaMultipleFiles()) {
+          setJavaMultipleFiles(other.getJavaMultipleFiles());
+        }
+        if (other.hasJavaGenerateEqualsAndHash()) {
+          setJavaGenerateEqualsAndHash(other.getJavaGenerateEqualsAndHash());
+        }
+        if (other.hasOptimizeFor()) {
+          setOptimizeFor(other.getOptimizeFor());
+        }
+        if (other.hasGoPackage()) {
+          bitField0_ |= 0x00000020;
+          goPackage_ = other.goPackage_;
+          onChanged();
+        }
+        if (other.hasCcGenericServices()) {
+          setCcGenericServices(other.getCcGenericServices());
+        }
+        if (other.hasJavaGenericServices()) {
+          setJavaGenericServices(other.getJavaGenericServices());
+        }
+        if (other.hasPyGenericServices()) {
+          setPyGenericServices(other.getPyGenericServices());
+        }
+        if (uninterpretedOptionBuilder_ == null) {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOption_.isEmpty()) {
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000200);
+            } else {
+              ensureUninterpretedOptionIsMutable();
+              uninterpretedOption_.addAll(other.uninterpretedOption_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOptionBuilder_.isEmpty()) {
+              uninterpretedOptionBuilder_.dispose();
+              uninterpretedOptionBuilder_ = null;
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000200);
+              uninterpretedOptionBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getUninterpretedOptionFieldBuilder() : null;
+            } else {
+              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
+            }
+          }
+        }
+        this.mergeExtensionFields(other);
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+
+      public final boolean isInitialized() {
+        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+          if (!getUninterpretedOption(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        if (!extensionsAreInitialized()) {
+          
+          return false;
+        }
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.DescriptorProtos.FileOptions parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.google.protobuf.DescriptorProtos.FileOptions) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
       private int bitField0_;
-      
+
       // optional string java_package = 1;
       private java.lang.Object javaPackage_ = "";
+      /**
+       * <code>optional string java_package = 1;</code>
+       *
+       * <pre>
+       * Sets the Java package where classes generated from this .proto will be
+       * placed.  By default, the proto package is used, but this is often
+       * inappropriate because proto packages do not normally start with backwards
+       * domain names.
+       * </pre>
+       */
       public boolean hasJavaPackage() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public String getJavaPackage() {
+      /**
+       * <code>optional string java_package = 1;</code>
+       *
+       * <pre>
+       * Sets the Java package where classes generated from this .proto will be
+       * placed.  By default, the proto package is used, but this is often
+       * inappropriate because proto packages do not normally start with backwards
+       * domain names.
+       * </pre>
+       */
+      public java.lang.String getJavaPackage() {
         java.lang.Object ref = javaPackage_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           javaPackage_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setJavaPackage(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string java_package = 1;</code>
+       *
+       * <pre>
+       * Sets the Java package where classes generated from this .proto will be
+       * placed.  By default, the proto package is used, but this is often
+       * inappropriate because proto packages do not normally start with backwards
+       * domain names.
+       * </pre>
+       */
+      public com.google.protobuf.ByteString
+          getJavaPackageBytes() {
+        java.lang.Object ref = javaPackage_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          javaPackage_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string java_package = 1;</code>
+       *
+       * <pre>
+       * Sets the Java package where classes generated from this .proto will be
+       * placed.  By default, the proto package is used, but this is often
+       * inappropriate because proto packages do not normally start with backwards
+       * domain names.
+       * </pre>
+       */
+      public Builder setJavaPackage(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -10145,4 +14754,14 @@
         return this;
       }
+      /**
+       * <code>optional string java_package = 1;</code>
+       *
+       * <pre>
+       * Sets the Java package where classes generated from this .proto will be
+       * placed.  By default, the proto package is used, but this is often
+       * inappropriate because proto packages do not normally start with backwards
+       * domain names.
+       * </pre>
+       */
       public Builder clearJavaPackage() {
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -10151,26 +14770,100 @@
         return this;
       }
-      void setJavaPackage(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000001;
+      /**
+       * <code>optional string java_package = 1;</code>
+       *
+       * <pre>
+       * Sets the Java package where classes generated from this .proto will be
+       * placed.  By default, the proto package is used, but this is often
+       * inappropriate because proto packages do not normally start with backwards
+       * domain names.
+       * </pre>
+       */
+      public Builder setJavaPackageBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
         javaPackage_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // optional string java_outer_classname = 8;
       private java.lang.Object javaOuterClassname_ = "";
+      /**
+       * <code>optional string java_outer_classname = 8;</code>
+       *
+       * <pre>
+       * If set, all the classes from the .proto file are wrapped in a single
+       * outer class with the given name.  This applies to both Proto1
+       * (equivalent to the old "--one_java_file" option) and Proto2 (where
+       * a .proto always translates to a single class, but you may want to
+       * explicitly choose the class name).
+       * </pre>
+       */
       public boolean hasJavaOuterClassname() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
-      public String getJavaOuterClassname() {
+      /**
+       * <code>optional string java_outer_classname = 8;</code>
+       *
+       * <pre>
+       * If set, all the classes from the .proto file are wrapped in a single
+       * outer class with the given name.  This applies to both Proto1
+       * (equivalent to the old "--one_java_file" option) and Proto2 (where
+       * a .proto always translates to a single class, but you may want to
+       * explicitly choose the class name).
+       * </pre>
+       */
+      public java.lang.String getJavaOuterClassname() {
         java.lang.Object ref = javaOuterClassname_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           javaOuterClassname_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setJavaOuterClassname(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string java_outer_classname = 8;</code>
+       *
+       * <pre>
+       * If set, all the classes from the .proto file are wrapped in a single
+       * outer class with the given name.  This applies to both Proto1
+       * (equivalent to the old "--one_java_file" option) and Proto2 (where
+       * a .proto always translates to a single class, but you may want to
+       * explicitly choose the class name).
+       * </pre>
+       */
+      public com.google.protobuf.ByteString
+          getJavaOuterClassnameBytes() {
+        java.lang.Object ref = javaOuterClassname_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          javaOuterClassname_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string java_outer_classname = 8;</code>
+       *
+       * <pre>
+       * If set, all the classes from the .proto file are wrapped in a single
+       * outer class with the given name.  This applies to both Proto1
+       * (equivalent to the old "--one_java_file" option) and Proto2 (where
+       * a .proto always translates to a single class, but you may want to
+       * explicitly choose the class name).
+       * </pre>
+       */
+      public Builder setJavaOuterClassname(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -10181,4 +14874,15 @@
         return this;
       }
+      /**
+       * <code>optional string java_outer_classname = 8;</code>
+       *
+       * <pre>
+       * If set, all the classes from the .proto file are wrapped in a single
+       * outer class with the given name.  This applies to both Proto1
+       * (equivalent to the old "--one_java_file" option) and Proto2 (where
+       * a .proto always translates to a single class, but you may want to
+       * explicitly choose the class name).
+       * </pre>
+       */
       public Builder clearJavaOuterClassname() {
         bitField0_ = (bitField0_ & ~0x00000002);
@@ -10187,18 +14891,70 @@
         return this;
       }
-      void setJavaOuterClassname(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000002;
+      /**
+       * <code>optional string java_outer_classname = 8;</code>
+       *
+       * <pre>
+       * If set, all the classes from the .proto file are wrapped in a single
+       * outer class with the given name.  This applies to both Proto1
+       * (equivalent to the old "--one_java_file" option) and Proto2 (where
+       * a .proto always translates to a single class, but you may want to
+       * explicitly choose the class name).
+       * </pre>
+       */
+      public Builder setJavaOuterClassnameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000002;
         javaOuterClassname_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // optional bool java_multiple_files = 10 [default = false];
       private boolean javaMultipleFiles_ ;
+      /**
+       * <code>optional bool java_multiple_files = 10 [default = false];</code>
+       *
+       * <pre>
+       * If set true, then the Java code generator will generate a separate .java
+       * file for each top-level message, enum, and service defined in the .proto
+       * file.  Thus, these types will *not* be nested inside the outer class
+       * named by java_outer_classname.  However, the outer class will still be
+       * generated to contain the file's getDescriptor() method as well as any
+       * top-level extensions defined in the file.
+       * </pre>
+       */
       public boolean hasJavaMultipleFiles() {
         return ((bitField0_ & 0x00000004) == 0x00000004);
       }
+      /**
+       * <code>optional bool java_multiple_files = 10 [default = false];</code>
+       *
+       * <pre>
+       * If set true, then the Java code generator will generate a separate .java
+       * file for each top-level message, enum, and service defined in the .proto
+       * file.  Thus, these types will *not* be nested inside the outer class
+       * named by java_outer_classname.  However, the outer class will still be
+       * generated to contain the file's getDescriptor() method as well as any
+       * top-level extensions defined in the file.
+       * </pre>
+       */
       public boolean getJavaMultipleFiles() {
         return javaMultipleFiles_;
       }
+      /**
+       * <code>optional bool java_multiple_files = 10 [default = false];</code>
+       *
+       * <pre>
+       * If set true, then the Java code generator will generate a separate .java
+       * file for each top-level message, enum, and service defined in the .proto
+       * file.  Thus, these types will *not* be nested inside the outer class
+       * named by java_outer_classname.  However, the outer class will still be
+       * generated to contain the file's getDescriptor() method as well as any
+       * top-level extensions defined in the file.
+       * </pre>
+       */
       public Builder setJavaMultipleFiles(boolean value) {
         bitField0_ |= 0x00000004;
@@ -10207,4 +14963,16 @@
         return this;
       }
+      /**
+       * <code>optional bool java_multiple_files = 10 [default = false];</code>
+       *
+       * <pre>
+       * If set true, then the Java code generator will generate a separate .java
+       * file for each top-level message, enum, and service defined in the .proto
+       * file.  Thus, these types will *not* be nested inside the outer class
+       * named by java_outer_classname.  However, the outer class will still be
+       * generated to contain the file's getDescriptor() method as well as any
+       * top-level extensions defined in the file.
+       * </pre>
+       */
       public Builder clearJavaMultipleFiles() {
         bitField0_ = (bitField0_ & ~0x00000004);
@@ -10213,13 +14981,43 @@
         return this;
       }
-      
+
       // optional bool java_generate_equals_and_hash = 20 [default = false];
       private boolean javaGenerateEqualsAndHash_ ;
+      /**
+       * <code>optional bool java_generate_equals_and_hash = 20 [default = false];</code>
+       *
+       * <pre>
+       * If set true, then the Java code generator will generate equals() and
+       * hashCode() methods for all messages defined in the .proto file. This is
+       * purely a speed optimization, as the AbstractMessage base class includes
+       * reflection-based implementations of these methods.
+       * </pre>
+       */
       public boolean hasJavaGenerateEqualsAndHash() {
         return ((bitField0_ & 0x00000008) == 0x00000008);
       }
+      /**
+       * <code>optional bool java_generate_equals_and_hash = 20 [default = false];</code>
+       *
+       * <pre>
+       * If set true, then the Java code generator will generate equals() and
+       * hashCode() methods for all messages defined in the .proto file. This is
+       * purely a speed optimization, as the AbstractMessage base class includes
+       * reflection-based implementations of these methods.
+       * </pre>
+       */
       public boolean getJavaGenerateEqualsAndHash() {
         return javaGenerateEqualsAndHash_;
       }
+      /**
+       * <code>optional bool java_generate_equals_and_hash = 20 [default = false];</code>
+       *
+       * <pre>
+       * If set true, then the Java code generator will generate equals() and
+       * hashCode() methods for all messages defined in the .proto file. This is
+       * purely a speed optimization, as the AbstractMessage base class includes
+       * reflection-based implementations of these methods.
+       * </pre>
+       */
       public Builder setJavaGenerateEqualsAndHash(boolean value) {
         bitField0_ |= 0x00000008;
@@ -10228,4 +15026,14 @@
         return this;
       }
+      /**
+       * <code>optional bool java_generate_equals_and_hash = 20 [default = false];</code>
+       *
+       * <pre>
+       * If set true, then the Java code generator will generate equals() and
+       * hashCode() methods for all messages defined in the .proto file. This is
+       * purely a speed optimization, as the AbstractMessage base class includes
+       * reflection-based implementations of these methods.
+       * </pre>
+       */
       public Builder clearJavaGenerateEqualsAndHash() {
         bitField0_ = (bitField0_ & ~0x00000008);
@@ -10234,13 +15042,22 @@
         return this;
       }
-      
+
       // optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];
       private com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode optimizeFor_ = com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode.SPEED;
+      /**
+       * <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>
+       */
       public boolean hasOptimizeFor() {
         return ((bitField0_ & 0x00000010) == 0x00000010);
       }
+      /**
+       * <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>
+       */
       public com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode getOptimizeFor() {
         return optimizeFor_;
       }
+      /**
+       * <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>
+       */
       public Builder setOptimizeFor(com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode value) {
         if (value == null) {
@@ -10252,4 +15069,7 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>
+       */
       public Builder clearOptimizeFor() {
         bitField0_ = (bitField0_ & ~0x00000010);
@@ -10258,21 +15078,68 @@
         return this;
       }
-      
+
       // optional string go_package = 11;
       private java.lang.Object goPackage_ = "";
+      /**
+       * <code>optional string go_package = 11;</code>
+       *
+       * <pre>
+       * Sets the Go package where structs generated from this .proto will be
+       * placed.  There is no default.
+       * </pre>
+       */
       public boolean hasGoPackage() {
         return ((bitField0_ & 0x00000020) == 0x00000020);
       }
-      public String getGoPackage() {
+      /**
+       * <code>optional string go_package = 11;</code>
+       *
+       * <pre>
+       * Sets the Go package where structs generated from this .proto will be
+       * placed.  There is no default.
+       * </pre>
+       */
+      public java.lang.String getGoPackage() {
         java.lang.Object ref = goPackage_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           goPackage_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setGoPackage(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string go_package = 11;</code>
+       *
+       * <pre>
+       * Sets the Go package where structs generated from this .proto will be
+       * placed.  There is no default.
+       * </pre>
+       */
+      public com.google.protobuf.ByteString
+          getGoPackageBytes() {
+        java.lang.Object ref = goPackage_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          goPackage_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string go_package = 11;</code>
+       *
+       * <pre>
+       * Sets the Go package where structs generated from this .proto will be
+       * placed.  There is no default.
+       * </pre>
+       */
+      public Builder setGoPackage(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -10283,4 +15150,12 @@
         return this;
       }
+      /**
+       * <code>optional string go_package = 11;</code>
+       *
+       * <pre>
+       * Sets the Go package where structs generated from this .proto will be
+       * placed.  There is no default.
+       * </pre>
+       */
       public Builder clearGoPackage() {
         bitField0_ = (bitField0_ & ~0x00000020);
@@ -10289,18 +15164,79 @@
         return this;
       }
-      void setGoPackage(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000020;
+      /**
+       * <code>optional string go_package = 11;</code>
+       *
+       * <pre>
+       * Sets the Go package where structs generated from this .proto will be
+       * placed.  There is no default.
+       * </pre>
+       */
+      public Builder setGoPackageBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000020;
         goPackage_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // optional bool cc_generic_services = 16 [default = false];
       private boolean ccGenericServices_ ;
+      /**
+       * <code>optional bool cc_generic_services = 16 [default = false];</code>
+       *
+       * <pre>
+       * Should generic services be generated in each language?  "Generic" services
+       * are not specific to any particular RPC system.  They are generated by the
+       * main code generators in each language (without additional plugins).
+       * Generic services were the only kind of service generation supported by
+       * early versions of proto2.
+       *
+       * Generic services are now considered deprecated in favor of using plugins
+       * that generate code specific to your particular RPC system.  Therefore,
+       * these default to false.  Old code which depends on generic services should
+       * explicitly set them to true.
+       * </pre>
+       */
       public boolean hasCcGenericServices() {
         return ((bitField0_ & 0x00000040) == 0x00000040);
       }
+      /**
+       * <code>optional bool cc_generic_services = 16 [default = false];</code>
+       *
+       * <pre>
+       * Should generic services be generated in each language?  "Generic" services
+       * are not specific to any particular RPC system.  They are generated by the
+       * main code generators in each language (without additional plugins).
+       * Generic services were the only kind of service generation supported by
+       * early versions of proto2.
+       *
+       * Generic services are now considered deprecated in favor of using plugins
+       * that generate code specific to your particular RPC system.  Therefore,
+       * these default to false.  Old code which depends on generic services should
+       * explicitly set them to true.
+       * </pre>
+       */
       public boolean getCcGenericServices() {
         return ccGenericServices_;
       }
+      /**
+       * <code>optional bool cc_generic_services = 16 [default = false];</code>
+       *
+       * <pre>
+       * Should generic services be generated in each language?  "Generic" services
+       * are not specific to any particular RPC system.  They are generated by the
+       * main code generators in each language (without additional plugins).
+       * Generic services were the only kind of service generation supported by
+       * early versions of proto2.
+       *
+       * Generic services are now considered deprecated in favor of using plugins
+       * that generate code specific to your particular RPC system.  Therefore,
+       * these default to false.  Old code which depends on generic services should
+       * explicitly set them to true.
+       * </pre>
+       */
       public Builder setCcGenericServices(boolean value) {
         bitField0_ |= 0x00000040;
@@ -10309,4 +15245,20 @@
         return this;
       }
+      /**
+       * <code>optional bool cc_generic_services = 16 [default = false];</code>
+       *
+       * <pre>
+       * Should generic services be generated in each language?  "Generic" services
+       * are not specific to any particular RPC system.  They are generated by the
+       * main code generators in each language (without additional plugins).
+       * Generic services were the only kind of service generation supported by
+       * early versions of proto2.
+       *
+       * Generic services are now considered deprecated in favor of using plugins
+       * that generate code specific to your particular RPC system.  Therefore,
+       * these default to false.  Old code which depends on generic services should
+       * explicitly set them to true.
+       * </pre>
+       */
       public Builder clearCcGenericServices() {
         bitField0_ = (bitField0_ & ~0x00000040);
@@ -10315,13 +15267,22 @@
         return this;
       }
-      
+
       // optional bool java_generic_services = 17 [default = false];
       private boolean javaGenericServices_ ;
+      /**
+       * <code>optional bool java_generic_services = 17 [default = false];</code>
+       */
       public boolean hasJavaGenericServices() {
         return ((bitField0_ & 0x00000080) == 0x00000080);
       }
+      /**
+       * <code>optional bool java_generic_services = 17 [default = false];</code>
+       */
       public boolean getJavaGenericServices() {
         return javaGenericServices_;
       }
+      /**
+       * <code>optional bool java_generic_services = 17 [default = false];</code>
+       */
       public Builder setJavaGenericServices(boolean value) {
         bitField0_ |= 0x00000080;
@@ -10330,4 +15291,7 @@
         return this;
       }
+      /**
+       * <code>optional bool java_generic_services = 17 [default = false];</code>
+       */
       public Builder clearJavaGenericServices() {
         bitField0_ = (bitField0_ & ~0x00000080);
@@ -10336,13 +15300,22 @@
         return this;
       }
-      
+
       // optional bool py_generic_services = 18 [default = false];
       private boolean pyGenericServices_ ;
+      /**
+       * <code>optional bool py_generic_services = 18 [default = false];</code>
+       */
       public boolean hasPyGenericServices() {
         return ((bitField0_ & 0x00000100) == 0x00000100);
       }
+      /**
+       * <code>optional bool py_generic_services = 18 [default = false];</code>
+       */
       public boolean getPyGenericServices() {
         return pyGenericServices_;
       }
+      /**
+       * <code>optional bool py_generic_services = 18 [default = false];</code>
+       */
       public Builder setPyGenericServices(boolean value) {
         bitField0_ |= 0x00000100;
@@ -10351,4 +15324,7 @@
         return this;
       }
+      /**
+       * <code>optional bool py_generic_services = 18 [default = false];</code>
+       */
       public Builder clearPyGenericServices() {
         bitField0_ = (bitField0_ & ~0x00000100);
@@ -10357,5 +15333,5 @@
         return this;
       }
-      
+
       // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
       private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
@@ -10367,8 +15343,15 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -10378,4 +15361,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public int getUninterpretedOptionCount() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -10385,4 +15375,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -10392,4 +15389,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder setUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
@@ -10406,4 +15410,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder setUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -10417,4 +15428,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -10430,4 +15448,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
@@ -10444,4 +15469,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -10455,4 +15487,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -10466,4 +15505,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addAllUninterpretedOption(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
@@ -10477,4 +15523,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder clearUninterpretedOption() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -10487,4 +15540,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder removeUninterpretedOption(int index) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -10497,8 +15557,22 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
           int index) {
         return getUninterpretedOptionFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
           int index) {
@@ -10508,4 +15582,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
            getUninterpretedOptionOrBuilderList() {
@@ -10516,8 +15597,22 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
         return getUninterpretedOptionFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
           int index) {
@@ -10525,4 +15620,11 @@
             index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
            getUninterpretedOptionBuilderList() {
@@ -10543,447 +15645,187 @@
         return uninterpretedOptionBuilder_;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:google.protobuf.FileOptions)
     }
-    
+
     static {
       defaultInstance = new FileOptions(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:google.protobuf.FileOptions)
   }
-  
+
   public interface MessageOptionsOrBuilder extends
       com.google.protobuf.GeneratedMessage.
           ExtendableMessageOrBuilder<MessageOptions> {
-    
+
     // optional bool message_set_wire_format = 1 [default = false];
+    /**
+     * <code>optional bool message_set_wire_format = 1 [default = false];</code>
+     *
+     * <pre>
+     * Set true to use the old proto1 MessageSet wire format for extensions.
+     * This is provided for backwards-compatibility with the MessageSet wire
+     * format.  You should not use this for any other reason:  It's less
+     * efficient, has fewer features, and is more complicated.
+     *
+     * The message must be defined exactly as follows:
+     *   message Foo {
+     *     option message_set_wire_format = true;
+     *     extensions 4 to max;
+     *   }
+     * Note that the message cannot have any defined fields; MessageSets only
+     * have extensions.
+     *
+     * All extensions of your type must be singular messages; e.g. they cannot
+     * be int32s, enums, or repeated messages.
+     *
+     * Because this is an option, the above two restrictions are not enforced by
+     * the protocol compiler.
+     * </pre>
+     */
     boolean hasMessageSetWireFormat();
+    /**
+     * <code>optional bool message_set_wire_format = 1 [default = false];</code>
+     *
+     * <pre>
+     * Set true to use the old proto1 MessageSet wire format for extensions.
+     * This is provided for backwards-compatibility with the MessageSet wire
+     * format.  You should not use this for any other reason:  It's less
+     * efficient, has fewer features, and is more complicated.
+     *
+     * The message must be defined exactly as follows:
+     *   message Foo {
+     *     option message_set_wire_format = true;
+     *     extensions 4 to max;
+     *   }
+     * Note that the message cannot have any defined fields; MessageSets only
+     * have extensions.
+     *
+     * All extensions of your type must be singular messages; e.g. they cannot
+     * be int32s, enums, or repeated messages.
+     *
+     * Because this is an option, the above two restrictions are not enforced by
+     * the protocol compiler.
+     * </pre>
+     */
     boolean getMessageSetWireFormat();
-    
+
     // optional bool no_standard_descriptor_accessor = 2 [default = false];
+    /**
+     * <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>
+     *
+     * <pre>
+     * Disables the generation of the standard "descriptor()" accessor, which can
+     * conflict with a field of the same name.  This is meant to make migration
+     * from proto1 easier; new code should avoid fields named "descriptor".
+     * </pre>
+     */
     boolean hasNoStandardDescriptorAccessor();
+    /**
+     * <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>
+     *
+     * <pre>
+     * Disables the generation of the standard "descriptor()" accessor, which can
+     * conflict with a field of the same name.  This is meant to make migration
+     * from proto1 easier; new code should avoid fields named "descriptor".
+     * </pre>
+     */
     boolean getNoStandardDescriptorAccessor();
-    
+
     // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
         getUninterpretedOptionList();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     int getUninterpretedOptionCount();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
         getUninterpretedOptionOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
         int index);
   }
+  /**
+   * Protobuf type {@code google.protobuf.MessageOptions}
+   */
   public static final class MessageOptions extends
       com.google.protobuf.GeneratedMessage.ExtendableMessage<
         MessageOptions> implements MessageOptionsOrBuilder {
     // Use MessageOptions.newBuilder() to construct.
-    private MessageOptions(Builder builder) {
+    private MessageOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.MessageOptions, ?> builder) {
       super(builder);
-    }
-    private MessageOptions(boolean noInit) {}
-    
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private MessageOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
     private static final MessageOptions defaultInstance;
     public static MessageOptions getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public MessageOptions getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MessageOptions_descriptor;
-    }
-    
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MessageOptions_fieldAccessorTable;
-    }
-    
-    private int bitField0_;
-    // optional bool message_set_wire_format = 1 [default = false];
-    public static final int MESSAGE_SET_WIRE_FORMAT_FIELD_NUMBER = 1;
-    private boolean messageSetWireFormat_;
-    public boolean hasMessageSetWireFormat() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    public boolean getMessageSetWireFormat() {
-      return messageSetWireFormat_;
-    }
-    
-    // optional bool no_standard_descriptor_accessor = 2 [default = false];
-    public static final int NO_STANDARD_DESCRIPTOR_ACCESSOR_FIELD_NUMBER = 2;
-    private boolean noStandardDescriptorAccessor_;
-    public boolean hasNoStandardDescriptorAccessor() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    public boolean getNoStandardDescriptorAccessor() {
-      return noStandardDescriptorAccessor_;
-    }
-    
-    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
-    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
-    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
-    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
-      return uninterpretedOption_;
-    }
-    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
-        getUninterpretedOptionOrBuilderList() {
-      return uninterpretedOption_;
-    }
-    public int getUninterpretedOptionCount() {
-      return uninterpretedOption_.size();
-    }
-    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
-      return uninterpretedOption_.get(index);
-    }
-    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
-        int index) {
-      return uninterpretedOption_.get(index);
-    }
-    
-    private void initFields() {
-      messageSetWireFormat_ = false;
-      noStandardDescriptorAccessor_ = false;
-      uninterpretedOption_ = java.util.Collections.emptyList();
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
-      
-      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
-        if (!getUninterpretedOption(i).isInitialized()) {
-          memoizedIsInitialized = 0;
-          return false;
-        }
-      }
-      if (!extensionsAreInitialized()) {
-        memoizedIsInitialized = 0;
-        return false;
-      }
-      memoizedIsInitialized = 1;
-      return true;
-    }
-    
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      com.google.protobuf.GeneratedMessage
-        .ExtendableMessage<com.google.protobuf.DescriptorProtos.MessageOptions>.ExtensionWriter extensionWriter =
-          newExtensionWriter();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBool(1, messageSetWireFormat_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeBool(2, noStandardDescriptorAccessor_);
-      }
-      for (int i = 0; i < uninterpretedOption_.size(); i++) {
-        output.writeMessage(999, uninterpretedOption_.get(i));
-      }
-      extensionWriter.writeUntil(536870912, output);
-      getUnknownFields().writeTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-    
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(1, messageSetWireFormat_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(2, noStandardDescriptorAccessor_);
-      }
-      for (int i = 0; i < uninterpretedOption_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(999, uninterpretedOption_.get(i));
-      }
-      size += extensionsSerializedSize();
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-    
-    private static final long serialVersionUID = 0L;
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
     @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-    
-    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
-        com.google.protobuf.ByteString data,
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private MessageOptions(
+        com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.MessageOptions parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
-    }
-    public static com.google.protobuf.DescriptorProtos.MessageOptions 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 com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.MessageOptions 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(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.MessageOptions prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-    
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
-          com.google.protobuf.DescriptorProtos.MessageOptions, Builder> implements com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MessageOptions_descriptor;
-      }
-      
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MessageOptions_fieldAccessorTable;
-      }
-      
-      // Construct using com.google.protobuf.DescriptorProtos.MessageOptions.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-      
-      private Builder(BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getUninterpretedOptionFieldBuilder();
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-      
-      public Builder clear() {
-        super.clear();
-        messageSetWireFormat_ = false;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        noStandardDescriptorAccessor_ = false;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        if (uninterpretedOptionBuilder_ == null) {
-          uninterpretedOption_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
-        } else {
-          uninterpretedOptionBuilder_.clear();
-        }
-        return this;
-      }
-      
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-      
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return com.google.protobuf.DescriptorProtos.MessageOptions.getDescriptor();
-      }
-      
-      public com.google.protobuf.DescriptorProtos.MessageOptions getDefaultInstanceForType() {
-        return com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance();
-      }
-      
-      public com.google.protobuf.DescriptorProtos.MessageOptions build() {
-        com.google.protobuf.DescriptorProtos.MessageOptions result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-      
-      private com.google.protobuf.DescriptorProtos.MessageOptions buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        com.google.protobuf.DescriptorProtos.MessageOptions result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
-      public com.google.protobuf.DescriptorProtos.MessageOptions buildPartial() {
-        com.google.protobuf.DescriptorProtos.MessageOptions result = new com.google.protobuf.DescriptorProtos.MessageOptions(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.messageSetWireFormat_ = messageSetWireFormat_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.noStandardDescriptorAccessor_ = noStandardDescriptorAccessor_;
-        if (uninterpretedOptionBuilder_ == null) {
-          if (((bitField0_ & 0x00000004) == 0x00000004)) {
-            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
-            bitField0_ = (bitField0_ & ~0x00000004);
-          }
-          result.uninterpretedOption_ = uninterpretedOption_;
-        } else {
-          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
-        }
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-      
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.google.protobuf.DescriptorProtos.MessageOptions) {
-          return mergeFrom((com.google.protobuf.DescriptorProtos.MessageOptions)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-      
-      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.MessageOptions other) {
-        if (other == com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance()) return this;
-        if (other.hasMessageSetWireFormat()) {
-          setMessageSetWireFormat(other.getMessageSetWireFormat());
-        }
-        if (other.hasNoStandardDescriptorAccessor()) {
-          setNoStandardDescriptorAccessor(other.getNoStandardDescriptorAccessor());
-        }
-        if (uninterpretedOptionBuilder_ == null) {
-          if (!other.uninterpretedOption_.isEmpty()) {
-            if (uninterpretedOption_.isEmpty()) {
-              uninterpretedOption_ = other.uninterpretedOption_;
-              bitField0_ = (bitField0_ & ~0x00000004);
-            } else {
-              ensureUninterpretedOptionIsMutable();
-              uninterpretedOption_.addAll(other.uninterpretedOption_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.uninterpretedOption_.isEmpty()) {
-            if (uninterpretedOptionBuilder_.isEmpty()) {
-              uninterpretedOptionBuilder_.dispose();
-              uninterpretedOptionBuilder_ = null;
-              uninterpretedOption_ = other.uninterpretedOption_;
-              bitField0_ = (bitField0_ & ~0x00000004);
-              uninterpretedOptionBuilder_ = 
-                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
-                   getUninterpretedOptionFieldBuilder() : null;
-            } else {
-              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
-            }
-          }
-        }
-        this.mergeExtensionFields(other);
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-      
-      public final boolean isInitialized() {
-        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
-          if (!getUninterpretedOption(i).isInitialized()) {
-            
-            return false;
-          }
-        }
-        if (!extensionsAreInitialized()) {
-          
-          return false;
-        }
-        return true;
-      }
-      
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder(
-            this.getUnknownFields());
-        while (true) {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
           int tag = input.readTag();
           switch (tag) {
             case 0:
-              this.setUnknownFields(unknownFields.build());
-              onChanged();
-              return this;
+              done = true;
+              break;
             default: {
               if (!parseUnknownField(input, unknownFields,
                                      extensionRegistry, tag)) {
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
+                done = true;
               }
               break;
@@ -11000,23 +15842,596 @@
             }
             case 7994: {
-              com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder subBuilder = com.google.protobuf.DescriptorProtos.UninterpretedOption.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addUninterpretedOption(subBuilder.buildPartial());
+              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+                uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.PARSER, extensionRegistry));
               break;
             }
           }
         }
-      }
-      
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MessageOptions_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MessageOptions_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.protobuf.DescriptorProtos.MessageOptions.class, com.google.protobuf.DescriptorProtos.MessageOptions.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<MessageOptions> PARSER =
+        new com.google.protobuf.AbstractParser<MessageOptions>() {
+      public MessageOptions parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new MessageOptions(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<MessageOptions> getParserForType() {
+      return PARSER;
+    }
+
+    private int bitField0_;
+    // optional bool message_set_wire_format = 1 [default = false];
+    public static final int MESSAGE_SET_WIRE_FORMAT_FIELD_NUMBER = 1;
+    private boolean messageSetWireFormat_;
+    /**
+     * <code>optional bool message_set_wire_format = 1 [default = false];</code>
+     *
+     * <pre>
+     * Set true to use the old proto1 MessageSet wire format for extensions.
+     * This is provided for backwards-compatibility with the MessageSet wire
+     * format.  You should not use this for any other reason:  It's less
+     * efficient, has fewer features, and is more complicated.
+     *
+     * The message must be defined exactly as follows:
+     *   message Foo {
+     *     option message_set_wire_format = true;
+     *     extensions 4 to max;
+     *   }
+     * Note that the message cannot have any defined fields; MessageSets only
+     * have extensions.
+     *
+     * All extensions of your type must be singular messages; e.g. they cannot
+     * be int32s, enums, or repeated messages.
+     *
+     * Because this is an option, the above two restrictions are not enforced by
+     * the protocol compiler.
+     * </pre>
+     */
+    public boolean hasMessageSetWireFormat() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>optional bool message_set_wire_format = 1 [default = false];</code>
+     *
+     * <pre>
+     * Set true to use the old proto1 MessageSet wire format for extensions.
+     * This is provided for backwards-compatibility with the MessageSet wire
+     * format.  You should not use this for any other reason:  It's less
+     * efficient, has fewer features, and is more complicated.
+     *
+     * The message must be defined exactly as follows:
+     *   message Foo {
+     *     option message_set_wire_format = true;
+     *     extensions 4 to max;
+     *   }
+     * Note that the message cannot have any defined fields; MessageSets only
+     * have extensions.
+     *
+     * All extensions of your type must be singular messages; e.g. they cannot
+     * be int32s, enums, or repeated messages.
+     *
+     * Because this is an option, the above two restrictions are not enforced by
+     * the protocol compiler.
+     * </pre>
+     */
+    public boolean getMessageSetWireFormat() {
+      return messageSetWireFormat_;
+    }
+
+    // optional bool no_standard_descriptor_accessor = 2 [default = false];
+    public static final int NO_STANDARD_DESCRIPTOR_ACCESSOR_FIELD_NUMBER = 2;
+    private boolean noStandardDescriptorAccessor_;
+    /**
+     * <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>
+     *
+     * <pre>
+     * Disables the generation of the standard "descriptor()" accessor, which can
+     * conflict with a field of the same name.  This is meant to make migration
+     * from proto1 easier; new code should avoid fields named "descriptor".
+     * </pre>
+     */
+    public boolean hasNoStandardDescriptorAccessor() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>
+     *
+     * <pre>
+     * Disables the generation of the standard "descriptor()" accessor, which can
+     * conflict with a field of the same name.  This is meant to make migration
+     * from proto1 easier; new code should avoid fields named "descriptor".
+     * </pre>
+     */
+    public boolean getNoStandardDescriptorAccessor() {
+      return noStandardDescriptorAccessor_;
+    }
+
+    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
+    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
+    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
+      return uninterpretedOption_;
+    }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+        getUninterpretedOptionOrBuilderList() {
+      return uninterpretedOption_;
+    }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
+    public int getUninterpretedOptionCount() {
+      return uninterpretedOption_.size();
+    }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
+    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
+      return uninterpretedOption_.get(index);
+    }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
+    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+        int index) {
+      return uninterpretedOption_.get(index);
+    }
+
+    private void initFields() {
+      messageSetWireFormat_ = false;
+      noStandardDescriptorAccessor_ = false;
+      uninterpretedOption_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+
+      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+        if (!getUninterpretedOption(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      if (!extensionsAreInitialized()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      com.google.protobuf.GeneratedMessage
+        .ExtendableMessage<com.google.protobuf.DescriptorProtos.MessageOptions>.ExtensionWriter extensionWriter =
+          newExtensionWriter();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBool(1, messageSetWireFormat_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBool(2, noStandardDescriptorAccessor_);
+      }
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        output.writeMessage(999, uninterpretedOption_.get(i));
+      }
+      extensionWriter.writeUntil(536870912, output);
+      getUnknownFields().writeTo(output);
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(1, messageSetWireFormat_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(2, noStandardDescriptorAccessor_);
+      }
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(999, uninterpretedOption_.get(i));
+      }
+      size += extensionsSerializedSize();
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.MessageOptions prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code google.protobuf.MessageOptions}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
+          com.google.protobuf.DescriptorProtos.MessageOptions, Builder> implements com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MessageOptions_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MessageOptions_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.MessageOptions.class, com.google.protobuf.DescriptorProtos.MessageOptions.Builder.class);
+      }
+
+      // Construct using com.google.protobuf.DescriptorProtos.MessageOptions.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getUninterpretedOptionFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        messageSetWireFormat_ = false;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        noStandardDescriptorAccessor_ = false;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOption_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+        } else {
+          uninterpretedOptionBuilder_.clear();
+        }
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MessageOptions_descriptor;
+      }
+
+      public com.google.protobuf.DescriptorProtos.MessageOptions getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance();
+      }
+
+      public com.google.protobuf.DescriptorProtos.MessageOptions build() {
+        com.google.protobuf.DescriptorProtos.MessageOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public com.google.protobuf.DescriptorProtos.MessageOptions buildPartial() {
+        com.google.protobuf.DescriptorProtos.MessageOptions result = new com.google.protobuf.DescriptorProtos.MessageOptions(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.messageSetWireFormat_ = messageSetWireFormat_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.noStandardDescriptorAccessor_ = noStandardDescriptorAccessor_;
+        if (uninterpretedOptionBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) == 0x00000004)) {
+            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
+            bitField0_ = (bitField0_ & ~0x00000004);
+          }
+          result.uninterpretedOption_ = uninterpretedOption_;
+        } else {
+          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.MessageOptions) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.MessageOptions)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.MessageOptions other) {
+        if (other == com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance()) return this;
+        if (other.hasMessageSetWireFormat()) {
+          setMessageSetWireFormat(other.getMessageSetWireFormat());
+        }
+        if (other.hasNoStandardDescriptorAccessor()) {
+          setNoStandardDescriptorAccessor(other.getNoStandardDescriptorAccessor());
+        }
+        if (uninterpretedOptionBuilder_ == null) {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOption_.isEmpty()) {
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+            } else {
+              ensureUninterpretedOptionIsMutable();
+              uninterpretedOption_.addAll(other.uninterpretedOption_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOptionBuilder_.isEmpty()) {
+              uninterpretedOptionBuilder_.dispose();
+              uninterpretedOptionBuilder_ = null;
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+              uninterpretedOptionBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getUninterpretedOptionFieldBuilder() : null;
+            } else {
+              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
+            }
+          }
+        }
+        this.mergeExtensionFields(other);
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+
+      public final boolean isInitialized() {
+        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+          if (!getUninterpretedOption(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        if (!extensionsAreInitialized()) {
+          
+          return false;
+        }
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.DescriptorProtos.MessageOptions parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.google.protobuf.DescriptorProtos.MessageOptions) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
       private int bitField0_;
-      
+
       // optional bool message_set_wire_format = 1 [default = false];
       private boolean messageSetWireFormat_ ;
+      /**
+       * <code>optional bool message_set_wire_format = 1 [default = false];</code>
+       *
+       * <pre>
+       * Set true to use the old proto1 MessageSet wire format for extensions.
+       * This is provided for backwards-compatibility with the MessageSet wire
+       * format.  You should not use this for any other reason:  It's less
+       * efficient, has fewer features, and is more complicated.
+       *
+       * The message must be defined exactly as follows:
+       *   message Foo {
+       *     option message_set_wire_format = true;
+       *     extensions 4 to max;
+       *   }
+       * Note that the message cannot have any defined fields; MessageSets only
+       * have extensions.
+       *
+       * All extensions of your type must be singular messages; e.g. they cannot
+       * be int32s, enums, or repeated messages.
+       *
+       * Because this is an option, the above two restrictions are not enforced by
+       * the protocol compiler.
+       * </pre>
+       */
       public boolean hasMessageSetWireFormat() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
+      /**
+       * <code>optional bool message_set_wire_format = 1 [default = false];</code>
+       *
+       * <pre>
+       * Set true to use the old proto1 MessageSet wire format for extensions.
+       * This is provided for backwards-compatibility with the MessageSet wire
+       * format.  You should not use this for any other reason:  It's less
+       * efficient, has fewer features, and is more complicated.
+       *
+       * The message must be defined exactly as follows:
+       *   message Foo {
+       *     option message_set_wire_format = true;
+       *     extensions 4 to max;
+       *   }
+       * Note that the message cannot have any defined fields; MessageSets only
+       * have extensions.
+       *
+       * All extensions of your type must be singular messages; e.g. they cannot
+       * be int32s, enums, or repeated messages.
+       *
+       * Because this is an option, the above two restrictions are not enforced by
+       * the protocol compiler.
+       * </pre>
+       */
       public boolean getMessageSetWireFormat() {
         return messageSetWireFormat_;
       }
+      /**
+       * <code>optional bool message_set_wire_format = 1 [default = false];</code>
+       *
+       * <pre>
+       * Set true to use the old proto1 MessageSet wire format for extensions.
+       * This is provided for backwards-compatibility with the MessageSet wire
+       * format.  You should not use this for any other reason:  It's less
+       * efficient, has fewer features, and is more complicated.
+       *
+       * The message must be defined exactly as follows:
+       *   message Foo {
+       *     option message_set_wire_format = true;
+       *     extensions 4 to max;
+       *   }
+       * Note that the message cannot have any defined fields; MessageSets only
+       * have extensions.
+       *
+       * All extensions of your type must be singular messages; e.g. they cannot
+       * be int32s, enums, or repeated messages.
+       *
+       * Because this is an option, the above two restrictions are not enforced by
+       * the protocol compiler.
+       * </pre>
+       */
       public Builder setMessageSetWireFormat(boolean value) {
         bitField0_ |= 0x00000001;
@@ -11025,4 +16440,28 @@
         return this;
       }
+      /**
+       * <code>optional bool message_set_wire_format = 1 [default = false];</code>
+       *
+       * <pre>
+       * Set true to use the old proto1 MessageSet wire format for extensions.
+       * This is provided for backwards-compatibility with the MessageSet wire
+       * format.  You should not use this for any other reason:  It's less
+       * efficient, has fewer features, and is more complicated.
+       *
+       * The message must be defined exactly as follows:
+       *   message Foo {
+       *     option message_set_wire_format = true;
+       *     extensions 4 to max;
+       *   }
+       * Note that the message cannot have any defined fields; MessageSets only
+       * have extensions.
+       *
+       * All extensions of your type must be singular messages; e.g. they cannot
+       * be int32s, enums, or repeated messages.
+       *
+       * Because this is an option, the above two restrictions are not enforced by
+       * the protocol compiler.
+       * </pre>
+       */
       public Builder clearMessageSetWireFormat() {
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -11031,13 +16470,40 @@
         return this;
       }
-      
+
       // optional bool no_standard_descriptor_accessor = 2 [default = false];
       private boolean noStandardDescriptorAccessor_ ;
+      /**
+       * <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>
+       *
+       * <pre>
+       * Disables the generation of the standard "descriptor()" accessor, which can
+       * conflict with a field of the same name.  This is meant to make migration
+       * from proto1 easier; new code should avoid fields named "descriptor".
+       * </pre>
+       */
       public boolean hasNoStandardDescriptorAccessor() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
+      /**
+       * <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>
+       *
+       * <pre>
+       * Disables the generation of the standard "descriptor()" accessor, which can
+       * conflict with a field of the same name.  This is meant to make migration
+       * from proto1 easier; new code should avoid fields named "descriptor".
+       * </pre>
+       */
       public boolean getNoStandardDescriptorAccessor() {
         return noStandardDescriptorAccessor_;
       }
+      /**
+       * <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>
+       *
+       * <pre>
+       * Disables the generation of the standard "descriptor()" accessor, which can
+       * conflict with a field of the same name.  This is meant to make migration
+       * from proto1 easier; new code should avoid fields named "descriptor".
+       * </pre>
+       */
       public Builder setNoStandardDescriptorAccessor(boolean value) {
         bitField0_ |= 0x00000002;
@@ -11046,4 +16512,13 @@
         return this;
       }
+      /**
+       * <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>
+       *
+       * <pre>
+       * Disables the generation of the standard "descriptor()" accessor, which can
+       * conflict with a field of the same name.  This is meant to make migration
+       * from proto1 easier; new code should avoid fields named "descriptor".
+       * </pre>
+       */
       public Builder clearNoStandardDescriptorAccessor() {
         bitField0_ = (bitField0_ & ~0x00000002);
@@ -11052,5 +16527,5 @@
         return this;
       }
-      
+
       // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
       private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
@@ -11062,8 +16537,15 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -11073,4 +16555,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public int getUninterpretedOptionCount() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -11080,4 +16569,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -11087,4 +16583,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder setUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
@@ -11101,4 +16604,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder setUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -11112,4 +16622,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -11125,4 +16642,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
@@ -11139,4 +16663,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -11150,4 +16681,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -11161,4 +16699,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addAllUninterpretedOption(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
@@ -11172,4 +16717,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder clearUninterpretedOption() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -11182,4 +16734,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder removeUninterpretedOption(int index) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -11192,8 +16751,22 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
           int index) {
         return getUninterpretedOptionFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
           int index) {
@@ -11203,4 +16776,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
            getUninterpretedOptionOrBuilderList() {
@@ -11211,8 +16791,22 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
         return getUninterpretedOptionFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
           int index) {
@@ -11220,4 +16814,11 @@
             index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
            getUninterpretedOptionBuilderList() {
@@ -11238,665 +16839,335 @@
         return uninterpretedOptionBuilder_;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:google.protobuf.MessageOptions)
     }
-    
+
     static {
       defaultInstance = new MessageOptions(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:google.protobuf.MessageOptions)
   }
-  
+
   public interface FieldOptionsOrBuilder extends
       com.google.protobuf.GeneratedMessage.
           ExtendableMessageOrBuilder<FieldOptions> {
-    
+
     // optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];
+    /**
+     * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
+     *
+     * <pre>
+     * The ctype option instructs the C++ code generator to use a different
+     * representation of the field than it normally would.  See the specific
+     * options below.  This option is not yet implemented in the open source
+     * release -- sorry, we'll try to include it in a future version!
+     * </pre>
+     */
     boolean hasCtype();
+    /**
+     * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
+     *
+     * <pre>
+     * The ctype option instructs the C++ code generator to use a different
+     * representation of the field than it normally would.  See the specific
+     * options below.  This option is not yet implemented in the open source
+     * release -- sorry, we'll try to include it in a future version!
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.FieldOptions.CType getCtype();
-    
+
     // optional bool packed = 2;
+    /**
+     * <code>optional bool packed = 2;</code>
+     *
+     * <pre>
+     * The packed option can be enabled for repeated primitive fields to enable
+     * a more efficient representation on the wire. Rather than repeatedly
+     * writing the tag and type for each element, the entire array is encoded as
+     * a single length-delimited blob.
+     * </pre>
+     */
     boolean hasPacked();
+    /**
+     * <code>optional bool packed = 2;</code>
+     *
+     * <pre>
+     * The packed option can be enabled for repeated primitive fields to enable
+     * a more efficient representation on the wire. Rather than repeatedly
+     * writing the tag and type for each element, the entire array is encoded as
+     * a single length-delimited blob.
+     * </pre>
+     */
     boolean getPacked();
-    
+
     // optional bool lazy = 5 [default = false];
+    /**
+     * <code>optional bool lazy = 5 [default = false];</code>
+     *
+     * <pre>
+     * Should this field be parsed lazily?  Lazy applies only to message-type
+     * fields.  It means that when the outer message is initially parsed, the
+     * inner message's contents will not be parsed but instead stored in encoded
+     * form.  The inner message will actually be parsed when it is first accessed.
+     *
+     * This is only a hint.  Implementations are free to choose whether to use
+     * eager or lazy parsing regardless of the value of this option.  However,
+     * setting this option true suggests that the protocol author believes that
+     * using lazy parsing on this field is worth the additional bookkeeping
+     * overhead typically needed to implement it.
+     *
+     * This option does not affect the public interface of any generated code;
+     * all method signatures remain the same.  Furthermore, thread-safety of the
+     * interface is not affected by this option; const methods remain safe to
+     * call from multiple threads concurrently, while non-const methods continue
+     * to require exclusive access.
+     *
+     *
+     * Note that implementations may choose not to check required fields within
+     * a lazy sub-message.  That is, calling IsInitialized() on the outher message
+     * may return true even if the inner message has missing required fields.
+     * This is necessary because otherwise the inner message would have to be
+     * parsed in order to perform the check, defeating the purpose of lazy
+     * parsing.  An implementation which chooses not to check required fields
+     * must be consistent about it.  That is, for any particular sub-message, the
+     * implementation must either *always* check its required fields, or *never*
+     * check its required fields, regardless of whether or not the message has
+     * been parsed.
+     * </pre>
+     */
     boolean hasLazy();
+    /**
+     * <code>optional bool lazy = 5 [default = false];</code>
+     *
+     * <pre>
+     * Should this field be parsed lazily?  Lazy applies only to message-type
+     * fields.  It means that when the outer message is initially parsed, the
+     * inner message's contents will not be parsed but instead stored in encoded
+     * form.  The inner message will actually be parsed when it is first accessed.
+     *
+     * This is only a hint.  Implementations are free to choose whether to use
+     * eager or lazy parsing regardless of the value of this option.  However,
+     * setting this option true suggests that the protocol author believes that
+     * using lazy parsing on this field is worth the additional bookkeeping
+     * overhead typically needed to implement it.
+     *
+     * This option does not affect the public interface of any generated code;
+     * all method signatures remain the same.  Furthermore, thread-safety of the
+     * interface is not affected by this option; const methods remain safe to
+     * call from multiple threads concurrently, while non-const methods continue
+     * to require exclusive access.
+     *
+     *
+     * Note that implementations may choose not to check required fields within
+     * a lazy sub-message.  That is, calling IsInitialized() on the outher message
+     * may return true even if the inner message has missing required fields.
+     * This is necessary because otherwise the inner message would have to be
+     * parsed in order to perform the check, defeating the purpose of lazy
+     * parsing.  An implementation which chooses not to check required fields
+     * must be consistent about it.  That is, for any particular sub-message, the
+     * implementation must either *always* check its required fields, or *never*
+     * check its required fields, regardless of whether or not the message has
+     * been parsed.
+     * </pre>
+     */
     boolean getLazy();
-    
+
     // optional bool deprecated = 3 [default = false];
+    /**
+     * <code>optional bool deprecated = 3 [default = false];</code>
+     *
+     * <pre>
+     * Is this field deprecated?
+     * Depending on the target platform, this can emit Deprecated annotations
+     * for accessors, or it will be completely ignored; in the very least, this
+     * is a formalization for deprecating fields.
+     * </pre>
+     */
     boolean hasDeprecated();
+    /**
+     * <code>optional bool deprecated = 3 [default = false];</code>
+     *
+     * <pre>
+     * Is this field deprecated?
+     * Depending on the target platform, this can emit Deprecated annotations
+     * for accessors, or it will be completely ignored; in the very least, this
+     * is a formalization for deprecating fields.
+     * </pre>
+     */
     boolean getDeprecated();
-    
+
     // optional string experimental_map_key = 9;
+    /**
+     * <code>optional string experimental_map_key = 9;</code>
+     *
+     * <pre>
+     * EXPERIMENTAL.  DO NOT USE.
+     * For "map" fields, the name of the field in the enclosed type that
+     * is the key for this map.  For example, suppose we have:
+     *   message Item {
+     *     required string name = 1;
+     *     required string value = 2;
+     *   }
+     *   message Config {
+     *     repeated Item items = 1 [experimental_map_key="name"];
+     *   }
+     * In this situation, the map key for Item will be set to "name".
+     * TODO: Fully-implement this, then remove the "experimental_" prefix.
+     * </pre>
+     */
     boolean hasExperimentalMapKey();
-    String getExperimentalMapKey();
-    
+    /**
+     * <code>optional string experimental_map_key = 9;</code>
+     *
+     * <pre>
+     * EXPERIMENTAL.  DO NOT USE.
+     * For "map" fields, the name of the field in the enclosed type that
+     * is the key for this map.  For example, suppose we have:
+     *   message Item {
+     *     required string name = 1;
+     *     required string value = 2;
+     *   }
+     *   message Config {
+     *     repeated Item items = 1 [experimental_map_key="name"];
+     *   }
+     * In this situation, the map key for Item will be set to "name".
+     * TODO: Fully-implement this, then remove the "experimental_" prefix.
+     * </pre>
+     */
+    java.lang.String getExperimentalMapKey();
+    /**
+     * <code>optional string experimental_map_key = 9;</code>
+     *
+     * <pre>
+     * EXPERIMENTAL.  DO NOT USE.
+     * For "map" fields, the name of the field in the enclosed type that
+     * is the key for this map.  For example, suppose we have:
+     *   message Item {
+     *     required string name = 1;
+     *     required string value = 2;
+     *   }
+     *   message Config {
+     *     repeated Item items = 1 [experimental_map_key="name"];
+     *   }
+     * In this situation, the map key for Item will be set to "name".
+     * TODO: Fully-implement this, then remove the "experimental_" prefix.
+     * </pre>
+     */
+    com.google.protobuf.ByteString
+        getExperimentalMapKeyBytes();
+
     // optional bool weak = 10 [default = false];
+    /**
+     * <code>optional bool weak = 10 [default = false];</code>
+     *
+     * <pre>
+     * For Google-internal migration only. Do not use.
+     * </pre>
+     */
     boolean hasWeak();
+    /**
+     * <code>optional bool weak = 10 [default = false];</code>
+     *
+     * <pre>
+     * For Google-internal migration only. Do not use.
+     * </pre>
+     */
     boolean getWeak();
-    
+
     // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
         getUninterpretedOptionList();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     int getUninterpretedOptionCount();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
         getUninterpretedOptionOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
         int index);
   }
+  /**
+   * Protobuf type {@code google.protobuf.FieldOptions}
+   */
   public static final class FieldOptions extends
       com.google.protobuf.GeneratedMessage.ExtendableMessage<
         FieldOptions> implements FieldOptionsOrBuilder {
     // Use FieldOptions.newBuilder() to construct.
-    private FieldOptions(Builder builder) {
+    private FieldOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.FieldOptions, ?> builder) {
       super(builder);
-    }
-    private FieldOptions(boolean noInit) {}
-    
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private FieldOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
     private static final FieldOptions defaultInstance;
     public static FieldOptions getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public FieldOptions getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldOptions_descriptor;
-    }
-    
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldOptions_fieldAccessorTable;
-    }
-    
-    public enum CType
-        implements com.google.protobuf.ProtocolMessageEnum {
-      STRING(0, 0),
-      CORD(1, 1),
-      STRING_PIECE(2, 2),
-      ;
-      
-      public static final int STRING_VALUE = 0;
-      public static final int CORD_VALUE = 1;
-      public static final int STRING_PIECE_VALUE = 2;
-      
-      
-      public final int getNumber() { return value; }
-      
-      public static CType valueOf(int value) {
-        switch (value) {
-          case 0: return STRING;
-          case 1: return CORD;
-          case 2: return STRING_PIECE;
-          default: return null;
-        }
-      }
-      
-      public static com.google.protobuf.Internal.EnumLiteMap<CType>
-          internalGetValueMap() {
-        return internalValueMap;
-      }
-      private static com.google.protobuf.Internal.EnumLiteMap<CType>
-          internalValueMap =
-            new com.google.protobuf.Internal.EnumLiteMap<CType>() {
-              public CType findValueByNumber(int number) {
-                return CType.valueOf(number);
-              }
-            };
-      
-      public final com.google.protobuf.Descriptors.EnumValueDescriptor
-          getValueDescriptor() {
-        return getDescriptor().getValues().get(index);
-      }
-      public final com.google.protobuf.Descriptors.EnumDescriptor
-          getDescriptorForType() {
-        return getDescriptor();
-      }
-      public static final com.google.protobuf.Descriptors.EnumDescriptor
-          getDescriptor() {
-        return com.google.protobuf.DescriptorProtos.FieldOptions.getDescriptor().getEnumTypes().get(0);
-      }
-      
-      private static final CType[] VALUES = {
-        STRING, CORD, STRING_PIECE, 
-      };
-      
-      public static CType valueOf(
-          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
-        if (desc.getType() != getDescriptor()) {
-          throw new java.lang.IllegalArgumentException(
-            "EnumValueDescriptor is not for this type.");
-        }
-        return VALUES[desc.getIndex()];
-      }
-      
-      private final int index;
-      private final int value;
-      
-      private CType(int index, int value) {
-        this.index = index;
-        this.value = value;
-      }
-      
-      // @@protoc_insertion_point(enum_scope:google.protobuf.FieldOptions.CType)
-    }
-    
-    private int bitField0_;
-    // optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];
-    public static final int CTYPE_FIELD_NUMBER = 1;
-    private com.google.protobuf.DescriptorProtos.FieldOptions.CType ctype_;
-    public boolean hasCtype() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    public com.google.protobuf.DescriptorProtos.FieldOptions.CType getCtype() {
-      return ctype_;
-    }
-    
-    // optional bool packed = 2;
-    public static final int PACKED_FIELD_NUMBER = 2;
-    private boolean packed_;
-    public boolean hasPacked() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    public boolean getPacked() {
-      return packed_;
-    }
-    
-    // optional bool lazy = 5 [default = false];
-    public static final int LAZY_FIELD_NUMBER = 5;
-    private boolean lazy_;
-    public boolean hasLazy() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
-    }
-    public boolean getLazy() {
-      return lazy_;
-    }
-    
-    // optional bool deprecated = 3 [default = false];
-    public static final int DEPRECATED_FIELD_NUMBER = 3;
-    private boolean deprecated_;
-    public boolean hasDeprecated() {
-      return ((bitField0_ & 0x00000008) == 0x00000008);
-    }
-    public boolean getDeprecated() {
-      return deprecated_;
-    }
-    
-    // optional string experimental_map_key = 9;
-    public static final int EXPERIMENTAL_MAP_KEY_FIELD_NUMBER = 9;
-    private java.lang.Object experimentalMapKey_;
-    public boolean hasExperimentalMapKey() {
-      return ((bitField0_ & 0x00000010) == 0x00000010);
-    }
-    public String getExperimentalMapKey() {
-      java.lang.Object ref = experimentalMapKey_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          experimentalMapKey_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getExperimentalMapKeyBytes() {
-      java.lang.Object ref = experimentalMapKey_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        experimentalMapKey_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    
-    // optional bool weak = 10 [default = false];
-    public static final int WEAK_FIELD_NUMBER = 10;
-    private boolean weak_;
-    public boolean hasWeak() {
-      return ((bitField0_ & 0x00000020) == 0x00000020);
-    }
-    public boolean getWeak() {
-      return weak_;
-    }
-    
-    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
-    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
-    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
-    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
-      return uninterpretedOption_;
-    }
-    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
-        getUninterpretedOptionOrBuilderList() {
-      return uninterpretedOption_;
-    }
-    public int getUninterpretedOptionCount() {
-      return uninterpretedOption_.size();
-    }
-    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
-      return uninterpretedOption_.get(index);
-    }
-    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
-        int index) {
-      return uninterpretedOption_.get(index);
-    }
-    
-    private void initFields() {
-      ctype_ = com.google.protobuf.DescriptorProtos.FieldOptions.CType.STRING;
-      packed_ = false;
-      lazy_ = false;
-      deprecated_ = false;
-      experimentalMapKey_ = "";
-      weak_ = false;
-      uninterpretedOption_ = java.util.Collections.emptyList();
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
-      
-      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
-        if (!getUninterpretedOption(i).isInitialized()) {
-          memoizedIsInitialized = 0;
-          return false;
-        }
-      }
-      if (!extensionsAreInitialized()) {
-        memoizedIsInitialized = 0;
-        return false;
-      }
-      memoizedIsInitialized = 1;
-      return true;
-    }
-    
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      com.google.protobuf.GeneratedMessage
-        .ExtendableMessage<com.google.protobuf.DescriptorProtos.FieldOptions>.ExtensionWriter extensionWriter =
-          newExtensionWriter();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeEnum(1, ctype_.getNumber());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeBool(2, packed_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        output.writeBool(3, deprecated_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeBool(5, lazy_);
-      }
-      if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        output.writeBytes(9, getExperimentalMapKeyBytes());
-      }
-      if (((bitField0_ & 0x00000020) == 0x00000020)) {
-        output.writeBool(10, weak_);
-      }
-      for (int i = 0; i < uninterpretedOption_.size(); i++) {
-        output.writeMessage(999, uninterpretedOption_.get(i));
-      }
-      extensionWriter.writeUntil(536870912, output);
-      getUnknownFields().writeTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-    
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, ctype_.getNumber());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(2, packed_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(3, deprecated_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(5, lazy_);
-      }
-      if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(9, getExperimentalMapKeyBytes());
-      }
-      if (((bitField0_ & 0x00000020) == 0x00000020)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(10, weak_);
-      }
-      for (int i = 0; i < uninterpretedOption_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(999, uninterpretedOption_.get(i));
-      }
-      size += extensionsSerializedSize();
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-    
-    private static final long serialVersionUID = 0L;
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
     @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-    
-    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
-        com.google.protobuf.ByteString data,
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private FieldOptions(
+        com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FieldOptions parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
-    }
-    public static com.google.protobuf.DescriptorProtos.FieldOptions 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 com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static com.google.protobuf.DescriptorProtos.FieldOptions 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(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FieldOptions prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-    
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
-          com.google.protobuf.DescriptorProtos.FieldOptions, Builder> implements com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldOptions_descriptor;
-      }
-      
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldOptions_fieldAccessorTable;
-      }
-      
-      // Construct using com.google.protobuf.DescriptorProtos.FieldOptions.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-      
-      private Builder(BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getUninterpretedOptionFieldBuilder();
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-      
-      public Builder clear() {
-        super.clear();
-        ctype_ = com.google.protobuf.DescriptorProtos.FieldOptions.CType.STRING;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        packed_ = false;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        lazy_ = false;
-        bitField0_ = (bitField0_ & ~0x00000004);
-        deprecated_ = false;
-        bitField0_ = (bitField0_ & ~0x00000008);
-        experimentalMapKey_ = "";
-        bitField0_ = (bitField0_ & ~0x00000010);
-        weak_ = false;
-        bitField0_ = (bitField0_ & ~0x00000020);
-        if (uninterpretedOptionBuilder_ == null) {
-          uninterpretedOption_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000040);
-        } else {
-          uninterpretedOptionBuilder_.clear();
-        }
-        return this;
-      }
-      
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-      
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return com.google.protobuf.DescriptorProtos.FieldOptions.getDescriptor();
-      }
-      
-      public com.google.protobuf.DescriptorProtos.FieldOptions getDefaultInstanceForType() {
-        return com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance();
-      }
-      
-      public com.google.protobuf.DescriptorProtos.FieldOptions build() {
-        com.google.protobuf.DescriptorProtos.FieldOptions result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-      
-      private com.google.protobuf.DescriptorProtos.FieldOptions buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        com.google.protobuf.DescriptorProtos.FieldOptions result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
-      public com.google.protobuf.DescriptorProtos.FieldOptions buildPartial() {
-        com.google.protobuf.DescriptorProtos.FieldOptions result = new com.google.protobuf.DescriptorProtos.FieldOptions(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.ctype_ = ctype_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.packed_ = packed_;
-        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
-          to_bitField0_ |= 0x00000004;
-        }
-        result.lazy_ = lazy_;
-        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
-          to_bitField0_ |= 0x00000008;
-        }
-        result.deprecated_ = deprecated_;
-        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
-          to_bitField0_ |= 0x00000010;
-        }
-        result.experimentalMapKey_ = experimentalMapKey_;
-        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
-          to_bitField0_ |= 0x00000020;
-        }
-        result.weak_ = weak_;
-        if (uninterpretedOptionBuilder_ == null) {
-          if (((bitField0_ & 0x00000040) == 0x00000040)) {
-            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
-            bitField0_ = (bitField0_ & ~0x00000040);
-          }
-          result.uninterpretedOption_ = uninterpretedOption_;
-        } else {
-          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
-        }
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-      
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.google.protobuf.DescriptorProtos.FieldOptions) {
-          return mergeFrom((com.google.protobuf.DescriptorProtos.FieldOptions)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-      
-      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FieldOptions other) {
-        if (other == com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance()) return this;
-        if (other.hasCtype()) {
-          setCtype(other.getCtype());
-        }
-        if (other.hasPacked()) {
-          setPacked(other.getPacked());
-        }
-        if (other.hasLazy()) {
-          setLazy(other.getLazy());
-        }
-        if (other.hasDeprecated()) {
-          setDeprecated(other.getDeprecated());
-        }
-        if (other.hasExperimentalMapKey()) {
-          setExperimentalMapKey(other.getExperimentalMapKey());
-        }
-        if (other.hasWeak()) {
-          setWeak(other.getWeak());
-        }
-        if (uninterpretedOptionBuilder_ == null) {
-          if (!other.uninterpretedOption_.isEmpty()) {
-            if (uninterpretedOption_.isEmpty()) {
-              uninterpretedOption_ = other.uninterpretedOption_;
-              bitField0_ = (bitField0_ & ~0x00000040);
-            } else {
-              ensureUninterpretedOptionIsMutable();
-              uninterpretedOption_.addAll(other.uninterpretedOption_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.uninterpretedOption_.isEmpty()) {
-            if (uninterpretedOptionBuilder_.isEmpty()) {
-              uninterpretedOptionBuilder_.dispose();
-              uninterpretedOptionBuilder_ = null;
-              uninterpretedOption_ = other.uninterpretedOption_;
-              bitField0_ = (bitField0_ & ~0x00000040);
-              uninterpretedOptionBuilder_ = 
-                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
-                   getUninterpretedOptionFieldBuilder() : null;
-            } else {
-              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
-            }
-          }
-        }
-        this.mergeExtensionFields(other);
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-      
-      public final boolean isInitialized() {
-        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
-          if (!getUninterpretedOption(i).isInitialized()) {
-            
-            return false;
-          }
-        }
-        if (!extensionsAreInitialized()) {
-          
-          return false;
-        }
-        return true;
-      }
-      
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder(
-            this.getUnknownFields());
-        while (true) {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
           int tag = input.readTag();
           switch (tag) {
             case 0:
-              this.setUnknownFields(unknownFields.build());
-              onChanged();
-              return this;
+              done = true;
+              break;
             default: {
               if (!parseUnknownField(input, unknownFields,
                                      extensionRegistry, tag)) {
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
+                done = true;
               }
               break;
@@ -11939,23 +17210,917 @@
             }
             case 7994: {
-              com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder subBuilder = com.google.protobuf.DescriptorProtos.UninterpretedOption.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addUninterpretedOption(subBuilder.buildPartial());
+              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
+                uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>();
+                mutable_bitField0_ |= 0x00000040;
+              }
+              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.PARSER, extensionRegistry));
               break;
             }
           }
         }
-      }
-      
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
+          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldOptions_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldOptions_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.protobuf.DescriptorProtos.FieldOptions.class, com.google.protobuf.DescriptorProtos.FieldOptions.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<FieldOptions> PARSER =
+        new com.google.protobuf.AbstractParser<FieldOptions>() {
+      public FieldOptions parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new FieldOptions(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<FieldOptions> getParserForType() {
+      return PARSER;
+    }
+
+    /**
+     * Protobuf enum {@code google.protobuf.FieldOptions.CType}
+     */
+    public enum CType
+        implements com.google.protobuf.ProtocolMessageEnum {
+      /**
+       * <code>STRING = 0;</code>
+       *
+       * <pre>
+       * Default mode.
+       * </pre>
+       */
+      STRING(0, 0),
+      /**
+       * <code>CORD = 1;</code>
+       */
+      CORD(1, 1),
+      /**
+       * <code>STRING_PIECE = 2;</code>
+       */
+      STRING_PIECE(2, 2),
+      ;
+
+      /**
+       * <code>STRING = 0;</code>
+       *
+       * <pre>
+       * Default mode.
+       * </pre>
+       */
+      public static final int STRING_VALUE = 0;
+      /**
+       * <code>CORD = 1;</code>
+       */
+      public static final int CORD_VALUE = 1;
+      /**
+       * <code>STRING_PIECE = 2;</code>
+       */
+      public static final int STRING_PIECE_VALUE = 2;
+
+
+      public final int getNumber() { return value; }
+
+      public static CType valueOf(int value) {
+        switch (value) {
+          case 0: return STRING;
+          case 1: return CORD;
+          case 2: return STRING_PIECE;
+          default: return null;
+        }
+      }
+
+      public static com.google.protobuf.Internal.EnumLiteMap<CType>
+          internalGetValueMap() {
+        return internalValueMap;
+      }
+      private static com.google.protobuf.Internal.EnumLiteMap<CType>
+          internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<CType>() {
+              public CType findValueByNumber(int number) {
+                return CType.valueOf(number);
+              }
+            };
+
+      public final com.google.protobuf.Descriptors.EnumValueDescriptor
+          getValueDescriptor() {
+        return getDescriptor().getValues().get(index);
+      }
+      public final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptorForType() {
+        return getDescriptor();
+      }
+      public static final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.FieldOptions.getDescriptor().getEnumTypes().get(0);
+      }
+
+      private static final CType[] VALUES = values();
+
+      public static CType valueOf(
+          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+        if (desc.getType() != getDescriptor()) {
+          throw new java.lang.IllegalArgumentException(
+            "EnumValueDescriptor is not for this type.");
+        }
+        return VALUES[desc.getIndex()];
+      }
+
+      private final int index;
+      private final int value;
+
+      private CType(int index, int value) {
+        this.index = index;
+        this.value = value;
+      }
+
+      // @@protoc_insertion_point(enum_scope:google.protobuf.FieldOptions.CType)
+    }
+
+    private int bitField0_;
+    // optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];
+    public static final int CTYPE_FIELD_NUMBER = 1;
+    private com.google.protobuf.DescriptorProtos.FieldOptions.CType ctype_;
+    /**
+     * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
+     *
+     * <pre>
+     * The ctype option instructs the C++ code generator to use a different
+     * representation of the field than it normally would.  See the specific
+     * options below.  This option is not yet implemented in the open source
+     * release -- sorry, we'll try to include it in a future version!
+     * </pre>
+     */
+    public boolean hasCtype() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
+     *
+     * <pre>
+     * The ctype option instructs the C++ code generator to use a different
+     * representation of the field than it normally would.  See the specific
+     * options below.  This option is not yet implemented in the open source
+     * release -- sorry, we'll try to include it in a future version!
+     * </pre>
+     */
+    public com.google.protobuf.DescriptorProtos.FieldOptions.CType getCtype() {
+      return ctype_;
+    }
+
+    // optional bool packed = 2;
+    public static final int PACKED_FIELD_NUMBER = 2;
+    private boolean packed_;
+    /**
+     * <code>optional bool packed = 2;</code>
+     *
+     * <pre>
+     * The packed option can be enabled for repeated primitive fields to enable
+     * a more efficient representation on the wire. Rather than repeatedly
+     * writing the tag and type for each element, the entire array is encoded as
+     * a single length-delimited blob.
+     * </pre>
+     */
+    public boolean hasPacked() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>optional bool packed = 2;</code>
+     *
+     * <pre>
+     * The packed option can be enabled for repeated primitive fields to enable
+     * a more efficient representation on the wire. Rather than repeatedly
+     * writing the tag and type for each element, the entire array is encoded as
+     * a single length-delimited blob.
+     * </pre>
+     */
+    public boolean getPacked() {
+      return packed_;
+    }
+
+    // optional bool lazy = 5 [default = false];
+    public static final int LAZY_FIELD_NUMBER = 5;
+    private boolean lazy_;
+    /**
+     * <code>optional bool lazy = 5 [default = false];</code>
+     *
+     * <pre>
+     * Should this field be parsed lazily?  Lazy applies only to message-type
+     * fields.  It means that when the outer message is initially parsed, the
+     * inner message's contents will not be parsed but instead stored in encoded
+     * form.  The inner message will actually be parsed when it is first accessed.
+     *
+     * This is only a hint.  Implementations are free to choose whether to use
+     * eager or lazy parsing regardless of the value of this option.  However,
+     * setting this option true suggests that the protocol author believes that
+     * using lazy parsing on this field is worth the additional bookkeeping
+     * overhead typically needed to implement it.
+     *
+     * This option does not affect the public interface of any generated code;
+     * all method signatures remain the same.  Furthermore, thread-safety of the
+     * interface is not affected by this option; const methods remain safe to
+     * call from multiple threads concurrently, while non-const methods continue
+     * to require exclusive access.
+     *
+     *
+     * Note that implementations may choose not to check required fields within
+     * a lazy sub-message.  That is, calling IsInitialized() on the outher message
+     * may return true even if the inner message has missing required fields.
+     * This is necessary because otherwise the inner message would have to be
+     * parsed in order to perform the check, defeating the purpose of lazy
+     * parsing.  An implementation which chooses not to check required fields
+     * must be consistent about it.  That is, for any particular sub-message, the
+     * implementation must either *always* check its required fields, or *never*
+     * check its required fields, regardless of whether or not the message has
+     * been parsed.
+     * </pre>
+     */
+    public boolean hasLazy() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    /**
+     * <code>optional bool lazy = 5 [default = false];</code>
+     *
+     * <pre>
+     * Should this field be parsed lazily?  Lazy applies only to message-type
+     * fields.  It means that when the outer message is initially parsed, the
+     * inner message's contents will not be parsed but instead stored in encoded
+     * form.  The inner message will actually be parsed when it is first accessed.
+     *
+     * This is only a hint.  Implementations are free to choose whether to use
+     * eager or lazy parsing regardless of the value of this option.  However,
+     * setting this option true suggests that the protocol author believes that
+     * using lazy parsing on this field is worth the additional bookkeeping
+     * overhead typically needed to implement it.
+     *
+     * This option does not affect the public interface of any generated code;
+     * all method signatures remain the same.  Furthermore, thread-safety of the
+     * interface is not affected by this option; const methods remain safe to
+     * call from multiple threads concurrently, while non-const methods continue
+     * to require exclusive access.
+     *
+     *
+     * Note that implementations may choose not to check required fields within
+     * a lazy sub-message.  That is, calling IsInitialized() on the outher message
+     * may return true even if the inner message has missing required fields.
+     * This is necessary because otherwise the inner message would have to be
+     * parsed in order to perform the check, defeating the purpose of lazy
+     * parsing.  An implementation which chooses not to check required fields
+     * must be consistent about it.  That is, for any particular sub-message, the
+     * implementation must either *always* check its required fields, or *never*
+     * check its required fields, regardless of whether or not the message has
+     * been parsed.
+     * </pre>
+     */
+    public boolean getLazy() {
+      return lazy_;
+    }
+
+    // optional bool deprecated = 3 [default = false];
+    public static final int DEPRECATED_FIELD_NUMBER = 3;
+    private boolean deprecated_;
+    /**
+     * <code>optional bool deprecated = 3 [default = false];</code>
+     *
+     * <pre>
+     * Is this field deprecated?
+     * Depending on the target platform, this can emit Deprecated annotations
+     * for accessors, or it will be completely ignored; in the very least, this
+     * is a formalization for deprecating fields.
+     * </pre>
+     */
+    public boolean hasDeprecated() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    /**
+     * <code>optional bool deprecated = 3 [default = false];</code>
+     *
+     * <pre>
+     * Is this field deprecated?
+     * Depending on the target platform, this can emit Deprecated annotations
+     * for accessors, or it will be completely ignored; in the very least, this
+     * is a formalization for deprecating fields.
+     * </pre>
+     */
+    public boolean getDeprecated() {
+      return deprecated_;
+    }
+
+    // optional string experimental_map_key = 9;
+    public static final int EXPERIMENTAL_MAP_KEY_FIELD_NUMBER = 9;
+    private java.lang.Object experimentalMapKey_;
+    /**
+     * <code>optional string experimental_map_key = 9;</code>
+     *
+     * <pre>
+     * EXPERIMENTAL.  DO NOT USE.
+     * For "map" fields, the name of the field in the enclosed type that
+     * is the key for this map.  For example, suppose we have:
+     *   message Item {
+     *     required string name = 1;
+     *     required string value = 2;
+     *   }
+     *   message Config {
+     *     repeated Item items = 1 [experimental_map_key="name"];
+     *   }
+     * In this situation, the map key for Item will be set to "name".
+     * TODO: Fully-implement this, then remove the "experimental_" prefix.
+     * </pre>
+     */
+    public boolean hasExperimentalMapKey() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    /**
+     * <code>optional string experimental_map_key = 9;</code>
+     *
+     * <pre>
+     * EXPERIMENTAL.  DO NOT USE.
+     * For "map" fields, the name of the field in the enclosed type that
+     * is the key for this map.  For example, suppose we have:
+     *   message Item {
+     *     required string name = 1;
+     *     required string value = 2;
+     *   }
+     *   message Config {
+     *     repeated Item items = 1 [experimental_map_key="name"];
+     *   }
+     * In this situation, the map key for Item will be set to "name".
+     * TODO: Fully-implement this, then remove the "experimental_" prefix.
+     * </pre>
+     */
+    public java.lang.String getExperimentalMapKey() {
+      java.lang.Object ref = experimentalMapKey_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          experimentalMapKey_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string experimental_map_key = 9;</code>
+     *
+     * <pre>
+     * EXPERIMENTAL.  DO NOT USE.
+     * For "map" fields, the name of the field in the enclosed type that
+     * is the key for this map.  For example, suppose we have:
+     *   message Item {
+     *     required string name = 1;
+     *     required string value = 2;
+     *   }
+     *   message Config {
+     *     repeated Item items = 1 [experimental_map_key="name"];
+     *   }
+     * In this situation, the map key for Item will be set to "name".
+     * TODO: Fully-implement this, then remove the "experimental_" prefix.
+     * </pre>
+     */
+    public com.google.protobuf.ByteString
+        getExperimentalMapKeyBytes() {
+      java.lang.Object ref = experimentalMapKey_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        experimentalMapKey_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    // optional bool weak = 10 [default = false];
+    public static final int WEAK_FIELD_NUMBER = 10;
+    private boolean weak_;
+    /**
+     * <code>optional bool weak = 10 [default = false];</code>
+     *
+     * <pre>
+     * For Google-internal migration only. Do not use.
+     * </pre>
+     */
+    public boolean hasWeak() {
+      return ((bitField0_ & 0x00000020) == 0x00000020);
+    }
+    /**
+     * <code>optional bool weak = 10 [default = false];</code>
+     *
+     * <pre>
+     * For Google-internal migration only. Do not use.
+     * </pre>
+     */
+    public boolean getWeak() {
+      return weak_;
+    }
+
+    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
+    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
+    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
+      return uninterpretedOption_;
+    }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+        getUninterpretedOptionOrBuilderList() {
+      return uninterpretedOption_;
+    }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
+    public int getUninterpretedOptionCount() {
+      return uninterpretedOption_.size();
+    }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
+    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
+      return uninterpretedOption_.get(index);
+    }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
+    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+        int index) {
+      return uninterpretedOption_.get(index);
+    }
+
+    private void initFields() {
+      ctype_ = com.google.protobuf.DescriptorProtos.FieldOptions.CType.STRING;
+      packed_ = false;
+      lazy_ = false;
+      deprecated_ = false;
+      experimentalMapKey_ = "";
+      weak_ = false;
+      uninterpretedOption_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+
+      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+        if (!getUninterpretedOption(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      if (!extensionsAreInitialized()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      com.google.protobuf.GeneratedMessage
+        .ExtendableMessage<com.google.protobuf.DescriptorProtos.FieldOptions>.ExtensionWriter extensionWriter =
+          newExtensionWriter();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeEnum(1, ctype_.getNumber());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBool(2, packed_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeBool(3, deprecated_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBool(5, lazy_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeBytes(9, getExperimentalMapKeyBytes());
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        output.writeBool(10, weak_);
+      }
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        output.writeMessage(999, uninterpretedOption_.get(i));
+      }
+      extensionWriter.writeUntil(536870912, output);
+      getUnknownFields().writeTo(output);
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(1, ctype_.getNumber());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(2, packed_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(3, deprecated_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(5, lazy_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(9, getExperimentalMapKeyBytes());
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(10, weak_);
+      }
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(999, uninterpretedOption_.get(i));
+      }
+      size += extensionsSerializedSize();
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FieldOptions prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code google.protobuf.FieldOptions}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
+          com.google.protobuf.DescriptorProtos.FieldOptions, Builder> implements com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldOptions_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldOptions_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.FieldOptions.class, com.google.protobuf.DescriptorProtos.FieldOptions.Builder.class);
+      }
+
+      // Construct using com.google.protobuf.DescriptorProtos.FieldOptions.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getUninterpretedOptionFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        ctype_ = com.google.protobuf.DescriptorProtos.FieldOptions.CType.STRING;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        packed_ = false;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        lazy_ = false;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        deprecated_ = false;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        experimentalMapKey_ = "";
+        bitField0_ = (bitField0_ & ~0x00000010);
+        weak_ = false;
+        bitField0_ = (bitField0_ & ~0x00000020);
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOption_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000040);
+        } else {
+          uninterpretedOptionBuilder_.clear();
+        }
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldOptions_descriptor;
+      }
+
+      public com.google.protobuf.DescriptorProtos.FieldOptions getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance();
+      }
+
+      public com.google.protobuf.DescriptorProtos.FieldOptions build() {
+        com.google.protobuf.DescriptorProtos.FieldOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public com.google.protobuf.DescriptorProtos.FieldOptions buildPartial() {
+        com.google.protobuf.DescriptorProtos.FieldOptions result = new com.google.protobuf.DescriptorProtos.FieldOptions(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.ctype_ = ctype_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.packed_ = packed_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.lazy_ = lazy_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.deprecated_ = deprecated_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.experimentalMapKey_ = experimentalMapKey_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000020;
+        }
+        result.weak_ = weak_;
+        if (uninterpretedOptionBuilder_ == null) {
+          if (((bitField0_ & 0x00000040) == 0x00000040)) {
+            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
+            bitField0_ = (bitField0_ & ~0x00000040);
+          }
+          result.uninterpretedOption_ = uninterpretedOption_;
+        } else {
+          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.FieldOptions) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.FieldOptions)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FieldOptions other) {
+        if (other == com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance()) return this;
+        if (other.hasCtype()) {
+          setCtype(other.getCtype());
+        }
+        if (other.hasPacked()) {
+          setPacked(other.getPacked());
+        }
+        if (other.hasLazy()) {
+          setLazy(other.getLazy());
+        }
+        if (other.hasDeprecated()) {
+          setDeprecated(other.getDeprecated());
+        }
+        if (other.hasExperimentalMapKey()) {
+          bitField0_ |= 0x00000010;
+          experimentalMapKey_ = other.experimentalMapKey_;
+          onChanged();
+        }
+        if (other.hasWeak()) {
+          setWeak(other.getWeak());
+        }
+        if (uninterpretedOptionBuilder_ == null) {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOption_.isEmpty()) {
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000040);
+            } else {
+              ensureUninterpretedOptionIsMutable();
+              uninterpretedOption_.addAll(other.uninterpretedOption_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOptionBuilder_.isEmpty()) {
+              uninterpretedOptionBuilder_.dispose();
+              uninterpretedOptionBuilder_ = null;
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000040);
+              uninterpretedOptionBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getUninterpretedOptionFieldBuilder() : null;
+            } else {
+              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
+            }
+          }
+        }
+        this.mergeExtensionFields(other);
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+
+      public final boolean isInitialized() {
+        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+          if (!getUninterpretedOption(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        if (!extensionsAreInitialized()) {
+          
+          return false;
+        }
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.DescriptorProtos.FieldOptions parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.google.protobuf.DescriptorProtos.FieldOptions) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
       private int bitField0_;
-      
+
       // optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];
       private com.google.protobuf.DescriptorProtos.FieldOptions.CType ctype_ = com.google.protobuf.DescriptorProtos.FieldOptions.CType.STRING;
+      /**
+       * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
+       *
+       * <pre>
+       * The ctype option instructs the C++ code generator to use a different
+       * representation of the field than it normally would.  See the specific
+       * options below.  This option is not yet implemented in the open source
+       * release -- sorry, we'll try to include it in a future version!
+       * </pre>
+       */
       public boolean hasCtype() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
+      /**
+       * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
+       *
+       * <pre>
+       * The ctype option instructs the C++ code generator to use a different
+       * representation of the field than it normally would.  See the specific
+       * options below.  This option is not yet implemented in the open source
+       * release -- sorry, we'll try to include it in a future version!
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.FieldOptions.CType getCtype() {
         return ctype_;
       }
+      /**
+       * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
+       *
+       * <pre>
+       * The ctype option instructs the C++ code generator to use a different
+       * representation of the field than it normally would.  See the specific
+       * options below.  This option is not yet implemented in the open source
+       * release -- sorry, we'll try to include it in a future version!
+       * </pre>
+       */
       public Builder setCtype(com.google.protobuf.DescriptorProtos.FieldOptions.CType value) {
         if (value == null) {
@@ -11967,4 +18132,14 @@
         return this;
       }
+      /**
+       * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
+       *
+       * <pre>
+       * The ctype option instructs the C++ code generator to use a different
+       * representation of the field than it normally would.  See the specific
+       * options below.  This option is not yet implemented in the open source
+       * release -- sorry, we'll try to include it in a future version!
+       * </pre>
+       */
       public Builder clearCtype() {
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -11973,13 +18148,43 @@
         return this;
       }
-      
+
       // optional bool packed = 2;
       private boolean packed_ ;
+      /**
+       * <code>optional bool packed = 2;</code>
+       *
+       * <pre>
+       * The packed option can be enabled for repeated primitive fields to enable
+       * a more efficient representation on the wire. Rather than repeatedly
+       * writing the tag and type for each element, the entire array is encoded as
+       * a single length-delimited blob.
+       * </pre>
+       */
       public boolean hasPacked() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
+      /**
+       * <code>optional bool packed = 2;</code>
+       *
+       * <pre>
+       * The packed option can be enabled for repeated primitive fields to enable
+       * a more efficient representation on the wire. Rather than repeatedly
+       * writing the tag and type for each element, the entire array is encoded as
+       * a single length-delimited blob.
+       * </pre>
+       */
       public boolean getPacked() {
         return packed_;
       }
+      /**
+       * <code>optional bool packed = 2;</code>
+       *
+       * <pre>
+       * The packed option can be enabled for repeated primitive fields to enable
+       * a more efficient representation on the wire. Rather than repeatedly
+       * writing the tag and type for each element, the entire array is encoded as
+       * a single length-delimited blob.
+       * </pre>
+       */
       public Builder setPacked(boolean value) {
         bitField0_ |= 0x00000002;
@@ -11988,4 +18193,14 @@
         return this;
       }
+      /**
+       * <code>optional bool packed = 2;</code>
+       *
+       * <pre>
+       * The packed option can be enabled for repeated primitive fields to enable
+       * a more efficient representation on the wire. Rather than repeatedly
+       * writing the tag and type for each element, the entire array is encoded as
+       * a single length-delimited blob.
+       * </pre>
+       */
       public Builder clearPacked() {
         bitField0_ = (bitField0_ & ~0x00000002);
@@ -11994,13 +18209,115 @@
         return this;
       }
-      
+
       // optional bool lazy = 5 [default = false];
       private boolean lazy_ ;
+      /**
+       * <code>optional bool lazy = 5 [default = false];</code>
+       *
+       * <pre>
+       * Should this field be parsed lazily?  Lazy applies only to message-type
+       * fields.  It means that when the outer message is initially parsed, the
+       * inner message's contents will not be parsed but instead stored in encoded
+       * form.  The inner message will actually be parsed when it is first accessed.
+       *
+       * This is only a hint.  Implementations are free to choose whether to use
+       * eager or lazy parsing regardless of the value of this option.  However,
+       * setting this option true suggests that the protocol author believes that
+       * using lazy parsing on this field is worth the additional bookkeeping
+       * overhead typically needed to implement it.
+       *
+       * This option does not affect the public interface of any generated code;
+       * all method signatures remain the same.  Furthermore, thread-safety of the
+       * interface is not affected by this option; const methods remain safe to
+       * call from multiple threads concurrently, while non-const methods continue
+       * to require exclusive access.
+       *
+       *
+       * Note that implementations may choose not to check required fields within
+       * a lazy sub-message.  That is, calling IsInitialized() on the outher message
+       * may return true even if the inner message has missing required fields.
+       * This is necessary because otherwise the inner message would have to be
+       * parsed in order to perform the check, defeating the purpose of lazy
+       * parsing.  An implementation which chooses not to check required fields
+       * must be consistent about it.  That is, for any particular sub-message, the
+       * implementation must either *always* check its required fields, or *never*
+       * check its required fields, regardless of whether or not the message has
+       * been parsed.
+       * </pre>
+       */
       public boolean hasLazy() {
         return ((bitField0_ & 0x00000004) == 0x00000004);
       }
+      /**
+       * <code>optional bool lazy = 5 [default = false];</code>
+       *
+       * <pre>
+       * Should this field be parsed lazily?  Lazy applies only to message-type
+       * fields.  It means that when the outer message is initially parsed, the
+       * inner message's contents will not be parsed but instead stored in encoded
+       * form.  The inner message will actually be parsed when it is first accessed.
+       *
+       * This is only a hint.  Implementations are free to choose whether to use
+       * eager or lazy parsing regardless of the value of this option.  However,
+       * setting this option true suggests that the protocol author believes that
+       * using lazy parsing on this field is worth the additional bookkeeping
+       * overhead typically needed to implement it.
+       *
+       * This option does not affect the public interface of any generated code;
+       * all method signatures remain the same.  Furthermore, thread-safety of the
+       * interface is not affected by this option; const methods remain safe to
+       * call from multiple threads concurrently, while non-const methods continue
+       * to require exclusive access.
+       *
+       *
+       * Note that implementations may choose not to check required fields within
+       * a lazy sub-message.  That is, calling IsInitialized() on the outher message
+       * may return true even if the inner message has missing required fields.
+       * This is necessary because otherwise the inner message would have to be
+       * parsed in order to perform the check, defeating the purpose of lazy
+       * parsing.  An implementation which chooses not to check required fields
+       * must be consistent about it.  That is, for any particular sub-message, the
+       * implementation must either *always* check its required fields, or *never*
+       * check its required fields, regardless of whether or not the message has
+       * been parsed.
+       * </pre>
+       */
       public boolean getLazy() {
         return lazy_;
       }
+      /**
+       * <code>optional bool lazy = 5 [default = false];</code>
+       *
+       * <pre>
+       * Should this field be parsed lazily?  Lazy applies only to message-type
+       * fields.  It means that when the outer message is initially parsed, the
+       * inner message's contents will not be parsed but instead stored in encoded
+       * form.  The inner message will actually be parsed when it is first accessed.
+       *
+       * This is only a hint.  Implementations are free to choose whether to use
+       * eager or lazy parsing regardless of the value of this option.  However,
+       * setting this option true suggests that the protocol author believes that
+       * using lazy parsing on this field is worth the additional bookkeeping
+       * overhead typically needed to implement it.
+       *
+       * This option does not affect the public interface of any generated code;
+       * all method signatures remain the same.  Furthermore, thread-safety of the
+       * interface is not affected by this option; const methods remain safe to
+       * call from multiple threads concurrently, while non-const methods continue
+       * to require exclusive access.
+       *
+       *
+       * Note that implementations may choose not to check required fields within
+       * a lazy sub-message.  That is, calling IsInitialized() on the outher message
+       * may return true even if the inner message has missing required fields.
+       * This is necessary because otherwise the inner message would have to be
+       * parsed in order to perform the check, defeating the purpose of lazy
+       * parsing.  An implementation which chooses not to check required fields
+       * must be consistent about it.  That is, for any particular sub-message, the
+       * implementation must either *always* check its required fields, or *never*
+       * check its required fields, regardless of whether or not the message has
+       * been parsed.
+       * </pre>
+       */
       public Builder setLazy(boolean value) {
         bitField0_ |= 0x00000004;
@@ -12009,4 +18326,38 @@
         return this;
       }
+      /**
+       * <code>optional bool lazy = 5 [default = false];</code>
+       *
+       * <pre>
+       * Should this field be parsed lazily?  Lazy applies only to message-type
+       * fields.  It means that when the outer message is initially parsed, the
+       * inner message's contents will not be parsed but instead stored in encoded
+       * form.  The inner message will actually be parsed when it is first accessed.
+       *
+       * This is only a hint.  Implementations are free to choose whether to use
+       * eager or lazy parsing regardless of the value of this option.  However,
+       * setting this option true suggests that the protocol author believes that
+       * using lazy parsing on this field is worth the additional bookkeeping
+       * overhead typically needed to implement it.
+       *
+       * This option does not affect the public interface of any generated code;
+       * all method signatures remain the same.  Furthermore, thread-safety of the
+       * interface is not affected by this option; const methods remain safe to
+       * call from multiple threads concurrently, while non-const methods continue
+       * to require exclusive access.
+       *
+       *
+       * Note that implementations may choose not to check required fields within
+       * a lazy sub-message.  That is, calling IsInitialized() on the outher message
+       * may return true even if the inner message has missing required fields.
+       * This is necessary because otherwise the inner message would have to be
+       * parsed in order to perform the check, defeating the purpose of lazy
+       * parsing.  An implementation which chooses not to check required fields
+       * must be consistent about it.  That is, for any particular sub-message, the
+       * implementation must either *always* check its required fields, or *never*
+       * check its required fields, regardless of whether or not the message has
+       * been parsed.
+       * </pre>
+       */
       public Builder clearLazy() {
         bitField0_ = (bitField0_ & ~0x00000004);
@@ -12015,13 +18366,43 @@
         return this;
       }
-      
+
       // optional bool deprecated = 3 [default = false];
       private boolean deprecated_ ;
+      /**
+       * <code>optional bool deprecated = 3 [default = false];</code>
+       *
+       * <pre>
+       * Is this field deprecated?
+       * Depending on the target platform, this can emit Deprecated annotations
+       * for accessors, or it will be completely ignored; in the very least, this
+       * is a formalization for deprecating fields.
+       * </pre>
+       */
       public boolean hasDeprecated() {
         return ((bitField0_ & 0x00000008) == 0x00000008);
       }
+      /**
+       * <code>optional bool deprecated = 3 [default = false];</code>
+       *
+       * <pre>
+       * Is this field deprecated?
+       * Depending on the target platform, this can emit Deprecated annotations
+       * for accessors, or it will be completely ignored; in the very least, this
+       * is a formalization for deprecating fields.
+       * </pre>
+       */
       public boolean getDeprecated() {
         return deprecated_;
       }
+      /**
+       * <code>optional bool deprecated = 3 [default = false];</code>
+       *
+       * <pre>
+       * Is this field deprecated?
+       * Depending on the target platform, this can emit Deprecated annotations
+       * for accessors, or it will be completely ignored; in the very least, this
+       * is a formalization for deprecating fields.
+       * </pre>
+       */
       public Builder setDeprecated(boolean value) {
         bitField0_ |= 0x00000008;
@@ -12030,4 +18411,14 @@
         return this;
       }
+      /**
+       * <code>optional bool deprecated = 3 [default = false];</code>
+       *
+       * <pre>
+       * Is this field deprecated?
+       * Depending on the target platform, this can emit Deprecated annotations
+       * for accessors, or it will be completely ignored; in the very least, this
+       * is a formalization for deprecating fields.
+       * </pre>
+       */
       public Builder clearDeprecated() {
         bitField0_ = (bitField0_ & ~0x00000008);
@@ -12036,21 +18427,108 @@
         return this;
       }
-      
+
       // optional string experimental_map_key = 9;
       private java.lang.Object experimentalMapKey_ = "";
+      /**
+       * <code>optional string experimental_map_key = 9;</code>
+       *
+       * <pre>
+       * EXPERIMENTAL.  DO NOT USE.
+       * For "map" fields, the name of the field in the enclosed type that
+       * is the key for this map.  For example, suppose we have:
+       *   message Item {
+       *     required string name = 1;
+       *     required string value = 2;
+       *   }
+       *   message Config {
+       *     repeated Item items = 1 [experimental_map_key="name"];
+       *   }
+       * In this situation, the map key for Item will be set to "name".
+       * TODO: Fully-implement this, then remove the "experimental_" prefix.
+       * </pre>
+       */
       public boolean hasExperimentalMapKey() {
         return ((bitField0_ & 0x00000010) == 0x00000010);
       }
-      public String getExperimentalMapKey() {
+      /**
+       * <code>optional string experimental_map_key = 9;</code>
+       *
+       * <pre>
+       * EXPERIMENTAL.  DO NOT USE.
+       * For "map" fields, the name of the field in the enclosed type that
+       * is the key for this map.  For example, suppose we have:
+       *   message Item {
+       *     required string name = 1;
+       *     required string value = 2;
+       *   }
+       *   message Config {
+       *     repeated Item items = 1 [experimental_map_key="name"];
+       *   }
+       * In this situation, the map key for Item will be set to "name".
+       * TODO: Fully-implement this, then remove the "experimental_" prefix.
+       * </pre>
+       */
+      public java.lang.String getExperimentalMapKey() {
         java.lang.Object ref = experimentalMapKey_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           experimentalMapKey_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setExperimentalMapKey(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string experimental_map_key = 9;</code>
+       *
+       * <pre>
+       * EXPERIMENTAL.  DO NOT USE.
+       * For "map" fields, the name of the field in the enclosed type that
+       * is the key for this map.  For example, suppose we have:
+       *   message Item {
+       *     required string name = 1;
+       *     required string value = 2;
+       *   }
+       *   message Config {
+       *     repeated Item items = 1 [experimental_map_key="name"];
+       *   }
+       * In this situation, the map key for Item will be set to "name".
+       * TODO: Fully-implement this, then remove the "experimental_" prefix.
+       * </pre>
+       */
+      public com.google.protobuf.ByteString
+          getExperimentalMapKeyBytes() {
+        java.lang.Object ref = experimentalMapKey_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          experimentalMapKey_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string experimental_map_key = 9;</code>
+       *
+       * <pre>
+       * EXPERIMENTAL.  DO NOT USE.
+       * For "map" fields, the name of the field in the enclosed type that
+       * is the key for this map.  For example, suppose we have:
+       *   message Item {
+       *     required string name = 1;
+       *     required string value = 2;
+       *   }
+       *   message Config {
+       *     repeated Item items = 1 [experimental_map_key="name"];
+       *   }
+       * In this situation, the map key for Item will be set to "name".
+       * TODO: Fully-implement this, then remove the "experimental_" prefix.
+       * </pre>
+       */
+      public Builder setExperimentalMapKey(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -12061,4 +18539,22 @@
         return this;
       }
+      /**
+       * <code>optional string experimental_map_key = 9;</code>
+       *
+       * <pre>
+       * EXPERIMENTAL.  DO NOT USE.
+       * For "map" fields, the name of the field in the enclosed type that
+       * is the key for this map.  For example, suppose we have:
+       *   message Item {
+       *     required string name = 1;
+       *     required string value = 2;
+       *   }
+       *   message Config {
+       *     repeated Item items = 1 [experimental_map_key="name"];
+       *   }
+       * In this situation, the map key for Item will be set to "name".
+       * TODO: Fully-implement this, then remove the "experimental_" prefix.
+       * </pre>
+       */
       public Builder clearExperimentalMapKey() {
         bitField0_ = (bitField0_ & ~0x00000010);
@@ -12067,18 +18563,62 @@
         return this;
       }
-      void setExperimentalMapKey(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000010;
+      /**
+       * <code>optional string experimental_map_key = 9;</code>
+       *
+       * <pre>
+       * EXPERIMENTAL.  DO NOT USE.
+       * For "map" fields, the name of the field in the enclosed type that
+       * is the key for this map.  For example, suppose we have:
+       *   message Item {
+       *     required string name = 1;
+       *     required string value = 2;
+       *   }
+       *   message Config {
+       *     repeated Item items = 1 [experimental_map_key="name"];
+       *   }
+       * In this situation, the map key for Item will be set to "name".
+       * TODO: Fully-implement this, then remove the "experimental_" prefix.
+       * </pre>
+       */
+      public Builder setExperimentalMapKeyBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000010;
         experimentalMapKey_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // optional bool weak = 10 [default = false];
       private boolean weak_ ;
+      /**
+       * <code>optional bool weak = 10 [default = false];</code>
+       *
+       * <pre>
+       * For Google-internal migration only. Do not use.
+       * </pre>
+       */
       public boolean hasWeak() {
         return ((bitField0_ & 0x00000020) == 0x00000020);
       }
+      /**
+       * <code>optional bool weak = 10 [default = false];</code>
+       *
+       * <pre>
+       * For Google-internal migration only. Do not use.
+       * </pre>
+       */
       public boolean getWeak() {
         return weak_;
       }
+      /**
+       * <code>optional bool weak = 10 [default = false];</code>
+       *
+       * <pre>
+       * For Google-internal migration only. Do not use.
+       * </pre>
+       */
       public Builder setWeak(boolean value) {
         bitField0_ |= 0x00000020;
@@ -12087,4 +18627,11 @@
         return this;
       }
+      /**
+       * <code>optional bool weak = 10 [default = false];</code>
+       *
+       * <pre>
+       * For Google-internal migration only. Do not use.
+       * </pre>
+       */
       public Builder clearWeak() {
         bitField0_ = (bitField0_ & ~0x00000020);
@@ -12093,5 +18640,5 @@
         return this;
       }
-      
+
       // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
       private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
@@ -12103,8 +18650,15 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -12114,4 +18668,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public int getUninterpretedOptionCount() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -12121,4 +18682,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -12128,4 +18696,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder setUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
@@ -12142,4 +18717,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder setUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -12153,4 +18735,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -12166,4 +18755,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
@@ -12180,4 +18776,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -12191,4 +18794,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -12202,4 +18812,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addAllUninterpretedOption(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
@@ -12213,4 +18830,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder clearUninterpretedOption() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -12223,4 +18847,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder removeUninterpretedOption(int index) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -12233,8 +18864,22 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
           int index) {
         return getUninterpretedOptionFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
           int index) {
@@ -12244,4 +18889,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
            getUninterpretedOptionOrBuilderList() {
@@ -12252,8 +18904,22 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
         return getUninterpretedOptionFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
           int index) {
@@ -12261,4 +18927,11 @@
             index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
            getUninterpretedOptionBuilderList() {
@@ -12279,94 +18952,274 @@
         return uninterpretedOptionBuilder_;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:google.protobuf.FieldOptions)
     }
-    
+
     static {
       defaultInstance = new FieldOptions(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:google.protobuf.FieldOptions)
   }
-  
+
   public interface EnumOptionsOrBuilder extends
       com.google.protobuf.GeneratedMessage.
           ExtendableMessageOrBuilder<EnumOptions> {
-    
+
     // optional bool allow_alias = 2 [default = true];
+    /**
+     * <code>optional bool allow_alias = 2 [default = true];</code>
+     *
+     * <pre>
+     * Set this option to false to disallow mapping different tag names to a same
+     * value.
+     * </pre>
+     */
     boolean hasAllowAlias();
+    /**
+     * <code>optional bool allow_alias = 2 [default = true];</code>
+     *
+     * <pre>
+     * Set this option to false to disallow mapping different tag names to a same
+     * value.
+     * </pre>
+     */
     boolean getAllowAlias();
-    
+
     // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
         getUninterpretedOptionList();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     int getUninterpretedOptionCount();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
         getUninterpretedOptionOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
         int index);
   }
+  /**
+   * Protobuf type {@code google.protobuf.EnumOptions}
+   */
   public static final class EnumOptions extends
       com.google.protobuf.GeneratedMessage.ExtendableMessage<
         EnumOptions> implements EnumOptionsOrBuilder {
     // Use EnumOptions.newBuilder() to construct.
-    private EnumOptions(Builder builder) {
+    private EnumOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.EnumOptions, ?> builder) {
       super(builder);
-    }
-    private EnumOptions(boolean noInit) {}
-    
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private EnumOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
     private static final EnumOptions defaultInstance;
     public static EnumOptions getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public EnumOptions getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private EnumOptions(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000001;
+              allowAlias_ = input.readBool();
+              break;
+            }
+            case 7994: {
+              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+                uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.PARSER, extensionRegistry));
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
       return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumOptions_descriptor;
     }
-    
+
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumOptions_fieldAccessorTable;
-    }
-    
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumOptions_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.protobuf.DescriptorProtos.EnumOptions.class, com.google.protobuf.DescriptorProtos.EnumOptions.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<EnumOptions> PARSER =
+        new com.google.protobuf.AbstractParser<EnumOptions>() {
+      public EnumOptions parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new EnumOptions(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<EnumOptions> getParserForType() {
+      return PARSER;
+    }
+
     private int bitField0_;
     // optional bool allow_alias = 2 [default = true];
     public static final int ALLOW_ALIAS_FIELD_NUMBER = 2;
     private boolean allowAlias_;
+    /**
+     * <code>optional bool allow_alias = 2 [default = true];</code>
+     *
+     * <pre>
+     * Set this option to false to disallow mapping different tag names to a same
+     * value.
+     * </pre>
+     */
     public boolean hasAllowAlias() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
+    /**
+     * <code>optional bool allow_alias = 2 [default = true];</code>
+     *
+     * <pre>
+     * Set this option to false to disallow mapping different tag names to a same
+     * value.
+     * </pre>
+     */
     public boolean getAllowAlias() {
       return allowAlias_;
     }
-    
+
     // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
     public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
     private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
       return uninterpretedOption_;
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
         getUninterpretedOptionOrBuilderList() {
       return uninterpretedOption_;
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public int getUninterpretedOptionCount() {
       return uninterpretedOption_.size();
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
       return uninterpretedOption_.get(index);
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
         int index) {
       return uninterpretedOption_.get(index);
     }
-    
+
     private void initFields() {
       allowAlias_ = true;
@@ -12377,5 +19230,5 @@
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
-      
+
       for (int i = 0; i < getUninterpretedOptionCount(); i++) {
         if (!getUninterpretedOption(i).isInitialized()) {
@@ -12391,5 +19244,5 @@
       return true;
     }
-    
+
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
@@ -12407,10 +19260,10 @@
       getUnknownFields().writeTo(output);
     }
-    
+
     private int memoizedSerializedSize = -1;
     public int getSerializedSize() {
       int size = memoizedSerializedSize;
       if (size != -1) return size;
-    
+
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
@@ -12427,5 +19280,5 @@
       return size;
     }
-    
+
     private static final long serialVersionUID = 0L;
     @java.lang.Override
@@ -12434,9 +19287,9 @@
       return super.writeReplace();
     }
-    
+
     public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
@@ -12444,10 +19297,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
@@ -12455,10 +19307,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
@@ -12466,15 +19317,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.EnumOptions parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.EnumOptions parseDelimitedFrom(
@@ -12482,15 +19327,10 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
@@ -12498,8 +19338,7 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
@@ -12508,5 +19347,5 @@
     }
     public Builder toBuilder() { return newBuilder(this); }
-    
+
     @java.lang.Override
     protected Builder newBuilderForType(
@@ -12515,4 +19354,7 @@
       return builder;
     }
+    /**
+     * Protobuf type {@code google.protobuf.EnumOptions}
+     */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.ExtendableBuilder<
@@ -12522,16 +19364,19 @@
         return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumOptions_descriptor;
       }
-      
+
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumOptions_fieldAccessorTable;
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumOptions_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.EnumOptions.class, com.google.protobuf.DescriptorProtos.EnumOptions.Builder.class);
+      }
+
       // Construct using com.google.protobuf.DescriptorProtos.EnumOptions.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
-      
-      private Builder(BuilderParent parent) {
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
         super(parent);
         maybeForceBuilderInitialization();
@@ -12545,5 +19390,5 @@
         return new Builder();
       }
-      
+
       public Builder clear() {
         super.clear();
@@ -12558,18 +19403,18 @@
         return this;
       }
-      
+
       public Builder clone() {
         return create().mergeFrom(buildPartial());
       }
-      
+
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.google.protobuf.DescriptorProtos.EnumOptions.getDescriptor();
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumOptions_descriptor;
+      }
+
       public com.google.protobuf.DescriptorProtos.EnumOptions getDefaultInstanceForType() {
         return com.google.protobuf.DescriptorProtos.EnumOptions.getDefaultInstance();
       }
-      
+
       public com.google.protobuf.DescriptorProtos.EnumOptions build() {
         com.google.protobuf.DescriptorProtos.EnumOptions result = buildPartial();
@@ -12579,15 +19424,5 @@
         return result;
       }
-      
-      private com.google.protobuf.DescriptorProtos.EnumOptions buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        com.google.protobuf.DescriptorProtos.EnumOptions result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
+
       public com.google.protobuf.DescriptorProtos.EnumOptions buildPartial() {
         com.google.protobuf.DescriptorProtos.EnumOptions result = new com.google.protobuf.DescriptorProtos.EnumOptions(this);
@@ -12611,5 +19446,5 @@
         return result;
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.Message other) {
         if (other instanceof com.google.protobuf.DescriptorProtos.EnumOptions) {
@@ -12620,5 +19455,5 @@
         }
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.DescriptorProtos.EnumOptions other) {
         if (other == com.google.protobuf.DescriptorProtos.EnumOptions.getDefaultInstance()) return this;
@@ -12656,5 +19491,5 @@
         return this;
       }
-      
+
       public final boolean isInitialized() {
         for (int i = 0; i < getUninterpretedOptionCount(); i++) {
@@ -12670,53 +19505,56 @@
         return true;
       }
-      
+
       public Builder mergeFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder(
-            this.getUnknownFields());
-        while (true) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              this.setUnknownFields(unknownFields.build());
-              onChanged();
-              return this;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
-              }
-              break;
-            }
-            case 16: {
-              bitField0_ |= 0x00000001;
-              allowAlias_ = input.readBool();
-              break;
-            }
-            case 7994: {
-              com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder subBuilder = com.google.protobuf.DescriptorProtos.UninterpretedOption.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addUninterpretedOption(subBuilder.buildPartial());
-              break;
-            }
+        com.google.protobuf.DescriptorProtos.EnumOptions parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.google.protobuf.DescriptorProtos.EnumOptions) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
         }
-      }
-      
+        return this;
+      }
       private int bitField0_;
-      
+
       // optional bool allow_alias = 2 [default = true];
       private boolean allowAlias_ = true;
+      /**
+       * <code>optional bool allow_alias = 2 [default = true];</code>
+       *
+       * <pre>
+       * Set this option to false to disallow mapping different tag names to a same
+       * value.
+       * </pre>
+       */
       public boolean hasAllowAlias() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
+      /**
+       * <code>optional bool allow_alias = 2 [default = true];</code>
+       *
+       * <pre>
+       * Set this option to false to disallow mapping different tag names to a same
+       * value.
+       * </pre>
+       */
       public boolean getAllowAlias() {
         return allowAlias_;
       }
+      /**
+       * <code>optional bool allow_alias = 2 [default = true];</code>
+       *
+       * <pre>
+       * Set this option to false to disallow mapping different tag names to a same
+       * value.
+       * </pre>
+       */
       public Builder setAllowAlias(boolean value) {
         bitField0_ |= 0x00000001;
@@ -12725,4 +19563,12 @@
         return this;
       }
+      /**
+       * <code>optional bool allow_alias = 2 [default = true];</code>
+       *
+       * <pre>
+       * Set this option to false to disallow mapping different tag names to a same
+       * value.
+       * </pre>
+       */
       public Builder clearAllowAlias() {
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -12731,5 +19577,5 @@
         return this;
       }
-      
+
       // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
       private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
@@ -12741,8 +19587,15 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -12752,4 +19605,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public int getUninterpretedOptionCount() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -12759,4 +19619,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -12766,4 +19633,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder setUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
@@ -12780,4 +19654,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder setUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -12791,4 +19672,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -12804,4 +19692,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
@@ -12818,4 +19713,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -12829,4 +19731,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -12840,4 +19749,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addAllUninterpretedOption(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
@@ -12851,4 +19767,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder clearUninterpretedOption() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -12861,4 +19784,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder removeUninterpretedOption(int index) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -12871,8 +19801,22 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
           int index) {
         return getUninterpretedOptionFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
           int index) {
@@ -12882,4 +19826,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
            getUninterpretedOptionOrBuilderList() {
@@ -12890,8 +19841,22 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
         return getUninterpretedOptionFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
           int index) {
@@ -12899,4 +19864,11 @@
             index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
            getUninterpretedOptionBuilderList() {
@@ -12917,79 +19889,222 @@
         return uninterpretedOptionBuilder_;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:google.protobuf.EnumOptions)
     }
-    
+
     static {
       defaultInstance = new EnumOptions(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:google.protobuf.EnumOptions)
   }
-  
+
   public interface EnumValueOptionsOrBuilder extends
       com.google.protobuf.GeneratedMessage.
           ExtendableMessageOrBuilder<EnumValueOptions> {
-    
+
     // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
         getUninterpretedOptionList();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     int getUninterpretedOptionCount();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
         getUninterpretedOptionOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
         int index);
   }
+  /**
+   * Protobuf type {@code google.protobuf.EnumValueOptions}
+   */
   public static final class EnumValueOptions extends
       com.google.protobuf.GeneratedMessage.ExtendableMessage<
         EnumValueOptions> implements EnumValueOptionsOrBuilder {
     // Use EnumValueOptions.newBuilder() to construct.
-    private EnumValueOptions(Builder builder) {
+    private EnumValueOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.EnumValueOptions, ?> builder) {
       super(builder);
-    }
-    private EnumValueOptions(boolean noInit) {}
-    
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private EnumValueOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
     private static final EnumValueOptions defaultInstance;
     public static EnumValueOptions getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public EnumValueOptions getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private EnumValueOptions(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 7994: {
+              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+                uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.PARSER, extensionRegistry));
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
       return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_descriptor;
     }
-    
+
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable;
-    }
-    
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.protobuf.DescriptorProtos.EnumValueOptions.class, com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<EnumValueOptions> PARSER =
+        new com.google.protobuf.AbstractParser<EnumValueOptions>() {
+      public EnumValueOptions parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new EnumValueOptions(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<EnumValueOptions> getParserForType() {
+      return PARSER;
+    }
+
     // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
     public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
     private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
       return uninterpretedOption_;
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
         getUninterpretedOptionOrBuilderList() {
       return uninterpretedOption_;
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public int getUninterpretedOptionCount() {
       return uninterpretedOption_.size();
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
       return uninterpretedOption_.get(index);
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
         int index) {
       return uninterpretedOption_.get(index);
     }
-    
+
     private void initFields() {
       uninterpretedOption_ = java.util.Collections.emptyList();
@@ -12999,5 +20114,5 @@
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
-      
+
       for (int i = 0; i < getUninterpretedOptionCount(); i++) {
         if (!getUninterpretedOption(i).isInitialized()) {
@@ -13013,5 +20128,5 @@
       return true;
     }
-    
+
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
@@ -13026,10 +20141,10 @@
       getUnknownFields().writeTo(output);
     }
-    
+
     private int memoizedSerializedSize = -1;
     public int getSerializedSize() {
       int size = memoizedSerializedSize;
       if (size != -1) return size;
-    
+
       size = 0;
       for (int i = 0; i < uninterpretedOption_.size(); i++) {
@@ -13042,5 +20157,5 @@
       return size;
     }
-    
+
     private static final long serialVersionUID = 0L;
     @java.lang.Override
@@ -13049,9 +20164,9 @@
       return super.writeReplace();
     }
-    
+
     public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
@@ -13059,10 +20174,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
@@ -13070,10 +20184,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
@@ -13081,15 +20194,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseDelimitedFrom(
@@ -13097,15 +20204,10 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
@@ -13113,8 +20215,7 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
@@ -13123,5 +20224,5 @@
     }
     public Builder toBuilder() { return newBuilder(this); }
-    
+
     @java.lang.Override
     protected Builder newBuilderForType(
@@ -13130,4 +20231,7 @@
       return builder;
     }
+    /**
+     * Protobuf type {@code google.protobuf.EnumValueOptions}
+     */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.ExtendableBuilder<
@@ -13137,16 +20241,19 @@
         return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_descriptor;
       }
-      
+
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable;
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.EnumValueOptions.class, com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder.class);
+      }
+
       // Construct using com.google.protobuf.DescriptorProtos.EnumValueOptions.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
-      
-      private Builder(BuilderParent parent) {
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
         super(parent);
         maybeForceBuilderInitialization();
@@ -13160,5 +20267,5 @@
         return new Builder();
       }
-      
+
       public Builder clear() {
         super.clear();
@@ -13171,18 +20278,18 @@
         return this;
       }
-      
+
       public Builder clone() {
         return create().mergeFrom(buildPartial());
       }
-      
+
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.google.protobuf.DescriptorProtos.EnumValueOptions.getDescriptor();
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_descriptor;
+      }
+
       public com.google.protobuf.DescriptorProtos.EnumValueOptions getDefaultInstanceForType() {
         return com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance();
       }
-      
+
       public com.google.protobuf.DescriptorProtos.EnumValueOptions build() {
         com.google.protobuf.DescriptorProtos.EnumValueOptions result = buildPartial();
@@ -13192,15 +20299,5 @@
         return result;
       }
-      
-      private com.google.protobuf.DescriptorProtos.EnumValueOptions buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        com.google.protobuf.DescriptorProtos.EnumValueOptions result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
+
       public com.google.protobuf.DescriptorProtos.EnumValueOptions buildPartial() {
         com.google.protobuf.DescriptorProtos.EnumValueOptions result = new com.google.protobuf.DescriptorProtos.EnumValueOptions(this);
@@ -13218,5 +20315,5 @@
         return result;
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.Message other) {
         if (other instanceof com.google.protobuf.DescriptorProtos.EnumValueOptions) {
@@ -13227,5 +20324,5 @@
         }
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.DescriptorProtos.EnumValueOptions other) {
         if (other == com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance()) return this;
@@ -13260,5 +20357,5 @@
         return this;
       }
-      
+
       public final boolean isInitialized() {
         for (int i = 0; i < getUninterpretedOptionCount(); i++) {
@@ -13274,40 +20371,24 @@
         return true;
       }
-      
+
       public Builder mergeFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder(
-            this.getUnknownFields());
-        while (true) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              this.setUnknownFields(unknownFields.build());
-              onChanged();
-              return this;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
-              }
-              break;
-            }
-            case 7994: {
-              com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder subBuilder = com.google.protobuf.DescriptorProtos.UninterpretedOption.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addUninterpretedOption(subBuilder.buildPartial());
-              break;
-            }
+        com.google.protobuf.DescriptorProtos.EnumValueOptions parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.google.protobuf.DescriptorProtos.EnumValueOptions) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
         }
-      }
-      
+        return this;
+      }
       private int bitField0_;
-      
+
       // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
       private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
@@ -13319,8 +20400,15 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -13330,4 +20418,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public int getUninterpretedOptionCount() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -13337,4 +20432,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -13344,4 +20446,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder setUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
@@ -13358,4 +20467,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder setUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -13369,4 +20485,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -13382,4 +20505,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
@@ -13396,4 +20526,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -13407,4 +20544,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -13418,4 +20562,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addAllUninterpretedOption(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
@@ -13429,4 +20580,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder clearUninterpretedOption() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -13439,4 +20597,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder removeUninterpretedOption(int index) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -13449,8 +20614,22 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
           int index) {
         return getUninterpretedOptionFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
           int index) {
@@ -13460,4 +20639,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
            getUninterpretedOptionOrBuilderList() {
@@ -13468,8 +20654,22 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
         return getUninterpretedOptionFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
           int index) {
@@ -13477,4 +20677,11 @@
             index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
            getUninterpretedOptionBuilderList() {
@@ -13495,79 +20702,222 @@
         return uninterpretedOptionBuilder_;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:google.protobuf.EnumValueOptions)
     }
-    
+
     static {
       defaultInstance = new EnumValueOptions(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:google.protobuf.EnumValueOptions)
   }
-  
+
   public interface ServiceOptionsOrBuilder extends
       com.google.protobuf.GeneratedMessage.
           ExtendableMessageOrBuilder<ServiceOptions> {
-    
+
     // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
         getUninterpretedOptionList();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     int getUninterpretedOptionCount();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
         getUninterpretedOptionOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
         int index);
   }
+  /**
+   * Protobuf type {@code google.protobuf.ServiceOptions}
+   */
   public static final class ServiceOptions extends
       com.google.protobuf.GeneratedMessage.ExtendableMessage<
         ServiceOptions> implements ServiceOptionsOrBuilder {
     // Use ServiceOptions.newBuilder() to construct.
-    private ServiceOptions(Builder builder) {
+    private ServiceOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.ServiceOptions, ?> builder) {
       super(builder);
-    }
-    private ServiceOptions(boolean noInit) {}
-    
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private ServiceOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
     private static final ServiceOptions defaultInstance;
     public static ServiceOptions getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public ServiceOptions getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceOptions(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 7994: {
+              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+                uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.PARSER, extensionRegistry));
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
       return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceOptions_descriptor;
     }
-    
+
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceOptions_fieldAccessorTable;
-    }
-    
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceOptions_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.protobuf.DescriptorProtos.ServiceOptions.class, com.google.protobuf.DescriptorProtos.ServiceOptions.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<ServiceOptions> PARSER =
+        new com.google.protobuf.AbstractParser<ServiceOptions>() {
+      public ServiceOptions parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceOptions(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceOptions> getParserForType() {
+      return PARSER;
+    }
+
     // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
     public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
     private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
       return uninterpretedOption_;
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
         getUninterpretedOptionOrBuilderList() {
       return uninterpretedOption_;
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public int getUninterpretedOptionCount() {
       return uninterpretedOption_.size();
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
       return uninterpretedOption_.get(index);
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
         int index) {
       return uninterpretedOption_.get(index);
     }
-    
+
     private void initFields() {
       uninterpretedOption_ = java.util.Collections.emptyList();
@@ -13577,5 +20927,5 @@
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
-      
+
       for (int i = 0; i < getUninterpretedOptionCount(); i++) {
         if (!getUninterpretedOption(i).isInitialized()) {
@@ -13591,5 +20941,5 @@
       return true;
     }
-    
+
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
@@ -13604,10 +20954,10 @@
       getUnknownFields().writeTo(output);
     }
-    
+
     private int memoizedSerializedSize = -1;
     public int getSerializedSize() {
       int size = memoizedSerializedSize;
       if (size != -1) return size;
-    
+
       size = 0;
       for (int i = 0; i < uninterpretedOption_.size(); i++) {
@@ -13620,5 +20970,5 @@
       return size;
     }
-    
+
     private static final long serialVersionUID = 0L;
     @java.lang.Override
@@ -13627,9 +20977,9 @@
       return super.writeReplace();
     }
-    
+
     public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
@@ -13637,10 +20987,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
@@ -13648,10 +20997,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
@@ -13659,15 +21007,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.ServiceOptions parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.ServiceOptions parseDelimitedFrom(
@@ -13675,15 +21017,10 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
@@ -13691,8 +21028,7 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
@@ -13701,5 +21037,5 @@
     }
     public Builder toBuilder() { return newBuilder(this); }
-    
+
     @java.lang.Override
     protected Builder newBuilderForType(
@@ -13708,4 +21044,7 @@
       return builder;
     }
+    /**
+     * Protobuf type {@code google.protobuf.ServiceOptions}
+     */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.ExtendableBuilder<
@@ -13715,16 +21054,19 @@
         return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceOptions_descriptor;
       }
-      
+
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceOptions_fieldAccessorTable;
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceOptions_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.ServiceOptions.class, com.google.protobuf.DescriptorProtos.ServiceOptions.Builder.class);
+      }
+
       // Construct using com.google.protobuf.DescriptorProtos.ServiceOptions.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
-      
-      private Builder(BuilderParent parent) {
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
         super(parent);
         maybeForceBuilderInitialization();
@@ -13738,5 +21080,5 @@
         return new Builder();
       }
-      
+
       public Builder clear() {
         super.clear();
@@ -13749,18 +21091,18 @@
         return this;
       }
-      
+
       public Builder clone() {
         return create().mergeFrom(buildPartial());
       }
-      
+
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.google.protobuf.DescriptorProtos.ServiceOptions.getDescriptor();
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceOptions_descriptor;
+      }
+
       public com.google.protobuf.DescriptorProtos.ServiceOptions getDefaultInstanceForType() {
         return com.google.protobuf.DescriptorProtos.ServiceOptions.getDefaultInstance();
       }
-      
+
       public com.google.protobuf.DescriptorProtos.ServiceOptions build() {
         com.google.protobuf.DescriptorProtos.ServiceOptions result = buildPartial();
@@ -13770,15 +21112,5 @@
         return result;
       }
-      
-      private com.google.protobuf.DescriptorProtos.ServiceOptions buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        com.google.protobuf.DescriptorProtos.ServiceOptions result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
+
       public com.google.protobuf.DescriptorProtos.ServiceOptions buildPartial() {
         com.google.protobuf.DescriptorProtos.ServiceOptions result = new com.google.protobuf.DescriptorProtos.ServiceOptions(this);
@@ -13796,5 +21128,5 @@
         return result;
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.Message other) {
         if (other instanceof com.google.protobuf.DescriptorProtos.ServiceOptions) {
@@ -13805,5 +21137,5 @@
         }
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.DescriptorProtos.ServiceOptions other) {
         if (other == com.google.protobuf.DescriptorProtos.ServiceOptions.getDefaultInstance()) return this;
@@ -13838,5 +21170,5 @@
         return this;
       }
-      
+
       public final boolean isInitialized() {
         for (int i = 0; i < getUninterpretedOptionCount(); i++) {
@@ -13852,40 +21184,24 @@
         return true;
       }
-      
+
       public Builder mergeFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder(
-            this.getUnknownFields());
-        while (true) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              this.setUnknownFields(unknownFields.build());
-              onChanged();
-              return this;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
-              }
-              break;
-            }
-            case 7994: {
-              com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder subBuilder = com.google.protobuf.DescriptorProtos.UninterpretedOption.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addUninterpretedOption(subBuilder.buildPartial());
-              break;
-            }
+        com.google.protobuf.DescriptorProtos.ServiceOptions parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.google.protobuf.DescriptorProtos.ServiceOptions) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
         }
-      }
-      
+        return this;
+      }
       private int bitField0_;
-      
+
       // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
       private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
@@ -13897,8 +21213,15 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -13908,4 +21231,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public int getUninterpretedOptionCount() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -13915,4 +21245,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -13922,4 +21259,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder setUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
@@ -13936,4 +21280,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder setUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -13947,4 +21298,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -13960,4 +21318,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
@@ -13974,4 +21339,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -13985,4 +21357,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -13996,4 +21375,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addAllUninterpretedOption(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
@@ -14007,4 +21393,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder clearUninterpretedOption() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -14017,4 +21410,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder removeUninterpretedOption(int index) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -14027,8 +21427,22 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
           int index) {
         return getUninterpretedOptionFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
           int index) {
@@ -14038,4 +21452,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
            getUninterpretedOptionOrBuilderList() {
@@ -14046,8 +21467,22 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
         return getUninterpretedOptionFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
           int index) {
@@ -14055,4 +21490,11 @@
             index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
            getUninterpretedOptionBuilderList() {
@@ -14073,79 +21515,222 @@
         return uninterpretedOptionBuilder_;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:google.protobuf.ServiceOptions)
     }
-    
+
     static {
       defaultInstance = new ServiceOptions(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:google.protobuf.ServiceOptions)
   }
-  
+
   public interface MethodOptionsOrBuilder extends
       com.google.protobuf.GeneratedMessage.
           ExtendableMessageOrBuilder<MethodOptions> {
-    
+
     // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
         getUninterpretedOptionList();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     int getUninterpretedOptionCount();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
         getUninterpretedOptionOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
         int index);
   }
+  /**
+   * Protobuf type {@code google.protobuf.MethodOptions}
+   */
   public static final class MethodOptions extends
       com.google.protobuf.GeneratedMessage.ExtendableMessage<
         MethodOptions> implements MethodOptionsOrBuilder {
     // Use MethodOptions.newBuilder() to construct.
-    private MethodOptions(Builder builder) {
+    private MethodOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.MethodOptions, ?> builder) {
       super(builder);
-    }
-    private MethodOptions(boolean noInit) {}
-    
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private MethodOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
     private static final MethodOptions defaultInstance;
     public static MethodOptions getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public MethodOptions getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private MethodOptions(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 7994: {
+              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+                uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.PARSER, extensionRegistry));
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
       return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodOptions_descriptor;
     }
-    
+
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodOptions_fieldAccessorTable;
-    }
-    
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodOptions_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.protobuf.DescriptorProtos.MethodOptions.class, com.google.protobuf.DescriptorProtos.MethodOptions.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<MethodOptions> PARSER =
+        new com.google.protobuf.AbstractParser<MethodOptions>() {
+      public MethodOptions parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new MethodOptions(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<MethodOptions> getParserForType() {
+      return PARSER;
+    }
+
     // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
     public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
     private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
       return uninterpretedOption_;
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
         getUninterpretedOptionOrBuilderList() {
       return uninterpretedOption_;
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public int getUninterpretedOptionCount() {
       return uninterpretedOption_.size();
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
       return uninterpretedOption_.get(index);
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+     *
+     * <pre>
+     * The parser stores options it doesn't recognize here. See above.
+     * </pre>
+     */
     public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
         int index) {
       return uninterpretedOption_.get(index);
     }
-    
+
     private void initFields() {
       uninterpretedOption_ = java.util.Collections.emptyList();
@@ -14155,5 +21740,5 @@
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
-      
+
       for (int i = 0; i < getUninterpretedOptionCount(); i++) {
         if (!getUninterpretedOption(i).isInitialized()) {
@@ -14169,5 +21754,5 @@
       return true;
     }
-    
+
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
@@ -14182,10 +21767,10 @@
       getUnknownFields().writeTo(output);
     }
-    
+
     private int memoizedSerializedSize = -1;
     public int getSerializedSize() {
       int size = memoizedSerializedSize;
       if (size != -1) return size;
-    
+
       size = 0;
       for (int i = 0; i < uninterpretedOption_.size(); i++) {
@@ -14198,5 +21783,5 @@
       return size;
     }
-    
+
     private static final long serialVersionUID = 0L;
     @java.lang.Override
@@ -14205,9 +21790,9 @@
       return super.writeReplace();
     }
-    
+
     public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
@@ -14215,10 +21800,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
@@ -14226,10 +21810,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
@@ -14237,15 +21820,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.MethodOptions parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.MethodOptions parseDelimitedFrom(
@@ -14253,15 +21830,10 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
@@ -14269,8 +21841,7 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
@@ -14279,5 +21850,5 @@
     }
     public Builder toBuilder() { return newBuilder(this); }
-    
+
     @java.lang.Override
     protected Builder newBuilderForType(
@@ -14286,4 +21857,7 @@
       return builder;
     }
+    /**
+     * Protobuf type {@code google.protobuf.MethodOptions}
+     */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.ExtendableBuilder<
@@ -14293,16 +21867,19 @@
         return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodOptions_descriptor;
       }
-      
+
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodOptions_fieldAccessorTable;
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodOptions_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.MethodOptions.class, com.google.protobuf.DescriptorProtos.MethodOptions.Builder.class);
+      }
+
       // Construct using com.google.protobuf.DescriptorProtos.MethodOptions.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
-      
-      private Builder(BuilderParent parent) {
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
         super(parent);
         maybeForceBuilderInitialization();
@@ -14316,5 +21893,5 @@
         return new Builder();
       }
-      
+
       public Builder clear() {
         super.clear();
@@ -14327,18 +21904,18 @@
         return this;
       }
-      
+
       public Builder clone() {
         return create().mergeFrom(buildPartial());
       }
-      
+
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.google.protobuf.DescriptorProtos.MethodOptions.getDescriptor();
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodOptions_descriptor;
+      }
+
       public com.google.protobuf.DescriptorProtos.MethodOptions getDefaultInstanceForType() {
         return com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance();
       }
-      
+
       public com.google.protobuf.DescriptorProtos.MethodOptions build() {
         com.google.protobuf.DescriptorProtos.MethodOptions result = buildPartial();
@@ -14348,15 +21925,5 @@
         return result;
       }
-      
-      private com.google.protobuf.DescriptorProtos.MethodOptions buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        com.google.protobuf.DescriptorProtos.MethodOptions result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
+
       public com.google.protobuf.DescriptorProtos.MethodOptions buildPartial() {
         com.google.protobuf.DescriptorProtos.MethodOptions result = new com.google.protobuf.DescriptorProtos.MethodOptions(this);
@@ -14374,5 +21941,5 @@
         return result;
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.Message other) {
         if (other instanceof com.google.protobuf.DescriptorProtos.MethodOptions) {
@@ -14383,5 +21950,5 @@
         }
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.DescriptorProtos.MethodOptions other) {
         if (other == com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance()) return this;
@@ -14416,5 +21983,5 @@
         return this;
       }
-      
+
       public final boolean isInitialized() {
         for (int i = 0; i < getUninterpretedOptionCount(); i++) {
@@ -14430,40 +21997,24 @@
         return true;
       }
-      
+
       public Builder mergeFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder(
-            this.getUnknownFields());
-        while (true) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              this.setUnknownFields(unknownFields.build());
-              onChanged();
-              return this;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
-              }
-              break;
-            }
-            case 7994: {
-              com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder subBuilder = com.google.protobuf.DescriptorProtos.UninterpretedOption.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addUninterpretedOption(subBuilder.buildPartial());
-              break;
-            }
+        com.google.protobuf.DescriptorProtos.MethodOptions parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.google.protobuf.DescriptorProtos.MethodOptions) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
         }
-      }
-      
+        return this;
+      }
       private int bitField0_;
-      
+
       // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
       private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
@@ -14475,8 +22026,15 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -14486,4 +22044,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public int getUninterpretedOptionCount() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -14493,4 +22058,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -14500,4 +22072,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder setUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
@@ -14514,4 +22093,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder setUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -14525,4 +22111,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -14538,4 +22131,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
@@ -14552,4 +22152,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -14563,4 +22170,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addUninterpretedOption(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
@@ -14574,4 +22188,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder addAllUninterpretedOption(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
@@ -14585,4 +22206,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder clearUninterpretedOption() {
         if (uninterpretedOptionBuilder_ == null) {
@@ -14595,4 +22223,11 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public Builder removeUninterpretedOption(int index) {
         if (uninterpretedOptionBuilder_ == null) {
@@ -14605,8 +22240,22 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
           int index) {
         return getUninterpretedOptionFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
           int index) {
@@ -14616,4 +22265,11 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
            getUninterpretedOptionOrBuilderList() {
@@ -14624,8 +22280,22 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
         return getUninterpretedOptionFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
           int index) {
@@ -14633,4 +22303,11 @@
             index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
+       *
+       * <pre>
+       * The parser stores options it doesn't recognize here. See above.
+       * </pre>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
            getUninterpretedOptionBuilderList() {
@@ -14651,136 +22328,427 @@
         return uninterpretedOptionBuilder_;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:google.protobuf.MethodOptions)
     }
-    
+
     static {
       defaultInstance = new MethodOptions(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:google.protobuf.MethodOptions)
   }
-  
+
   public interface UninterpretedOptionOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
-    
+
     // repeated .google.protobuf.UninterpretedOption.NamePart name = 2;
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> 
         getNameList();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+     */
     com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart getName(int index);
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+     */
     int getNameCount();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> 
         getNameOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+     */
     com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder getNameOrBuilder(
         int index);
-    
+
     // optional string identifier_value = 3;
+    /**
+     * <code>optional string identifier_value = 3;</code>
+     *
+     * <pre>
+     * The value of the uninterpreted option, in whatever type the tokenizer
+     * identified it as during parsing. Exactly one of these should be set.
+     * </pre>
+     */
     boolean hasIdentifierValue();
-    String getIdentifierValue();
-    
+    /**
+     * <code>optional string identifier_value = 3;</code>
+     *
+     * <pre>
+     * The value of the uninterpreted option, in whatever type the tokenizer
+     * identified it as during parsing. Exactly one of these should be set.
+     * </pre>
+     */
+    java.lang.String getIdentifierValue();
+    /**
+     * <code>optional string identifier_value = 3;</code>
+     *
+     * <pre>
+     * The value of the uninterpreted option, in whatever type the tokenizer
+     * identified it as during parsing. Exactly one of these should be set.
+     * </pre>
+     */
+    com.google.protobuf.ByteString
+        getIdentifierValueBytes();
+
     // optional uint64 positive_int_value = 4;
+    /**
+     * <code>optional uint64 positive_int_value = 4;</code>
+     */
     boolean hasPositiveIntValue();
+    /**
+     * <code>optional uint64 positive_int_value = 4;</code>
+     */
     long getPositiveIntValue();
-    
+
     // optional int64 negative_int_value = 5;
+    /**
+     * <code>optional int64 negative_int_value = 5;</code>
+     */
     boolean hasNegativeIntValue();
+    /**
+     * <code>optional int64 negative_int_value = 5;</code>
+     */
     long getNegativeIntValue();
-    
+
     // optional double double_value = 6;
+    /**
+     * <code>optional double double_value = 6;</code>
+     */
     boolean hasDoubleValue();
+    /**
+     * <code>optional double double_value = 6;</code>
+     */
     double getDoubleValue();
-    
+
     // optional bytes string_value = 7;
+    /**
+     * <code>optional bytes string_value = 7;</code>
+     */
     boolean hasStringValue();
+    /**
+     * <code>optional bytes string_value = 7;</code>
+     */
     com.google.protobuf.ByteString getStringValue();
-    
+
     // optional string aggregate_value = 8;
+    /**
+     * <code>optional string aggregate_value = 8;</code>
+     */
     boolean hasAggregateValue();
-    String getAggregateValue();
+    /**
+     * <code>optional string aggregate_value = 8;</code>
+     */
+    java.lang.String getAggregateValue();
+    /**
+     * <code>optional string aggregate_value = 8;</code>
+     */
+    com.google.protobuf.ByteString
+        getAggregateValueBytes();
   }
+  /**
+   * Protobuf type {@code google.protobuf.UninterpretedOption}
+   *
+   * <pre>
+   * A message representing a option the parser does not recognize. This only
+   * appears in options protos created by the compiler::Parser class.
+   * DescriptorPool resolves these when building Descriptor objects. Therefore,
+   * options protos in descriptor objects (e.g. returned by Descriptor::options(),
+   * or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
+   * in them.
+   * </pre>
+   */
   public static final class UninterpretedOption extends
       com.google.protobuf.GeneratedMessage
       implements UninterpretedOptionOrBuilder {
     // Use UninterpretedOption.newBuilder() to construct.
-    private UninterpretedOption(Builder builder) {
+    private UninterpretedOption(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
       super(builder);
-    }
-    private UninterpretedOption(boolean noInit) {}
-    
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private UninterpretedOption(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
     private static final UninterpretedOption defaultInstance;
     public static UninterpretedOption getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public UninterpretedOption getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private UninterpretedOption(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+                name_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              name_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.PARSER, extensionRegistry));
+              break;
+            }
+            case 26: {
+              bitField0_ |= 0x00000001;
+              identifierValue_ = input.readBytes();
+              break;
+            }
+            case 32: {
+              bitField0_ |= 0x00000002;
+              positiveIntValue_ = input.readUInt64();
+              break;
+            }
+            case 40: {
+              bitField0_ |= 0x00000004;
+              negativeIntValue_ = input.readInt64();
+              break;
+            }
+            case 49: {
+              bitField0_ |= 0x00000008;
+              doubleValue_ = input.readDouble();
+              break;
+            }
+            case 58: {
+              bitField0_ |= 0x00000010;
+              stringValue_ = input.readBytes();
+              break;
+            }
+            case 66: {
+              bitField0_ |= 0x00000020;
+              aggregateValue_ = input.readBytes();
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+          name_ = java.util.Collections.unmodifiableList(name_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
       return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_descriptor;
     }
-    
+
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable;
-    }
-    
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.protobuf.DescriptorProtos.UninterpretedOption.class, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<UninterpretedOption> PARSER =
+        new com.google.protobuf.AbstractParser<UninterpretedOption>() {
+      public UninterpretedOption parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new UninterpretedOption(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<UninterpretedOption> getParserForType() {
+      return PARSER;
+    }
+
     public interface NamePartOrBuilder
         extends com.google.protobuf.MessageOrBuilder {
-      
+
       // required string name_part = 1;
+      /**
+       * <code>required string name_part = 1;</code>
+       */
       boolean hasNamePart();
-      String getNamePart();
-      
+      /**
+       * <code>required string name_part = 1;</code>
+       */
+      java.lang.String getNamePart();
+      /**
+       * <code>required string name_part = 1;</code>
+       */
+      com.google.protobuf.ByteString
+          getNamePartBytes();
+
       // required bool is_extension = 2;
+      /**
+       * <code>required bool is_extension = 2;</code>
+       */
       boolean hasIsExtension();
+      /**
+       * <code>required bool is_extension = 2;</code>
+       */
       boolean getIsExtension();
     }
+    /**
+     * Protobuf type {@code google.protobuf.UninterpretedOption.NamePart}
+     *
+     * <pre>
+     * The name of the uninterpreted option.  Each string represents a segment in
+     * a dot-separated name.  is_extension is true iff a segment represents an
+     * extension (denoted with parentheses in options specs in .proto files).
+     * E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
+     * "foo.(bar.baz).qux".
+     * </pre>
+     */
     public static final class NamePart extends
         com.google.protobuf.GeneratedMessage
         implements NamePartOrBuilder {
       // Use NamePart.newBuilder() to construct.
-      private NamePart(Builder builder) {
+      private NamePart(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
         super(builder);
-      }
-      private NamePart(boolean noInit) {}
-      
+        this.unknownFields = builder.getUnknownFields();
+      }
+      private NamePart(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
       private static final NamePart defaultInstance;
       public static NamePart getDefaultInstance() {
         return defaultInstance;
       }
-      
+
       public NamePart getDefaultInstanceForType() {
         return defaultInstance;
       }
-      
+
+      private final com.google.protobuf.UnknownFieldSet unknownFields;
+      @java.lang.Override
+      public final com.google.protobuf.UnknownFieldSet
+          getUnknownFields() {
+        return this.unknownFields;
+      }
+      private NamePart(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        initFields();
+        int mutable_bitField0_ = 0;
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+            com.google.protobuf.UnknownFieldSet.newBuilder();
+        try {
+          boolean done = false;
+          while (!done) {
+            int tag = input.readTag();
+            switch (tag) {
+              case 0:
+                done = true;
+                break;
+              default: {
+                if (!parseUnknownField(input, unknownFields,
+                                       extensionRegistry, tag)) {
+                  done = true;
+                }
+                break;
+              }
+              case 10: {
+                bitField0_ |= 0x00000001;
+                namePart_ = input.readBytes();
+                break;
+              }
+              case 16: {
+                bitField0_ |= 0x00000002;
+                isExtension_ = input.readBool();
+                break;
+              }
+            }
+          }
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          throw e.setUnfinishedMessage(this);
+        } catch (java.io.IOException e) {
+          throw new com.google.protobuf.InvalidProtocolBufferException(
+              e.getMessage()).setUnfinishedMessage(this);
+        } finally {
+          this.unknownFields = unknownFields.build();
+          makeExtensionsImmutable();
+        }
+      }
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
         return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor;
       }
-      
+
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable;
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.class, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder.class);
+      }
+
+      public static com.google.protobuf.Parser<NamePart> PARSER =
+          new com.google.protobuf.AbstractParser<NamePart>() {
+        public NamePart parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new NamePart(input, extensionRegistry);
+        }
+      };
+
+      @java.lang.Override
+      public com.google.protobuf.Parser<NamePart> getParserForType() {
+        return PARSER;
+      }
+
       private int bitField0_;
       // required string name_part = 1;
       public static final int NAME_PART_FIELD_NUMBER = 1;
       private java.lang.Object namePart_;
+      /**
+       * <code>required string name_part = 1;</code>
+       */
       public boolean hasNamePart() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public String getNamePart() {
+      /**
+       * <code>required string name_part = 1;</code>
+       */
+      public java.lang.String getNamePart() {
         java.lang.Object ref = namePart_;
-        if (ref instanceof String) {
-          return (String) ref;
+        if (ref instanceof java.lang.String) {
+          return (java.lang.String) ref;
         } else {
           com.google.protobuf.ByteString bs = 
               (com.google.protobuf.ByteString) ref;
-          String s = bs.toStringUtf8();
-          if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          java.lang.String s = bs.toStringUtf8();
+          if (bs.isValidUtf8()) {
             namePart_ = s;
           }
@@ -14788,9 +22756,14 @@
         }
       }
-      private com.google.protobuf.ByteString getNamePartBytes() {
+      /**
+       * <code>required string name_part = 1;</code>
+       */
+      public com.google.protobuf.ByteString
+          getNamePartBytes() {
         java.lang.Object ref = namePart_;
-        if (ref instanceof String) {
+        if (ref instanceof java.lang.String) {
           com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
           namePart_ = b;
           return b;
@@ -14799,15 +22772,21 @@
         }
       }
-      
+
       // required bool is_extension = 2;
       public static final int IS_EXTENSION_FIELD_NUMBER = 2;
       private boolean isExtension_;
+      /**
+       * <code>required bool is_extension = 2;</code>
+       */
       public boolean hasIsExtension() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
+      /**
+       * <code>required bool is_extension = 2;</code>
+       */
       public boolean getIsExtension() {
         return isExtension_;
       }
-      
+
       private void initFields() {
         namePart_ = "";
@@ -14818,5 +22797,5 @@
         byte isInitialized = memoizedIsInitialized;
         if (isInitialized != -1) return isInitialized == 1;
-        
+
         if (!hasNamePart()) {
           memoizedIsInitialized = 0;
@@ -14830,5 +22809,5 @@
         return true;
       }
-      
+
       public void writeTo(com.google.protobuf.CodedOutputStream output)
                           throws java.io.IOException {
@@ -14842,10 +22821,10 @@
         getUnknownFields().writeTo(output);
       }
-      
+
       private int memoizedSerializedSize = -1;
       public int getSerializedSize() {
         int size = memoizedSerializedSize;
         if (size != -1) return size;
-      
+
         size = 0;
         if (((bitField0_ & 0x00000001) == 0x00000001)) {
@@ -14861,5 +22840,5 @@
         return size;
       }
-      
+
       private static final long serialVersionUID = 0L;
       @java.lang.Override
@@ -14868,9 +22847,9 @@
         return super.writeReplace();
       }
-      
+
       public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
           com.google.protobuf.ByteString data)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return newBuilder().mergeFrom(data).buildParsed();
+        return PARSER.parseFrom(data);
       }
       public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
@@ -14878,10 +22857,9 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return newBuilder().mergeFrom(data, extensionRegistry)
-                 .buildParsed();
+        return PARSER.parseFrom(data, extensionRegistry);
       }
       public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(byte[] data)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return newBuilder().mergeFrom(data).buildParsed();
+        return PARSER.parseFrom(data);
       }
       public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
@@ -14889,10 +22867,9 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return newBuilder().mergeFrom(data, extensionRegistry)
-                 .buildParsed();
+        return PARSER.parseFrom(data, extensionRegistry);
       }
       public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(java.io.InputStream input)
           throws java.io.IOException {
-        return newBuilder().mergeFrom(input).buildParsed();
+        return PARSER.parseFrom(input);
       }
       public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
@@ -14900,15 +22877,9 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        return newBuilder().mergeFrom(input, extensionRegistry)
-                 .buildParsed();
+        return PARSER.parseFrom(input, extensionRegistry);
       }
       public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseDelimitedFrom(java.io.InputStream input)
           throws java.io.IOException {
-        Builder builder = newBuilder();
-        if (builder.mergeDelimitedFrom(input)) {
-          return builder.buildParsed();
-        } else {
-          return null;
-        }
+        return PARSER.parseDelimitedFrom(input);
       }
       public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseDelimitedFrom(
@@ -14916,15 +22887,10 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        Builder builder = newBuilder();
-        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-          return builder.buildParsed();
-        } else {
-          return null;
-        }
+        return PARSER.parseDelimitedFrom(input, extensionRegistry);
       }
       public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
           com.google.protobuf.CodedInputStream input)
           throws java.io.IOException {
-        return newBuilder().mergeFrom(input).buildParsed();
+        return PARSER.parseFrom(input);
       }
       public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
@@ -14932,8 +22898,7 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        return newBuilder().mergeFrom(input, extensionRegistry)
-                 .buildParsed();
-      }
-      
+        return PARSER.parseFrom(input, extensionRegistry);
+      }
+
       public static Builder newBuilder() { return Builder.create(); }
       public Builder newBuilderForType() { return newBuilder(); }
@@ -14942,5 +22907,5 @@
       }
       public Builder toBuilder() { return newBuilder(this); }
-      
+
       @java.lang.Override
       protected Builder newBuilderForType(
@@ -14949,4 +22914,15 @@
         return builder;
       }
+      /**
+       * Protobuf type {@code google.protobuf.UninterpretedOption.NamePart}
+       *
+       * <pre>
+       * The name of the uninterpreted option.  Each string represents a segment in
+       * a dot-separated name.  is_extension is true iff a segment represents an
+       * extension (denoted with parentheses in options specs in .proto files).
+       * E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
+       * "foo.(bar.baz).qux".
+       * </pre>
+       */
       public static final class Builder extends
           com.google.protobuf.GeneratedMessage.Builder<Builder>
@@ -14956,16 +22932,19 @@
           return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor;
         }
-        
+
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
-          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable;
-        }
-        
+          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable
+              .ensureFieldAccessorsInitialized(
+                  com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.class, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder.class);
+        }
+
         // Construct using com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.newBuilder()
         private Builder() {
           maybeForceBuilderInitialization();
         }
-        
-        private Builder(BuilderParent parent) {
+
+        private Builder(
+            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
           super(parent);
           maybeForceBuilderInitialization();
@@ -14978,5 +22957,5 @@
           return new Builder();
         }
-        
+
         public Builder clear() {
           super.clear();
@@ -14987,18 +22966,18 @@
           return this;
         }
-        
+
         public Builder clone() {
           return create().mergeFrom(buildPartial());
         }
-        
+
         public com.google.protobuf.Descriptors.Descriptor
             getDescriptorForType() {
-          return com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.getDescriptor();
-        }
-        
+          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor;
+        }
+
         public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart getDefaultInstanceForType() {
           return com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.getDefaultInstance();
         }
-        
+
         public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart build() {
           com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart result = buildPartial();
@@ -15008,15 +22987,5 @@
           return result;
         }
-        
-        private com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart buildParsed()
-            throws com.google.protobuf.InvalidProtocolBufferException {
-          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart result = buildPartial();
-          if (!result.isInitialized()) {
-            throw newUninitializedMessageException(
-              result).asInvalidProtocolBufferException();
-          }
-          return result;
-        }
-        
+
         public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart buildPartial() {
           com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart result = new com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart(this);
@@ -15035,5 +23004,5 @@
           return result;
         }
-        
+
         public Builder mergeFrom(com.google.protobuf.Message other) {
           if (other instanceof com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart) {
@@ -15044,9 +23013,11 @@
           }
         }
-        
+
         public Builder mergeFrom(com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart other) {
           if (other == com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.getDefaultInstance()) return this;
           if (other.hasNamePart()) {
-            setNamePart(other.getNamePart());
+            bitField0_ |= 0x00000001;
+            namePart_ = other.namePart_;
+            onChanged();
           }
           if (other.hasIsExtension()) {
@@ -15056,5 +23027,5 @@
           return this;
         }
-        
+
         public final boolean isInitialized() {
           if (!hasNamePart()) {
@@ -15068,60 +23039,67 @@
           return true;
         }
-        
+
         public Builder mergeFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
-          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-            com.google.protobuf.UnknownFieldSet.newBuilder(
-              this.getUnknownFields());
-          while (true) {
-            int tag = input.readTag();
-            switch (tag) {
-              case 0:
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
-              default: {
-                if (!parseUnknownField(input, unknownFields,
-                                       extensionRegistry, tag)) {
-                  this.setUnknownFields(unknownFields.build());
-                  onChanged();
-                  return this;
-                }
-                break;
-              }
-              case 10: {
-                bitField0_ |= 0x00000001;
-                namePart_ = input.readBytes();
-                break;
-              }
-              case 16: {
-                bitField0_ |= 0x00000002;
-                isExtension_ = input.readBool();
-                break;
-              }
+          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parsedMessage = null;
+          try {
+            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+            parsedMessage = (com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart) e.getUnfinishedMessage();
+            throw e;
+          } finally {
+            if (parsedMessage != null) {
+              mergeFrom(parsedMessage);
             }
           }
-        }
-        
+          return this;
+        }
         private int bitField0_;
-        
+
         // required string name_part = 1;
         private java.lang.Object namePart_ = "";
+        /**
+         * <code>required string name_part = 1;</code>
+         */
         public boolean hasNamePart() {
           return ((bitField0_ & 0x00000001) == 0x00000001);
         }
-        public String getNamePart() {
+        /**
+         * <code>required string name_part = 1;</code>
+         */
+        public java.lang.String getNamePart() {
           java.lang.Object ref = namePart_;
-          if (!(ref instanceof String)) {
-            String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          if (!(ref instanceof java.lang.String)) {
+            java.lang.String s = ((com.google.protobuf.ByteString) ref)
+                .toStringUtf8();
             namePart_ = s;
             return s;
           } else {
-            return (String) ref;
+            return (java.lang.String) ref;
           }
         }
-        public Builder setNamePart(String value) {
+        /**
+         * <code>required string name_part = 1;</code>
+         */
+        public com.google.protobuf.ByteString
+            getNamePartBytes() {
+          java.lang.Object ref = namePart_;
+          if (ref instanceof String) {
+            com.google.protobuf.ByteString b = 
+                com.google.protobuf.ByteString.copyFromUtf8(
+                    (java.lang.String) ref);
+            namePart_ = b;
+            return b;
+          } else {
+            return (com.google.protobuf.ByteString) ref;
+          }
+        }
+        /**
+         * <code>required string name_part = 1;</code>
+         */
+        public Builder setNamePart(
+            java.lang.String value) {
           if (value == null) {
     throw new NullPointerException();
@@ -15132,4 +23110,7 @@
           return this;
         }
+        /**
+         * <code>required string name_part = 1;</code>
+         */
         public Builder clearNamePart() {
           bitField0_ = (bitField0_ & ~0x00000001);
@@ -15138,18 +23119,35 @@
           return this;
         }
-        void setNamePart(com.google.protobuf.ByteString value) {
-          bitField0_ |= 0x00000001;
+        /**
+         * <code>required string name_part = 1;</code>
+         */
+        public Builder setNamePartBytes(
+            com.google.protobuf.ByteString value) {
+          if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
           namePart_ = value;
           onChanged();
-        }
-        
+          return this;
+        }
+
         // required bool is_extension = 2;
         private boolean isExtension_ ;
+        /**
+         * <code>required bool is_extension = 2;</code>
+         */
         public boolean hasIsExtension() {
           return ((bitField0_ & 0x00000002) == 0x00000002);
         }
+        /**
+         * <code>required bool is_extension = 2;</code>
+         */
         public boolean getIsExtension() {
           return isExtension_;
         }
+        /**
+         * <code>required bool is_extension = 2;</code>
+         */
         public Builder setIsExtension(boolean value) {
           bitField0_ |= 0x00000002;
@@ -15158,4 +23156,7 @@
           return this;
         }
+        /**
+         * <code>required bool is_extension = 2;</code>
+         */
         public Builder clearIsExtension() {
           bitField0_ = (bitField0_ & ~0x00000002);
@@ -15164,53 +23165,84 @@
           return this;
         }
-        
+
         // @@protoc_insertion_point(builder_scope:google.protobuf.UninterpretedOption.NamePart)
       }
-      
+
       static {
         defaultInstance = new NamePart(true);
         defaultInstance.initFields();
       }
-      
+
       // @@protoc_insertion_point(class_scope:google.protobuf.UninterpretedOption.NamePart)
     }
-    
+
     private int bitField0_;
     // repeated .google.protobuf.UninterpretedOption.NamePart name = 2;
     public static final int NAME_FIELD_NUMBER = 2;
     private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> name_;
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+     */
     public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> getNameList() {
       return name_;
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+     */
     public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> 
         getNameOrBuilderList() {
       return name_;
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+     */
     public int getNameCount() {
       return name_.size();
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+     */
     public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart getName(int index) {
       return name_.get(index);
     }
+    /**
+     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+     */
     public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder getNameOrBuilder(
         int index) {
       return name_.get(index);
     }
-    
+
     // optional string identifier_value = 3;
     public static final int IDENTIFIER_VALUE_FIELD_NUMBER = 3;
     private java.lang.Object identifierValue_;
+    /**
+     * <code>optional string identifier_value = 3;</code>
+     *
+     * <pre>
+     * The value of the uninterpreted option, in whatever type the tokenizer
+     * identified it as during parsing. Exactly one of these should be set.
+     * </pre>
+     */
     public boolean hasIdentifierValue() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
-    public String getIdentifierValue() {
+    /**
+     * <code>optional string identifier_value = 3;</code>
+     *
+     * <pre>
+     * The value of the uninterpreted option, in whatever type the tokenizer
+     * identified it as during parsing. Exactly one of these should be set.
+     * </pre>
+     */
+    public java.lang.String getIdentifierValue() {
       java.lang.Object ref = identifierValue_;
-      if (ref instanceof String) {
-        return (String) ref;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
           identifierValue_ = s;
         }
@@ -15218,9 +23250,19 @@
       }
     }
-    private com.google.protobuf.ByteString getIdentifierValueBytes() {
+    /**
+     * <code>optional string identifier_value = 3;</code>
+     *
+     * <pre>
+     * The value of the uninterpreted option, in whatever type the tokenizer
+     * identified it as during parsing. Exactly one of these should be set.
+     * </pre>
+     */
+    public com.google.protobuf.ByteString
+        getIdentifierValueBytes() {
       java.lang.Object ref = identifierValue_;
-      if (ref instanceof String) {
+      if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
         identifierValue_ = b;
         return b;
@@ -15229,60 +23271,90 @@
       }
     }
-    
+
     // optional uint64 positive_int_value = 4;
     public static final int POSITIVE_INT_VALUE_FIELD_NUMBER = 4;
     private long positiveIntValue_;
+    /**
+     * <code>optional uint64 positive_int_value = 4;</code>
+     */
     public boolean hasPositiveIntValue() {
       return ((bitField0_ & 0x00000002) == 0x00000002);
     }
+    /**
+     * <code>optional uint64 positive_int_value = 4;</code>
+     */
     public long getPositiveIntValue() {
       return positiveIntValue_;
     }
-    
+
     // optional int64 negative_int_value = 5;
     public static final int NEGATIVE_INT_VALUE_FIELD_NUMBER = 5;
     private long negativeIntValue_;
+    /**
+     * <code>optional int64 negative_int_value = 5;</code>
+     */
     public boolean hasNegativeIntValue() {
       return ((bitField0_ & 0x00000004) == 0x00000004);
     }
+    /**
+     * <code>optional int64 negative_int_value = 5;</code>
+     */
     public long getNegativeIntValue() {
       return negativeIntValue_;
     }
-    
+
     // optional double double_value = 6;
     public static final int DOUBLE_VALUE_FIELD_NUMBER = 6;
     private double doubleValue_;
+    /**
+     * <code>optional double double_value = 6;</code>
+     */
     public boolean hasDoubleValue() {
       return ((bitField0_ & 0x00000008) == 0x00000008);
     }
+    /**
+     * <code>optional double double_value = 6;</code>
+     */
     public double getDoubleValue() {
       return doubleValue_;
     }
-    
+
     // optional bytes string_value = 7;
     public static final int STRING_VALUE_FIELD_NUMBER = 7;
     private com.google.protobuf.ByteString stringValue_;
+    /**
+     * <code>optional bytes string_value = 7;</code>
+     */
     public boolean hasStringValue() {
       return ((bitField0_ & 0x00000010) == 0x00000010);
     }
+    /**
+     * <code>optional bytes string_value = 7;</code>
+     */
     public com.google.protobuf.ByteString getStringValue() {
       return stringValue_;
     }
-    
+
     // optional string aggregate_value = 8;
     public static final int AGGREGATE_VALUE_FIELD_NUMBER = 8;
     private java.lang.Object aggregateValue_;
+    /**
+     * <code>optional string aggregate_value = 8;</code>
+     */
     public boolean hasAggregateValue() {
       return ((bitField0_ & 0x00000020) == 0x00000020);
     }
-    public String getAggregateValue() {
+    /**
+     * <code>optional string aggregate_value = 8;</code>
+     */
+    public java.lang.String getAggregateValue() {
       java.lang.Object ref = aggregateValue_;
-      if (ref instanceof String) {
-        return (String) ref;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
           aggregateValue_ = s;
         }
@@ -15290,9 +23362,14 @@
       }
     }
-    private com.google.protobuf.ByteString getAggregateValueBytes() {
+    /**
+     * <code>optional string aggregate_value = 8;</code>
+     */
+    public com.google.protobuf.ByteString
+        getAggregateValueBytes() {
       java.lang.Object ref = aggregateValue_;
-      if (ref instanceof String) {
+      if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
         aggregateValue_ = b;
         return b;
@@ -15301,5 +23378,5 @@
       }
     }
-    
+
     private void initFields() {
       name_ = java.util.Collections.emptyList();
@@ -15315,5 +23392,5 @@
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
-      
+
       for (int i = 0; i < getNameCount(); i++) {
         if (!getName(i).isInitialized()) {
@@ -15325,5 +23402,5 @@
       return true;
     }
-    
+
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
@@ -15352,10 +23429,10 @@
       getUnknownFields().writeTo(output);
     }
-    
+
     private int memoizedSerializedSize = -1;
     public int getSerializedSize() {
       int size = memoizedSerializedSize;
       if (size != -1) return size;
-    
+
       size = 0;
       for (int i = 0; i < name_.size(); i++) {
@@ -15391,5 +23468,5 @@
       return size;
     }
-    
+
     private static final long serialVersionUID = 0L;
     @java.lang.Override
@@ -15398,9 +23475,9 @@
       return super.writeReplace();
     }
-    
+
     public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
@@ -15408,10 +23485,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
@@ -15419,10 +23495,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
@@ -15430,15 +23505,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseDelimitedFrom(
@@ -15446,15 +23515,10 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
@@ -15462,8 +23526,7 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
@@ -15472,5 +23535,5 @@
     }
     public Builder toBuilder() { return newBuilder(this); }
-    
+
     @java.lang.Override
     protected Builder newBuilderForType(
@@ -15479,4 +23542,16 @@
       return builder;
     }
+    /**
+     * Protobuf type {@code google.protobuf.UninterpretedOption}
+     *
+     * <pre>
+     * A message representing a option the parser does not recognize. This only
+     * appears in options protos created by the compiler::Parser class.
+     * DescriptorPool resolves these when building Descriptor objects. Therefore,
+     * options protos in descriptor objects (e.g. returned by Descriptor::options(),
+     * or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
+     * in them.
+     * </pre>
+     */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
@@ -15486,16 +23561,19 @@
         return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_descriptor;
       }
-      
+
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable;
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.UninterpretedOption.class, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder.class);
+      }
+
       // Construct using com.google.protobuf.DescriptorProtos.UninterpretedOption.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
-      
-      private Builder(BuilderParent parent) {
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
         super(parent);
         maybeForceBuilderInitialization();
@@ -15509,5 +23587,5 @@
         return new Builder();
       }
-      
+
       public Builder clear() {
         super.clear();
@@ -15532,18 +23610,18 @@
         return this;
       }
-      
+
       public Builder clone() {
         return create().mergeFrom(buildPartial());
       }
-      
+
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.google.protobuf.DescriptorProtos.UninterpretedOption.getDescriptor();
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_descriptor;
+      }
+
       public com.google.protobuf.DescriptorProtos.UninterpretedOption getDefaultInstanceForType() {
         return com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance();
       }
-      
+
       public com.google.protobuf.DescriptorProtos.UninterpretedOption build() {
         com.google.protobuf.DescriptorProtos.UninterpretedOption result = buildPartial();
@@ -15553,15 +23631,5 @@
         return result;
       }
-      
-      private com.google.protobuf.DescriptorProtos.UninterpretedOption buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        com.google.protobuf.DescriptorProtos.UninterpretedOption result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
+
       public com.google.protobuf.DescriptorProtos.UninterpretedOption buildPartial() {
         com.google.protobuf.DescriptorProtos.UninterpretedOption result = new com.google.protobuf.DescriptorProtos.UninterpretedOption(this);
@@ -15605,5 +23673,5 @@
         return result;
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.Message other) {
         if (other instanceof com.google.protobuf.DescriptorProtos.UninterpretedOption) {
@@ -15614,5 +23682,5 @@
         }
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.DescriptorProtos.UninterpretedOption other) {
         if (other == com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance()) return this;
@@ -15644,5 +23712,7 @@
         }
         if (other.hasIdentifierValue()) {
-          setIdentifierValue(other.getIdentifierValue());
+          bitField0_ |= 0x00000002;
+          identifierValue_ = other.identifierValue_;
+          onChanged();
         }
         if (other.hasPositiveIntValue()) {
@@ -15659,10 +23729,12 @@
         }
         if (other.hasAggregateValue()) {
-          setAggregateValue(other.getAggregateValue());
+          bitField0_ |= 0x00000040;
+          aggregateValue_ = other.aggregateValue_;
+          onChanged();
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
-      
+
       public final boolean isInitialized() {
         for (int i = 0; i < getNameCount(); i++) {
@@ -15674,70 +23746,24 @@
         return true;
       }
-      
+
       public Builder mergeFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder(
-            this.getUnknownFields());
-        while (true) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              this.setUnknownFields(unknownFields.build());
-              onChanged();
-              return this;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
-              }
-              break;
-            }
-            case 18: {
-              com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder subBuilder = com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addName(subBuilder.buildPartial());
-              break;
-            }
-            case 26: {
-              bitField0_ |= 0x00000002;
-              identifierValue_ = input.readBytes();
-              break;
-            }
-            case 32: {
-              bitField0_ |= 0x00000004;
-              positiveIntValue_ = input.readUInt64();
-              break;
-            }
-            case 40: {
-              bitField0_ |= 0x00000008;
-              negativeIntValue_ = input.readInt64();
-              break;
-            }
-            case 49: {
-              bitField0_ |= 0x00000010;
-              doubleValue_ = input.readDouble();
-              break;
-            }
-            case 58: {
-              bitField0_ |= 0x00000020;
-              stringValue_ = input.readBytes();
-              break;
-            }
-            case 66: {
-              bitField0_ |= 0x00000040;
-              aggregateValue_ = input.readBytes();
-              break;
-            }
+        com.google.protobuf.DescriptorProtos.UninterpretedOption parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.google.protobuf.DescriptorProtos.UninterpretedOption) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
         }
-      }
-      
+        return this;
+      }
       private int bitField0_;
-      
+
       // repeated .google.protobuf.UninterpretedOption.NamePart name = 2;
       private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> name_ =
@@ -15749,8 +23775,11 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> nameBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> getNameList() {
         if (nameBuilder_ == null) {
@@ -15760,4 +23789,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+       */
       public int getNameCount() {
         if (nameBuilder_ == null) {
@@ -15767,4 +23799,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart getName(int index) {
         if (nameBuilder_ == null) {
@@ -15774,4 +23809,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+       */
       public Builder setName(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart value) {
@@ -15788,4 +23826,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+       */
       public Builder setName(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder builderForValue) {
@@ -15799,4 +23840,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+       */
       public Builder addName(com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart value) {
         if (nameBuilder_ == null) {
@@ -15812,4 +23856,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+       */
       public Builder addName(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart value) {
@@ -15826,4 +23873,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+       */
       public Builder addName(
           com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder builderForValue) {
@@ -15837,4 +23887,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+       */
       public Builder addName(
           int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder builderForValue) {
@@ -15848,4 +23901,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+       */
       public Builder addAllName(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> values) {
@@ -15859,4 +23915,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+       */
       public Builder clearName() {
         if (nameBuilder_ == null) {
@@ -15869,4 +23928,7 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+       */
       public Builder removeName(int index) {
         if (nameBuilder_ == null) {
@@ -15879,8 +23941,14 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder getNameBuilder(
           int index) {
         return getNameFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder getNameOrBuilder(
           int index) {
@@ -15890,4 +23958,7 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> 
            getNameOrBuilderList() {
@@ -15898,8 +23969,14 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder addNameBuilder() {
         return getNameFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+       */
       public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder addNameBuilder(
           int index) {
@@ -15907,4 +23984,7 @@
             index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder> 
            getNameBuilderList() {
@@ -15925,21 +24005,68 @@
         return nameBuilder_;
       }
-      
+
       // optional string identifier_value = 3;
       private java.lang.Object identifierValue_ = "";
+      /**
+       * <code>optional string identifier_value = 3;</code>
+       *
+       * <pre>
+       * The value of the uninterpreted option, in whatever type the tokenizer
+       * identified it as during parsing. Exactly one of these should be set.
+       * </pre>
+       */
       public boolean hasIdentifierValue() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
-      public String getIdentifierValue() {
+      /**
+       * <code>optional string identifier_value = 3;</code>
+       *
+       * <pre>
+       * The value of the uninterpreted option, in whatever type the tokenizer
+       * identified it as during parsing. Exactly one of these should be set.
+       * </pre>
+       */
+      public java.lang.String getIdentifierValue() {
         java.lang.Object ref = identifierValue_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           identifierValue_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setIdentifierValue(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string identifier_value = 3;</code>
+       *
+       * <pre>
+       * The value of the uninterpreted option, in whatever type the tokenizer
+       * identified it as during parsing. Exactly one of these should be set.
+       * </pre>
+       */
+      public com.google.protobuf.ByteString
+          getIdentifierValueBytes() {
+        java.lang.Object ref = identifierValue_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          identifierValue_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string identifier_value = 3;</code>
+       *
+       * <pre>
+       * The value of the uninterpreted option, in whatever type the tokenizer
+       * identified it as during parsing. Exactly one of these should be set.
+       * </pre>
+       */
+      public Builder setIdentifierValue(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -15950,4 +24077,12 @@
         return this;
       }
+      /**
+       * <code>optional string identifier_value = 3;</code>
+       *
+       * <pre>
+       * The value of the uninterpreted option, in whatever type the tokenizer
+       * identified it as during parsing. Exactly one of these should be set.
+       * </pre>
+       */
       public Builder clearIdentifierValue() {
         bitField0_ = (bitField0_ & ~0x00000002);
@@ -15956,18 +24091,40 @@
         return this;
       }
-      void setIdentifierValue(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000002;
+      /**
+       * <code>optional string identifier_value = 3;</code>
+       *
+       * <pre>
+       * The value of the uninterpreted option, in whatever type the tokenizer
+       * identified it as during parsing. Exactly one of these should be set.
+       * </pre>
+       */
+      public Builder setIdentifierValueBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000002;
         identifierValue_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // optional uint64 positive_int_value = 4;
       private long positiveIntValue_ ;
+      /**
+       * <code>optional uint64 positive_int_value = 4;</code>
+       */
       public boolean hasPositiveIntValue() {
         return ((bitField0_ & 0x00000004) == 0x00000004);
       }
+      /**
+       * <code>optional uint64 positive_int_value = 4;</code>
+       */
       public long getPositiveIntValue() {
         return positiveIntValue_;
       }
+      /**
+       * <code>optional uint64 positive_int_value = 4;</code>
+       */
       public Builder setPositiveIntValue(long value) {
         bitField0_ |= 0x00000004;
@@ -15976,4 +24133,7 @@
         return this;
       }
+      /**
+       * <code>optional uint64 positive_int_value = 4;</code>
+       */
       public Builder clearPositiveIntValue() {
         bitField0_ = (bitField0_ & ~0x00000004);
@@ -15982,13 +24142,22 @@
         return this;
       }
-      
+
       // optional int64 negative_int_value = 5;
       private long negativeIntValue_ ;
+      /**
+       * <code>optional int64 negative_int_value = 5;</code>
+       */
       public boolean hasNegativeIntValue() {
         return ((bitField0_ & 0x00000008) == 0x00000008);
       }
+      /**
+       * <code>optional int64 negative_int_value = 5;</code>
+       */
       public long getNegativeIntValue() {
         return negativeIntValue_;
       }
+      /**
+       * <code>optional int64 negative_int_value = 5;</code>
+       */
       public Builder setNegativeIntValue(long value) {
         bitField0_ |= 0x00000008;
@@ -15997,4 +24166,7 @@
         return this;
       }
+      /**
+       * <code>optional int64 negative_int_value = 5;</code>
+       */
       public Builder clearNegativeIntValue() {
         bitField0_ = (bitField0_ & ~0x00000008);
@@ -16003,13 +24175,22 @@
         return this;
       }
-      
+
       // optional double double_value = 6;
       private double doubleValue_ ;
+      /**
+       * <code>optional double double_value = 6;</code>
+       */
       public boolean hasDoubleValue() {
         return ((bitField0_ & 0x00000010) == 0x00000010);
       }
+      /**
+       * <code>optional double double_value = 6;</code>
+       */
       public double getDoubleValue() {
         return doubleValue_;
       }
+      /**
+       * <code>optional double double_value = 6;</code>
+       */
       public Builder setDoubleValue(double value) {
         bitField0_ |= 0x00000010;
@@ -16018,4 +24199,7 @@
         return this;
       }
+      /**
+       * <code>optional double double_value = 6;</code>
+       */
       public Builder clearDoubleValue() {
         bitField0_ = (bitField0_ & ~0x00000010);
@@ -16024,13 +24208,22 @@
         return this;
       }
-      
+
       // optional bytes string_value = 7;
       private com.google.protobuf.ByteString stringValue_ = com.google.protobuf.ByteString.EMPTY;
+      /**
+       * <code>optional bytes string_value = 7;</code>
+       */
       public boolean hasStringValue() {
         return ((bitField0_ & 0x00000020) == 0x00000020);
       }
+      /**
+       * <code>optional bytes string_value = 7;</code>
+       */
       public com.google.protobuf.ByteString getStringValue() {
         return stringValue_;
       }
+      /**
+       * <code>optional bytes string_value = 7;</code>
+       */
       public Builder setStringValue(com.google.protobuf.ByteString value) {
         if (value == null) {
@@ -16042,4 +24235,7 @@
         return this;
       }
+      /**
+       * <code>optional bytes string_value = 7;</code>
+       */
       public Builder clearStringValue() {
         bitField0_ = (bitField0_ & ~0x00000020);
@@ -16048,21 +24244,48 @@
         return this;
       }
-      
+
       // optional string aggregate_value = 8;
       private java.lang.Object aggregateValue_ = "";
+      /**
+       * <code>optional string aggregate_value = 8;</code>
+       */
       public boolean hasAggregateValue() {
         return ((bitField0_ & 0x00000040) == 0x00000040);
       }
-      public String getAggregateValue() {
+      /**
+       * <code>optional string aggregate_value = 8;</code>
+       */
+      public java.lang.String getAggregateValue() {
         java.lang.Object ref = aggregateValue_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           aggregateValue_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setAggregateValue(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string aggregate_value = 8;</code>
+       */
+      public com.google.protobuf.ByteString
+          getAggregateValueBytes() {
+        java.lang.Object ref = aggregateValue_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          aggregateValue_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string aggregate_value = 8;</code>
+       */
+      public Builder setAggregateValue(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -16073,4 +24296,7 @@
         return this;
       }
+      /**
+       * <code>optional string aggregate_value = 8;</code>
+       */
       public Builder clearAggregateValue() {
         bitField0_ = (bitField0_ & ~0x00000040);
@@ -16079,157 +24305,1061 @@
         return this;
       }
-      void setAggregateValue(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000040;
+      /**
+       * <code>optional string aggregate_value = 8;</code>
+       */
+      public Builder setAggregateValueBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000040;
         aggregateValue_ = value;
         onChanged();
-      }
-      
+        return this;
+      }
+
       // @@protoc_insertion_point(builder_scope:google.protobuf.UninterpretedOption)
     }
-    
+
     static {
       defaultInstance = new UninterpretedOption(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:google.protobuf.UninterpretedOption)
   }
-  
+
   public interface SourceCodeInfoOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
-    
+
     // repeated .google.protobuf.SourceCodeInfo.Location location = 1;
+    /**
+     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+     *
+     * <pre>
+     * A Location identifies a piece of source code in a .proto file which
+     * corresponds to a particular definition.  This information is intended
+     * to be useful to IDEs, code indexers, documentation generators, and similar
+     * tools.
+     *
+     * For example, say we have a file like:
+     *   message Foo {
+     *     optional string foo = 1;
+     *   }
+     * Let's look at just the field definition:
+     *   optional string foo = 1;
+     *   ^       ^^     ^^  ^  ^^^
+     *   a       bc     de  f  ghi
+     * We have the following locations:
+     *   span   path               represents
+     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+     *
+     * Notes:
+     * - A location may refer to a repeated field itself (i.e. not to any
+     *   particular index within it).  This is used whenever a set of elements are
+     *   logically enclosed in a single code segment.  For example, an entire
+     *   extend block (possibly containing multiple extension definitions) will
+     *   have an outer location whose path refers to the "extensions" repeated
+     *   field without an index.
+     * - Multiple locations may have the same path.  This happens when a single
+     *   logical declaration is spread out across multiple places.  The most
+     *   obvious example is the "extend" block again -- there may be multiple
+     *   extend blocks in the same scope, each of which will have the same path.
+     * - A location's span is not always a subset of its parent's span.  For
+     *   example, the "extendee" of an extension declaration appears at the
+     *   beginning of the "extend" block and is shared by all extensions within
+     *   the block.
+     * - Just because a location's span is a subset of some other location's span
+     *   does not mean that it is a descendent.  For example, a "group" defines
+     *   both a type and a field in a single declaration.  Thus, the locations
+     *   corresponding to the type and field and their components will overlap.
+     * - Code which tries to interpret locations should probably be designed to
+     *   ignore those that it doesn't understand, as more types of locations could
+     *   be recorded in the future.
+     * </pre>
+     */
     java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> 
         getLocationList();
+    /**
+     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+     *
+     * <pre>
+     * A Location identifies a piece of source code in a .proto file which
+     * corresponds to a particular definition.  This information is intended
+     * to be useful to IDEs, code indexers, documentation generators, and similar
+     * tools.
+     *
+     * For example, say we have a file like:
+     *   message Foo {
+     *     optional string foo = 1;
+     *   }
+     * Let's look at just the field definition:
+     *   optional string foo = 1;
+     *   ^       ^^     ^^  ^  ^^^
+     *   a       bc     de  f  ghi
+     * We have the following locations:
+     *   span   path               represents
+     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+     *
+     * Notes:
+     * - A location may refer to a repeated field itself (i.e. not to any
+     *   particular index within it).  This is used whenever a set of elements are
+     *   logically enclosed in a single code segment.  For example, an entire
+     *   extend block (possibly containing multiple extension definitions) will
+     *   have an outer location whose path refers to the "extensions" repeated
+     *   field without an index.
+     * - Multiple locations may have the same path.  This happens when a single
+     *   logical declaration is spread out across multiple places.  The most
+     *   obvious example is the "extend" block again -- there may be multiple
+     *   extend blocks in the same scope, each of which will have the same path.
+     * - A location's span is not always a subset of its parent's span.  For
+     *   example, the "extendee" of an extension declaration appears at the
+     *   beginning of the "extend" block and is shared by all extensions within
+     *   the block.
+     * - Just because a location's span is a subset of some other location's span
+     *   does not mean that it is a descendent.  For example, a "group" defines
+     *   both a type and a field in a single declaration.  Thus, the locations
+     *   corresponding to the type and field and their components will overlap.
+     * - Code which tries to interpret locations should probably be designed to
+     *   ignore those that it doesn't understand, as more types of locations could
+     *   be recorded in the future.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location getLocation(int index);
+    /**
+     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+     *
+     * <pre>
+     * A Location identifies a piece of source code in a .proto file which
+     * corresponds to a particular definition.  This information is intended
+     * to be useful to IDEs, code indexers, documentation generators, and similar
+     * tools.
+     *
+     * For example, say we have a file like:
+     *   message Foo {
+     *     optional string foo = 1;
+     *   }
+     * Let's look at just the field definition:
+     *   optional string foo = 1;
+     *   ^       ^^     ^^  ^  ^^^
+     *   a       bc     de  f  ghi
+     * We have the following locations:
+     *   span   path               represents
+     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+     *
+     * Notes:
+     * - A location may refer to a repeated field itself (i.e. not to any
+     *   particular index within it).  This is used whenever a set of elements are
+     *   logically enclosed in a single code segment.  For example, an entire
+     *   extend block (possibly containing multiple extension definitions) will
+     *   have an outer location whose path refers to the "extensions" repeated
+     *   field without an index.
+     * - Multiple locations may have the same path.  This happens when a single
+     *   logical declaration is spread out across multiple places.  The most
+     *   obvious example is the "extend" block again -- there may be multiple
+     *   extend blocks in the same scope, each of which will have the same path.
+     * - A location's span is not always a subset of its parent's span.  For
+     *   example, the "extendee" of an extension declaration appears at the
+     *   beginning of the "extend" block and is shared by all extensions within
+     *   the block.
+     * - Just because a location's span is a subset of some other location's span
+     *   does not mean that it is a descendent.  For example, a "group" defines
+     *   both a type and a field in a single declaration.  Thus, the locations
+     *   corresponding to the type and field and their components will overlap.
+     * - Code which tries to interpret locations should probably be designed to
+     *   ignore those that it doesn't understand, as more types of locations could
+     *   be recorded in the future.
+     * </pre>
+     */
     int getLocationCount();
+    /**
+     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+     *
+     * <pre>
+     * A Location identifies a piece of source code in a .proto file which
+     * corresponds to a particular definition.  This information is intended
+     * to be useful to IDEs, code indexers, documentation generators, and similar
+     * tools.
+     *
+     * For example, say we have a file like:
+     *   message Foo {
+     *     optional string foo = 1;
+     *   }
+     * Let's look at just the field definition:
+     *   optional string foo = 1;
+     *   ^       ^^     ^^  ^  ^^^
+     *   a       bc     de  f  ghi
+     * We have the following locations:
+     *   span   path               represents
+     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+     *
+     * Notes:
+     * - A location may refer to a repeated field itself (i.e. not to any
+     *   particular index within it).  This is used whenever a set of elements are
+     *   logically enclosed in a single code segment.  For example, an entire
+     *   extend block (possibly containing multiple extension definitions) will
+     *   have an outer location whose path refers to the "extensions" repeated
+     *   field without an index.
+     * - Multiple locations may have the same path.  This happens when a single
+     *   logical declaration is spread out across multiple places.  The most
+     *   obvious example is the "extend" block again -- there may be multiple
+     *   extend blocks in the same scope, each of which will have the same path.
+     * - A location's span is not always a subset of its parent's span.  For
+     *   example, the "extendee" of an extension declaration appears at the
+     *   beginning of the "extend" block and is shared by all extensions within
+     *   the block.
+     * - Just because a location's span is a subset of some other location's span
+     *   does not mean that it is a descendent.  For example, a "group" defines
+     *   both a type and a field in a single declaration.  Thus, the locations
+     *   corresponding to the type and field and their components will overlap.
+     * - Code which tries to interpret locations should probably be designed to
+     *   ignore those that it doesn't understand, as more types of locations could
+     *   be recorded in the future.
+     * </pre>
+     */
     java.util.List<? extends com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> 
         getLocationOrBuilderList();
+    /**
+     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+     *
+     * <pre>
+     * A Location identifies a piece of source code in a .proto file which
+     * corresponds to a particular definition.  This information is intended
+     * to be useful to IDEs, code indexers, documentation generators, and similar
+     * tools.
+     *
+     * For example, say we have a file like:
+     *   message Foo {
+     *     optional string foo = 1;
+     *   }
+     * Let's look at just the field definition:
+     *   optional string foo = 1;
+     *   ^       ^^     ^^  ^  ^^^
+     *   a       bc     de  f  ghi
+     * We have the following locations:
+     *   span   path               represents
+     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+     *
+     * Notes:
+     * - A location may refer to a repeated field itself (i.e. not to any
+     *   particular index within it).  This is used whenever a set of elements are
+     *   logically enclosed in a single code segment.  For example, an entire
+     *   extend block (possibly containing multiple extension definitions) will
+     *   have an outer location whose path refers to the "extensions" repeated
+     *   field without an index.
+     * - Multiple locations may have the same path.  This happens when a single
+     *   logical declaration is spread out across multiple places.  The most
+     *   obvious example is the "extend" block again -- there may be multiple
+     *   extend blocks in the same scope, each of which will have the same path.
+     * - A location's span is not always a subset of its parent's span.  For
+     *   example, the "extendee" of an extension declaration appears at the
+     *   beginning of the "extend" block and is shared by all extensions within
+     *   the block.
+     * - Just because a location's span is a subset of some other location's span
+     *   does not mean that it is a descendent.  For example, a "group" defines
+     *   both a type and a field in a single declaration.  Thus, the locations
+     *   corresponding to the type and field and their components will overlap.
+     * - Code which tries to interpret locations should probably be designed to
+     *   ignore those that it doesn't understand, as more types of locations could
+     *   be recorded in the future.
+     * </pre>
+     */
     com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder getLocationOrBuilder(
         int index);
   }
+  /**
+   * Protobuf type {@code google.protobuf.SourceCodeInfo}
+   *
+   * <pre>
+   * Encapsulates information about the original source file from which a
+   * FileDescriptorProto was generated.
+   * </pre>
+   */
   public static final class SourceCodeInfo extends
       com.google.protobuf.GeneratedMessage
       implements SourceCodeInfoOrBuilder {
     // Use SourceCodeInfo.newBuilder() to construct.
-    private SourceCodeInfo(Builder builder) {
+    private SourceCodeInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
       super(builder);
-    }
-    private SourceCodeInfo(boolean noInit) {}
-    
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private SourceCodeInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
     private static final SourceCodeInfo defaultInstance;
     public static SourceCodeInfo getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public SourceCodeInfo getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private SourceCodeInfo(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+                location_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              location_.add(input.readMessage(com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.PARSER, extensionRegistry));
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+          location_ = java.util.Collections.unmodifiableList(location_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
       return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_descriptor;
     }
-    
+
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable;
-    }
-    
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.protobuf.DescriptorProtos.SourceCodeInfo.class, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<SourceCodeInfo> PARSER =
+        new com.google.protobuf.AbstractParser<SourceCodeInfo>() {
+      public SourceCodeInfo parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SourceCodeInfo(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<SourceCodeInfo> getParserForType() {
+      return PARSER;
+    }
+
     public interface LocationOrBuilder
         extends com.google.protobuf.MessageOrBuilder {
-      
+
       // repeated int32 path = 1 [packed = true];
+      /**
+       * <code>repeated int32 path = 1 [packed = true];</code>
+       *
+       * <pre>
+       * Identifies which part of the FileDescriptorProto was defined at this
+       * location.
+       *
+       * Each element is a field number or an index.  They form a path from
+       * the root FileDescriptorProto to the place where the definition.  For
+       * example, this path:
+       *   [ 4, 3, 2, 7, 1 ]
+       * refers to:
+       *   file.message_type(3)  // 4, 3
+       *       .field(7)         // 2, 7
+       *       .name()           // 1
+       * This is because FileDescriptorProto.message_type has field number 4:
+       *   repeated DescriptorProto message_type = 4;
+       * and DescriptorProto.field has field number 2:
+       *   repeated FieldDescriptorProto field = 2;
+       * and FieldDescriptorProto.name has field number 1:
+       *   optional string name = 1;
+       *
+       * Thus, the above path gives the location of a field name.  If we removed
+       * the last element:
+       *   [ 4, 3, 2, 7 ]
+       * this path refers to the whole field declaration (from the beginning
+       * of the label to the terminating semicolon).
+       * </pre>
+       */
       java.util.List<java.lang.Integer> getPathList();
+      /**
+       * <code>repeated int32 path = 1 [packed = true];</code>
+       *
+       * <pre>
+       * Identifies which part of the FileDescriptorProto was defined at this
+       * location.
+       *
+       * Each element is a field number or an index.  They form a path from
+       * the root FileDescriptorProto to the place where the definition.  For
+       * example, this path:
+       *   [ 4, 3, 2, 7, 1 ]
+       * refers to:
+       *   file.message_type(3)  // 4, 3
+       *       .field(7)         // 2, 7
+       *       .name()           // 1
+       * This is because FileDescriptorProto.message_type has field number 4:
+       *   repeated DescriptorProto message_type = 4;
+       * and DescriptorProto.field has field number 2:
+       *   repeated FieldDescriptorProto field = 2;
+       * and FieldDescriptorProto.name has field number 1:
+       *   optional string name = 1;
+       *
+       * Thus, the above path gives the location of a field name.  If we removed
+       * the last element:
+       *   [ 4, 3, 2, 7 ]
+       * this path refers to the whole field declaration (from the beginning
+       * of the label to the terminating semicolon).
+       * </pre>
+       */
       int getPathCount();
+      /**
+       * <code>repeated int32 path = 1 [packed = true];</code>
+       *
+       * <pre>
+       * Identifies which part of the FileDescriptorProto was defined at this
+       * location.
+       *
+       * Each element is a field number or an index.  They form a path from
+       * the root FileDescriptorProto to the place where the definition.  For
+       * example, this path:
+       *   [ 4, 3, 2, 7, 1 ]
+       * refers to:
+       *   file.message_type(3)  // 4, 3
+       *       .field(7)         // 2, 7
+       *       .name()           // 1
+       * This is because FileDescriptorProto.message_type has field number 4:
+       *   repeated DescriptorProto message_type = 4;
+       * and DescriptorProto.field has field number 2:
+       *   repeated FieldDescriptorProto field = 2;
+       * and FieldDescriptorProto.name has field number 1:
+       *   optional string name = 1;
+       *
+       * Thus, the above path gives the location of a field name.  If we removed
+       * the last element:
+       *   [ 4, 3, 2, 7 ]
+       * this path refers to the whole field declaration (from the beginning
+       * of the label to the terminating semicolon).
+       * </pre>
+       */
       int getPath(int index);
-      
+
       // repeated int32 span = 2 [packed = true];
+      /**
+       * <code>repeated int32 span = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Always has exactly three or four elements: start line, start column,
+       * end line (optional, otherwise assumed same as start line), end column.
+       * These are packed into a single field for efficiency.  Note that line
+       * and column numbers are zero-based -- typically you will want to add
+       * 1 to each before displaying to a user.
+       * </pre>
+       */
       java.util.List<java.lang.Integer> getSpanList();
+      /**
+       * <code>repeated int32 span = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Always has exactly three or four elements: start line, start column,
+       * end line (optional, otherwise assumed same as start line), end column.
+       * These are packed into a single field for efficiency.  Note that line
+       * and column numbers are zero-based -- typically you will want to add
+       * 1 to each before displaying to a user.
+       * </pre>
+       */
       int getSpanCount();
+      /**
+       * <code>repeated int32 span = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Always has exactly three or four elements: start line, start column,
+       * end line (optional, otherwise assumed same as start line), end column.
+       * These are packed into a single field for efficiency.  Note that line
+       * and column numbers are zero-based -- typically you will want to add
+       * 1 to each before displaying to a user.
+       * </pre>
+       */
       int getSpan(int index);
-      
+
       // optional string leading_comments = 3;
+      /**
+       * <code>optional string leading_comments = 3;</code>
+       *
+       * <pre>
+       * If this SourceCodeInfo represents a complete declaration, these are any
+       * comments appearing before and after the declaration which appear to be
+       * attached to the declaration.
+       *
+       * A series of line comments appearing on consecutive lines, with no other
+       * tokens appearing on those lines, will be treated as a single comment.
+       *
+       * Only the comment content is provided; comment markers (e.g. //) are
+       * stripped out.  For block comments, leading whitespace and an asterisk
+       * will be stripped from the beginning of each line other than the first.
+       * Newlines are included in the output.
+       *
+       * Examples:
+       *
+       *   optional int32 foo = 1;  // Comment attached to foo.
+       *   // Comment attached to bar.
+       *   optional int32 bar = 2;
+       *
+       *   optional string baz = 3;
+       *   // Comment attached to baz.
+       *   // Another line attached to baz.
+       *
+       *   // Comment attached to qux.
+       *   //
+       *   // Another line attached to qux.
+       *   optional double qux = 4;
+       *
+       *   optional string corge = 5;
+       *   /&#42; Block comment attached
+       *    * to corge.  Leading asterisks
+       *    * will be removed. *&#47;
+       *   /&#42; Block comment attached to
+       *    * grault. *&#47;
+       *   optional int32 grault = 6;
+       * </pre>
+       */
       boolean hasLeadingComments();
-      String getLeadingComments();
-      
+      /**
+       * <code>optional string leading_comments = 3;</code>
+       *
+       * <pre>
+       * If this SourceCodeInfo represents a complete declaration, these are any
+       * comments appearing before and after the declaration which appear to be
+       * attached to the declaration.
+       *
+       * A series of line comments appearing on consecutive lines, with no other
+       * tokens appearing on those lines, will be treated as a single comment.
+       *
+       * Only the comment content is provided; comment markers (e.g. //) are
+       * stripped out.  For block comments, leading whitespace and an asterisk
+       * will be stripped from the beginning of each line other than the first.
+       * Newlines are included in the output.
+       *
+       * Examples:
+       *
+       *   optional int32 foo = 1;  // Comment attached to foo.
+       *   // Comment attached to bar.
+       *   optional int32 bar = 2;
+       *
+       *   optional string baz = 3;
+       *   // Comment attached to baz.
+       *   // Another line attached to baz.
+       *
+       *   // Comment attached to qux.
+       *   //
+       *   // Another line attached to qux.
+       *   optional double qux = 4;
+       *
+       *   optional string corge = 5;
+       *   /&#42; Block comment attached
+       *    * to corge.  Leading asterisks
+       *    * will be removed. *&#47;
+       *   /&#42; Block comment attached to
+       *    * grault. *&#47;
+       *   optional int32 grault = 6;
+       * </pre>
+       */
+      java.lang.String getLeadingComments();
+      /**
+       * <code>optional string leading_comments = 3;</code>
+       *
+       * <pre>
+       * If this SourceCodeInfo represents a complete declaration, these are any
+       * comments appearing before and after the declaration which appear to be
+       * attached to the declaration.
+       *
+       * A series of line comments appearing on consecutive lines, with no other
+       * tokens appearing on those lines, will be treated as a single comment.
+       *
+       * Only the comment content is provided; comment markers (e.g. //) are
+       * stripped out.  For block comments, leading whitespace and an asterisk
+       * will be stripped from the beginning of each line other than the first.
+       * Newlines are included in the output.
+       *
+       * Examples:
+       *
+       *   optional int32 foo = 1;  // Comment attached to foo.
+       *   // Comment attached to bar.
+       *   optional int32 bar = 2;
+       *
+       *   optional string baz = 3;
+       *   // Comment attached to baz.
+       *   // Another line attached to baz.
+       *
+       *   // Comment attached to qux.
+       *   //
+       *   // Another line attached to qux.
+       *   optional double qux = 4;
+       *
+       *   optional string corge = 5;
+       *   /&#42; Block comment attached
+       *    * to corge.  Leading asterisks
+       *    * will be removed. *&#47;
+       *   /&#42; Block comment attached to
+       *    * grault. *&#47;
+       *   optional int32 grault = 6;
+       * </pre>
+       */
+      com.google.protobuf.ByteString
+          getLeadingCommentsBytes();
+
       // optional string trailing_comments = 4;
+      /**
+       * <code>optional string trailing_comments = 4;</code>
+       */
       boolean hasTrailingComments();
-      String getTrailingComments();
-    }
+      /**
+       * <code>optional string trailing_comments = 4;</code>
+       */
+      java.lang.String getTrailingComments();
+      /**
+       * <code>optional string trailing_comments = 4;</code>
+       */
+      com.google.protobuf.ByteString
+          getTrailingCommentsBytes();
+    }
+    /**
+     * Protobuf type {@code google.protobuf.SourceCodeInfo.Location}
+     */
     public static final class Location extends
         com.google.protobuf.GeneratedMessage
         implements LocationOrBuilder {
       // Use Location.newBuilder() to construct.
-      private Location(Builder builder) {
+      private Location(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
         super(builder);
-      }
-      private Location(boolean noInit) {}
-      
+        this.unknownFields = builder.getUnknownFields();
+      }
+      private Location(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
       private static final Location defaultInstance;
       public static Location getDefaultInstance() {
         return defaultInstance;
       }
-      
+
       public Location getDefaultInstanceForType() {
         return defaultInstance;
       }
-      
+
+      private final com.google.protobuf.UnknownFieldSet unknownFields;
+      @java.lang.Override
+      public final com.google.protobuf.UnknownFieldSet
+          getUnknownFields() {
+        return this.unknownFields;
+      }
+      private Location(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        initFields();
+        int mutable_bitField0_ = 0;
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+            com.google.protobuf.UnknownFieldSet.newBuilder();
+        try {
+          boolean done = false;
+          while (!done) {
+            int tag = input.readTag();
+            switch (tag) {
+              case 0:
+                done = true;
+                break;
+              default: {
+                if (!parseUnknownField(input, unknownFields,
+                                       extensionRegistry, tag)) {
+                  done = true;
+                }
+                break;
+              }
+              case 8: {
+                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+                  path_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000001;
+                }
+                path_.add(input.readInt32());
+                break;
+              }
+              case 10: {
+                int length = input.readRawVarint32();
+                int limit = input.pushLimit(length);
+                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001) && input.getBytesUntilLimit() > 0) {
+                  path_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000001;
+                }
+                while (input.getBytesUntilLimit() > 0) {
+                  path_.add(input.readInt32());
+                }
+                input.popLimit(limit);
+                break;
+              }
+              case 16: {
+                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+                  span_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000002;
+                }
+                span_.add(input.readInt32());
+                break;
+              }
+              case 18: {
+                int length = input.readRawVarint32();
+                int limit = input.pushLimit(length);
+                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) {
+                  span_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000002;
+                }
+                while (input.getBytesUntilLimit() > 0) {
+                  span_.add(input.readInt32());
+                }
+                input.popLimit(limit);
+                break;
+              }
+              case 26: {
+                bitField0_ |= 0x00000001;
+                leadingComments_ = input.readBytes();
+                break;
+              }
+              case 34: {
+                bitField0_ |= 0x00000002;
+                trailingComments_ = input.readBytes();
+                break;
+              }
+            }
+          }
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          throw e.setUnfinishedMessage(this);
+        } catch (java.io.IOException e) {
+          throw new com.google.protobuf.InvalidProtocolBufferException(
+              e.getMessage()).setUnfinishedMessage(this);
+        } finally {
+          if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+            path_ = java.util.Collections.unmodifiableList(path_);
+          }
+          if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+            span_ = java.util.Collections.unmodifiableList(span_);
+          }
+          this.unknownFields = unknownFields.build();
+          makeExtensionsImmutable();
+        }
+      }
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
         return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_descriptor;
       }
-      
+
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable;
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.class, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder.class);
+      }
+
+      public static com.google.protobuf.Parser<Location> PARSER =
+          new com.google.protobuf.AbstractParser<Location>() {
+        public Location parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new Location(input, extensionRegistry);
+        }
+      };
+
+      @java.lang.Override
+      public com.google.protobuf.Parser<Location> getParserForType() {
+        return PARSER;
+      }
+
       private int bitField0_;
       // repeated int32 path = 1 [packed = true];
       public static final int PATH_FIELD_NUMBER = 1;
       private java.util.List<java.lang.Integer> path_;
+      /**
+       * <code>repeated int32 path = 1 [packed = true];</code>
+       *
+       * <pre>
+       * Identifies which part of the FileDescriptorProto was defined at this
+       * location.
+       *
+       * Each element is a field number or an index.  They form a path from
+       * the root FileDescriptorProto to the place where the definition.  For
+       * example, this path:
+       *   [ 4, 3, 2, 7, 1 ]
+       * refers to:
+       *   file.message_type(3)  // 4, 3
+       *       .field(7)         // 2, 7
+       *       .name()           // 1
+       * This is because FileDescriptorProto.message_type has field number 4:
+       *   repeated DescriptorProto message_type = 4;
+       * and DescriptorProto.field has field number 2:
+       *   repeated FieldDescriptorProto field = 2;
+       * and FieldDescriptorProto.name has field number 1:
+       *   optional string name = 1;
+       *
+       * Thus, the above path gives the location of a field name.  If we removed
+       * the last element:
+       *   [ 4, 3, 2, 7 ]
+       * this path refers to the whole field declaration (from the beginning
+       * of the label to the terminating semicolon).
+       * </pre>
+       */
       public java.util.List<java.lang.Integer>
           getPathList() {
         return path_;
       }
+      /**
+       * <code>repeated int32 path = 1 [packed = true];</code>
+       *
+       * <pre>
+       * Identifies which part of the FileDescriptorProto was defined at this
+       * location.
+       *
+       * Each element is a field number or an index.  They form a path from
+       * the root FileDescriptorProto to the place where the definition.  For
+       * example, this path:
+       *   [ 4, 3, 2, 7, 1 ]
+       * refers to:
+       *   file.message_type(3)  // 4, 3
+       *       .field(7)         // 2, 7
+       *       .name()           // 1
+       * This is because FileDescriptorProto.message_type has field number 4:
+       *   repeated DescriptorProto message_type = 4;
+       * and DescriptorProto.field has field number 2:
+       *   repeated FieldDescriptorProto field = 2;
+       * and FieldDescriptorProto.name has field number 1:
+       *   optional string name = 1;
+       *
+       * Thus, the above path gives the location of a field name.  If we removed
+       * the last element:
+       *   [ 4, 3, 2, 7 ]
+       * this path refers to the whole field declaration (from the beginning
+       * of the label to the terminating semicolon).
+       * </pre>
+       */
       public int getPathCount() {
         return path_.size();
       }
+      /**
+       * <code>repeated int32 path = 1 [packed = true];</code>
+       *
+       * <pre>
+       * Identifies which part of the FileDescriptorProto was defined at this
+       * location.
+       *
+       * Each element is a field number or an index.  They form a path from
+       * the root FileDescriptorProto to the place where the definition.  For
+       * example, this path:
+       *   [ 4, 3, 2, 7, 1 ]
+       * refers to:
+       *   file.message_type(3)  // 4, 3
+       *       .field(7)         // 2, 7
+       *       .name()           // 1
+       * This is because FileDescriptorProto.message_type has field number 4:
+       *   repeated DescriptorProto message_type = 4;
+       * and DescriptorProto.field has field number 2:
+       *   repeated FieldDescriptorProto field = 2;
+       * and FieldDescriptorProto.name has field number 1:
+       *   optional string name = 1;
+       *
+       * Thus, the above path gives the location of a field name.  If we removed
+       * the last element:
+       *   [ 4, 3, 2, 7 ]
+       * this path refers to the whole field declaration (from the beginning
+       * of the label to the terminating semicolon).
+       * </pre>
+       */
       public int getPath(int index) {
         return path_.get(index);
       }
       private int pathMemoizedSerializedSize = -1;
-      
+
       // repeated int32 span = 2 [packed = true];
       public static final int SPAN_FIELD_NUMBER = 2;
       private java.util.List<java.lang.Integer> span_;
+      /**
+       * <code>repeated int32 span = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Always has exactly three or four elements: start line, start column,
+       * end line (optional, otherwise assumed same as start line), end column.
+       * These are packed into a single field for efficiency.  Note that line
+       * and column numbers are zero-based -- typically you will want to add
+       * 1 to each before displaying to a user.
+       * </pre>
+       */
       public java.util.List<java.lang.Integer>
           getSpanList() {
         return span_;
       }
+      /**
+       * <code>repeated int32 span = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Always has exactly three or four elements: start line, start column,
+       * end line (optional, otherwise assumed same as start line), end column.
+       * These are packed into a single field for efficiency.  Note that line
+       * and column numbers are zero-based -- typically you will want to add
+       * 1 to each before displaying to a user.
+       * </pre>
+       */
       public int getSpanCount() {
         return span_.size();
       }
+      /**
+       * <code>repeated int32 span = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Always has exactly three or four elements: start line, start column,
+       * end line (optional, otherwise assumed same as start line), end column.
+       * These are packed into a single field for efficiency.  Note that line
+       * and column numbers are zero-based -- typically you will want to add
+       * 1 to each before displaying to a user.
+       * </pre>
+       */
       public int getSpan(int index) {
         return span_.get(index);
       }
       private int spanMemoizedSerializedSize = -1;
-      
+
       // optional string leading_comments = 3;
       public static final int LEADING_COMMENTS_FIELD_NUMBER = 3;
       private java.lang.Object leadingComments_;
+      /**
+       * <code>optional string leading_comments = 3;</code>
+       *
+       * <pre>
+       * If this SourceCodeInfo represents a complete declaration, these are any
+       * comments appearing before and after the declaration which appear to be
+       * attached to the declaration.
+       *
+       * A series of line comments appearing on consecutive lines, with no other
+       * tokens appearing on those lines, will be treated as a single comment.
+       *
+       * Only the comment content is provided; comment markers (e.g. //) are
+       * stripped out.  For block comments, leading whitespace and an asterisk
+       * will be stripped from the beginning of each line other than the first.
+       * Newlines are included in the output.
+       *
+       * Examples:
+       *
+       *   optional int32 foo = 1;  // Comment attached to foo.
+       *   // Comment attached to bar.
+       *   optional int32 bar = 2;
+       *
+       *   optional string baz = 3;
+       *   // Comment attached to baz.
+       *   // Another line attached to baz.
+       *
+       *   // Comment attached to qux.
+       *   //
+       *   // Another line attached to qux.
+       *   optional double qux = 4;
+       *
+       *   optional string corge = 5;
+       *   /&#42; Block comment attached
+       *    * to corge.  Leading asterisks
+       *    * will be removed. *&#47;
+       *   /&#42; Block comment attached to
+       *    * grault. *&#47;
+       *   optional int32 grault = 6;
+       * </pre>
+       */
       public boolean hasLeadingComments() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public String getLeadingComments() {
+      /**
+       * <code>optional string leading_comments = 3;</code>
+       *
+       * <pre>
+       * If this SourceCodeInfo represents a complete declaration, these are any
+       * comments appearing before and after the declaration which appear to be
+       * attached to the declaration.
+       *
+       * A series of line comments appearing on consecutive lines, with no other
+       * tokens appearing on those lines, will be treated as a single comment.
+       *
+       * Only the comment content is provided; comment markers (e.g. //) are
+       * stripped out.  For block comments, leading whitespace and an asterisk
+       * will be stripped from the beginning of each line other than the first.
+       * Newlines are included in the output.
+       *
+       * Examples:
+       *
+       *   optional int32 foo = 1;  // Comment attached to foo.
+       *   // Comment attached to bar.
+       *   optional int32 bar = 2;
+       *
+       *   optional string baz = 3;
+       *   // Comment attached to baz.
+       *   // Another line attached to baz.
+       *
+       *   // Comment attached to qux.
+       *   //
+       *   // Another line attached to qux.
+       *   optional double qux = 4;
+       *
+       *   optional string corge = 5;
+       *   /&#42; Block comment attached
+       *    * to corge.  Leading asterisks
+       *    * will be removed. *&#47;
+       *   /&#42; Block comment attached to
+       *    * grault. *&#47;
+       *   optional int32 grault = 6;
+       * </pre>
+       */
+      public java.lang.String getLeadingComments() {
         java.lang.Object ref = leadingComments_;
-        if (ref instanceof String) {
-          return (String) ref;
+        if (ref instanceof java.lang.String) {
+          return (java.lang.String) ref;
         } else {
           com.google.protobuf.ByteString bs = 
               (com.google.protobuf.ByteString) ref;
-          String s = bs.toStringUtf8();
-          if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          java.lang.String s = bs.toStringUtf8();
+          if (bs.isValidUtf8()) {
             leadingComments_ = s;
           }
@@ -16237,9 +25367,51 @@
         }
       }
-      private com.google.protobuf.ByteString getLeadingCommentsBytes() {
+      /**
+       * <code>optional string leading_comments = 3;</code>
+       *
+       * <pre>
+       * If this SourceCodeInfo represents a complete declaration, these are any
+       * comments appearing before and after the declaration which appear to be
+       * attached to the declaration.
+       *
+       * A series of line comments appearing on consecutive lines, with no other
+       * tokens appearing on those lines, will be treated as a single comment.
+       *
+       * Only the comment content is provided; comment markers (e.g. //) are
+       * stripped out.  For block comments, leading whitespace and an asterisk
+       * will be stripped from the beginning of each line other than the first.
+       * Newlines are included in the output.
+       *
+       * Examples:
+       *
+       *   optional int32 foo = 1;  // Comment attached to foo.
+       *   // Comment attached to bar.
+       *   optional int32 bar = 2;
+       *
+       *   optional string baz = 3;
+       *   // Comment attached to baz.
+       *   // Another line attached to baz.
+       *
+       *   // Comment attached to qux.
+       *   //
+       *   // Another line attached to qux.
+       *   optional double qux = 4;
+       *
+       *   optional string corge = 5;
+       *   /&#42; Block comment attached
+       *    * to corge.  Leading asterisks
+       *    * will be removed. *&#47;
+       *   /&#42; Block comment attached to
+       *    * grault. *&#47;
+       *   optional int32 grault = 6;
+       * </pre>
+       */
+      public com.google.protobuf.ByteString
+          getLeadingCommentsBytes() {
         java.lang.Object ref = leadingComments_;
-        if (ref instanceof String) {
+        if (ref instanceof java.lang.String) {
           com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
           leadingComments_ = b;
           return b;
@@ -16248,20 +25420,26 @@
         }
       }
-      
+
       // optional string trailing_comments = 4;
       public static final int TRAILING_COMMENTS_FIELD_NUMBER = 4;
       private java.lang.Object trailingComments_;
+      /**
+       * <code>optional string trailing_comments = 4;</code>
+       */
       public boolean hasTrailingComments() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
-      public String getTrailingComments() {
+      /**
+       * <code>optional string trailing_comments = 4;</code>
+       */
+      public java.lang.String getTrailingComments() {
         java.lang.Object ref = trailingComments_;
-        if (ref instanceof String) {
-          return (String) ref;
+        if (ref instanceof java.lang.String) {
+          return (java.lang.String) ref;
         } else {
           com.google.protobuf.ByteString bs = 
               (com.google.protobuf.ByteString) ref;
-          String s = bs.toStringUtf8();
-          if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          java.lang.String s = bs.toStringUtf8();
+          if (bs.isValidUtf8()) {
             trailingComments_ = s;
           }
@@ -16269,9 +25447,14 @@
         }
       }
-      private com.google.protobuf.ByteString getTrailingCommentsBytes() {
+      /**
+       * <code>optional string trailing_comments = 4;</code>
+       */
+      public com.google.protobuf.ByteString
+          getTrailingCommentsBytes() {
         java.lang.Object ref = trailingComments_;
-        if (ref instanceof String) {
+        if (ref instanceof java.lang.String) {
           com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
           trailingComments_ = b;
           return b;
@@ -16280,8 +25463,8 @@
         }
       }
-      
+
       private void initFields() {
-        path_ = java.util.Collections.emptyList();;
-        span_ = java.util.Collections.emptyList();;
+        path_ = java.util.Collections.emptyList();
+        span_ = java.util.Collections.emptyList();
         leadingComments_ = "";
         trailingComments_ = "";
@@ -16291,9 +25474,9 @@
         byte isInitialized = memoizedIsInitialized;
         if (isInitialized != -1) return isInitialized == 1;
-        
+
         memoizedIsInitialized = 1;
         return true;
       }
-      
+
       public void writeTo(com.google.protobuf.CodedOutputStream output)
                           throws java.io.IOException {
@@ -16321,10 +25504,10 @@
         getUnknownFields().writeTo(output);
       }
-      
+
       private int memoizedSerializedSize = -1;
       public int getSerializedSize() {
         int size = memoizedSerializedSize;
         if (size != -1) return size;
-      
+
         size = 0;
         {
@@ -16368,5 +25551,5 @@
         return size;
       }
-      
+
       private static final long serialVersionUID = 0L;
       @java.lang.Override
@@ -16375,9 +25558,9 @@
         return super.writeReplace();
       }
-      
+
       public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
           com.google.protobuf.ByteString data)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return newBuilder().mergeFrom(data).buildParsed();
+        return PARSER.parseFrom(data);
       }
       public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
@@ -16385,10 +25568,9 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return newBuilder().mergeFrom(data, extensionRegistry)
-                 .buildParsed();
+        return PARSER.parseFrom(data, extensionRegistry);
       }
       public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(byte[] data)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return newBuilder().mergeFrom(data).buildParsed();
+        return PARSER.parseFrom(data);
       }
       public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
@@ -16396,10 +25578,9 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return newBuilder().mergeFrom(data, extensionRegistry)
-                 .buildParsed();
+        return PARSER.parseFrom(data, extensionRegistry);
       }
       public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(java.io.InputStream input)
           throws java.io.IOException {
-        return newBuilder().mergeFrom(input).buildParsed();
+        return PARSER.parseFrom(input);
       }
       public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
@@ -16407,15 +25588,9 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        return newBuilder().mergeFrom(input, extensionRegistry)
-                 .buildParsed();
+        return PARSER.parseFrom(input, extensionRegistry);
       }
       public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseDelimitedFrom(java.io.InputStream input)
           throws java.io.IOException {
-        Builder builder = newBuilder();
-        if (builder.mergeDelimitedFrom(input)) {
-          return builder.buildParsed();
-        } else {
-          return null;
-        }
+        return PARSER.parseDelimitedFrom(input);
       }
       public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseDelimitedFrom(
@@ -16423,15 +25598,10 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        Builder builder = newBuilder();
-        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-          return builder.buildParsed();
-        } else {
-          return null;
-        }
+        return PARSER.parseDelimitedFrom(input, extensionRegistry);
       }
       public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
           com.google.protobuf.CodedInputStream input)
           throws java.io.IOException {
-        return newBuilder().mergeFrom(input).buildParsed();
+        return PARSER.parseFrom(input);
       }
       public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
@@ -16439,8 +25609,7 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        return newBuilder().mergeFrom(input, extensionRegistry)
-                 .buildParsed();
-      }
-      
+        return PARSER.parseFrom(input, extensionRegistry);
+      }
+
       public static Builder newBuilder() { return Builder.create(); }
       public Builder newBuilderForType() { return newBuilder(); }
@@ -16449,5 +25618,5 @@
       }
       public Builder toBuilder() { return newBuilder(this); }
-      
+
       @java.lang.Override
       protected Builder newBuilderForType(
@@ -16456,4 +25625,7 @@
         return builder;
       }
+      /**
+       * Protobuf type {@code google.protobuf.SourceCodeInfo.Location}
+       */
       public static final class Builder extends
           com.google.protobuf.GeneratedMessage.Builder<Builder>
@@ -16463,16 +25635,19 @@
           return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_descriptor;
         }
-        
+
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
-          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable;
-        }
-        
+          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable
+              .ensureFieldAccessorsInitialized(
+                  com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.class, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder.class);
+        }
+
         // Construct using com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.newBuilder()
         private Builder() {
           maybeForceBuilderInitialization();
         }
-        
-        private Builder(BuilderParent parent) {
+
+        private Builder(
+            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
           super(parent);
           maybeForceBuilderInitialization();
@@ -16485,10 +25660,10 @@
           return new Builder();
         }
-        
+
         public Builder clear() {
           super.clear();
-          path_ = java.util.Collections.emptyList();;
+          path_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
-          span_ = java.util.Collections.emptyList();;
+          span_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000002);
           leadingComments_ = "";
@@ -16498,18 +25673,18 @@
           return this;
         }
-        
+
         public Builder clone() {
           return create().mergeFrom(buildPartial());
         }
-        
+
         public com.google.protobuf.Descriptors.Descriptor
             getDescriptorForType() {
-          return com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.getDescriptor();
-        }
-        
+          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_descriptor;
+        }
+
         public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location getDefaultInstanceForType() {
           return com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.getDefaultInstance();
         }
-        
+
         public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location build() {
           com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location result = buildPartial();
@@ -16519,15 +25694,5 @@
           return result;
         }
-        
-        private com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location buildParsed()
-            throws com.google.protobuf.InvalidProtocolBufferException {
-          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location result = buildPartial();
-          if (!result.isInitialized()) {
-            throw newUninitializedMessageException(
-              result).asInvalidProtocolBufferException();
-          }
-          return result;
-        }
-        
+
         public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location buildPartial() {
           com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location result = new com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location(this);
@@ -16556,5 +25721,5 @@
           return result;
         }
-        
+
         public Builder mergeFrom(com.google.protobuf.Message other) {
           if (other instanceof com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location) {
@@ -16565,5 +25730,5 @@
           }
         }
-        
+
         public Builder mergeFrom(com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location other) {
           if (other == com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.getDefaultInstance()) return this;
@@ -16589,86 +25754,42 @@
           }
           if (other.hasLeadingComments()) {
-            setLeadingComments(other.getLeadingComments());
+            bitField0_ |= 0x00000004;
+            leadingComments_ = other.leadingComments_;
+            onChanged();
           }
           if (other.hasTrailingComments()) {
-            setTrailingComments(other.getTrailingComments());
+            bitField0_ |= 0x00000008;
+            trailingComments_ = other.trailingComments_;
+            onChanged();
           }
           this.mergeUnknownFields(other.getUnknownFields());
           return this;
         }
-        
+
         public final boolean isInitialized() {
           return true;
         }
-        
+
         public Builder mergeFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
-          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-            com.google.protobuf.UnknownFieldSet.newBuilder(
-              this.getUnknownFields());
-          while (true) {
-            int tag = input.readTag();
-            switch (tag) {
-              case 0:
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
-              default: {
-                if (!parseUnknownField(input, unknownFields,
-                                       extensionRegistry, tag)) {
-                  this.setUnknownFields(unknownFields.build());
-                  onChanged();
-                  return this;
-                }
-                break;
-              }
-              case 8: {
-                ensurePathIsMutable();
-                path_.add(input.readInt32());
-                break;
-              }
-              case 10: {
-                int length = input.readRawVarint32();
-                int limit = input.pushLimit(length);
-                while (input.getBytesUntilLimit() > 0) {
-                  addPath(input.readInt32());
-                }
-                input.popLimit(limit);
-                break;
-              }
-              case 16: {
-                ensureSpanIsMutable();
-                span_.add(input.readInt32());
-                break;
-              }
-              case 18: {
-                int length = input.readRawVarint32();
-                int limit = input.pushLimit(length);
-                while (input.getBytesUntilLimit() > 0) {
-                  addSpan(input.readInt32());
-                }
-                input.popLimit(limit);
-                break;
-              }
-              case 26: {
-                bitField0_ |= 0x00000004;
-                leadingComments_ = input.readBytes();
-                break;
-              }
-              case 34: {
-                bitField0_ |= 0x00000008;
-                trailingComments_ = input.readBytes();
-                break;
-              }
+          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parsedMessage = null;
+          try {
+            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+            parsedMessage = (com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location) e.getUnfinishedMessage();
+            throw e;
+          } finally {
+            if (parsedMessage != null) {
+              mergeFrom(parsedMessage);
             }
           }
-        }
-        
+          return this;
+        }
         private int bitField0_;
-        
+
         // repeated int32 path = 1 [packed = true];
-        private java.util.List<java.lang.Integer> path_ = java.util.Collections.emptyList();;
+        private java.util.List<java.lang.Integer> path_ = java.util.Collections.emptyList();
         private void ensurePathIsMutable() {
           if (!((bitField0_ & 0x00000001) == 0x00000001)) {
@@ -16677,14 +25798,130 @@
            }
         }
+        /**
+         * <code>repeated int32 path = 1 [packed = true];</code>
+         *
+         * <pre>
+         * Identifies which part of the FileDescriptorProto was defined at this
+         * location.
+         *
+         * Each element is a field number or an index.  They form a path from
+         * the root FileDescriptorProto to the place where the definition.  For
+         * example, this path:
+         *   [ 4, 3, 2, 7, 1 ]
+         * refers to:
+         *   file.message_type(3)  // 4, 3
+         *       .field(7)         // 2, 7
+         *       .name()           // 1
+         * This is because FileDescriptorProto.message_type has field number 4:
+         *   repeated DescriptorProto message_type = 4;
+         * and DescriptorProto.field has field number 2:
+         *   repeated FieldDescriptorProto field = 2;
+         * and FieldDescriptorProto.name has field number 1:
+         *   optional string name = 1;
+         *
+         * Thus, the above path gives the location of a field name.  If we removed
+         * the last element:
+         *   [ 4, 3, 2, 7 ]
+         * this path refers to the whole field declaration (from the beginning
+         * of the label to the terminating semicolon).
+         * </pre>
+         */
         public java.util.List<java.lang.Integer>
             getPathList() {
           return java.util.Collections.unmodifiableList(path_);
         }
+        /**
+         * <code>repeated int32 path = 1 [packed = true];</code>
+         *
+         * <pre>
+         * Identifies which part of the FileDescriptorProto was defined at this
+         * location.
+         *
+         * Each element is a field number or an index.  They form a path from
+         * the root FileDescriptorProto to the place where the definition.  For
+         * example, this path:
+         *   [ 4, 3, 2, 7, 1 ]
+         * refers to:
+         *   file.message_type(3)  // 4, 3
+         *       .field(7)         // 2, 7
+         *       .name()           // 1
+         * This is because FileDescriptorProto.message_type has field number 4:
+         *   repeated DescriptorProto message_type = 4;
+         * and DescriptorProto.field has field number 2:
+         *   repeated FieldDescriptorProto field = 2;
+         * and FieldDescriptorProto.name has field number 1:
+         *   optional string name = 1;
+         *
+         * Thus, the above path gives the location of a field name.  If we removed
+         * the last element:
+         *   [ 4, 3, 2, 7 ]
+         * this path refers to the whole field declaration (from the beginning
+         * of the label to the terminating semicolon).
+         * </pre>
+         */
         public int getPathCount() {
           return path_.size();
         }
+        /**
+         * <code>repeated int32 path = 1 [packed = true];</code>
+         *
+         * <pre>
+         * Identifies which part of the FileDescriptorProto was defined at this
+         * location.
+         *
+         * Each element is a field number or an index.  They form a path from
+         * the root FileDescriptorProto to the place where the definition.  For
+         * example, this path:
+         *   [ 4, 3, 2, 7, 1 ]
+         * refers to:
+         *   file.message_type(3)  // 4, 3
+         *       .field(7)         // 2, 7
+         *       .name()           // 1
+         * This is because FileDescriptorProto.message_type has field number 4:
+         *   repeated DescriptorProto message_type = 4;
+         * and DescriptorProto.field has field number 2:
+         *   repeated FieldDescriptorProto field = 2;
+         * and FieldDescriptorProto.name has field number 1:
+         *   optional string name = 1;
+         *
+         * Thus, the above path gives the location of a field name.  If we removed
+         * the last element:
+         *   [ 4, 3, 2, 7 ]
+         * this path refers to the whole field declaration (from the beginning
+         * of the label to the terminating semicolon).
+         * </pre>
+         */
         public int getPath(int index) {
           return path_.get(index);
         }
+        /**
+         * <code>repeated int32 path = 1 [packed = true];</code>
+         *
+         * <pre>
+         * Identifies which part of the FileDescriptorProto was defined at this
+         * location.
+         *
+         * Each element is a field number or an index.  They form a path from
+         * the root FileDescriptorProto to the place where the definition.  For
+         * example, this path:
+         *   [ 4, 3, 2, 7, 1 ]
+         * refers to:
+         *   file.message_type(3)  // 4, 3
+         *       .field(7)         // 2, 7
+         *       .name()           // 1
+         * This is because FileDescriptorProto.message_type has field number 4:
+         *   repeated DescriptorProto message_type = 4;
+         * and DescriptorProto.field has field number 2:
+         *   repeated FieldDescriptorProto field = 2;
+         * and FieldDescriptorProto.name has field number 1:
+         *   optional string name = 1;
+         *
+         * Thus, the above path gives the location of a field name.  If we removed
+         * the last element:
+         *   [ 4, 3, 2, 7 ]
+         * this path refers to the whole field declaration (from the beginning
+         * of the label to the terminating semicolon).
+         * </pre>
+         */
         public Builder setPath(
             int index, int value) {
@@ -16694,4 +25931,33 @@
           return this;
         }
+        /**
+         * <code>repeated int32 path = 1 [packed = true];</code>
+         *
+         * <pre>
+         * Identifies which part of the FileDescriptorProto was defined at this
+         * location.
+         *
+         * Each element is a field number or an index.  They form a path from
+         * the root FileDescriptorProto to the place where the definition.  For
+         * example, this path:
+         *   [ 4, 3, 2, 7, 1 ]
+         * refers to:
+         *   file.message_type(3)  // 4, 3
+         *       .field(7)         // 2, 7
+         *       .name()           // 1
+         * This is because FileDescriptorProto.message_type has field number 4:
+         *   repeated DescriptorProto message_type = 4;
+         * and DescriptorProto.field has field number 2:
+         *   repeated FieldDescriptorProto field = 2;
+         * and FieldDescriptorProto.name has field number 1:
+         *   optional string name = 1;
+         *
+         * Thus, the above path gives the location of a field name.  If we removed
+         * the last element:
+         *   [ 4, 3, 2, 7 ]
+         * this path refers to the whole field declaration (from the beginning
+         * of the label to the terminating semicolon).
+         * </pre>
+         */
         public Builder addPath(int value) {
           ensurePathIsMutable();
@@ -16700,4 +25966,33 @@
           return this;
         }
+        /**
+         * <code>repeated int32 path = 1 [packed = true];</code>
+         *
+         * <pre>
+         * Identifies which part of the FileDescriptorProto was defined at this
+         * location.
+         *
+         * Each element is a field number or an index.  They form a path from
+         * the root FileDescriptorProto to the place where the definition.  For
+         * example, this path:
+         *   [ 4, 3, 2, 7, 1 ]
+         * refers to:
+         *   file.message_type(3)  // 4, 3
+         *       .field(7)         // 2, 7
+         *       .name()           // 1
+         * This is because FileDescriptorProto.message_type has field number 4:
+         *   repeated DescriptorProto message_type = 4;
+         * and DescriptorProto.field has field number 2:
+         *   repeated FieldDescriptorProto field = 2;
+         * and FieldDescriptorProto.name has field number 1:
+         *   optional string name = 1;
+         *
+         * Thus, the above path gives the location of a field name.  If we removed
+         * the last element:
+         *   [ 4, 3, 2, 7 ]
+         * this path refers to the whole field declaration (from the beginning
+         * of the label to the terminating semicolon).
+         * </pre>
+         */
         public Builder addAllPath(
             java.lang.Iterable<? extends java.lang.Integer> values) {
@@ -16707,13 +26002,42 @@
           return this;
         }
+        /**
+         * <code>repeated int32 path = 1 [packed = true];</code>
+         *
+         * <pre>
+         * Identifies which part of the FileDescriptorProto was defined at this
+         * location.
+         *
+         * Each element is a field number or an index.  They form a path from
+         * the root FileDescriptorProto to the place where the definition.  For
+         * example, this path:
+         *   [ 4, 3, 2, 7, 1 ]
+         * refers to:
+         *   file.message_type(3)  // 4, 3
+         *       .field(7)         // 2, 7
+         *       .name()           // 1
+         * This is because FileDescriptorProto.message_type has field number 4:
+         *   repeated DescriptorProto message_type = 4;
+         * and DescriptorProto.field has field number 2:
+         *   repeated FieldDescriptorProto field = 2;
+         * and FieldDescriptorProto.name has field number 1:
+         *   optional string name = 1;
+         *
+         * Thus, the above path gives the location of a field name.  If we removed
+         * the last element:
+         *   [ 4, 3, 2, 7 ]
+         * this path refers to the whole field declaration (from the beginning
+         * of the label to the terminating semicolon).
+         * </pre>
+         */
         public Builder clearPath() {
-          path_ = java.util.Collections.emptyList();;
+          path_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
           return this;
         }
-        
+
         // repeated int32 span = 2 [packed = true];
-        private java.util.List<java.lang.Integer> span_ = java.util.Collections.emptyList();;
+        private java.util.List<java.lang.Integer> span_ = java.util.Collections.emptyList();
         private void ensureSpanIsMutable() {
           if (!((bitField0_ & 0x00000002) == 0x00000002)) {
@@ -16722,14 +26046,58 @@
            }
         }
+        /**
+         * <code>repeated int32 span = 2 [packed = true];</code>
+         *
+         * <pre>
+         * Always has exactly three or four elements: start line, start column,
+         * end line (optional, otherwise assumed same as start line), end column.
+         * These are packed into a single field for efficiency.  Note that line
+         * and column numbers are zero-based -- typically you will want to add
+         * 1 to each before displaying to a user.
+         * </pre>
+         */
         public java.util.List<java.lang.Integer>
             getSpanList() {
           return java.util.Collections.unmodifiableList(span_);
         }
+        /**
+         * <code>repeated int32 span = 2 [packed = true];</code>
+         *
+         * <pre>
+         * Always has exactly three or four elements: start line, start column,
+         * end line (optional, otherwise assumed same as start line), end column.
+         * These are packed into a single field for efficiency.  Note that line
+         * and column numbers are zero-based -- typically you will want to add
+         * 1 to each before displaying to a user.
+         * </pre>
+         */
         public int getSpanCount() {
           return span_.size();
         }
+        /**
+         * <code>repeated int32 span = 2 [packed = true];</code>
+         *
+         * <pre>
+         * Always has exactly three or four elements: start line, start column,
+         * end line (optional, otherwise assumed same as start line), end column.
+         * These are packed into a single field for efficiency.  Note that line
+         * and column numbers are zero-based -- typically you will want to add
+         * 1 to each before displaying to a user.
+         * </pre>
+         */
         public int getSpan(int index) {
           return span_.get(index);
         }
+        /**
+         * <code>repeated int32 span = 2 [packed = true];</code>
+         *
+         * <pre>
+         * Always has exactly three or four elements: start line, start column,
+         * end line (optional, otherwise assumed same as start line), end column.
+         * These are packed into a single field for efficiency.  Note that line
+         * and column numbers are zero-based -- typically you will want to add
+         * 1 to each before displaying to a user.
+         * </pre>
+         */
         public Builder setSpan(
             int index, int value) {
@@ -16739,4 +26107,15 @@
           return this;
         }
+        /**
+         * <code>repeated int32 span = 2 [packed = true];</code>
+         *
+         * <pre>
+         * Always has exactly three or four elements: start line, start column,
+         * end line (optional, otherwise assumed same as start line), end column.
+         * These are packed into a single field for efficiency.  Note that line
+         * and column numbers are zero-based -- typically you will want to add
+         * 1 to each before displaying to a user.
+         * </pre>
+         */
         public Builder addSpan(int value) {
           ensureSpanIsMutable();
@@ -16745,4 +26124,15 @@
           return this;
         }
+        /**
+         * <code>repeated int32 span = 2 [packed = true];</code>
+         *
+         * <pre>
+         * Always has exactly three or four elements: start line, start column,
+         * end line (optional, otherwise assumed same as start line), end column.
+         * These are packed into a single field for efficiency.  Note that line
+         * and column numbers are zero-based -- typically you will want to add
+         * 1 to each before displaying to a user.
+         * </pre>
+         */
         public Builder addAllSpan(
             java.lang.Iterable<? extends java.lang.Integer> values) {
@@ -16752,27 +26142,213 @@
           return this;
         }
+        /**
+         * <code>repeated int32 span = 2 [packed = true];</code>
+         *
+         * <pre>
+         * Always has exactly three or four elements: start line, start column,
+         * end line (optional, otherwise assumed same as start line), end column.
+         * These are packed into a single field for efficiency.  Note that line
+         * and column numbers are zero-based -- typically you will want to add
+         * 1 to each before displaying to a user.
+         * </pre>
+         */
         public Builder clearSpan() {
-          span_ = java.util.Collections.emptyList();;
+          span_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000002);
           onChanged();
           return this;
         }
-        
+
         // optional string leading_comments = 3;
         private java.lang.Object leadingComments_ = "";
+        /**
+         * <code>optional string leading_comments = 3;</code>
+         *
+         * <pre>
+         * If this SourceCodeInfo represents a complete declaration, these are any
+         * comments appearing before and after the declaration which appear to be
+         * attached to the declaration.
+         *
+         * A series of line comments appearing on consecutive lines, with no other
+         * tokens appearing on those lines, will be treated as a single comment.
+         *
+         * Only the comment content is provided; comment markers (e.g. //) are
+         * stripped out.  For block comments, leading whitespace and an asterisk
+         * will be stripped from the beginning of each line other than the first.
+         * Newlines are included in the output.
+         *
+         * Examples:
+         *
+         *   optional int32 foo = 1;  // Comment attached to foo.
+         *   // Comment attached to bar.
+         *   optional int32 bar = 2;
+         *
+         *   optional string baz = 3;
+         *   // Comment attached to baz.
+         *   // Another line attached to baz.
+         *
+         *   // Comment attached to qux.
+         *   //
+         *   // Another line attached to qux.
+         *   optional double qux = 4;
+         *
+         *   optional string corge = 5;
+         *   /&#42; Block comment attached
+         *    * to corge.  Leading asterisks
+         *    * will be removed. *&#47;
+         *   /&#42; Block comment attached to
+         *    * grault. *&#47;
+         *   optional int32 grault = 6;
+         * </pre>
+         */
         public boolean hasLeadingComments() {
           return ((bitField0_ & 0x00000004) == 0x00000004);
         }
-        public String getLeadingComments() {
+        /**
+         * <code>optional string leading_comments = 3;</code>
+         *
+         * <pre>
+         * If this SourceCodeInfo represents a complete declaration, these are any
+         * comments appearing before and after the declaration which appear to be
+         * attached to the declaration.
+         *
+         * A series of line comments appearing on consecutive lines, with no other
+         * tokens appearing on those lines, will be treated as a single comment.
+         *
+         * Only the comment content is provided; comment markers (e.g. //) are
+         * stripped out.  For block comments, leading whitespace and an asterisk
+         * will be stripped from the beginning of each line other than the first.
+         * Newlines are included in the output.
+         *
+         * Examples:
+         *
+         *   optional int32 foo = 1;  // Comment attached to foo.
+         *   // Comment attached to bar.
+         *   optional int32 bar = 2;
+         *
+         *   optional string baz = 3;
+         *   // Comment attached to baz.
+         *   // Another line attached to baz.
+         *
+         *   // Comment attached to qux.
+         *   //
+         *   // Another line attached to qux.
+         *   optional double qux = 4;
+         *
+         *   optional string corge = 5;
+         *   /&#42; Block comment attached
+         *    * to corge.  Leading asterisks
+         *    * will be removed. *&#47;
+         *   /&#42; Block comment attached to
+         *    * grault. *&#47;
+         *   optional int32 grault = 6;
+         * </pre>
+         */
+        public java.lang.String getLeadingComments() {
           java.lang.Object ref = leadingComments_;
-          if (!(ref instanceof String)) {
-            String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          if (!(ref instanceof java.lang.String)) {
+            java.lang.String s = ((com.google.protobuf.ByteString) ref)
+                .toStringUtf8();
             leadingComments_ = s;
             return s;
           } else {
-            return (String) ref;
+            return (java.lang.String) ref;
           }
         }
-        public Builder setLeadingComments(String value) {
+        /**
+         * <code>optional string leading_comments = 3;</code>
+         *
+         * <pre>
+         * If this SourceCodeInfo represents a complete declaration, these are any
+         * comments appearing before and after the declaration which appear to be
+         * attached to the declaration.
+         *
+         * A series of line comments appearing on consecutive lines, with no other
+         * tokens appearing on those lines, will be treated as a single comment.
+         *
+         * Only the comment content is provided; comment markers (e.g. //) are
+         * stripped out.  For block comments, leading whitespace and an asterisk
+         * will be stripped from the beginning of each line other than the first.
+         * Newlines are included in the output.
+         *
+         * Examples:
+         *
+         *   optional int32 foo = 1;  // Comment attached to foo.
+         *   // Comment attached to bar.
+         *   optional int32 bar = 2;
+         *
+         *   optional string baz = 3;
+         *   // Comment attached to baz.
+         *   // Another line attached to baz.
+         *
+         *   // Comment attached to qux.
+         *   //
+         *   // Another line attached to qux.
+         *   optional double qux = 4;
+         *
+         *   optional string corge = 5;
+         *   /&#42; Block comment attached
+         *    * to corge.  Leading asterisks
+         *    * will be removed. *&#47;
+         *   /&#42; Block comment attached to
+         *    * grault. *&#47;
+         *   optional int32 grault = 6;
+         * </pre>
+         */
+        public com.google.protobuf.ByteString
+            getLeadingCommentsBytes() {
+          java.lang.Object ref = leadingComments_;
+          if (ref instanceof String) {
+            com.google.protobuf.ByteString b = 
+                com.google.protobuf.ByteString.copyFromUtf8(
+                    (java.lang.String) ref);
+            leadingComments_ = b;
+            return b;
+          } else {
+            return (com.google.protobuf.ByteString) ref;
+          }
+        }
+        /**
+         * <code>optional string leading_comments = 3;</code>
+         *
+         * <pre>
+         * If this SourceCodeInfo represents a complete declaration, these are any
+         * comments appearing before and after the declaration which appear to be
+         * attached to the declaration.
+         *
+         * A series of line comments appearing on consecutive lines, with no other
+         * tokens appearing on those lines, will be treated as a single comment.
+         *
+         * Only the comment content is provided; comment markers (e.g. //) are
+         * stripped out.  For block comments, leading whitespace and an asterisk
+         * will be stripped from the beginning of each line other than the first.
+         * Newlines are included in the output.
+         *
+         * Examples:
+         *
+         *   optional int32 foo = 1;  // Comment attached to foo.
+         *   // Comment attached to bar.
+         *   optional int32 bar = 2;
+         *
+         *   optional string baz = 3;
+         *   // Comment attached to baz.
+         *   // Another line attached to baz.
+         *
+         *   // Comment attached to qux.
+         *   //
+         *   // Another line attached to qux.
+         *   optional double qux = 4;
+         *
+         *   optional string corge = 5;
+         *   /&#42; Block comment attached
+         *    * to corge.  Leading asterisks
+         *    * will be removed. *&#47;
+         *   /&#42; Block comment attached to
+         *    * grault. *&#47;
+         *   optional int32 grault = 6;
+         * </pre>
+         */
+        public Builder setLeadingComments(
+            java.lang.String value) {
           if (value == null) {
     throw new NullPointerException();
@@ -16783,4 +26359,44 @@
           return this;
         }
+        /**
+         * <code>optional string leading_comments = 3;</code>
+         *
+         * <pre>
+         * If this SourceCodeInfo represents a complete declaration, these are any
+         * comments appearing before and after the declaration which appear to be
+         * attached to the declaration.
+         *
+         * A series of line comments appearing on consecutive lines, with no other
+         * tokens appearing on those lines, will be treated as a single comment.
+         *
+         * Only the comment content is provided; comment markers (e.g. //) are
+         * stripped out.  For block comments, leading whitespace and an asterisk
+         * will be stripped from the beginning of each line other than the first.
+         * Newlines are included in the output.
+         *
+         * Examples:
+         *
+         *   optional int32 foo = 1;  // Comment attached to foo.
+         *   // Comment attached to bar.
+         *   optional int32 bar = 2;
+         *
+         *   optional string baz = 3;
+         *   // Comment attached to baz.
+         *   // Another line attached to baz.
+         *
+         *   // Comment attached to qux.
+         *   //
+         *   // Another line attached to qux.
+         *   optional double qux = 4;
+         *
+         *   optional string corge = 5;
+         *   /&#42; Block comment attached
+         *    * to corge.  Leading asterisks
+         *    * will be removed. *&#47;
+         *   /&#42; Block comment attached to
+         *    * grault. *&#47;
+         *   optional int32 grault = 6;
+         * </pre>
+         */
         public Builder clearLeadingComments() {
           bitField0_ = (bitField0_ & ~0x00000004);
@@ -16789,26 +26405,98 @@
           return this;
         }
-        void setLeadingComments(com.google.protobuf.ByteString value) {
-          bitField0_ |= 0x00000004;
+        /**
+         * <code>optional string leading_comments = 3;</code>
+         *
+         * <pre>
+         * If this SourceCodeInfo represents a complete declaration, these are any
+         * comments appearing before and after the declaration which appear to be
+         * attached to the declaration.
+         *
+         * A series of line comments appearing on consecutive lines, with no other
+         * tokens appearing on those lines, will be treated as a single comment.
+         *
+         * Only the comment content is provided; comment markers (e.g. //) are
+         * stripped out.  For block comments, leading whitespace and an asterisk
+         * will be stripped from the beginning of each line other than the first.
+         * Newlines are included in the output.
+         *
+         * Examples:
+         *
+         *   optional int32 foo = 1;  // Comment attached to foo.
+         *   // Comment attached to bar.
+         *   optional int32 bar = 2;
+         *
+         *   optional string baz = 3;
+         *   // Comment attached to baz.
+         *   // Another line attached to baz.
+         *
+         *   // Comment attached to qux.
+         *   //
+         *   // Another line attached to qux.
+         *   optional double qux = 4;
+         *
+         *   optional string corge = 5;
+         *   /&#42; Block comment attached
+         *    * to corge.  Leading asterisks
+         *    * will be removed. *&#47;
+         *   /&#42; Block comment attached to
+         *    * grault. *&#47;
+         *   optional int32 grault = 6;
+         * </pre>
+         */
+        public Builder setLeadingCommentsBytes(
+            com.google.protobuf.ByteString value) {
+          if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000004;
           leadingComments_ = value;
           onChanged();
-        }
-        
+          return this;
+        }
+
         // optional string trailing_comments = 4;
         private java.lang.Object trailingComments_ = "";
+        /**
+         * <code>optional string trailing_comments = 4;</code>
+         */
         public boolean hasTrailingComments() {
           return ((bitField0_ & 0x00000008) == 0x00000008);
         }
-        public String getTrailingComments() {
+        /**
+         * <code>optional string trailing_comments = 4;</code>
+         */
+        public java.lang.String getTrailingComments() {
           java.lang.Object ref = trailingComments_;
-          if (!(ref instanceof String)) {
-            String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          if (!(ref instanceof java.lang.String)) {
+            java.lang.String s = ((com.google.protobuf.ByteString) ref)
+                .toStringUtf8();
             trailingComments_ = s;
             return s;
           } else {
-            return (String) ref;
+            return (java.lang.String) ref;
           }
         }
-        public Builder setTrailingComments(String value) {
+        /**
+         * <code>optional string trailing_comments = 4;</code>
+         */
+        public com.google.protobuf.ByteString
+            getTrailingCommentsBytes() {
+          java.lang.Object ref = trailingComments_;
+          if (ref instanceof String) {
+            com.google.protobuf.ByteString b = 
+                com.google.protobuf.ByteString.copyFromUtf8(
+                    (java.lang.String) ref);
+            trailingComments_ = b;
+            return b;
+          } else {
+            return (com.google.protobuf.ByteString) ref;
+          }
+        }
+        /**
+         * <code>optional string trailing_comments = 4;</code>
+         */
+        public Builder setTrailingComments(
+            java.lang.String value) {
           if (value == null) {
     throw new NullPointerException();
@@ -16819,4 +26507,7 @@
           return this;
         }
+        /**
+         * <code>optional string trailing_comments = 4;</code>
+         */
         public Builder clearTrailingComments() {
           bitField0_ = (bitField0_ & ~0x00000008);
@@ -16825,42 +26516,295 @@
           return this;
         }
-        void setTrailingComments(com.google.protobuf.ByteString value) {
-          bitField0_ |= 0x00000008;
+        /**
+         * <code>optional string trailing_comments = 4;</code>
+         */
+        public Builder setTrailingCommentsBytes(
+            com.google.protobuf.ByteString value) {
+          if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000008;
           trailingComments_ = value;
           onChanged();
-        }
-        
+          return this;
+        }
+
         // @@protoc_insertion_point(builder_scope:google.protobuf.SourceCodeInfo.Location)
       }
-      
+
       static {
         defaultInstance = new Location(true);
         defaultInstance.initFields();
       }
-      
+
       // @@protoc_insertion_point(class_scope:google.protobuf.SourceCodeInfo.Location)
     }
-    
+
     // repeated .google.protobuf.SourceCodeInfo.Location location = 1;
     public static final int LOCATION_FIELD_NUMBER = 1;
     private java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> location_;
+    /**
+     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+     *
+     * <pre>
+     * A Location identifies a piece of source code in a .proto file which
+     * corresponds to a particular definition.  This information is intended
+     * to be useful to IDEs, code indexers, documentation generators, and similar
+     * tools.
+     *
+     * For example, say we have a file like:
+     *   message Foo {
+     *     optional string foo = 1;
+     *   }
+     * Let's look at just the field definition:
+     *   optional string foo = 1;
+     *   ^       ^^     ^^  ^  ^^^
+     *   a       bc     de  f  ghi
+     * We have the following locations:
+     *   span   path               represents
+     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+     *
+     * Notes:
+     * - A location may refer to a repeated field itself (i.e. not to any
+     *   particular index within it).  This is used whenever a set of elements are
+     *   logically enclosed in a single code segment.  For example, an entire
+     *   extend block (possibly containing multiple extension definitions) will
+     *   have an outer location whose path refers to the "extensions" repeated
+     *   field without an index.
+     * - Multiple locations may have the same path.  This happens when a single
+     *   logical declaration is spread out across multiple places.  The most
+     *   obvious example is the "extend" block again -- there may be multiple
+     *   extend blocks in the same scope, each of which will have the same path.
+     * - A location's span is not always a subset of its parent's span.  For
+     *   example, the "extendee" of an extension declaration appears at the
+     *   beginning of the "extend" block and is shared by all extensions within
+     *   the block.
+     * - Just because a location's span is a subset of some other location's span
+     *   does not mean that it is a descendent.  For example, a "group" defines
+     *   both a type and a field in a single declaration.  Thus, the locations
+     *   corresponding to the type and field and their components will overlap.
+     * - Code which tries to interpret locations should probably be designed to
+     *   ignore those that it doesn't understand, as more types of locations could
+     *   be recorded in the future.
+     * </pre>
+     */
     public java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> getLocationList() {
       return location_;
     }
+    /**
+     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+     *
+     * <pre>
+     * A Location identifies a piece of source code in a .proto file which
+     * corresponds to a particular definition.  This information is intended
+     * to be useful to IDEs, code indexers, documentation generators, and similar
+     * tools.
+     *
+     * For example, say we have a file like:
+     *   message Foo {
+     *     optional string foo = 1;
+     *   }
+     * Let's look at just the field definition:
+     *   optional string foo = 1;
+     *   ^       ^^     ^^  ^  ^^^
+     *   a       bc     de  f  ghi
+     * We have the following locations:
+     *   span   path               represents
+     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+     *
+     * Notes:
+     * - A location may refer to a repeated field itself (i.e. not to any
+     *   particular index within it).  This is used whenever a set of elements are
+     *   logically enclosed in a single code segment.  For example, an entire
+     *   extend block (possibly containing multiple extension definitions) will
+     *   have an outer location whose path refers to the "extensions" repeated
+     *   field without an index.
+     * - Multiple locations may have the same path.  This happens when a single
+     *   logical declaration is spread out across multiple places.  The most
+     *   obvious example is the "extend" block again -- there may be multiple
+     *   extend blocks in the same scope, each of which will have the same path.
+     * - A location's span is not always a subset of its parent's span.  For
+     *   example, the "extendee" of an extension declaration appears at the
+     *   beginning of the "extend" block and is shared by all extensions within
+     *   the block.
+     * - Just because a location's span is a subset of some other location's span
+     *   does not mean that it is a descendent.  For example, a "group" defines
+     *   both a type and a field in a single declaration.  Thus, the locations
+     *   corresponding to the type and field and their components will overlap.
+     * - Code which tries to interpret locations should probably be designed to
+     *   ignore those that it doesn't understand, as more types of locations could
+     *   be recorded in the future.
+     * </pre>
+     */
     public java.util.List<? extends com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> 
         getLocationOrBuilderList() {
       return location_;
     }
+    /**
+     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+     *
+     * <pre>
+     * A Location identifies a piece of source code in a .proto file which
+     * corresponds to a particular definition.  This information is intended
+     * to be useful to IDEs, code indexers, documentation generators, and similar
+     * tools.
+     *
+     * For example, say we have a file like:
+     *   message Foo {
+     *     optional string foo = 1;
+     *   }
+     * Let's look at just the field definition:
+     *   optional string foo = 1;
+     *   ^       ^^     ^^  ^  ^^^
+     *   a       bc     de  f  ghi
+     * We have the following locations:
+     *   span   path               represents
+     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+     *
+     * Notes:
+     * - A location may refer to a repeated field itself (i.e. not to any
+     *   particular index within it).  This is used whenever a set of elements are
+     *   logically enclosed in a single code segment.  For example, an entire
+     *   extend block (possibly containing multiple extension definitions) will
+     *   have an outer location whose path refers to the "extensions" repeated
+     *   field without an index.
+     * - Multiple locations may have the same path.  This happens when a single
+     *   logical declaration is spread out across multiple places.  The most
+     *   obvious example is the "extend" block again -- there may be multiple
+     *   extend blocks in the same scope, each of which will have the same path.
+     * - A location's span is not always a subset of its parent's span.  For
+     *   example, the "extendee" of an extension declaration appears at the
+     *   beginning of the "extend" block and is shared by all extensions within
+     *   the block.
+     * - Just because a location's span is a subset of some other location's span
+     *   does not mean that it is a descendent.  For example, a "group" defines
+     *   both a type and a field in a single declaration.  Thus, the locations
+     *   corresponding to the type and field and their components will overlap.
+     * - Code which tries to interpret locations should probably be designed to
+     *   ignore those that it doesn't understand, as more types of locations could
+     *   be recorded in the future.
+     * </pre>
+     */
     public int getLocationCount() {
       return location_.size();
     }
+    /**
+     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+     *
+     * <pre>
+     * A Location identifies a piece of source code in a .proto file which
+     * corresponds to a particular definition.  This information is intended
+     * to be useful to IDEs, code indexers, documentation generators, and similar
+     * tools.
+     *
+     * For example, say we have a file like:
+     *   message Foo {
+     *     optional string foo = 1;
+     *   }
+     * Let's look at just the field definition:
+     *   optional string foo = 1;
+     *   ^       ^^     ^^  ^  ^^^
+     *   a       bc     de  f  ghi
+     * We have the following locations:
+     *   span   path               represents
+     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+     *
+     * Notes:
+     * - A location may refer to a repeated field itself (i.e. not to any
+     *   particular index within it).  This is used whenever a set of elements are
+     *   logically enclosed in a single code segment.  For example, an entire
+     *   extend block (possibly containing multiple extension definitions) will
+     *   have an outer location whose path refers to the "extensions" repeated
+     *   field without an index.
+     * - Multiple locations may have the same path.  This happens when a single
+     *   logical declaration is spread out across multiple places.  The most
+     *   obvious example is the "extend" block again -- there may be multiple
+     *   extend blocks in the same scope, each of which will have the same path.
+     * - A location's span is not always a subset of its parent's span.  For
+     *   example, the "extendee" of an extension declaration appears at the
+     *   beginning of the "extend" block and is shared by all extensions within
+     *   the block.
+     * - Just because a location's span is a subset of some other location's span
+     *   does not mean that it is a descendent.  For example, a "group" defines
+     *   both a type and a field in a single declaration.  Thus, the locations
+     *   corresponding to the type and field and their components will overlap.
+     * - Code which tries to interpret locations should probably be designed to
+     *   ignore those that it doesn't understand, as more types of locations could
+     *   be recorded in the future.
+     * </pre>
+     */
     public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location getLocation(int index) {
       return location_.get(index);
     }
+    /**
+     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+     *
+     * <pre>
+     * A Location identifies a piece of source code in a .proto file which
+     * corresponds to a particular definition.  This information is intended
+     * to be useful to IDEs, code indexers, documentation generators, and similar
+     * tools.
+     *
+     * For example, say we have a file like:
+     *   message Foo {
+     *     optional string foo = 1;
+     *   }
+     * Let's look at just the field definition:
+     *   optional string foo = 1;
+     *   ^       ^^     ^^  ^  ^^^
+     *   a       bc     de  f  ghi
+     * We have the following locations:
+     *   span   path               represents
+     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+     *
+     * Notes:
+     * - A location may refer to a repeated field itself (i.e. not to any
+     *   particular index within it).  This is used whenever a set of elements are
+     *   logically enclosed in a single code segment.  For example, an entire
+     *   extend block (possibly containing multiple extension definitions) will
+     *   have an outer location whose path refers to the "extensions" repeated
+     *   field without an index.
+     * - Multiple locations may have the same path.  This happens when a single
+     *   logical declaration is spread out across multiple places.  The most
+     *   obvious example is the "extend" block again -- there may be multiple
+     *   extend blocks in the same scope, each of which will have the same path.
+     * - A location's span is not always a subset of its parent's span.  For
+     *   example, the "extendee" of an extension declaration appears at the
+     *   beginning of the "extend" block and is shared by all extensions within
+     *   the block.
+     * - Just because a location's span is a subset of some other location's span
+     *   does not mean that it is a descendent.  For example, a "group" defines
+     *   both a type and a field in a single declaration.  Thus, the locations
+     *   corresponding to the type and field and their components will overlap.
+     * - Code which tries to interpret locations should probably be designed to
+     *   ignore those that it doesn't understand, as more types of locations could
+     *   be recorded in the future.
+     * </pre>
+     */
     public com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder getLocationOrBuilder(
         int index) {
       return location_.get(index);
     }
-    
+
     private void initFields() {
       location_ = java.util.Collections.emptyList();
@@ -16870,9 +26814,9 @@
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
-      
+
       memoizedIsInitialized = 1;
       return true;
     }
-    
+
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
@@ -16883,10 +26827,10 @@
       getUnknownFields().writeTo(output);
     }
-    
+
     private int memoizedSerializedSize = -1;
     public int getSerializedSize() {
       int size = memoizedSerializedSize;
       if (size != -1) return size;
-    
+
       size = 0;
       for (int i = 0; i < location_.size(); i++) {
@@ -16898,5 +26842,5 @@
       return size;
     }
-    
+
     private static final long serialVersionUID = 0L;
     @java.lang.Override
@@ -16905,9 +26849,9 @@
       return super.writeReplace();
     }
-    
+
     public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
@@ -16915,10 +26859,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
@@ -16926,10 +26869,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
@@ -16937,15 +26879,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseDelimitedFrom(
@@ -16953,15 +26889,10 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
     public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
@@ -16969,8 +26900,7 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
@@ -16979,5 +26909,5 @@
     }
     public Builder toBuilder() { return newBuilder(this); }
-    
+
     @java.lang.Override
     protected Builder newBuilderForType(
@@ -16986,4 +26916,12 @@
       return builder;
     }
+    /**
+     * Protobuf type {@code google.protobuf.SourceCodeInfo}
+     *
+     * <pre>
+     * Encapsulates information about the original source file from which a
+     * FileDescriptorProto was generated.
+     * </pre>
+     */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
@@ -16993,16 +26931,19 @@
         return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_descriptor;
       }
-      
+
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable;
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.protobuf.DescriptorProtos.SourceCodeInfo.class, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder.class);
+      }
+
       // Construct using com.google.protobuf.DescriptorProtos.SourceCodeInfo.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
-      
-      private Builder(BuilderParent parent) {
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
         super(parent);
         maybeForceBuilderInitialization();
@@ -17016,5 +26957,5 @@
         return new Builder();
       }
-      
+
       public Builder clear() {
         super.clear();
@@ -17027,18 +26968,18 @@
         return this;
       }
-      
+
       public Builder clone() {
         return create().mergeFrom(buildPartial());
       }
-      
+
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDescriptor();
-      }
-      
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_descriptor;
+      }
+
       public com.google.protobuf.DescriptorProtos.SourceCodeInfo getDefaultInstanceForType() {
         return com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance();
       }
-      
+
       public com.google.protobuf.DescriptorProtos.SourceCodeInfo build() {
         com.google.protobuf.DescriptorProtos.SourceCodeInfo result = buildPartial();
@@ -17048,15 +26989,5 @@
         return result;
       }
-      
-      private com.google.protobuf.DescriptorProtos.SourceCodeInfo buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        com.google.protobuf.DescriptorProtos.SourceCodeInfo result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
+
       public com.google.protobuf.DescriptorProtos.SourceCodeInfo buildPartial() {
         com.google.protobuf.DescriptorProtos.SourceCodeInfo result = new com.google.protobuf.DescriptorProtos.SourceCodeInfo(this);
@@ -17074,5 +27005,5 @@
         return result;
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.Message other) {
         if (other instanceof com.google.protobuf.DescriptorProtos.SourceCodeInfo) {
@@ -17083,5 +27014,5 @@
         }
       }
-      
+
       public Builder mergeFrom(com.google.protobuf.DescriptorProtos.SourceCodeInfo other) {
         if (other == com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance()) return this;
@@ -17115,44 +27046,28 @@
         return this;
       }
-      
+
       public final boolean isInitialized() {
         return true;
       }
-      
+
       public Builder mergeFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder(
-            this.getUnknownFields());
-        while (true) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              this.setUnknownFields(unknownFields.build());
-              onChanged();
-              return this;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                this.setUnknownFields(unknownFields.build());
-                onChanged();
-                return this;
-              }
-              break;
-            }
-            case 10: {
-              com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder subBuilder = com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addLocation(subBuilder.buildPartial());
-              break;
-            }
+        com.google.protobuf.DescriptorProtos.SourceCodeInfo parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.google.protobuf.DescriptorProtos.SourceCodeInfo) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
         }
-      }
-      
+        return this;
+      }
       private int bitField0_;
-      
+
       // repeated .google.protobuf.SourceCodeInfo.Location location = 1;
       private java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> location_ =
@@ -17164,8 +27079,57 @@
          }
       }
-      
+
       private com.google.protobuf.RepeatedFieldBuilder<
           com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder, com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> locationBuilder_;
-      
+
+      /**
+       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+       *
+       * <pre>
+       * A Location identifies a piece of source code in a .proto file which
+       * corresponds to a particular definition.  This information is intended
+       * to be useful to IDEs, code indexers, documentation generators, and similar
+       * tools.
+       *
+       * For example, say we have a file like:
+       *   message Foo {
+       *     optional string foo = 1;
+       *   }
+       * Let's look at just the field definition:
+       *   optional string foo = 1;
+       *   ^       ^^     ^^  ^  ^^^
+       *   a       bc     de  f  ghi
+       * We have the following locations:
+       *   span   path               represents
+       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+       *
+       * Notes:
+       * - A location may refer to a repeated field itself (i.e. not to any
+       *   particular index within it).  This is used whenever a set of elements are
+       *   logically enclosed in a single code segment.  For example, an entire
+       *   extend block (possibly containing multiple extension definitions) will
+       *   have an outer location whose path refers to the "extensions" repeated
+       *   field without an index.
+       * - Multiple locations may have the same path.  This happens when a single
+       *   logical declaration is spread out across multiple places.  The most
+       *   obvious example is the "extend" block again -- there may be multiple
+       *   extend blocks in the same scope, each of which will have the same path.
+       * - A location's span is not always a subset of its parent's span.  For
+       *   example, the "extendee" of an extension declaration appears at the
+       *   beginning of the "extend" block and is shared by all extensions within
+       *   the block.
+       * - Just because a location's span is a subset of some other location's span
+       *   does not mean that it is a descendent.  For example, a "group" defines
+       *   both a type and a field in a single declaration.  Thus, the locations
+       *   corresponding to the type and field and their components will overlap.
+       * - Code which tries to interpret locations should probably be designed to
+       *   ignore those that it doesn't understand, as more types of locations could
+       *   be recorded in the future.
+       * </pre>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> getLocationList() {
         if (locationBuilder_ == null) {
@@ -17175,4 +27139,53 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+       *
+       * <pre>
+       * A Location identifies a piece of source code in a .proto file which
+       * corresponds to a particular definition.  This information is intended
+       * to be useful to IDEs, code indexers, documentation generators, and similar
+       * tools.
+       *
+       * For example, say we have a file like:
+       *   message Foo {
+       *     optional string foo = 1;
+       *   }
+       * Let's look at just the field definition:
+       *   optional string foo = 1;
+       *   ^       ^^     ^^  ^  ^^^
+       *   a       bc     de  f  ghi
+       * We have the following locations:
+       *   span   path               represents
+       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+       *
+       * Notes:
+       * - A location may refer to a repeated field itself (i.e. not to any
+       *   particular index within it).  This is used whenever a set of elements are
+       *   logically enclosed in a single code segment.  For example, an entire
+       *   extend block (possibly containing multiple extension definitions) will
+       *   have an outer location whose path refers to the "extensions" repeated
+       *   field without an index.
+       * - Multiple locations may have the same path.  This happens when a single
+       *   logical declaration is spread out across multiple places.  The most
+       *   obvious example is the "extend" block again -- there may be multiple
+       *   extend blocks in the same scope, each of which will have the same path.
+       * - A location's span is not always a subset of its parent's span.  For
+       *   example, the "extendee" of an extension declaration appears at the
+       *   beginning of the "extend" block and is shared by all extensions within
+       *   the block.
+       * - Just because a location's span is a subset of some other location's span
+       *   does not mean that it is a descendent.  For example, a "group" defines
+       *   both a type and a field in a single declaration.  Thus, the locations
+       *   corresponding to the type and field and their components will overlap.
+       * - Code which tries to interpret locations should probably be designed to
+       *   ignore those that it doesn't understand, as more types of locations could
+       *   be recorded in the future.
+       * </pre>
+       */
       public int getLocationCount() {
         if (locationBuilder_ == null) {
@@ -17182,4 +27195,53 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+       *
+       * <pre>
+       * A Location identifies a piece of source code in a .proto file which
+       * corresponds to a particular definition.  This information is intended
+       * to be useful to IDEs, code indexers, documentation generators, and similar
+       * tools.
+       *
+       * For example, say we have a file like:
+       *   message Foo {
+       *     optional string foo = 1;
+       *   }
+       * Let's look at just the field definition:
+       *   optional string foo = 1;
+       *   ^       ^^     ^^  ^  ^^^
+       *   a       bc     de  f  ghi
+       * We have the following locations:
+       *   span   path               represents
+       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+       *
+       * Notes:
+       * - A location may refer to a repeated field itself (i.e. not to any
+       *   particular index within it).  This is used whenever a set of elements are
+       *   logically enclosed in a single code segment.  For example, an entire
+       *   extend block (possibly containing multiple extension definitions) will
+       *   have an outer location whose path refers to the "extensions" repeated
+       *   field without an index.
+       * - Multiple locations may have the same path.  This happens when a single
+       *   logical declaration is spread out across multiple places.  The most
+       *   obvious example is the "extend" block again -- there may be multiple
+       *   extend blocks in the same scope, each of which will have the same path.
+       * - A location's span is not always a subset of its parent's span.  For
+       *   example, the "extendee" of an extension declaration appears at the
+       *   beginning of the "extend" block and is shared by all extensions within
+       *   the block.
+       * - Just because a location's span is a subset of some other location's span
+       *   does not mean that it is a descendent.  For example, a "group" defines
+       *   both a type and a field in a single declaration.  Thus, the locations
+       *   corresponding to the type and field and their components will overlap.
+       * - Code which tries to interpret locations should probably be designed to
+       *   ignore those that it doesn't understand, as more types of locations could
+       *   be recorded in the future.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location getLocation(int index) {
         if (locationBuilder_ == null) {
@@ -17189,4 +27251,53 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+       *
+       * <pre>
+       * A Location identifies a piece of source code in a .proto file which
+       * corresponds to a particular definition.  This information is intended
+       * to be useful to IDEs, code indexers, documentation generators, and similar
+       * tools.
+       *
+       * For example, say we have a file like:
+       *   message Foo {
+       *     optional string foo = 1;
+       *   }
+       * Let's look at just the field definition:
+       *   optional string foo = 1;
+       *   ^       ^^     ^^  ^  ^^^
+       *   a       bc     de  f  ghi
+       * We have the following locations:
+       *   span   path               represents
+       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+       *
+       * Notes:
+       * - A location may refer to a repeated field itself (i.e. not to any
+       *   particular index within it).  This is used whenever a set of elements are
+       *   logically enclosed in a single code segment.  For example, an entire
+       *   extend block (possibly containing multiple extension definitions) will
+       *   have an outer location whose path refers to the "extensions" repeated
+       *   field without an index.
+       * - Multiple locations may have the same path.  This happens when a single
+       *   logical declaration is spread out across multiple places.  The most
+       *   obvious example is the "extend" block again -- there may be multiple
+       *   extend blocks in the same scope, each of which will have the same path.
+       * - A location's span is not always a subset of its parent's span.  For
+       *   example, the "extendee" of an extension declaration appears at the
+       *   beginning of the "extend" block and is shared by all extensions within
+       *   the block.
+       * - Just because a location's span is a subset of some other location's span
+       *   does not mean that it is a descendent.  For example, a "group" defines
+       *   both a type and a field in a single declaration.  Thus, the locations
+       *   corresponding to the type and field and their components will overlap.
+       * - Code which tries to interpret locations should probably be designed to
+       *   ignore those that it doesn't understand, as more types of locations could
+       *   be recorded in the future.
+       * </pre>
+       */
       public Builder setLocation(
           int index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location value) {
@@ -17203,4 +27314,53 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+       *
+       * <pre>
+       * A Location identifies a piece of source code in a .proto file which
+       * corresponds to a particular definition.  This information is intended
+       * to be useful to IDEs, code indexers, documentation generators, and similar
+       * tools.
+       *
+       * For example, say we have a file like:
+       *   message Foo {
+       *     optional string foo = 1;
+       *   }
+       * Let's look at just the field definition:
+       *   optional string foo = 1;
+       *   ^       ^^     ^^  ^  ^^^
+       *   a       bc     de  f  ghi
+       * We have the following locations:
+       *   span   path               represents
+       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+       *
+       * Notes:
+       * - A location may refer to a repeated field itself (i.e. not to any
+       *   particular index within it).  This is used whenever a set of elements are
+       *   logically enclosed in a single code segment.  For example, an entire
+       *   extend block (possibly containing multiple extension definitions) will
+       *   have an outer location whose path refers to the "extensions" repeated
+       *   field without an index.
+       * - Multiple locations may have the same path.  This happens when a single
+       *   logical declaration is spread out across multiple places.  The most
+       *   obvious example is the "extend" block again -- there may be multiple
+       *   extend blocks in the same scope, each of which will have the same path.
+       * - A location's span is not always a subset of its parent's span.  For
+       *   example, the "extendee" of an extension declaration appears at the
+       *   beginning of the "extend" block and is shared by all extensions within
+       *   the block.
+       * - Just because a location's span is a subset of some other location's span
+       *   does not mean that it is a descendent.  For example, a "group" defines
+       *   both a type and a field in a single declaration.  Thus, the locations
+       *   corresponding to the type and field and their components will overlap.
+       * - Code which tries to interpret locations should probably be designed to
+       *   ignore those that it doesn't understand, as more types of locations could
+       *   be recorded in the future.
+       * </pre>
+       */
       public Builder setLocation(
           int index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder builderForValue) {
@@ -17214,4 +27374,53 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+       *
+       * <pre>
+       * A Location identifies a piece of source code in a .proto file which
+       * corresponds to a particular definition.  This information is intended
+       * to be useful to IDEs, code indexers, documentation generators, and similar
+       * tools.
+       *
+       * For example, say we have a file like:
+       *   message Foo {
+       *     optional string foo = 1;
+       *   }
+       * Let's look at just the field definition:
+       *   optional string foo = 1;
+       *   ^       ^^     ^^  ^  ^^^
+       *   a       bc     de  f  ghi
+       * We have the following locations:
+       *   span   path               represents
+       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+       *
+       * Notes:
+       * - A location may refer to a repeated field itself (i.e. not to any
+       *   particular index within it).  This is used whenever a set of elements are
+       *   logically enclosed in a single code segment.  For example, an entire
+       *   extend block (possibly containing multiple extension definitions) will
+       *   have an outer location whose path refers to the "extensions" repeated
+       *   field without an index.
+       * - Multiple locations may have the same path.  This happens when a single
+       *   logical declaration is spread out across multiple places.  The most
+       *   obvious example is the "extend" block again -- there may be multiple
+       *   extend blocks in the same scope, each of which will have the same path.
+       * - A location's span is not always a subset of its parent's span.  For
+       *   example, the "extendee" of an extension declaration appears at the
+       *   beginning of the "extend" block and is shared by all extensions within
+       *   the block.
+       * - Just because a location's span is a subset of some other location's span
+       *   does not mean that it is a descendent.  For example, a "group" defines
+       *   both a type and a field in a single declaration.  Thus, the locations
+       *   corresponding to the type and field and their components will overlap.
+       * - Code which tries to interpret locations should probably be designed to
+       *   ignore those that it doesn't understand, as more types of locations could
+       *   be recorded in the future.
+       * </pre>
+       */
       public Builder addLocation(com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location value) {
         if (locationBuilder_ == null) {
@@ -17227,4 +27436,53 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+       *
+       * <pre>
+       * A Location identifies a piece of source code in a .proto file which
+       * corresponds to a particular definition.  This information is intended
+       * to be useful to IDEs, code indexers, documentation generators, and similar
+       * tools.
+       *
+       * For example, say we have a file like:
+       *   message Foo {
+       *     optional string foo = 1;
+       *   }
+       * Let's look at just the field definition:
+       *   optional string foo = 1;
+       *   ^       ^^     ^^  ^  ^^^
+       *   a       bc     de  f  ghi
+       * We have the following locations:
+       *   span   path               represents
+       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+       *
+       * Notes:
+       * - A location may refer to a repeated field itself (i.e. not to any
+       *   particular index within it).  This is used whenever a set of elements are
+       *   logically enclosed in a single code segment.  For example, an entire
+       *   extend block (possibly containing multiple extension definitions) will
+       *   have an outer location whose path refers to the "extensions" repeated
+       *   field without an index.
+       * - Multiple locations may have the same path.  This happens when a single
+       *   logical declaration is spread out across multiple places.  The most
+       *   obvious example is the "extend" block again -- there may be multiple
+       *   extend blocks in the same scope, each of which will have the same path.
+       * - A location's span is not always a subset of its parent's span.  For
+       *   example, the "extendee" of an extension declaration appears at the
+       *   beginning of the "extend" block and is shared by all extensions within
+       *   the block.
+       * - Just because a location's span is a subset of some other location's span
+       *   does not mean that it is a descendent.  For example, a "group" defines
+       *   both a type and a field in a single declaration.  Thus, the locations
+       *   corresponding to the type and field and their components will overlap.
+       * - Code which tries to interpret locations should probably be designed to
+       *   ignore those that it doesn't understand, as more types of locations could
+       *   be recorded in the future.
+       * </pre>
+       */
       public Builder addLocation(
           int index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location value) {
@@ -17241,4 +27499,53 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+       *
+       * <pre>
+       * A Location identifies a piece of source code in a .proto file which
+       * corresponds to a particular definition.  This information is intended
+       * to be useful to IDEs, code indexers, documentation generators, and similar
+       * tools.
+       *
+       * For example, say we have a file like:
+       *   message Foo {
+       *     optional string foo = 1;
+       *   }
+       * Let's look at just the field definition:
+       *   optional string foo = 1;
+       *   ^       ^^     ^^  ^  ^^^
+       *   a       bc     de  f  ghi
+       * We have the following locations:
+       *   span   path               represents
+       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+       *
+       * Notes:
+       * - A location may refer to a repeated field itself (i.e. not to any
+       *   particular index within it).  This is used whenever a set of elements are
+       *   logically enclosed in a single code segment.  For example, an entire
+       *   extend block (possibly containing multiple extension definitions) will
+       *   have an outer location whose path refers to the "extensions" repeated
+       *   field without an index.
+       * - Multiple locations may have the same path.  This happens when a single
+       *   logical declaration is spread out across multiple places.  The most
+       *   obvious example is the "extend" block again -- there may be multiple
+       *   extend blocks in the same scope, each of which will have the same path.
+       * - A location's span is not always a subset of its parent's span.  For
+       *   example, the "extendee" of an extension declaration appears at the
+       *   beginning of the "extend" block and is shared by all extensions within
+       *   the block.
+       * - Just because a location's span is a subset of some other location's span
+       *   does not mean that it is a descendent.  For example, a "group" defines
+       *   both a type and a field in a single declaration.  Thus, the locations
+       *   corresponding to the type and field and their components will overlap.
+       * - Code which tries to interpret locations should probably be designed to
+       *   ignore those that it doesn't understand, as more types of locations could
+       *   be recorded in the future.
+       * </pre>
+       */
       public Builder addLocation(
           com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder builderForValue) {
@@ -17252,4 +27559,53 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+       *
+       * <pre>
+       * A Location identifies a piece of source code in a .proto file which
+       * corresponds to a particular definition.  This information is intended
+       * to be useful to IDEs, code indexers, documentation generators, and similar
+       * tools.
+       *
+       * For example, say we have a file like:
+       *   message Foo {
+       *     optional string foo = 1;
+       *   }
+       * Let's look at just the field definition:
+       *   optional string foo = 1;
+       *   ^       ^^     ^^  ^  ^^^
+       *   a       bc     de  f  ghi
+       * We have the following locations:
+       *   span   path               represents
+       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+       *
+       * Notes:
+       * - A location may refer to a repeated field itself (i.e. not to any
+       *   particular index within it).  This is used whenever a set of elements are
+       *   logically enclosed in a single code segment.  For example, an entire
+       *   extend block (possibly containing multiple extension definitions) will
+       *   have an outer location whose path refers to the "extensions" repeated
+       *   field without an index.
+       * - Multiple locations may have the same path.  This happens when a single
+       *   logical declaration is spread out across multiple places.  The most
+       *   obvious example is the "extend" block again -- there may be multiple
+       *   extend blocks in the same scope, each of which will have the same path.
+       * - A location's span is not always a subset of its parent's span.  For
+       *   example, the "extendee" of an extension declaration appears at the
+       *   beginning of the "extend" block and is shared by all extensions within
+       *   the block.
+       * - Just because a location's span is a subset of some other location's span
+       *   does not mean that it is a descendent.  For example, a "group" defines
+       *   both a type and a field in a single declaration.  Thus, the locations
+       *   corresponding to the type and field and their components will overlap.
+       * - Code which tries to interpret locations should probably be designed to
+       *   ignore those that it doesn't understand, as more types of locations could
+       *   be recorded in the future.
+       * </pre>
+       */
       public Builder addLocation(
           int index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder builderForValue) {
@@ -17263,4 +27619,53 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+       *
+       * <pre>
+       * A Location identifies a piece of source code in a .proto file which
+       * corresponds to a particular definition.  This information is intended
+       * to be useful to IDEs, code indexers, documentation generators, and similar
+       * tools.
+       *
+       * For example, say we have a file like:
+       *   message Foo {
+       *     optional string foo = 1;
+       *   }
+       * Let's look at just the field definition:
+       *   optional string foo = 1;
+       *   ^       ^^     ^^  ^  ^^^
+       *   a       bc     de  f  ghi
+       * We have the following locations:
+       *   span   path               represents
+       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+       *
+       * Notes:
+       * - A location may refer to a repeated field itself (i.e. not to any
+       *   particular index within it).  This is used whenever a set of elements are
+       *   logically enclosed in a single code segment.  For example, an entire
+       *   extend block (possibly containing multiple extension definitions) will
+       *   have an outer location whose path refers to the "extensions" repeated
+       *   field without an index.
+       * - Multiple locations may have the same path.  This happens when a single
+       *   logical declaration is spread out across multiple places.  The most
+       *   obvious example is the "extend" block again -- there may be multiple
+       *   extend blocks in the same scope, each of which will have the same path.
+       * - A location's span is not always a subset of its parent's span.  For
+       *   example, the "extendee" of an extension declaration appears at the
+       *   beginning of the "extend" block and is shared by all extensions within
+       *   the block.
+       * - Just because a location's span is a subset of some other location's span
+       *   does not mean that it is a descendent.  For example, a "group" defines
+       *   both a type and a field in a single declaration.  Thus, the locations
+       *   corresponding to the type and field and their components will overlap.
+       * - Code which tries to interpret locations should probably be designed to
+       *   ignore those that it doesn't understand, as more types of locations could
+       *   be recorded in the future.
+       * </pre>
+       */
       public Builder addAllLocation(
           java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> values) {
@@ -17274,4 +27679,53 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+       *
+       * <pre>
+       * A Location identifies a piece of source code in a .proto file which
+       * corresponds to a particular definition.  This information is intended
+       * to be useful to IDEs, code indexers, documentation generators, and similar
+       * tools.
+       *
+       * For example, say we have a file like:
+       *   message Foo {
+       *     optional string foo = 1;
+       *   }
+       * Let's look at just the field definition:
+       *   optional string foo = 1;
+       *   ^       ^^     ^^  ^  ^^^
+       *   a       bc     de  f  ghi
+       * We have the following locations:
+       *   span   path               represents
+       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+       *
+       * Notes:
+       * - A location may refer to a repeated field itself (i.e. not to any
+       *   particular index within it).  This is used whenever a set of elements are
+       *   logically enclosed in a single code segment.  For example, an entire
+       *   extend block (possibly containing multiple extension definitions) will
+       *   have an outer location whose path refers to the "extensions" repeated
+       *   field without an index.
+       * - Multiple locations may have the same path.  This happens when a single
+       *   logical declaration is spread out across multiple places.  The most
+       *   obvious example is the "extend" block again -- there may be multiple
+       *   extend blocks in the same scope, each of which will have the same path.
+       * - A location's span is not always a subset of its parent's span.  For
+       *   example, the "extendee" of an extension declaration appears at the
+       *   beginning of the "extend" block and is shared by all extensions within
+       *   the block.
+       * - Just because a location's span is a subset of some other location's span
+       *   does not mean that it is a descendent.  For example, a "group" defines
+       *   both a type and a field in a single declaration.  Thus, the locations
+       *   corresponding to the type and field and their components will overlap.
+       * - Code which tries to interpret locations should probably be designed to
+       *   ignore those that it doesn't understand, as more types of locations could
+       *   be recorded in the future.
+       * </pre>
+       */
       public Builder clearLocation() {
         if (locationBuilder_ == null) {
@@ -17284,4 +27738,53 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+       *
+       * <pre>
+       * A Location identifies a piece of source code in a .proto file which
+       * corresponds to a particular definition.  This information is intended
+       * to be useful to IDEs, code indexers, documentation generators, and similar
+       * tools.
+       *
+       * For example, say we have a file like:
+       *   message Foo {
+       *     optional string foo = 1;
+       *   }
+       * Let's look at just the field definition:
+       *   optional string foo = 1;
+       *   ^       ^^     ^^  ^  ^^^
+       *   a       bc     de  f  ghi
+       * We have the following locations:
+       *   span   path               represents
+       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+       *
+       * Notes:
+       * - A location may refer to a repeated field itself (i.e. not to any
+       *   particular index within it).  This is used whenever a set of elements are
+       *   logically enclosed in a single code segment.  For example, an entire
+       *   extend block (possibly containing multiple extension definitions) will
+       *   have an outer location whose path refers to the "extensions" repeated
+       *   field without an index.
+       * - Multiple locations may have the same path.  This happens when a single
+       *   logical declaration is spread out across multiple places.  The most
+       *   obvious example is the "extend" block again -- there may be multiple
+       *   extend blocks in the same scope, each of which will have the same path.
+       * - A location's span is not always a subset of its parent's span.  For
+       *   example, the "extendee" of an extension declaration appears at the
+       *   beginning of the "extend" block and is shared by all extensions within
+       *   the block.
+       * - Just because a location's span is a subset of some other location's span
+       *   does not mean that it is a descendent.  For example, a "group" defines
+       *   both a type and a field in a single declaration.  Thus, the locations
+       *   corresponding to the type and field and their components will overlap.
+       * - Code which tries to interpret locations should probably be designed to
+       *   ignore those that it doesn't understand, as more types of locations could
+       *   be recorded in the future.
+       * </pre>
+       */
       public Builder removeLocation(int index) {
         if (locationBuilder_ == null) {
@@ -17294,8 +27797,106 @@
         return this;
       }
+      /**
+       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+       *
+       * <pre>
+       * A Location identifies a piece of source code in a .proto file which
+       * corresponds to a particular definition.  This information is intended
+       * to be useful to IDEs, code indexers, documentation generators, and similar
+       * tools.
+       *
+       * For example, say we have a file like:
+       *   message Foo {
+       *     optional string foo = 1;
+       *   }
+       * Let's look at just the field definition:
+       *   optional string foo = 1;
+       *   ^       ^^     ^^  ^  ^^^
+       *   a       bc     de  f  ghi
+       * We have the following locations:
+       *   span   path               represents
+       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+       *
+       * Notes:
+       * - A location may refer to a repeated field itself (i.e. not to any
+       *   particular index within it).  This is used whenever a set of elements are
+       *   logically enclosed in a single code segment.  For example, an entire
+       *   extend block (possibly containing multiple extension definitions) will
+       *   have an outer location whose path refers to the "extensions" repeated
+       *   field without an index.
+       * - Multiple locations may have the same path.  This happens when a single
+       *   logical declaration is spread out across multiple places.  The most
+       *   obvious example is the "extend" block again -- there may be multiple
+       *   extend blocks in the same scope, each of which will have the same path.
+       * - A location's span is not always a subset of its parent's span.  For
+       *   example, the "extendee" of an extension declaration appears at the
+       *   beginning of the "extend" block and is shared by all extensions within
+       *   the block.
+       * - Just because a location's span is a subset of some other location's span
+       *   does not mean that it is a descendent.  For example, a "group" defines
+       *   both a type and a field in a single declaration.  Thus, the locations
+       *   corresponding to the type and field and their components will overlap.
+       * - Code which tries to interpret locations should probably be designed to
+       *   ignore those that it doesn't understand, as more types of locations could
+       *   be recorded in the future.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder getLocationBuilder(
           int index) {
         return getLocationFieldBuilder().getBuilder(index);
       }
+      /**
+       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+       *
+       * <pre>
+       * A Location identifies a piece of source code in a .proto file which
+       * corresponds to a particular definition.  This information is intended
+       * to be useful to IDEs, code indexers, documentation generators, and similar
+       * tools.
+       *
+       * For example, say we have a file like:
+       *   message Foo {
+       *     optional string foo = 1;
+       *   }
+       * Let's look at just the field definition:
+       *   optional string foo = 1;
+       *   ^       ^^     ^^  ^  ^^^
+       *   a       bc     de  f  ghi
+       * We have the following locations:
+       *   span   path               represents
+       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+       *
+       * Notes:
+       * - A location may refer to a repeated field itself (i.e. not to any
+       *   particular index within it).  This is used whenever a set of elements are
+       *   logically enclosed in a single code segment.  For example, an entire
+       *   extend block (possibly containing multiple extension definitions) will
+       *   have an outer location whose path refers to the "extensions" repeated
+       *   field without an index.
+       * - Multiple locations may have the same path.  This happens when a single
+       *   logical declaration is spread out across multiple places.  The most
+       *   obvious example is the "extend" block again -- there may be multiple
+       *   extend blocks in the same scope, each of which will have the same path.
+       * - A location's span is not always a subset of its parent's span.  For
+       *   example, the "extendee" of an extension declaration appears at the
+       *   beginning of the "extend" block and is shared by all extensions within
+       *   the block.
+       * - Just because a location's span is a subset of some other location's span
+       *   does not mean that it is a descendent.  For example, a "group" defines
+       *   both a type and a field in a single declaration.  Thus, the locations
+       *   corresponding to the type and field and their components will overlap.
+       * - Code which tries to interpret locations should probably be designed to
+       *   ignore those that it doesn't understand, as more types of locations could
+       *   be recorded in the future.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder getLocationOrBuilder(
           int index) {
@@ -17305,4 +27906,53 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+       *
+       * <pre>
+       * A Location identifies a piece of source code in a .proto file which
+       * corresponds to a particular definition.  This information is intended
+       * to be useful to IDEs, code indexers, documentation generators, and similar
+       * tools.
+       *
+       * For example, say we have a file like:
+       *   message Foo {
+       *     optional string foo = 1;
+       *   }
+       * Let's look at just the field definition:
+       *   optional string foo = 1;
+       *   ^       ^^     ^^  ^  ^^^
+       *   a       bc     de  f  ghi
+       * We have the following locations:
+       *   span   path               represents
+       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+       *
+       * Notes:
+       * - A location may refer to a repeated field itself (i.e. not to any
+       *   particular index within it).  This is used whenever a set of elements are
+       *   logically enclosed in a single code segment.  For example, an entire
+       *   extend block (possibly containing multiple extension definitions) will
+       *   have an outer location whose path refers to the "extensions" repeated
+       *   field without an index.
+       * - Multiple locations may have the same path.  This happens when a single
+       *   logical declaration is spread out across multiple places.  The most
+       *   obvious example is the "extend" block again -- there may be multiple
+       *   extend blocks in the same scope, each of which will have the same path.
+       * - A location's span is not always a subset of its parent's span.  For
+       *   example, the "extendee" of an extension declaration appears at the
+       *   beginning of the "extend" block and is shared by all extensions within
+       *   the block.
+       * - Just because a location's span is a subset of some other location's span
+       *   does not mean that it is a descendent.  For example, a "group" defines
+       *   both a type and a field in a single declaration.  Thus, the locations
+       *   corresponding to the type and field and their components will overlap.
+       * - Code which tries to interpret locations should probably be designed to
+       *   ignore those that it doesn't understand, as more types of locations could
+       *   be recorded in the future.
+       * </pre>
+       */
       public java.util.List<? extends com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> 
            getLocationOrBuilderList() {
@@ -17313,8 +27963,106 @@
         }
       }
+      /**
+       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+       *
+       * <pre>
+       * A Location identifies a piece of source code in a .proto file which
+       * corresponds to a particular definition.  This information is intended
+       * to be useful to IDEs, code indexers, documentation generators, and similar
+       * tools.
+       *
+       * For example, say we have a file like:
+       *   message Foo {
+       *     optional string foo = 1;
+       *   }
+       * Let's look at just the field definition:
+       *   optional string foo = 1;
+       *   ^       ^^     ^^  ^  ^^^
+       *   a       bc     de  f  ghi
+       * We have the following locations:
+       *   span   path               represents
+       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+       *
+       * Notes:
+       * - A location may refer to a repeated field itself (i.e. not to any
+       *   particular index within it).  This is used whenever a set of elements are
+       *   logically enclosed in a single code segment.  For example, an entire
+       *   extend block (possibly containing multiple extension definitions) will
+       *   have an outer location whose path refers to the "extensions" repeated
+       *   field without an index.
+       * - Multiple locations may have the same path.  This happens when a single
+       *   logical declaration is spread out across multiple places.  The most
+       *   obvious example is the "extend" block again -- there may be multiple
+       *   extend blocks in the same scope, each of which will have the same path.
+       * - A location's span is not always a subset of its parent's span.  For
+       *   example, the "extendee" of an extension declaration appears at the
+       *   beginning of the "extend" block and is shared by all extensions within
+       *   the block.
+       * - Just because a location's span is a subset of some other location's span
+       *   does not mean that it is a descendent.  For example, a "group" defines
+       *   both a type and a field in a single declaration.  Thus, the locations
+       *   corresponding to the type and field and their components will overlap.
+       * - Code which tries to interpret locations should probably be designed to
+       *   ignore those that it doesn't understand, as more types of locations could
+       *   be recorded in the future.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder addLocationBuilder() {
         return getLocationFieldBuilder().addBuilder(
             com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+       *
+       * <pre>
+       * A Location identifies a piece of source code in a .proto file which
+       * corresponds to a particular definition.  This information is intended
+       * to be useful to IDEs, code indexers, documentation generators, and similar
+       * tools.
+       *
+       * For example, say we have a file like:
+       *   message Foo {
+       *     optional string foo = 1;
+       *   }
+       * Let's look at just the field definition:
+       *   optional string foo = 1;
+       *   ^       ^^     ^^  ^  ^^^
+       *   a       bc     de  f  ghi
+       * We have the following locations:
+       *   span   path               represents
+       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+       *
+       * Notes:
+       * - A location may refer to a repeated field itself (i.e. not to any
+       *   particular index within it).  This is used whenever a set of elements are
+       *   logically enclosed in a single code segment.  For example, an entire
+       *   extend block (possibly containing multiple extension definitions) will
+       *   have an outer location whose path refers to the "extensions" repeated
+       *   field without an index.
+       * - Multiple locations may have the same path.  This happens when a single
+       *   logical declaration is spread out across multiple places.  The most
+       *   obvious example is the "extend" block again -- there may be multiple
+       *   extend blocks in the same scope, each of which will have the same path.
+       * - A location's span is not always a subset of its parent's span.  For
+       *   example, the "extendee" of an extension declaration appears at the
+       *   beginning of the "extend" block and is shared by all extensions within
+       *   the block.
+       * - Just because a location's span is a subset of some other location's span
+       *   does not mean that it is a descendent.  For example, a "group" defines
+       *   both a type and a field in a single declaration.  Thus, the locations
+       *   corresponding to the type and field and their components will overlap.
+       * - Code which tries to interpret locations should probably be designed to
+       *   ignore those that it doesn't understand, as more types of locations could
+       *   be recorded in the future.
+       * </pre>
+       */
       public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder addLocationBuilder(
           int index) {
@@ -17322,4 +28070,53 @@
             index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.getDefaultInstance());
       }
+      /**
+       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
+       *
+       * <pre>
+       * A Location identifies a piece of source code in a .proto file which
+       * corresponds to a particular definition.  This information is intended
+       * to be useful to IDEs, code indexers, documentation generators, and similar
+       * tools.
+       *
+       * For example, say we have a file like:
+       *   message Foo {
+       *     optional string foo = 1;
+       *   }
+       * Let's look at just the field definition:
+       *   optional string foo = 1;
+       *   ^       ^^     ^^  ^  ^^^
+       *   a       bc     de  f  ghi
+       * We have the following locations:
+       *   span   path               represents
+       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+       *
+       * Notes:
+       * - A location may refer to a repeated field itself (i.e. not to any
+       *   particular index within it).  This is used whenever a set of elements are
+       *   logically enclosed in a single code segment.  For example, an entire
+       *   extend block (possibly containing multiple extension definitions) will
+       *   have an outer location whose path refers to the "extensions" repeated
+       *   field without an index.
+       * - Multiple locations may have the same path.  This happens when a single
+       *   logical declaration is spread out across multiple places.  The most
+       *   obvious example is the "extend" block again -- there may be multiple
+       *   extend blocks in the same scope, each of which will have the same path.
+       * - A location's span is not always a subset of its parent's span.  For
+       *   example, the "extendee" of an extension declaration appears at the
+       *   beginning of the "extend" block and is shared by all extensions within
+       *   the block.
+       * - Just because a location's span is a subset of some other location's span
+       *   does not mean that it is a descendent.  For example, a "group" defines
+       *   both a type and a field in a single declaration.  Thus, the locations
+       *   corresponding to the type and field and their components will overlap.
+       * - Code which tries to interpret locations should probably be designed to
+       *   ignore those that it doesn't understand, as more types of locations could
+       *   be recorded in the future.
+       * </pre>
+       */
       public java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder> 
            getLocationBuilderList() {
@@ -17340,16 +28137,16 @@
         return locationBuilder_;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:google.protobuf.SourceCodeInfo)
     }
-    
+
     static {
       defaultInstance = new SourceCodeInfo(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:google.protobuf.SourceCodeInfo)
   }
-  
+
   private static com.google.protobuf.Descriptors.Descriptor
     internal_static_google_protobuf_FileDescriptorSet_descriptor;
@@ -17452,5 +28249,5 @@
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable;
-  
+
   public static com.google.protobuf.Descriptors.FileDescriptor
       getDescriptor() {
@@ -17576,7 +28373,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_FileDescriptorSet_descriptor,
-              new java.lang.String[] { "File", },
-              com.google.protobuf.DescriptorProtos.FileDescriptorSet.class,
-              com.google.protobuf.DescriptorProtos.FileDescriptorSet.Builder.class);
+              new java.lang.String[] { "File", });
           internal_static_google_protobuf_FileDescriptorProto_descriptor =
             getDescriptor().getMessageTypes().get(1);
@@ -17584,7 +28379,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_FileDescriptorProto_descriptor,
-              new java.lang.String[] { "Name", "Package", "Dependency", "PublicDependency", "WeakDependency", "MessageType", "EnumType", "Service", "Extension", "Options", "SourceCodeInfo", },
-              com.google.protobuf.DescriptorProtos.FileDescriptorProto.class,
-              com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder.class);
+              new java.lang.String[] { "Name", "Package", "Dependency", "PublicDependency", "WeakDependency", "MessageType", "EnumType", "Service", "Extension", "Options", "SourceCodeInfo", });
           internal_static_google_protobuf_DescriptorProto_descriptor =
             getDescriptor().getMessageTypes().get(2);
@@ -17592,7 +28385,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_DescriptorProto_descriptor,
-              new java.lang.String[] { "Name", "Field", "Extension", "NestedType", "EnumType", "ExtensionRange", "Options", },
-              com.google.protobuf.DescriptorProtos.DescriptorProto.class,
-              com.google.protobuf.DescriptorProtos.DescriptorProto.Builder.class);
+              new java.lang.String[] { "Name", "Field", "Extension", "NestedType", "EnumType", "ExtensionRange", "Options", });
           internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor =
             internal_static_google_protobuf_DescriptorProto_descriptor.getNestedTypes().get(0);
@@ -17600,7 +28391,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor,
-              new java.lang.String[] { "Start", "End", },
-              com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.class,
-              com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder.class);
+              new java.lang.String[] { "Start", "End", });
           internal_static_google_protobuf_FieldDescriptorProto_descriptor =
             getDescriptor().getMessageTypes().get(3);
@@ -17608,7 +28397,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_FieldDescriptorProto_descriptor,
-              new java.lang.String[] { "Name", "Number", "Label", "Type", "TypeName", "Extendee", "DefaultValue", "Options", },
-              com.google.protobuf.DescriptorProtos.FieldDescriptorProto.class,
-              com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder.class);
+              new java.lang.String[] { "Name", "Number", "Label", "Type", "TypeName", "Extendee", "DefaultValue", "Options", });
           internal_static_google_protobuf_EnumDescriptorProto_descriptor =
             getDescriptor().getMessageTypes().get(4);
@@ -17616,7 +28403,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_EnumDescriptorProto_descriptor,
-              new java.lang.String[] { "Name", "Value", "Options", },
-              com.google.protobuf.DescriptorProtos.EnumDescriptorProto.class,
-              com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder.class);
+              new java.lang.String[] { "Name", "Value", "Options", });
           internal_static_google_protobuf_EnumValueDescriptorProto_descriptor =
             getDescriptor().getMessageTypes().get(5);
@@ -17624,7 +28409,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_EnumValueDescriptorProto_descriptor,
-              new java.lang.String[] { "Name", "Number", "Options", },
-              com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.class,
-              com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder.class);
+              new java.lang.String[] { "Name", "Number", "Options", });
           internal_static_google_protobuf_ServiceDescriptorProto_descriptor =
             getDescriptor().getMessageTypes().get(6);
@@ -17632,7 +28415,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_ServiceDescriptorProto_descriptor,
-              new java.lang.String[] { "Name", "Method", "Options", },
-              com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.class,
-              com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder.class);
+              new java.lang.String[] { "Name", "Method", "Options", });
           internal_static_google_protobuf_MethodDescriptorProto_descriptor =
             getDescriptor().getMessageTypes().get(7);
@@ -17640,7 +28421,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_MethodDescriptorProto_descriptor,
-              new java.lang.String[] { "Name", "InputType", "OutputType", "Options", },
-              com.google.protobuf.DescriptorProtos.MethodDescriptorProto.class,
-              com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder.class);
+              new java.lang.String[] { "Name", "InputType", "OutputType", "Options", });
           internal_static_google_protobuf_FileOptions_descriptor =
             getDescriptor().getMessageTypes().get(8);
@@ -17648,7 +28427,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_FileOptions_descriptor,
-              new java.lang.String[] { "JavaPackage", "JavaOuterClassname", "JavaMultipleFiles", "JavaGenerateEqualsAndHash", "OptimizeFor", "GoPackage", "CcGenericServices", "JavaGenericServices", "PyGenericServices", "UninterpretedOption", },
-              com.google.protobuf.DescriptorProtos.FileOptions.class,
-              com.google.protobuf.DescriptorProtos.FileOptions.Builder.class);
+              new java.lang.String[] { "JavaPackage", "JavaOuterClassname", "JavaMultipleFiles", "JavaGenerateEqualsAndHash", "OptimizeFor", "GoPackage", "CcGenericServices", "JavaGenericServices", "PyGenericServices", "UninterpretedOption", });
           internal_static_google_protobuf_MessageOptions_descriptor =
             getDescriptor().getMessageTypes().get(9);
@@ -17656,7 +28433,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_MessageOptions_descriptor,
-              new java.lang.String[] { "MessageSetWireFormat", "NoStandardDescriptorAccessor", "UninterpretedOption", },
-              com.google.protobuf.DescriptorProtos.MessageOptions.class,
-              com.google.protobuf.DescriptorProtos.MessageOptions.Builder.class);
+              new java.lang.String[] { "MessageSetWireFormat", "NoStandardDescriptorAccessor", "UninterpretedOption", });
           internal_static_google_protobuf_FieldOptions_descriptor =
             getDescriptor().getMessageTypes().get(10);
@@ -17664,7 +28439,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_FieldOptions_descriptor,
-              new java.lang.String[] { "Ctype", "Packed", "Lazy", "Deprecated", "ExperimentalMapKey", "Weak", "UninterpretedOption", },
-              com.google.protobuf.DescriptorProtos.FieldOptions.class,
-              com.google.protobuf.DescriptorProtos.FieldOptions.Builder.class);
+              new java.lang.String[] { "Ctype", "Packed", "Lazy", "Deprecated", "ExperimentalMapKey", "Weak", "UninterpretedOption", });
           internal_static_google_protobuf_EnumOptions_descriptor =
             getDescriptor().getMessageTypes().get(11);
@@ -17672,7 +28445,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_EnumOptions_descriptor,
-              new java.lang.String[] { "AllowAlias", "UninterpretedOption", },
-              com.google.protobuf.DescriptorProtos.EnumOptions.class,
-              com.google.protobuf.DescriptorProtos.EnumOptions.Builder.class);
+              new java.lang.String[] { "AllowAlias", "UninterpretedOption", });
           internal_static_google_protobuf_EnumValueOptions_descriptor =
             getDescriptor().getMessageTypes().get(12);
@@ -17680,7 +28451,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_EnumValueOptions_descriptor,
-              new java.lang.String[] { "UninterpretedOption", },
-              com.google.protobuf.DescriptorProtos.EnumValueOptions.class,
-              com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder.class);
+              new java.lang.String[] { "UninterpretedOption", });
           internal_static_google_protobuf_ServiceOptions_descriptor =
             getDescriptor().getMessageTypes().get(13);
@@ -17688,7 +28457,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_ServiceOptions_descriptor,
-              new java.lang.String[] { "UninterpretedOption", },
-              com.google.protobuf.DescriptorProtos.ServiceOptions.class,
-              com.google.protobuf.DescriptorProtos.ServiceOptions.Builder.class);
+              new java.lang.String[] { "UninterpretedOption", });
           internal_static_google_protobuf_MethodOptions_descriptor =
             getDescriptor().getMessageTypes().get(14);
@@ -17696,7 +28463,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_MethodOptions_descriptor,
-              new java.lang.String[] { "UninterpretedOption", },
-              com.google.protobuf.DescriptorProtos.MethodOptions.class,
-              com.google.protobuf.DescriptorProtos.MethodOptions.Builder.class);
+              new java.lang.String[] { "UninterpretedOption", });
           internal_static_google_protobuf_UninterpretedOption_descriptor =
             getDescriptor().getMessageTypes().get(15);
@@ -17704,7 +28469,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_UninterpretedOption_descriptor,
-              new java.lang.String[] { "Name", "IdentifierValue", "PositiveIntValue", "NegativeIntValue", "DoubleValue", "StringValue", "AggregateValue", },
-              com.google.protobuf.DescriptorProtos.UninterpretedOption.class,
-              com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder.class);
+              new java.lang.String[] { "Name", "IdentifierValue", "PositiveIntValue", "NegativeIntValue", "DoubleValue", "StringValue", "AggregateValue", });
           internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor =
             internal_static_google_protobuf_UninterpretedOption_descriptor.getNestedTypes().get(0);
@@ -17712,7 +28475,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor,
-              new java.lang.String[] { "NamePart", "IsExtension", },
-              com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.class,
-              com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder.class);
+              new java.lang.String[] { "NamePart", "IsExtension", });
           internal_static_google_protobuf_SourceCodeInfo_descriptor =
             getDescriptor().getMessageTypes().get(16);
@@ -17720,7 +28481,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_SourceCodeInfo_descriptor,
-              new java.lang.String[] { "Location", },
-              com.google.protobuf.DescriptorProtos.SourceCodeInfo.class,
-              com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder.class);
+              new java.lang.String[] { "Location", });
           internal_static_google_protobuf_SourceCodeInfo_Location_descriptor =
             internal_static_google_protobuf_SourceCodeInfo_descriptor.getNestedTypes().get(0);
@@ -17728,7 +28487,5 @@
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_google_protobuf_SourceCodeInfo_Location_descriptor,
-              new java.lang.String[] { "Path", "Span", "LeadingComments", "TrailingComments", },
-              com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.class,
-              com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder.class);
+              new java.lang.String[] { "Path", "Span", "LeadingComments", "TrailingComments", });
           return null;
         }
@@ -17739,5 +28496,5 @@
         }, assigner);
   }
-  
+
   // @@protoc_insertion_point(outer_class_scope)
 }
Index: /applications/editors/josm/plugins/pbf/gen/crosby/binary/Fileformat.java
===================================================================
--- /applications/editors/josm/plugins/pbf/gen/crosby/binary/Fileformat.java	(revision 30489)
+++ /applications/editors/josm/plugins/pbf/gen/crosby/binary/Fileformat.java	(revision 30490)
@@ -1,4 +1,4 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: src/fileformat.proto
+// source: src/crosby/binary/fileformat.proto
 
 package crosby.binary;
@@ -11,363 +11,135 @@
   public interface BlobOrBuilder
       extends com.google.protobuf.MessageLiteOrBuilder {
-    
+
     // optional bytes raw = 1;
+    /**
+     * <code>optional bytes raw = 1;</code>
+     *
+     * <pre>
+     * No compression
+     * </pre>
+     */
     boolean hasRaw();
+    /**
+     * <code>optional bytes raw = 1;</code>
+     *
+     * <pre>
+     * No compression
+     * </pre>
+     */
     com.google.protobuf.ByteString getRaw();
-    
+
     // optional int32 raw_size = 2;
+    /**
+     * <code>optional int32 raw_size = 2;</code>
+     *
+     * <pre>
+     * When compressed, the uncompressed size
+     * </pre>
+     */
     boolean hasRawSize();
+    /**
+     * <code>optional int32 raw_size = 2;</code>
+     *
+     * <pre>
+     * When compressed, the uncompressed size
+     * </pre>
+     */
     int getRawSize();
-    
+
     // optional bytes zlib_data = 3;
+    /**
+     * <code>optional bytes zlib_data = 3;</code>
+     *
+     * <pre>
+     * Possible compressed versions of the data.
+     * </pre>
+     */
     boolean hasZlibData();
+    /**
+     * <code>optional bytes zlib_data = 3;</code>
+     *
+     * <pre>
+     * Possible compressed versions of the data.
+     * </pre>
+     */
     com.google.protobuf.ByteString getZlibData();
-    
+
     // optional bytes lzma_data = 4;
+    /**
+     * <code>optional bytes lzma_data = 4;</code>
+     *
+     * <pre>
+     * PROPOSED feature for LZMA compressed data. SUPPORT IS NOT REQUIRED.
+     * </pre>
+     */
     boolean hasLzmaData();
+    /**
+     * <code>optional bytes lzma_data = 4;</code>
+     *
+     * <pre>
+     * PROPOSED feature for LZMA compressed data. SUPPORT IS NOT REQUIRED.
+     * </pre>
+     */
     com.google.protobuf.ByteString getLzmaData();
-    
+
     // optional bytes OBSOLETE_bzip2_data = 5 [deprecated = true];
+    /**
+     * <code>optional bytes OBSOLETE_bzip2_data = 5 [deprecated = true];</code>
+     *
+     * <pre>
+     * Formerly used for bzip2 compressed data. Depreciated in 2010.
+     * </pre>
+     */
     @java.lang.Deprecated boolean hasOBSOLETEBzip2Data();
+    /**
+     * <code>optional bytes OBSOLETE_bzip2_data = 5 [deprecated = true];</code>
+     *
+     * <pre>
+     * Formerly used for bzip2 compressed data. Depreciated in 2010.
+     * </pre>
+     */
     @java.lang.Deprecated com.google.protobuf.ByteString getOBSOLETEBzip2Data();
   }
+  /**
+   * Protobuf type {@code OSMPBF.Blob}
+   */
   public static final class Blob extends
       com.google.protobuf.GeneratedMessageLite
       implements BlobOrBuilder {
     // Use Blob.newBuilder() to construct.
-    private Blob(Builder builder) {
+    private Blob(com.google.protobuf.GeneratedMessageLite.Builder builder) {
       super(builder);
+
     }
     private Blob(boolean noInit) {}
-    
+
     private static final Blob defaultInstance;
     public static Blob getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public Blob getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
-    private int bitField0_;
-    // optional bytes raw = 1;
-    public static final int RAW_FIELD_NUMBER = 1;
-    private com.google.protobuf.ByteString raw_;
-    public boolean hasRaw() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    public com.google.protobuf.ByteString getRaw() {
-      return raw_;
-    }
-    
-    // optional int32 raw_size = 2;
-    public static final int RAW_SIZE_FIELD_NUMBER = 2;
-    private int rawSize_;
-    public boolean hasRawSize() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    public int getRawSize() {
-      return rawSize_;
-    }
-    
-    // optional bytes zlib_data = 3;
-    public static final int ZLIB_DATA_FIELD_NUMBER = 3;
-    private com.google.protobuf.ByteString zlibData_;
-    public boolean hasZlibData() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
-    }
-    public com.google.protobuf.ByteString getZlibData() {
-      return zlibData_;
-    }
-    
-    // optional bytes lzma_data = 4;
-    public static final int LZMA_DATA_FIELD_NUMBER = 4;
-    private com.google.protobuf.ByteString lzmaData_;
-    public boolean hasLzmaData() {
-      return ((bitField0_ & 0x00000008) == 0x00000008);
-    }
-    public com.google.protobuf.ByteString getLzmaData() {
-      return lzmaData_;
-    }
-    
-    // optional bytes OBSOLETE_bzip2_data = 5 [deprecated = true];
-    public static final int OBSOLETE_BZIP2_DATA_FIELD_NUMBER = 5;
-    private com.google.protobuf.ByteString oBSOLETEBzip2Data_;
-    @java.lang.Deprecated public boolean hasOBSOLETEBzip2Data() {
-      return ((bitField0_ & 0x00000010) == 0x00000010);
-    }
-    @java.lang.Deprecated public com.google.protobuf.ByteString getOBSOLETEBzip2Data() {
-      return oBSOLETEBzip2Data_;
-    }
-    
-    private void initFields() {
-      raw_ = com.google.protobuf.ByteString.EMPTY;
-      rawSize_ = 0;
-      zlibData_ = com.google.protobuf.ByteString.EMPTY;
-      lzmaData_ = com.google.protobuf.ByteString.EMPTY;
-      oBSOLETEBzip2Data_ = com.google.protobuf.ByteString.EMPTY;
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
-      
-      memoizedIsInitialized = 1;
-      return true;
-    }
-    
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBytes(1, raw_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeInt32(2, rawSize_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeBytes(3, zlibData_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        output.writeBytes(4, lzmaData_);
-      }
-      if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        output.writeBytes(5, oBSOLETEBzip2Data_);
-      }
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-    
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(1, raw_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(2, rawSize_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(3, zlibData_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(4, lzmaData_);
-      }
-      if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(5, oBSOLETEBzip2Data_);
-      }
-      memoizedSerializedSize = size;
-      return size;
-    }
-    
-    private static final long serialVersionUID = 0L;
-    @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-    
-    public static crosby.binary.Fileformat.Blob parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static crosby.binary.Fileformat.Blob parseFrom(
-        com.google.protobuf.ByteString data,
+
+    private Blob(
+        com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static crosby.binary.Fileformat.Blob parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static crosby.binary.Fileformat.Blob parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static crosby.binary.Fileformat.Blob parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static crosby.binary.Fileformat.Blob parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    public static crosby.binary.Fileformat.Blob parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
-    }
-    public static crosby.binary.Fileformat.Blob 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 crosby.binary.Fileformat.Blob parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static crosby.binary.Fileformat.Blob 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(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(crosby.binary.Fileformat.Blob prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-    
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageLite.Builder<
-          crosby.binary.Fileformat.Blob, Builder>
-        implements crosby.binary.Fileformat.BlobOrBuilder {
-      // Construct using crosby.binary.Fileformat.Blob.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-      
-      private void maybeForceBuilderInitialization() {
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-      
-      public Builder clear() {
-        super.clear();
-        raw_ = com.google.protobuf.ByteString.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        rawSize_ = 0;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        zlibData_ = com.google.protobuf.ByteString.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000004);
-        lzmaData_ = com.google.protobuf.ByteString.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000008);
-        oBSOLETEBzip2Data_ = com.google.protobuf.ByteString.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000010);
-        return this;
-      }
-      
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-      
-      public crosby.binary.Fileformat.Blob getDefaultInstanceForType() {
-        return crosby.binary.Fileformat.Blob.getDefaultInstance();
-      }
-      
-      public crosby.binary.Fileformat.Blob build() {
-        crosby.binary.Fileformat.Blob result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-      
-      private crosby.binary.Fileformat.Blob buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        crosby.binary.Fileformat.Blob result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
-      public crosby.binary.Fileformat.Blob buildPartial() {
-        crosby.binary.Fileformat.Blob result = new crosby.binary.Fileformat.Blob(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.raw_ = raw_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.rawSize_ = rawSize_;
-        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
-          to_bitField0_ |= 0x00000004;
-        }
-        result.zlibData_ = zlibData_;
-        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
-          to_bitField0_ |= 0x00000008;
-        }
-        result.lzmaData_ = lzmaData_;
-        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
-          to_bitField0_ |= 0x00000010;
-        }
-        result.oBSOLETEBzip2Data_ = oBSOLETEBzip2Data_;
-        result.bitField0_ = to_bitField0_;
-        return result;
-      }
-      
-      public Builder mergeFrom(crosby.binary.Fileformat.Blob other) {
-        if (other == crosby.binary.Fileformat.Blob.getDefaultInstance()) return this;
-        if (other.hasRaw()) {
-          setRaw(other.getRaw());
-        }
-        if (other.hasRawSize()) {
-          setRawSize(other.getRawSize());
-        }
-        if (other.hasZlibData()) {
-          setZlibData(other.getZlibData());
-        }
-        if (other.hasLzmaData()) {
-          setLzmaData(other.getLzmaData());
-        }
-        if (other.hasOBSOLETEBzip2Data()) {
-          setOBSOLETEBzip2Data(other.getOBSOLETEBzip2Data());
-        }
-        return this;
-      }
-      
-      public final boolean isInitialized() {
-        return true;
-      }
-      
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        while (true) {
+      initFields();
+      int mutable_bitField0_ = 0;
+      try {
+        boolean done = false;
+        while (!done) {
           int tag = input.readTag();
           switch (tag) {
             case 0:
-              
-              return this;
+              done = true;
+              break;
             default: {
-              if (!parseUnknownField(input, extensionRegistry, tag)) {
-                
-                return this;
+              if (!parseUnknownField(input,
+                                     extensionRegistry, tag)) {
+                done = true;
               }
               break;
@@ -400,16 +172,431 @@
           }
         }
-      }
-      
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        makeExtensionsImmutable();
+      }
+    }
+    public static com.google.protobuf.Parser<Blob> PARSER =
+        new com.google.protobuf.AbstractParser<Blob>() {
+      public Blob parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Blob(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Blob> getParserForType() {
+      return PARSER;
+    }
+
+    private int bitField0_;
+    // optional bytes raw = 1;
+    public static final int RAW_FIELD_NUMBER = 1;
+    private com.google.protobuf.ByteString raw_;
+    /**
+     * <code>optional bytes raw = 1;</code>
+     *
+     * <pre>
+     * No compression
+     * </pre>
+     */
+    public boolean hasRaw() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>optional bytes raw = 1;</code>
+     *
+     * <pre>
+     * No compression
+     * </pre>
+     */
+    public com.google.protobuf.ByteString getRaw() {
+      return raw_;
+    }
+
+    // optional int32 raw_size = 2;
+    public static final int RAW_SIZE_FIELD_NUMBER = 2;
+    private int rawSize_;
+    /**
+     * <code>optional int32 raw_size = 2;</code>
+     *
+     * <pre>
+     * When compressed, the uncompressed size
+     * </pre>
+     */
+    public boolean hasRawSize() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>optional int32 raw_size = 2;</code>
+     *
+     * <pre>
+     * When compressed, the uncompressed size
+     * </pre>
+     */
+    public int getRawSize() {
+      return rawSize_;
+    }
+
+    // optional bytes zlib_data = 3;
+    public static final int ZLIB_DATA_FIELD_NUMBER = 3;
+    private com.google.protobuf.ByteString zlibData_;
+    /**
+     * <code>optional bytes zlib_data = 3;</code>
+     *
+     * <pre>
+     * Possible compressed versions of the data.
+     * </pre>
+     */
+    public boolean hasZlibData() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    /**
+     * <code>optional bytes zlib_data = 3;</code>
+     *
+     * <pre>
+     * Possible compressed versions of the data.
+     * </pre>
+     */
+    public com.google.protobuf.ByteString getZlibData() {
+      return zlibData_;
+    }
+
+    // optional bytes lzma_data = 4;
+    public static final int LZMA_DATA_FIELD_NUMBER = 4;
+    private com.google.protobuf.ByteString lzmaData_;
+    /**
+     * <code>optional bytes lzma_data = 4;</code>
+     *
+     * <pre>
+     * PROPOSED feature for LZMA compressed data. SUPPORT IS NOT REQUIRED.
+     * </pre>
+     */
+    public boolean hasLzmaData() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    /**
+     * <code>optional bytes lzma_data = 4;</code>
+     *
+     * <pre>
+     * PROPOSED feature for LZMA compressed data. SUPPORT IS NOT REQUIRED.
+     * </pre>
+     */
+    public com.google.protobuf.ByteString getLzmaData() {
+      return lzmaData_;
+    }
+
+    // optional bytes OBSOLETE_bzip2_data = 5 [deprecated = true];
+    public static final int OBSOLETE_BZIP2_DATA_FIELD_NUMBER = 5;
+    private com.google.protobuf.ByteString oBSOLETEBzip2Data_;
+    /**
+     * <code>optional bytes OBSOLETE_bzip2_data = 5 [deprecated = true];</code>
+     *
+     * <pre>
+     * Formerly used for bzip2 compressed data. Depreciated in 2010.
+     * </pre>
+     */
+    @java.lang.Deprecated public boolean hasOBSOLETEBzip2Data() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    /**
+     * <code>optional bytes OBSOLETE_bzip2_data = 5 [deprecated = true];</code>
+     *
+     * <pre>
+     * Formerly used for bzip2 compressed data. Depreciated in 2010.
+     * </pre>
+     */
+    @java.lang.Deprecated public com.google.protobuf.ByteString getOBSOLETEBzip2Data() {
+      return oBSOLETEBzip2Data_;
+    }
+
+    private void initFields() {
+      raw_ = com.google.protobuf.ByteString.EMPTY;
+      rawSize_ = 0;
+      zlibData_ = com.google.protobuf.ByteString.EMPTY;
+      lzmaData_ = com.google.protobuf.ByteString.EMPTY;
+      oBSOLETEBzip2Data_ = com.google.protobuf.ByteString.EMPTY;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, raw_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeInt32(2, rawSize_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBytes(3, zlibData_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeBytes(4, lzmaData_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeBytes(5, oBSOLETEBzip2Data_);
+      }
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, raw_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(2, rawSize_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(3, zlibData_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(4, lzmaData_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(5, oBSOLETEBzip2Data_);
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+
+    public static crosby.binary.Fileformat.Blob parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static crosby.binary.Fileformat.Blob parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static crosby.binary.Fileformat.Blob parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static crosby.binary.Fileformat.Blob parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static crosby.binary.Fileformat.Blob parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static crosby.binary.Fileformat.Blob parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static crosby.binary.Fileformat.Blob parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static crosby.binary.Fileformat.Blob parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static crosby.binary.Fileformat.Blob parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static crosby.binary.Fileformat.Blob parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Fileformat.Blob prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+
+    /**
+     * Protobuf type {@code OSMPBF.Blob}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Fileformat.Blob, Builder>
+        implements crosby.binary.Fileformat.BlobOrBuilder {
+      // Construct using crosby.binary.Fileformat.Blob.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        raw_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        rawSize_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        zlibData_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        lzmaData_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        oBSOLETEBzip2Data_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public crosby.binary.Fileformat.Blob getDefaultInstanceForType() {
+        return crosby.binary.Fileformat.Blob.getDefaultInstance();
+      }
+
+      public crosby.binary.Fileformat.Blob build() {
+        crosby.binary.Fileformat.Blob result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public crosby.binary.Fileformat.Blob buildPartial() {
+        crosby.binary.Fileformat.Blob result = new crosby.binary.Fileformat.Blob(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.raw_ = raw_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.rawSize_ = rawSize_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.zlibData_ = zlibData_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.lzmaData_ = lzmaData_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.oBSOLETEBzip2Data_ = oBSOLETEBzip2Data_;
+        result.bitField0_ = to_bitField0_;
+        return result;
+      }
+
+      public Builder mergeFrom(crosby.binary.Fileformat.Blob other) {
+        if (other == crosby.binary.Fileformat.Blob.getDefaultInstance()) return this;
+        if (other.hasRaw()) {
+          setRaw(other.getRaw());
+        }
+        if (other.hasRawSize()) {
+          setRawSize(other.getRawSize());
+        }
+        if (other.hasZlibData()) {
+          setZlibData(other.getZlibData());
+        }
+        if (other.hasLzmaData()) {
+          setLzmaData(other.getLzmaData());
+        }
+        if (other.hasOBSOLETEBzip2Data()) {
+          setOBSOLETEBzip2Data(other.getOBSOLETEBzip2Data());
+        }
+        return this;
+      }
+
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        crosby.binary.Fileformat.Blob parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (crosby.binary.Fileformat.Blob) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
       private int bitField0_;
-      
+
       // optional bytes raw = 1;
       private com.google.protobuf.ByteString raw_ = com.google.protobuf.ByteString.EMPTY;
+      /**
+       * <code>optional bytes raw = 1;</code>
+       *
+       * <pre>
+       * No compression
+       * </pre>
+       */
       public boolean hasRaw() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
+      /**
+       * <code>optional bytes raw = 1;</code>
+       *
+       * <pre>
+       * No compression
+       * </pre>
+       */
       public com.google.protobuf.ByteString getRaw() {
         return raw_;
       }
+      /**
+       * <code>optional bytes raw = 1;</code>
+       *
+       * <pre>
+       * No compression
+       * </pre>
+       */
       public Builder setRaw(com.google.protobuf.ByteString value) {
         if (value == null) {
@@ -421,4 +608,11 @@
         return this;
       }
+      /**
+       * <code>optional bytes raw = 1;</code>
+       *
+       * <pre>
+       * No compression
+       * </pre>
+       */
       public Builder clearRaw() {
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -427,13 +621,34 @@
         return this;
       }
-      
+
       // optional int32 raw_size = 2;
       private int rawSize_ ;
+      /**
+       * <code>optional int32 raw_size = 2;</code>
+       *
+       * <pre>
+       * When compressed, the uncompressed size
+       * </pre>
+       */
       public boolean hasRawSize() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
+      /**
+       * <code>optional int32 raw_size = 2;</code>
+       *
+       * <pre>
+       * When compressed, the uncompressed size
+       * </pre>
+       */
       public int getRawSize() {
         return rawSize_;
       }
+      /**
+       * <code>optional int32 raw_size = 2;</code>
+       *
+       * <pre>
+       * When compressed, the uncompressed size
+       * </pre>
+       */
       public Builder setRawSize(int value) {
         bitField0_ |= 0x00000002;
@@ -442,4 +657,11 @@
         return this;
       }
+      /**
+       * <code>optional int32 raw_size = 2;</code>
+       *
+       * <pre>
+       * When compressed, the uncompressed size
+       * </pre>
+       */
       public Builder clearRawSize() {
         bitField0_ = (bitField0_ & ~0x00000002);
@@ -448,13 +670,34 @@
         return this;
       }
-      
+
       // optional bytes zlib_data = 3;
       private com.google.protobuf.ByteString zlibData_ = com.google.protobuf.ByteString.EMPTY;
+      /**
+       * <code>optional bytes zlib_data = 3;</code>
+       *
+       * <pre>
+       * Possible compressed versions of the data.
+       * </pre>
+       */
       public boolean hasZlibData() {
         return ((bitField0_ & 0x00000004) == 0x00000004);
       }
+      /**
+       * <code>optional bytes zlib_data = 3;</code>
+       *
+       * <pre>
+       * Possible compressed versions of the data.
+       * </pre>
+       */
       public com.google.protobuf.ByteString getZlibData() {
         return zlibData_;
       }
+      /**
+       * <code>optional bytes zlib_data = 3;</code>
+       *
+       * <pre>
+       * Possible compressed versions of the data.
+       * </pre>
+       */
       public Builder setZlibData(com.google.protobuf.ByteString value) {
         if (value == null) {
@@ -466,4 +709,11 @@
         return this;
       }
+      /**
+       * <code>optional bytes zlib_data = 3;</code>
+       *
+       * <pre>
+       * Possible compressed versions of the data.
+       * </pre>
+       */
       public Builder clearZlibData() {
         bitField0_ = (bitField0_ & ~0x00000004);
@@ -472,13 +722,34 @@
         return this;
       }
-      
+
       // optional bytes lzma_data = 4;
       private com.google.protobuf.ByteString lzmaData_ = com.google.protobuf.ByteString.EMPTY;
+      /**
+       * <code>optional bytes lzma_data = 4;</code>
+       *
+       * <pre>
+       * PROPOSED feature for LZMA compressed data. SUPPORT IS NOT REQUIRED.
+       * </pre>
+       */
       public boolean hasLzmaData() {
         return ((bitField0_ & 0x00000008) == 0x00000008);
       }
+      /**
+       * <code>optional bytes lzma_data = 4;</code>
+       *
+       * <pre>
+       * PROPOSED feature for LZMA compressed data. SUPPORT IS NOT REQUIRED.
+       * </pre>
+       */
       public com.google.protobuf.ByteString getLzmaData() {
         return lzmaData_;
       }
+      /**
+       * <code>optional bytes lzma_data = 4;</code>
+       *
+       * <pre>
+       * PROPOSED feature for LZMA compressed data. SUPPORT IS NOT REQUIRED.
+       * </pre>
+       */
       public Builder setLzmaData(com.google.protobuf.ByteString value) {
         if (value == null) {
@@ -490,4 +761,11 @@
         return this;
       }
+      /**
+       * <code>optional bytes lzma_data = 4;</code>
+       *
+       * <pre>
+       * PROPOSED feature for LZMA compressed data. SUPPORT IS NOT REQUIRED.
+       * </pre>
+       */
       public Builder clearLzmaData() {
         bitField0_ = (bitField0_ & ~0x00000008);
@@ -496,13 +774,34 @@
         return this;
       }
-      
+
       // optional bytes OBSOLETE_bzip2_data = 5 [deprecated = true];
       private com.google.protobuf.ByteString oBSOLETEBzip2Data_ = com.google.protobuf.ByteString.EMPTY;
+      /**
+       * <code>optional bytes OBSOLETE_bzip2_data = 5 [deprecated = true];</code>
+       *
+       * <pre>
+       * Formerly used for bzip2 compressed data. Depreciated in 2010.
+       * </pre>
+       */
       @java.lang.Deprecated public boolean hasOBSOLETEBzip2Data() {
         return ((bitField0_ & 0x00000010) == 0x00000010);
       }
+      /**
+       * <code>optional bytes OBSOLETE_bzip2_data = 5 [deprecated = true];</code>
+       *
+       * <pre>
+       * Formerly used for bzip2 compressed data. Depreciated in 2010.
+       * </pre>
+       */
       @java.lang.Deprecated public com.google.protobuf.ByteString getOBSOLETEBzip2Data() {
         return oBSOLETEBzip2Data_;
       }
+      /**
+       * <code>optional bytes OBSOLETE_bzip2_data = 5 [deprecated = true];</code>
+       *
+       * <pre>
+       * Formerly used for bzip2 compressed data. Depreciated in 2010.
+       * </pre>
+       */
       @java.lang.Deprecated public Builder setOBSOLETEBzip2Data(com.google.protobuf.ByteString value) {
         if (value == null) {
@@ -514,4 +813,11 @@
         return this;
       }
+      /**
+       * <code>optional bytes OBSOLETE_bzip2_data = 5 [deprecated = true];</code>
+       *
+       * <pre>
+       * Formerly used for bzip2 compressed data. Depreciated in 2010.
+       * </pre>
+       */
       @java.lang.Deprecated public Builder clearOBSOLETEBzip2Data() {
         bitField0_ = (bitField0_ & ~0x00000010);
@@ -520,353 +826,94 @@
         return this;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:OSMPBF.Blob)
     }
-    
+
     static {
       defaultInstance = new Blob(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:OSMPBF.Blob)
   }
-  
+
   public interface BlobHeaderOrBuilder
       extends com.google.protobuf.MessageLiteOrBuilder {
-    
+
     // required string type = 1;
+    /**
+     * <code>required string type = 1;</code>
+     */
     boolean hasType();
-    String getType();
-    
+    /**
+     * <code>required string type = 1;</code>
+     */
+    java.lang.String getType();
+    /**
+     * <code>required string type = 1;</code>
+     */
+    com.google.protobuf.ByteString
+        getTypeBytes();
+
     // optional bytes indexdata = 2;
+    /**
+     * <code>optional bytes indexdata = 2;</code>
+     */
     boolean hasIndexdata();
+    /**
+     * <code>optional bytes indexdata = 2;</code>
+     */
     com.google.protobuf.ByteString getIndexdata();
-    
+
     // required int32 datasize = 3;
+    /**
+     * <code>required int32 datasize = 3;</code>
+     */
     boolean hasDatasize();
+    /**
+     * <code>required int32 datasize = 3;</code>
+     */
     int getDatasize();
   }
+  /**
+   * Protobuf type {@code OSMPBF.BlobHeader}
+   */
   public static final class BlobHeader extends
       com.google.protobuf.GeneratedMessageLite
       implements BlobHeaderOrBuilder {
     // Use BlobHeader.newBuilder() to construct.
-    private BlobHeader(Builder builder) {
+    private BlobHeader(com.google.protobuf.GeneratedMessageLite.Builder builder) {
       super(builder);
+
     }
     private BlobHeader(boolean noInit) {}
-    
+
     private static final BlobHeader defaultInstance;
     public static BlobHeader getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public BlobHeader getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
-    private int bitField0_;
-    // required string type = 1;
-    public static final int TYPE_FIELD_NUMBER = 1;
-    private java.lang.Object type_;
-    public boolean hasType() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    public String getType() {
-      java.lang.Object ref = type_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          type_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getTypeBytes() {
-      java.lang.Object ref = type_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        type_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    
-    // optional bytes indexdata = 2;
-    public static final int INDEXDATA_FIELD_NUMBER = 2;
-    private com.google.protobuf.ByteString indexdata_;
-    public boolean hasIndexdata() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    public com.google.protobuf.ByteString getIndexdata() {
-      return indexdata_;
-    }
-    
-    // required int32 datasize = 3;
-    public static final int DATASIZE_FIELD_NUMBER = 3;
-    private int datasize_;
-    public boolean hasDatasize() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
-    }
-    public int getDatasize() {
-      return datasize_;
-    }
-    
-    private void initFields() {
-      type_ = "";
-      indexdata_ = com.google.protobuf.ByteString.EMPTY;
-      datasize_ = 0;
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
-      
-      if (!hasType()) {
-        memoizedIsInitialized = 0;
-        return false;
-      }
-      if (!hasDatasize()) {
-        memoizedIsInitialized = 0;
-        return false;
-      }
-      memoizedIsInitialized = 1;
-      return true;
-    }
-    
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBytes(1, getTypeBytes());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeBytes(2, indexdata_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeInt32(3, datasize_);
-      }
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-    
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(1, getTypeBytes());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(2, indexdata_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(3, datasize_);
-      }
-      memoizedSerializedSize = size;
-      return size;
-    }
-    
-    private static final long serialVersionUID = 0L;
-    @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-    
-    public static crosby.binary.Fileformat.BlobHeader parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static crosby.binary.Fileformat.BlobHeader parseFrom(
-        com.google.protobuf.ByteString data,
+
+    private BlobHeader(
+        com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static crosby.binary.Fileformat.BlobHeader parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static crosby.binary.Fileformat.BlobHeader parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static crosby.binary.Fileformat.BlobHeader parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static crosby.binary.Fileformat.BlobHeader parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    public static crosby.binary.Fileformat.BlobHeader parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
-    }
-    public static crosby.binary.Fileformat.BlobHeader 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 crosby.binary.Fileformat.BlobHeader parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static crosby.binary.Fileformat.BlobHeader 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(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(crosby.binary.Fileformat.BlobHeader prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-    
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageLite.Builder<
-          crosby.binary.Fileformat.BlobHeader, Builder>
-        implements crosby.binary.Fileformat.BlobHeaderOrBuilder {
-      // Construct using crosby.binary.Fileformat.BlobHeader.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-      
-      private void maybeForceBuilderInitialization() {
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-      
-      public Builder clear() {
-        super.clear();
-        type_ = "";
-        bitField0_ = (bitField0_ & ~0x00000001);
-        indexdata_ = com.google.protobuf.ByteString.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        datasize_ = 0;
-        bitField0_ = (bitField0_ & ~0x00000004);
-        return this;
-      }
-      
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-      
-      public crosby.binary.Fileformat.BlobHeader getDefaultInstanceForType() {
-        return crosby.binary.Fileformat.BlobHeader.getDefaultInstance();
-      }
-      
-      public crosby.binary.Fileformat.BlobHeader build() {
-        crosby.binary.Fileformat.BlobHeader result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-      
-      private crosby.binary.Fileformat.BlobHeader buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        crosby.binary.Fileformat.BlobHeader result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
-      public crosby.binary.Fileformat.BlobHeader buildPartial() {
-        crosby.binary.Fileformat.BlobHeader result = new crosby.binary.Fileformat.BlobHeader(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.type_ = type_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.indexdata_ = indexdata_;
-        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
-          to_bitField0_ |= 0x00000004;
-        }
-        result.datasize_ = datasize_;
-        result.bitField0_ = to_bitField0_;
-        return result;
-      }
-      
-      public Builder mergeFrom(crosby.binary.Fileformat.BlobHeader other) {
-        if (other == crosby.binary.Fileformat.BlobHeader.getDefaultInstance()) return this;
-        if (other.hasType()) {
-          setType(other.getType());
-        }
-        if (other.hasIndexdata()) {
-          setIndexdata(other.getIndexdata());
-        }
-        if (other.hasDatasize()) {
-          setDatasize(other.getDatasize());
-        }
-        return this;
-      }
-      
-      public final boolean isInitialized() {
-        if (!hasType()) {
-          
-          return false;
-        }
-        if (!hasDatasize()) {
-          
-          return false;
-        }
-        return true;
-      }
-      
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        while (true) {
+      initFields();
+      int mutable_bitField0_ = 0;
+      try {
+        boolean done = false;
+        while (!done) {
           int tag = input.readTag();
           switch (tag) {
             case 0:
-              
-              return this;
+              done = true;
+              break;
             default: {
-              if (!parseUnknownField(input, extensionRegistry, tag)) {
-                
-                return this;
+              if (!parseUnknownField(input,
+                                     extensionRegistry, tag)) {
+                done = true;
               }
               break;
@@ -889,24 +936,384 @@
           }
         }
-      }
-      
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        makeExtensionsImmutable();
+      }
+    }
+    public static com.google.protobuf.Parser<BlobHeader> PARSER =
+        new com.google.protobuf.AbstractParser<BlobHeader>() {
+      public BlobHeader parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new BlobHeader(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<BlobHeader> getParserForType() {
+      return PARSER;
+    }
+
+    private int bitField0_;
+    // required string type = 1;
+    public static final int TYPE_FIELD_NUMBER = 1;
+    private java.lang.Object type_;
+    /**
+     * <code>required string type = 1;</code>
+     */
+    public boolean hasType() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>required string type = 1;</code>
+     */
+    public java.lang.String getType() {
+      java.lang.Object ref = type_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          type_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>required string type = 1;</code>
+     */
+    public com.google.protobuf.ByteString
+        getTypeBytes() {
+      java.lang.Object ref = type_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        type_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    // optional bytes indexdata = 2;
+    public static final int INDEXDATA_FIELD_NUMBER = 2;
+    private com.google.protobuf.ByteString indexdata_;
+    /**
+     * <code>optional bytes indexdata = 2;</code>
+     */
+    public boolean hasIndexdata() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>optional bytes indexdata = 2;</code>
+     */
+    public com.google.protobuf.ByteString getIndexdata() {
+      return indexdata_;
+    }
+
+    // required int32 datasize = 3;
+    public static final int DATASIZE_FIELD_NUMBER = 3;
+    private int datasize_;
+    /**
+     * <code>required int32 datasize = 3;</code>
+     */
+    public boolean hasDatasize() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    /**
+     * <code>required int32 datasize = 3;</code>
+     */
+    public int getDatasize() {
+      return datasize_;
+    }
+
+    private void initFields() {
+      type_ = "";
+      indexdata_ = com.google.protobuf.ByteString.EMPTY;
+      datasize_ = 0;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+
+      if (!hasType()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasDatasize()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getTypeBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBytes(2, indexdata_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeInt32(3, datasize_);
+      }
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getTypeBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(2, indexdata_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(3, datasize_);
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+
+    public static crosby.binary.Fileformat.BlobHeader parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static crosby.binary.Fileformat.BlobHeader parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static crosby.binary.Fileformat.BlobHeader parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static crosby.binary.Fileformat.BlobHeader parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static crosby.binary.Fileformat.BlobHeader parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static crosby.binary.Fileformat.BlobHeader parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static crosby.binary.Fileformat.BlobHeader parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static crosby.binary.Fileformat.BlobHeader parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static crosby.binary.Fileformat.BlobHeader parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static crosby.binary.Fileformat.BlobHeader parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Fileformat.BlobHeader prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+
+    /**
+     * Protobuf type {@code OSMPBF.BlobHeader}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Fileformat.BlobHeader, Builder>
+        implements crosby.binary.Fileformat.BlobHeaderOrBuilder {
+      // Construct using crosby.binary.Fileformat.BlobHeader.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        type_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        indexdata_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        datasize_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public crosby.binary.Fileformat.BlobHeader getDefaultInstanceForType() {
+        return crosby.binary.Fileformat.BlobHeader.getDefaultInstance();
+      }
+
+      public crosby.binary.Fileformat.BlobHeader build() {
+        crosby.binary.Fileformat.BlobHeader result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public crosby.binary.Fileformat.BlobHeader buildPartial() {
+        crosby.binary.Fileformat.BlobHeader result = new crosby.binary.Fileformat.BlobHeader(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.type_ = type_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.indexdata_ = indexdata_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.datasize_ = datasize_;
+        result.bitField0_ = to_bitField0_;
+        return result;
+      }
+
+      public Builder mergeFrom(crosby.binary.Fileformat.BlobHeader other) {
+        if (other == crosby.binary.Fileformat.BlobHeader.getDefaultInstance()) return this;
+        if (other.hasType()) {
+          bitField0_ |= 0x00000001;
+          type_ = other.type_;
+          
+        }
+        if (other.hasIndexdata()) {
+          setIndexdata(other.getIndexdata());
+        }
+        if (other.hasDatasize()) {
+          setDatasize(other.getDatasize());
+        }
+        return this;
+      }
+
+      public final boolean isInitialized() {
+        if (!hasType()) {
+          
+          return false;
+        }
+        if (!hasDatasize()) {
+          
+          return false;
+        }
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        crosby.binary.Fileformat.BlobHeader parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (crosby.binary.Fileformat.BlobHeader) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
       private int bitField0_;
-      
+
       // required string type = 1;
       private java.lang.Object type_ = "";
+      /**
+       * <code>required string type = 1;</code>
+       */
       public boolean hasType() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public String getType() {
+      /**
+       * <code>required string type = 1;</code>
+       */
+      public java.lang.String getType() {
         java.lang.Object ref = type_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           type_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setType(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>required string type = 1;</code>
+       */
+      public com.google.protobuf.ByteString
+          getTypeBytes() {
+        java.lang.Object ref = type_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          type_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>required string type = 1;</code>
+       */
+      public Builder setType(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -917,4 +1324,7 @@
         return this;
       }
+      /**
+       * <code>required string type = 1;</code>
+       */
       public Builder clearType() {
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -923,18 +1333,35 @@
         return this;
       }
-      void setType(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000001;
+      /**
+       * <code>required string type = 1;</code>
+       */
+      public Builder setTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
         type_ = value;
         
-      }
-      
+        return this;
+      }
+
       // optional bytes indexdata = 2;
       private com.google.protobuf.ByteString indexdata_ = com.google.protobuf.ByteString.EMPTY;
+      /**
+       * <code>optional bytes indexdata = 2;</code>
+       */
       public boolean hasIndexdata() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
+      /**
+       * <code>optional bytes indexdata = 2;</code>
+       */
       public com.google.protobuf.ByteString getIndexdata() {
         return indexdata_;
       }
+      /**
+       * <code>optional bytes indexdata = 2;</code>
+       */
       public Builder setIndexdata(com.google.protobuf.ByteString value) {
         if (value == null) {
@@ -946,4 +1373,7 @@
         return this;
       }
+      /**
+       * <code>optional bytes indexdata = 2;</code>
+       */
       public Builder clearIndexdata() {
         bitField0_ = (bitField0_ & ~0x00000002);
@@ -952,13 +1382,22 @@
         return this;
       }
-      
+
       // required int32 datasize = 3;
       private int datasize_ ;
+      /**
+       * <code>required int32 datasize = 3;</code>
+       */
       public boolean hasDatasize() {
         return ((bitField0_ & 0x00000004) == 0x00000004);
       }
+      /**
+       * <code>required int32 datasize = 3;</code>
+       */
       public int getDatasize() {
         return datasize_;
       }
+      /**
+       * <code>required int32 datasize = 3;</code>
+       */
       public Builder setDatasize(int value) {
         bitField0_ |= 0x00000004;
@@ -967,4 +1406,7 @@
         return this;
       }
+      /**
+       * <code>required int32 datasize = 3;</code>
+       */
       public Builder clearDatasize() {
         bitField0_ = (bitField0_ & ~0x00000004);
@@ -973,20 +1415,20 @@
         return this;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:OSMPBF.BlobHeader)
     }
-    
+
     static {
       defaultInstance = new BlobHeader(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:OSMPBF.BlobHeader)
   }
-  
-  
+
+
   static {
   }
-  
+
   // @@protoc_insertion_point(outer_class_scope)
 }
Index: /applications/editors/josm/plugins/pbf/gen/crosby/binary/Osmformat.java
===================================================================
--- /applications/editors/josm/plugins/pbf/gen/crosby/binary/Osmformat.java	(revision 30489)
+++ /applications/editors/josm/plugins/pbf/gen/crosby/binary/Osmformat.java	(revision 30490)
@@ -1,4 +1,4 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: src/osmformat.proto
+// source: src/crosby/binary/osmformat.proto
 
 package crosby.binary;
@@ -11,99 +11,423 @@
   public interface HeaderBlockOrBuilder
       extends com.google.protobuf.MessageLiteOrBuilder {
-    
+
     // optional .OSMPBF.HeaderBBox bbox = 1;
+    /**
+     * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
+     */
     boolean hasBbox();
+    /**
+     * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
+     */
     crosby.binary.Osmformat.HeaderBBox getBbox();
-    
+
     // repeated string required_features = 4;
-    java.util.List<String> getRequiredFeaturesList();
+    /**
+     * <code>repeated string required_features = 4;</code>
+     *
+     * <pre>
+     * Additional tags to aid in parsing this dataset 
+     * </pre>
+     */
+    java.util.List<java.lang.String>
+    getRequiredFeaturesList();
+    /**
+     * <code>repeated string required_features = 4;</code>
+     *
+     * <pre>
+     * Additional tags to aid in parsing this dataset 
+     * </pre>
+     */
     int getRequiredFeaturesCount();
-    String getRequiredFeatures(int index);
-    
+    /**
+     * <code>repeated string required_features = 4;</code>
+     *
+     * <pre>
+     * Additional tags to aid in parsing this dataset 
+     * </pre>
+     */
+    java.lang.String getRequiredFeatures(int index);
+    /**
+     * <code>repeated string required_features = 4;</code>
+     *
+     * <pre>
+     * Additional tags to aid in parsing this dataset 
+     * </pre>
+     */
+    com.google.protobuf.ByteString
+        getRequiredFeaturesBytes(int index);
+
     // repeated string optional_features = 5;
-    java.util.List<String> getOptionalFeaturesList();
+    /**
+     * <code>repeated string optional_features = 5;</code>
+     */
+    java.util.List<java.lang.String>
+    getOptionalFeaturesList();
+    /**
+     * <code>repeated string optional_features = 5;</code>
+     */
     int getOptionalFeaturesCount();
-    String getOptionalFeatures(int index);
-    
+    /**
+     * <code>repeated string optional_features = 5;</code>
+     */
+    java.lang.String getOptionalFeatures(int index);
+    /**
+     * <code>repeated string optional_features = 5;</code>
+     */
+    com.google.protobuf.ByteString
+        getOptionalFeaturesBytes(int index);
+
     // optional string writingprogram = 16;
+    /**
+     * <code>optional string writingprogram = 16;</code>
+     */
     boolean hasWritingprogram();
-    String getWritingprogram();
-    
+    /**
+     * <code>optional string writingprogram = 16;</code>
+     */
+    java.lang.String getWritingprogram();
+    /**
+     * <code>optional string writingprogram = 16;</code>
+     */
+    com.google.protobuf.ByteString
+        getWritingprogramBytes();
+
     // optional string source = 17;
+    /**
+     * <code>optional string source = 17;</code>
+     *
+     * <pre>
+     * From the bbox field.
+     * </pre>
+     */
     boolean hasSource();
-    String getSource();
+    /**
+     * <code>optional string source = 17;</code>
+     *
+     * <pre>
+     * From the bbox field.
+     * </pre>
+     */
+    java.lang.String getSource();
+    /**
+     * <code>optional string source = 17;</code>
+     *
+     * <pre>
+     * From the bbox field.
+     * </pre>
+     */
+    com.google.protobuf.ByteString
+        getSourceBytes();
+
+    // optional int64 osmosis_replication_timestamp = 32;
+    /**
+     * <code>optional int64 osmosis_replication_timestamp = 32;</code>
+     *
+     * <pre>
+     * replication timestamp, expressed in seconds since the epoch, 
+     * otherwise the same value as in the "timestamp=..." field
+     * in the state.txt file used by Osmosis
+     * </pre>
+     */
+    boolean hasOsmosisReplicationTimestamp();
+    /**
+     * <code>optional int64 osmosis_replication_timestamp = 32;</code>
+     *
+     * <pre>
+     * replication timestamp, expressed in seconds since the epoch, 
+     * otherwise the same value as in the "timestamp=..." field
+     * in the state.txt file used by Osmosis
+     * </pre>
+     */
+    long getOsmosisReplicationTimestamp();
+
+    // optional int64 osmosis_replication_sequence_number = 33;
+    /**
+     * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
+     *
+     * <pre>
+     * replication sequence number (sequenceNumber in state.txt)
+     * </pre>
+     */
+    boolean hasOsmosisReplicationSequenceNumber();
+    /**
+     * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
+     *
+     * <pre>
+     * replication sequence number (sequenceNumber in state.txt)
+     * </pre>
+     */
+    long getOsmosisReplicationSequenceNumber();
+
+    // optional string osmosis_replication_base_url = 34;
+    /**
+     * <code>optional string osmosis_replication_base_url = 34;</code>
+     *
+     * <pre>
+     * replication base URL (from Osmosis' configuration.txt file)
+     * </pre>
+     */
+    boolean hasOsmosisReplicationBaseUrl();
+    /**
+     * <code>optional string osmosis_replication_base_url = 34;</code>
+     *
+     * <pre>
+     * replication base URL (from Osmosis' configuration.txt file)
+     * </pre>
+     */
+    java.lang.String getOsmosisReplicationBaseUrl();
+    /**
+     * <code>optional string osmosis_replication_base_url = 34;</code>
+     *
+     * <pre>
+     * replication base URL (from Osmosis' configuration.txt file)
+     * </pre>
+     */
+    com.google.protobuf.ByteString
+        getOsmosisReplicationBaseUrlBytes();
   }
+  /**
+   * Protobuf type {@code OSMPBF.HeaderBlock}
+   */
   public static final class HeaderBlock extends
       com.google.protobuf.GeneratedMessageLite
       implements HeaderBlockOrBuilder {
     // Use HeaderBlock.newBuilder() to construct.
-    private HeaderBlock(Builder builder) {
+    private HeaderBlock(com.google.protobuf.GeneratedMessageLite.Builder builder) {
       super(builder);
+
     }
     private HeaderBlock(boolean noInit) {}
-    
+
     private static final HeaderBlock defaultInstance;
     public static HeaderBlock getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public HeaderBlock getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
+
+    private HeaderBlock(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 10: {
+              crosby.binary.Osmformat.HeaderBBox.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000001) == 0x00000001)) {
+                subBuilder = bbox_.toBuilder();
+              }
+              bbox_ = input.readMessage(crosby.binary.Osmformat.HeaderBBox.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(bbox_);
+                bbox_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000001;
+              break;
+            }
+            case 34: {
+              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+                requiredFeatures_ = new com.google.protobuf.LazyStringArrayList();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              requiredFeatures_.add(input.readBytes());
+              break;
+            }
+            case 42: {
+              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+                optionalFeatures_ = new com.google.protobuf.LazyStringArrayList();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              optionalFeatures_.add(input.readBytes());
+              break;
+            }
+            case 130: {
+              bitField0_ |= 0x00000002;
+              writingprogram_ = input.readBytes();
+              break;
+            }
+            case 138: {
+              bitField0_ |= 0x00000004;
+              source_ = input.readBytes();
+              break;
+            }
+            case 256: {
+              bitField0_ |= 0x00000008;
+              osmosisReplicationTimestamp_ = input.readInt64();
+              break;
+            }
+            case 264: {
+              bitField0_ |= 0x00000010;
+              osmosisReplicationSequenceNumber_ = input.readInt64();
+              break;
+            }
+            case 274: {
+              bitField0_ |= 0x00000020;
+              osmosisReplicationBaseUrl_ = input.readBytes();
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+          requiredFeatures_ = new com.google.protobuf.UnmodifiableLazyStringList(requiredFeatures_);
+        }
+        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+          optionalFeatures_ = new com.google.protobuf.UnmodifiableLazyStringList(optionalFeatures_);
+        }
+        makeExtensionsImmutable();
+      }
+    }
+    public static com.google.protobuf.Parser<HeaderBlock> PARSER =
+        new com.google.protobuf.AbstractParser<HeaderBlock>() {
+      public HeaderBlock parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new HeaderBlock(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<HeaderBlock> getParserForType() {
+      return PARSER;
+    }
+
     private int bitField0_;
     // optional .OSMPBF.HeaderBBox bbox = 1;
     public static final int BBOX_FIELD_NUMBER = 1;
     private crosby.binary.Osmformat.HeaderBBox bbox_;
+    /**
+     * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
+     */
     public boolean hasBbox() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
+    /**
+     * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
+     */
     public crosby.binary.Osmformat.HeaderBBox getBbox() {
       return bbox_;
     }
-    
+
     // repeated string required_features = 4;
     public static final int REQUIRED_FEATURES_FIELD_NUMBER = 4;
     private com.google.protobuf.LazyStringList requiredFeatures_;
-    public java.util.List<String>
+    /**
+     * <code>repeated string required_features = 4;</code>
+     *
+     * <pre>
+     * Additional tags to aid in parsing this dataset 
+     * </pre>
+     */
+    public java.util.List<java.lang.String>
         getRequiredFeaturesList() {
       return requiredFeatures_;
     }
+    /**
+     * <code>repeated string required_features = 4;</code>
+     *
+     * <pre>
+     * Additional tags to aid in parsing this dataset 
+     * </pre>
+     */
     public int getRequiredFeaturesCount() {
       return requiredFeatures_.size();
     }
-    public String getRequiredFeatures(int index) {
+    /**
+     * <code>repeated string required_features = 4;</code>
+     *
+     * <pre>
+     * Additional tags to aid in parsing this dataset 
+     * </pre>
+     */
+    public java.lang.String getRequiredFeatures(int index) {
       return requiredFeatures_.get(index);
     }
-    
+    /**
+     * <code>repeated string required_features = 4;</code>
+     *
+     * <pre>
+     * Additional tags to aid in parsing this dataset 
+     * </pre>
+     */
+    public com.google.protobuf.ByteString
+        getRequiredFeaturesBytes(int index) {
+      return requiredFeatures_.getByteString(index);
+    }
+
     // repeated string optional_features = 5;
     public static final int OPTIONAL_FEATURES_FIELD_NUMBER = 5;
     private com.google.protobuf.LazyStringList optionalFeatures_;
-    public java.util.List<String>
+    /**
+     * <code>repeated string optional_features = 5;</code>
+     */
+    public java.util.List<java.lang.String>
         getOptionalFeaturesList() {
       return optionalFeatures_;
     }
+    /**
+     * <code>repeated string optional_features = 5;</code>
+     */
     public int getOptionalFeaturesCount() {
       return optionalFeatures_.size();
     }
-    public String getOptionalFeatures(int index) {
+    /**
+     * <code>repeated string optional_features = 5;</code>
+     */
+    public java.lang.String getOptionalFeatures(int index) {
       return optionalFeatures_.get(index);
     }
-    
+    /**
+     * <code>repeated string optional_features = 5;</code>
+     */
+    public com.google.protobuf.ByteString
+        getOptionalFeaturesBytes(int index) {
+      return optionalFeatures_.getByteString(index);
+    }
+
     // optional string writingprogram = 16;
     public static final int WRITINGPROGRAM_FIELD_NUMBER = 16;
     private java.lang.Object writingprogram_;
+    /**
+     * <code>optional string writingprogram = 16;</code>
+     */
     public boolean hasWritingprogram() {
       return ((bitField0_ & 0x00000002) == 0x00000002);
     }
-    public String getWritingprogram() {
+    /**
+     * <code>optional string writingprogram = 16;</code>
+     */
+    public java.lang.String getWritingprogram() {
       java.lang.Object ref = writingprogram_;
-      if (ref instanceof String) {
-        return (String) ref;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
           writingprogram_ = s;
         }
@@ -111,9 +435,14 @@
       }
     }
-    private com.google.protobuf.ByteString getWritingprogramBytes() {
+    /**
+     * <code>optional string writingprogram = 16;</code>
+     */
+    public com.google.protobuf.ByteString
+        getWritingprogramBytes() {
       java.lang.Object ref = writingprogram_;
-      if (ref instanceof String) {
+      if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
         writingprogram_ = b;
         return b;
@@ -122,20 +451,34 @@
       }
     }
-    
+
     // optional string source = 17;
     public static final int SOURCE_FIELD_NUMBER = 17;
     private java.lang.Object source_;
+    /**
+     * <code>optional string source = 17;</code>
+     *
+     * <pre>
+     * From the bbox field.
+     * </pre>
+     */
     public boolean hasSource() {
       return ((bitField0_ & 0x00000004) == 0x00000004);
     }
-    public String getSource() {
+    /**
+     * <code>optional string source = 17;</code>
+     *
+     * <pre>
+     * From the bbox field.
+     * </pre>
+     */
+    public java.lang.String getSource() {
       java.lang.Object ref = source_;
-      if (ref instanceof String) {
-        return (String) ref;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
           source_ = s;
         }
@@ -143,9 +486,18 @@
       }
     }
-    private com.google.protobuf.ByteString getSourceBytes() {
+    /**
+     * <code>optional string source = 17;</code>
+     *
+     * <pre>
+     * From the bbox field.
+     * </pre>
+     */
+    public com.google.protobuf.ByteString
+        getSourceBytes() {
       java.lang.Object ref = source_;
-      if (ref instanceof String) {
+      if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
         source_ = b;
         return b;
@@ -154,5 +506,112 @@
       }
     }
-    
+
+    // optional int64 osmosis_replication_timestamp = 32;
+    public static final int OSMOSIS_REPLICATION_TIMESTAMP_FIELD_NUMBER = 32;
+    private long osmosisReplicationTimestamp_;
+    /**
+     * <code>optional int64 osmosis_replication_timestamp = 32;</code>
+     *
+     * <pre>
+     * replication timestamp, expressed in seconds since the epoch, 
+     * otherwise the same value as in the "timestamp=..." field
+     * in the state.txt file used by Osmosis
+     * </pre>
+     */
+    public boolean hasOsmosisReplicationTimestamp() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    /**
+     * <code>optional int64 osmosis_replication_timestamp = 32;</code>
+     *
+     * <pre>
+     * replication timestamp, expressed in seconds since the epoch, 
+     * otherwise the same value as in the "timestamp=..." field
+     * in the state.txt file used by Osmosis
+     * </pre>
+     */
+    public long getOsmosisReplicationTimestamp() {
+      return osmosisReplicationTimestamp_;
+    }
+
+    // optional int64 osmosis_replication_sequence_number = 33;
+    public static final int OSMOSIS_REPLICATION_SEQUENCE_NUMBER_FIELD_NUMBER = 33;
+    private long osmosisReplicationSequenceNumber_;
+    /**
+     * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
+     *
+     * <pre>
+     * replication sequence number (sequenceNumber in state.txt)
+     * </pre>
+     */
+    public boolean hasOsmosisReplicationSequenceNumber() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    /**
+     * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
+     *
+     * <pre>
+     * replication sequence number (sequenceNumber in state.txt)
+     * </pre>
+     */
+    public long getOsmosisReplicationSequenceNumber() {
+      return osmosisReplicationSequenceNumber_;
+    }
+
+    // optional string osmosis_replication_base_url = 34;
+    public static final int OSMOSIS_REPLICATION_BASE_URL_FIELD_NUMBER = 34;
+    private java.lang.Object osmosisReplicationBaseUrl_;
+    /**
+     * <code>optional string osmosis_replication_base_url = 34;</code>
+     *
+     * <pre>
+     * replication base URL (from Osmosis' configuration.txt file)
+     * </pre>
+     */
+    public boolean hasOsmosisReplicationBaseUrl() {
+      return ((bitField0_ & 0x00000020) == 0x00000020);
+    }
+    /**
+     * <code>optional string osmosis_replication_base_url = 34;</code>
+     *
+     * <pre>
+     * replication base URL (from Osmosis' configuration.txt file)
+     * </pre>
+     */
+    public java.lang.String getOsmosisReplicationBaseUrl() {
+      java.lang.Object ref = osmosisReplicationBaseUrl_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          osmosisReplicationBaseUrl_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string osmosis_replication_base_url = 34;</code>
+     *
+     * <pre>
+     * replication base URL (from Osmosis' configuration.txt file)
+     * </pre>
+     */
+    public com.google.protobuf.ByteString
+        getOsmosisReplicationBaseUrlBytes() {
+      java.lang.Object ref = osmosisReplicationBaseUrl_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        osmosisReplicationBaseUrl_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
     private void initFields() {
       bbox_ = crosby.binary.Osmformat.HeaderBBox.getDefaultInstance();
@@ -161,4 +620,7 @@
       writingprogram_ = "";
       source_ = "";
+      osmosisReplicationTimestamp_ = 0L;
+      osmosisReplicationSequenceNumber_ = 0L;
+      osmosisReplicationBaseUrl_ = "";
     }
     private byte memoizedIsInitialized = -1;
@@ -166,5 +628,5 @@
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
-      
+
       if (hasBbox()) {
         if (!getBbox().isInitialized()) {
@@ -176,5 +638,5 @@
       return true;
     }
-    
+
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
@@ -195,11 +657,20 @@
         output.writeBytes(17, getSourceBytes());
       }
-    }
-    
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeInt64(32, osmosisReplicationTimestamp_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeInt64(33, osmosisReplicationSequenceNumber_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        output.writeBytes(34, getOsmosisReplicationBaseUrlBytes());
+      }
+    }
+
     private int memoizedSerializedSize = -1;
     public int getSerializedSize() {
       int size = memoizedSerializedSize;
       if (size != -1) return size;
-    
+
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
@@ -233,8 +704,20 @@
           .computeBytesSize(17, getSourceBytes());
       }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(32, osmosisReplicationTimestamp_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(33, osmosisReplicationSequenceNumber_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(34, getOsmosisReplicationBaseUrlBytes());
+      }
       memoizedSerializedSize = size;
       return size;
     }
-    
+
     private static final long serialVersionUID = 0L;
     @java.lang.Override
@@ -243,9 +726,9 @@
       return super.writeReplace();
     }
-    
+
     public static crosby.binary.Osmformat.HeaderBlock parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static crosby.binary.Osmformat.HeaderBlock parseFrom(
@@ -253,10 +736,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static crosby.binary.Osmformat.HeaderBlock parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static crosby.binary.Osmformat.HeaderBlock parseFrom(
@@ -264,10 +746,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static crosby.binary.Osmformat.HeaderBlock parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static crosby.binary.Osmformat.HeaderBlock parseFrom(
@@ -275,15 +756,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(input, extensionRegistry);
     }
     public static crosby.binary.Osmformat.HeaderBlock parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input);
     }
     public static crosby.binary.Osmformat.HeaderBlock parseDelimitedFrom(
@@ -291,15 +766,10 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
     public static crosby.binary.Osmformat.HeaderBlock parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static crosby.binary.Osmformat.HeaderBlock parseFrom(
@@ -307,8 +777,7 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
@@ -317,5 +786,8 @@
     }
     public Builder toBuilder() { return newBuilder(this); }
-    
+
+    /**
+     * Protobuf type {@code OSMPBF.HeaderBlock}
+     */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageLite.Builder<
@@ -326,5 +798,5 @@
         maybeForceBuilderInitialization();
       }
-      
+
       private void maybeForceBuilderInitialization() {
       }
@@ -332,5 +804,5 @@
         return new Builder();
       }
-      
+
       public Builder clear() {
         super.clear();
@@ -345,15 +817,21 @@
         source_ = "";
         bitField0_ = (bitField0_ & ~0x00000010);
-        return this;
-      }
-      
+        osmosisReplicationTimestamp_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000020);
+        osmosisReplicationSequenceNumber_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000040);
+        osmosisReplicationBaseUrl_ = "";
+        bitField0_ = (bitField0_ & ~0x00000080);
+        return this;
+      }
+
       public Builder clone() {
         return create().mergeFrom(buildPartial());
       }
-      
+
       public crosby.binary.Osmformat.HeaderBlock getDefaultInstanceForType() {
         return crosby.binary.Osmformat.HeaderBlock.getDefaultInstance();
       }
-      
+
       public crosby.binary.Osmformat.HeaderBlock build() {
         crosby.binary.Osmformat.HeaderBlock result = buildPartial();
@@ -363,15 +841,5 @@
         return result;
       }
-      
-      private crosby.binary.Osmformat.HeaderBlock buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        crosby.binary.Osmformat.HeaderBlock result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
+
       public crosby.binary.Osmformat.HeaderBlock buildPartial() {
         crosby.binary.Osmformat.HeaderBlock result = new crosby.binary.Osmformat.HeaderBlock(this);
@@ -402,8 +870,20 @@
         }
         result.source_ = source_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.osmosisReplicationTimestamp_ = osmosisReplicationTimestamp_;
+        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.osmosisReplicationSequenceNumber_ = osmosisReplicationSequenceNumber_;
+        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
+          to_bitField0_ |= 0x00000020;
+        }
+        result.osmosisReplicationBaseUrl_ = osmosisReplicationBaseUrl_;
         result.bitField0_ = to_bitField0_;
         return result;
       }
-      
+
       public Builder mergeFrom(crosby.binary.Osmformat.HeaderBlock other) {
         if (other == crosby.binary.Osmformat.HeaderBlock.getDefaultInstance()) return this;
@@ -432,12 +912,27 @@
         }
         if (other.hasWritingprogram()) {
-          setWritingprogram(other.getWritingprogram());
+          bitField0_ |= 0x00000008;
+          writingprogram_ = other.writingprogram_;
+          
         }
         if (other.hasSource()) {
-          setSource(other.getSource());
-        }
-        return this;
-      }
-      
+          bitField0_ |= 0x00000010;
+          source_ = other.source_;
+          
+        }
+        if (other.hasOsmosisReplicationTimestamp()) {
+          setOsmosisReplicationTimestamp(other.getOsmosisReplicationTimestamp());
+        }
+        if (other.hasOsmosisReplicationSequenceNumber()) {
+          setOsmosisReplicationSequenceNumber(other.getOsmosisReplicationSequenceNumber());
+        }
+        if (other.hasOsmosisReplicationBaseUrl()) {
+          bitField0_ |= 0x00000080;
+          osmosisReplicationBaseUrl_ = other.osmosisReplicationBaseUrl_;
+          
+        }
+        return this;
+      }
+
       public final boolean isInitialized() {
         if (hasBbox()) {
@@ -449,65 +944,41 @@
         return true;
       }
-      
+
       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 10: {
-              crosby.binary.Osmformat.HeaderBBox.Builder subBuilder = crosby.binary.Osmformat.HeaderBBox.newBuilder();
-              if (hasBbox()) {
-                subBuilder.mergeFrom(getBbox());
-              }
-              input.readMessage(subBuilder, extensionRegistry);
-              setBbox(subBuilder.buildPartial());
-              break;
-            }
-            case 34: {
-              ensureRequiredFeaturesIsMutable();
-              requiredFeatures_.add(input.readBytes());
-              break;
-            }
-            case 42: {
-              ensureOptionalFeaturesIsMutable();
-              optionalFeatures_.add(input.readBytes());
-              break;
-            }
-            case 130: {
-              bitField0_ |= 0x00000008;
-              writingprogram_ = input.readBytes();
-              break;
-            }
-            case 138: {
-              bitField0_ |= 0x00000010;
-              source_ = input.readBytes();
-              break;
-            }
+        crosby.binary.Osmformat.HeaderBlock parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (crosby.binary.Osmformat.HeaderBlock) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
         }
-      }
-      
+        return this;
+      }
       private int bitField0_;
-      
+
       // optional .OSMPBF.HeaderBBox bbox = 1;
       private crosby.binary.Osmformat.HeaderBBox bbox_ = crosby.binary.Osmformat.HeaderBBox.getDefaultInstance();
+      /**
+       * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
+       */
       public boolean hasBbox() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
+      /**
+       * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
+       */
       public crosby.binary.Osmformat.HeaderBBox getBbox() {
         return bbox_;
       }
+      /**
+       * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
+       */
       public Builder setBbox(crosby.binary.Osmformat.HeaderBBox value) {
         if (value == null) {
@@ -515,15 +986,21 @@
         }
         bbox_ = value;
-        
+
         bitField0_ |= 0x00000001;
         return this;
       }
+      /**
+       * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
+       */
       public Builder setBbox(
           crosby.binary.Osmformat.HeaderBBox.Builder builderForValue) {
         bbox_ = builderForValue.build();
-        
+
         bitField0_ |= 0x00000001;
         return this;
       }
+      /**
+       * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
+       */
       public Builder mergeBbox(crosby.binary.Osmformat.HeaderBBox value) {
         if (((bitField0_ & 0x00000001) == 0x00000001) &&
@@ -534,15 +1011,18 @@
           bbox_ = value;
         }
-        
+
         bitField0_ |= 0x00000001;
         return this;
       }
+      /**
+       * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
+       */
       public Builder clearBbox() {
         bbox_ = crosby.binary.Osmformat.HeaderBBox.getDefaultInstance();
-        
+
         bitField0_ = (bitField0_ & ~0x00000001);
         return this;
       }
-      
+
       // repeated string required_features = 4;
       private com.google.protobuf.LazyStringList requiredFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
@@ -553,16 +1033,55 @@
          }
       }
-      public java.util.List<String>
+      /**
+       * <code>repeated string required_features = 4;</code>
+       *
+       * <pre>
+       * Additional tags to aid in parsing this dataset 
+       * </pre>
+       */
+      public java.util.List<java.lang.String>
           getRequiredFeaturesList() {
         return java.util.Collections.unmodifiableList(requiredFeatures_);
       }
+      /**
+       * <code>repeated string required_features = 4;</code>
+       *
+       * <pre>
+       * Additional tags to aid in parsing this dataset 
+       * </pre>
+       */
       public int getRequiredFeaturesCount() {
         return requiredFeatures_.size();
       }
-      public String getRequiredFeatures(int index) {
+      /**
+       * <code>repeated string required_features = 4;</code>
+       *
+       * <pre>
+       * Additional tags to aid in parsing this dataset 
+       * </pre>
+       */
+      public java.lang.String getRequiredFeatures(int index) {
         return requiredFeatures_.get(index);
       }
+      /**
+       * <code>repeated string required_features = 4;</code>
+       *
+       * <pre>
+       * Additional tags to aid in parsing this dataset 
+       * </pre>
+       */
+      public com.google.protobuf.ByteString
+          getRequiredFeaturesBytes(int index) {
+        return requiredFeatures_.getByteString(index);
+      }
+      /**
+       * <code>repeated string required_features = 4;</code>
+       *
+       * <pre>
+       * Additional tags to aid in parsing this dataset 
+       * </pre>
+       */
       public Builder setRequiredFeatures(
-          int index, String value) {
+          int index, java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -573,5 +1092,13 @@
         return this;
       }
-      public Builder addRequiredFeatures(String value) {
+      /**
+       * <code>repeated string required_features = 4;</code>
+       *
+       * <pre>
+       * Additional tags to aid in parsing this dataset 
+       * </pre>
+       */
+      public Builder addRequiredFeatures(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -582,6 +1109,13 @@
         return this;
       }
+      /**
+       * <code>repeated string required_features = 4;</code>
+       *
+       * <pre>
+       * Additional tags to aid in parsing this dataset 
+       * </pre>
+       */
       public Builder addAllRequiredFeatures(
-          java.lang.Iterable<String> values) {
+          java.lang.Iterable<java.lang.String> values) {
         ensureRequiredFeaturesIsMutable();
         super.addAll(values, requiredFeatures_);
@@ -589,4 +1123,11 @@
         return this;
       }
+      /**
+       * <code>repeated string required_features = 4;</code>
+       *
+       * <pre>
+       * Additional tags to aid in parsing this dataset 
+       * </pre>
+       */
       public Builder clearRequiredFeatures() {
         requiredFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
@@ -595,10 +1136,22 @@
         return this;
       }
-      void addRequiredFeatures(com.google.protobuf.ByteString value) {
-        ensureRequiredFeaturesIsMutable();
+      /**
+       * <code>repeated string required_features = 4;</code>
+       *
+       * <pre>
+       * Additional tags to aid in parsing this dataset 
+       * </pre>
+       */
+      public Builder addRequiredFeaturesBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureRequiredFeaturesIsMutable();
         requiredFeatures_.add(value);
         
-      }
-      
+        return this;
+      }
+
       // repeated string optional_features = 5;
       private com.google.protobuf.LazyStringList optionalFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
@@ -609,16 +1162,35 @@
          }
       }
-      public java.util.List<String>
+      /**
+       * <code>repeated string optional_features = 5;</code>
+       */
+      public java.util.List<java.lang.String>
           getOptionalFeaturesList() {
         return java.util.Collections.unmodifiableList(optionalFeatures_);
       }
+      /**
+       * <code>repeated string optional_features = 5;</code>
+       */
       public int getOptionalFeaturesCount() {
         return optionalFeatures_.size();
       }
-      public String getOptionalFeatures(int index) {
+      /**
+       * <code>repeated string optional_features = 5;</code>
+       */
+      public java.lang.String getOptionalFeatures(int index) {
         return optionalFeatures_.get(index);
       }
+      /**
+       * <code>repeated string optional_features = 5;</code>
+       */
+      public com.google.protobuf.ByteString
+          getOptionalFeaturesBytes(int index) {
+        return optionalFeatures_.getByteString(index);
+      }
+      /**
+       * <code>repeated string optional_features = 5;</code>
+       */
       public Builder setOptionalFeatures(
-          int index, String value) {
+          int index, java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -629,5 +1201,9 @@
         return this;
       }
-      public Builder addOptionalFeatures(String value) {
+      /**
+       * <code>repeated string optional_features = 5;</code>
+       */
+      public Builder addOptionalFeatures(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -638,6 +1214,9 @@
         return this;
       }
+      /**
+       * <code>repeated string optional_features = 5;</code>
+       */
       public Builder addAllOptionalFeatures(
-          java.lang.Iterable<String> values) {
+          java.lang.Iterable<java.lang.String> values) {
         ensureOptionalFeaturesIsMutable();
         super.addAll(values, optionalFeatures_);
@@ -645,4 +1224,7 @@
         return this;
       }
+      /**
+       * <code>repeated string optional_features = 5;</code>
+       */
       public Builder clearOptionalFeatures() {
         optionalFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
@@ -651,26 +1233,61 @@
         return this;
       }
-      void addOptionalFeatures(com.google.protobuf.ByteString value) {
-        ensureOptionalFeaturesIsMutable();
+      /**
+       * <code>repeated string optional_features = 5;</code>
+       */
+      public Builder addOptionalFeaturesBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureOptionalFeaturesIsMutable();
         optionalFeatures_.add(value);
         
-      }
-      
+        return this;
+      }
+
       // optional string writingprogram = 16;
       private java.lang.Object writingprogram_ = "";
+      /**
+       * <code>optional string writingprogram = 16;</code>
+       */
       public boolean hasWritingprogram() {
         return ((bitField0_ & 0x00000008) == 0x00000008);
       }
-      public String getWritingprogram() {
+      /**
+       * <code>optional string writingprogram = 16;</code>
+       */
+      public java.lang.String getWritingprogram() {
         java.lang.Object ref = writingprogram_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           writingprogram_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setWritingprogram(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string writingprogram = 16;</code>
+       */
+      public com.google.protobuf.ByteString
+          getWritingprogramBytes() {
+        java.lang.Object ref = writingprogram_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          writingprogram_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string writingprogram = 16;</code>
+       */
+      public Builder setWritingprogram(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -681,4 +1298,7 @@
         return this;
       }
+      /**
+       * <code>optional string writingprogram = 16;</code>
+       */
       public Builder clearWritingprogram() {
         bitField0_ = (bitField0_ & ~0x00000008);
@@ -687,26 +1307,77 @@
         return this;
       }
-      void setWritingprogram(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000008;
+      /**
+       * <code>optional string writingprogram = 16;</code>
+       */
+      public Builder setWritingprogramBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000008;
         writingprogram_ = value;
         
-      }
-      
+        return this;
+      }
+
       // optional string source = 17;
       private java.lang.Object source_ = "";
+      /**
+       * <code>optional string source = 17;</code>
+       *
+       * <pre>
+       * From the bbox field.
+       * </pre>
+       */
       public boolean hasSource() {
         return ((bitField0_ & 0x00000010) == 0x00000010);
       }
-      public String getSource() {
+      /**
+       * <code>optional string source = 17;</code>
+       *
+       * <pre>
+       * From the bbox field.
+       * </pre>
+       */
+      public java.lang.String getSource() {
         java.lang.Object ref = source_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
           source_ = s;
           return s;
         } else {
-          return (String) ref;
-        }
-      }
-      public Builder setSource(String value) {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string source = 17;</code>
+       *
+       * <pre>
+       * From the bbox field.
+       * </pre>
+       */
+      public com.google.protobuf.ByteString
+          getSourceBytes() {
+        java.lang.Object ref = source_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          source_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string source = 17;</code>
+       *
+       * <pre>
+       * From the bbox field.
+       * </pre>
+       */
+      public Builder setSource(
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
@@ -717,4 +1388,11 @@
         return this;
       }
+      /**
+       * <code>optional string source = 17;</code>
+       *
+       * <pre>
+       * From the bbox field.
+       * </pre>
+       */
       public Builder clearSource() {
         bitField0_ = (bitField0_ & ~0x00000010);
@@ -723,383 +1401,320 @@
         return this;
       }
-      void setSource(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000010;
+      /**
+       * <code>optional string source = 17;</code>
+       *
+       * <pre>
+       * From the bbox field.
+       * </pre>
+       */
+      public Builder setSourceBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000010;
         source_ = value;
         
-      }
-      
+        return this;
+      }
+
+      // optional int64 osmosis_replication_timestamp = 32;
+      private long osmosisReplicationTimestamp_ ;
+      /**
+       * <code>optional int64 osmosis_replication_timestamp = 32;</code>
+       *
+       * <pre>
+       * replication timestamp, expressed in seconds since the epoch, 
+       * otherwise the same value as in the "timestamp=..." field
+       * in the state.txt file used by Osmosis
+       * </pre>
+       */
+      public boolean hasOsmosisReplicationTimestamp() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      /**
+       * <code>optional int64 osmosis_replication_timestamp = 32;</code>
+       *
+       * <pre>
+       * replication timestamp, expressed in seconds since the epoch, 
+       * otherwise the same value as in the "timestamp=..." field
+       * in the state.txt file used by Osmosis
+       * </pre>
+       */
+      public long getOsmosisReplicationTimestamp() {
+        return osmosisReplicationTimestamp_;
+      }
+      /**
+       * <code>optional int64 osmosis_replication_timestamp = 32;</code>
+       *
+       * <pre>
+       * replication timestamp, expressed in seconds since the epoch, 
+       * otherwise the same value as in the "timestamp=..." field
+       * in the state.txt file used by Osmosis
+       * </pre>
+       */
+      public Builder setOsmosisReplicationTimestamp(long value) {
+        bitField0_ |= 0x00000020;
+        osmosisReplicationTimestamp_ = value;
+        
+        return this;
+      }
+      /**
+       * <code>optional int64 osmosis_replication_timestamp = 32;</code>
+       *
+       * <pre>
+       * replication timestamp, expressed in seconds since the epoch, 
+       * otherwise the same value as in the "timestamp=..." field
+       * in the state.txt file used by Osmosis
+       * </pre>
+       */
+      public Builder clearOsmosisReplicationTimestamp() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        osmosisReplicationTimestamp_ = 0L;
+        
+        return this;
+      }
+
+      // optional int64 osmosis_replication_sequence_number = 33;
+      private long osmosisReplicationSequenceNumber_ ;
+      /**
+       * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
+       *
+       * <pre>
+       * replication sequence number (sequenceNumber in state.txt)
+       * </pre>
+       */
+      public boolean hasOsmosisReplicationSequenceNumber() {
+        return ((bitField0_ & 0x00000040) == 0x00000040);
+      }
+      /**
+       * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
+       *
+       * <pre>
+       * replication sequence number (sequenceNumber in state.txt)
+       * </pre>
+       */
+      public long getOsmosisReplicationSequenceNumber() {
+        return osmosisReplicationSequenceNumber_;
+      }
+      /**
+       * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
+       *
+       * <pre>
+       * replication sequence number (sequenceNumber in state.txt)
+       * </pre>
+       */
+      public Builder setOsmosisReplicationSequenceNumber(long value) {
+        bitField0_ |= 0x00000040;
+        osmosisReplicationSequenceNumber_ = value;
+        
+        return this;
+      }
+      /**
+       * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
+       *
+       * <pre>
+       * replication sequence number (sequenceNumber in state.txt)
+       * </pre>
+       */
+      public Builder clearOsmosisReplicationSequenceNumber() {
+        bitField0_ = (bitField0_ & ~0x00000040);
+        osmosisReplicationSequenceNumber_ = 0L;
+        
+        return this;
+      }
+
+      // optional string osmosis_replication_base_url = 34;
+      private java.lang.Object osmosisReplicationBaseUrl_ = "";
+      /**
+       * <code>optional string osmosis_replication_base_url = 34;</code>
+       *
+       * <pre>
+       * replication base URL (from Osmosis' configuration.txt file)
+       * </pre>
+       */
+      public boolean hasOsmosisReplicationBaseUrl() {
+        return ((bitField0_ & 0x00000080) == 0x00000080);
+      }
+      /**
+       * <code>optional string osmosis_replication_base_url = 34;</code>
+       *
+       * <pre>
+       * replication base URL (from Osmosis' configuration.txt file)
+       * </pre>
+       */
+      public java.lang.String getOsmosisReplicationBaseUrl() {
+        java.lang.Object ref = osmosisReplicationBaseUrl_;
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
+          osmosisReplicationBaseUrl_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string osmosis_replication_base_url = 34;</code>
+       *
+       * <pre>
+       * replication base URL (from Osmosis' configuration.txt file)
+       * </pre>
+       */
+      public com.google.protobuf.ByteString
+          getOsmosisReplicationBaseUrlBytes() {
+        java.lang.Object ref = osmosisReplicationBaseUrl_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          osmosisReplicationBaseUrl_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string osmosis_replication_base_url = 34;</code>
+       *
+       * <pre>
+       * replication base URL (from Osmosis' configuration.txt file)
+       * </pre>
+       */
+      public Builder setOsmosisReplicationBaseUrl(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000080;
+        osmosisReplicationBaseUrl_ = value;
+        
+        return this;
+      }
+      /**
+       * <code>optional string osmosis_replication_base_url = 34;</code>
+       *
+       * <pre>
+       * replication base URL (from Osmosis' configuration.txt file)
+       * </pre>
+       */
+      public Builder clearOsmosisReplicationBaseUrl() {
+        bitField0_ = (bitField0_ & ~0x00000080);
+        osmosisReplicationBaseUrl_ = getDefaultInstance().getOsmosisReplicationBaseUrl();
+        
+        return this;
+      }
+      /**
+       * <code>optional string osmosis_replication_base_url = 34;</code>
+       *
+       * <pre>
+       * replication base URL (from Osmosis' configuration.txt file)
+       * </pre>
+       */
+      public Builder setOsmosisReplicationBaseUrlBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000080;
+        osmosisReplicationBaseUrl_ = value;
+        
+        return this;
+      }
+
       // @@protoc_insertion_point(builder_scope:OSMPBF.HeaderBlock)
     }
-    
+
     static {
       defaultInstance = new HeaderBlock(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:OSMPBF.HeaderBlock)
   }
-  
+
   public interface HeaderBBoxOrBuilder
       extends com.google.protobuf.MessageLiteOrBuilder {
-    
+
     // required sint64 left = 1;
+    /**
+     * <code>required sint64 left = 1;</code>
+     */
     boolean hasLeft();
+    /**
+     * <code>required sint64 left = 1;</code>
+     */
     long getLeft();
-    
+
     // required sint64 right = 2;
+    /**
+     * <code>required sint64 right = 2;</code>
+     */
     boolean hasRight();
+    /**
+     * <code>required sint64 right = 2;</code>
+     */
     long getRight();
-    
+
     // required sint64 top = 3;
+    /**
+     * <code>required sint64 top = 3;</code>
+     */
     boolean hasTop();
+    /**
+     * <code>required sint64 top = 3;</code>
+     */
     long getTop();
-    
+
     // required sint64 bottom = 4;
+    /**
+     * <code>required sint64 bottom = 4;</code>
+     */
     boolean hasBottom();
+    /**
+     * <code>required sint64 bottom = 4;</code>
+     */
     long getBottom();
   }
+  /**
+   * Protobuf type {@code OSMPBF.HeaderBBox}
+   */
   public static final class HeaderBBox extends
       com.google.protobuf.GeneratedMessageLite
       implements HeaderBBoxOrBuilder {
     // Use HeaderBBox.newBuilder() to construct.
-    private HeaderBBox(Builder builder) {
+    private HeaderBBox(com.google.protobuf.GeneratedMessageLite.Builder builder) {
       super(builder);
+
     }
     private HeaderBBox(boolean noInit) {}
-    
+
     private static final HeaderBBox defaultInstance;
     public static HeaderBBox getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public HeaderBBox getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
-    private int bitField0_;
-    // required sint64 left = 1;
-    public static final int LEFT_FIELD_NUMBER = 1;
-    private long left_;
-    public boolean hasLeft() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    public long getLeft() {
-      return left_;
-    }
-    
-    // required sint64 right = 2;
-    public static final int RIGHT_FIELD_NUMBER = 2;
-    private long right_;
-    public boolean hasRight() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    public long getRight() {
-      return right_;
-    }
-    
-    // required sint64 top = 3;
-    public static final int TOP_FIELD_NUMBER = 3;
-    private long top_;
-    public boolean hasTop() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
-    }
-    public long getTop() {
-      return top_;
-    }
-    
-    // required sint64 bottom = 4;
-    public static final int BOTTOM_FIELD_NUMBER = 4;
-    private long bottom_;
-    public boolean hasBottom() {
-      return ((bitField0_ & 0x00000008) == 0x00000008);
-    }
-    public long getBottom() {
-      return bottom_;
-    }
-    
-    private void initFields() {
-      left_ = 0L;
-      right_ = 0L;
-      top_ = 0L;
-      bottom_ = 0L;
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
-      
-      if (!hasLeft()) {
-        memoizedIsInitialized = 0;
-        return false;
-      }
-      if (!hasRight()) {
-        memoizedIsInitialized = 0;
-        return false;
-      }
-      if (!hasTop()) {
-        memoizedIsInitialized = 0;
-        return false;
-      }
-      if (!hasBottom()) {
-        memoizedIsInitialized = 0;
-        return false;
-      }
-      memoizedIsInitialized = 1;
-      return true;
-    }
-    
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeSInt64(1, left_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeSInt64(2, right_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeSInt64(3, top_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        output.writeSInt64(4, bottom_);
-      }
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-    
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeSInt64Size(1, left_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeSInt64Size(2, right_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeSInt64Size(3, top_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeSInt64Size(4, bottom_);
-      }
-      memoizedSerializedSize = size;
-      return size;
-    }
-    
-    private static final long serialVersionUID = 0L;
-    @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-    
-    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
-        com.google.protobuf.ByteString data,
+
+    private HeaderBBox(
+        com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static crosby.binary.Osmformat.HeaderBBox parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static crosby.binary.Osmformat.HeaderBBox parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    public static crosby.binary.Osmformat.HeaderBBox parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
-    }
-    public static crosby.binary.Osmformat.HeaderBBox 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 crosby.binary.Osmformat.HeaderBBox parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static crosby.binary.Osmformat.HeaderBBox 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(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(crosby.binary.Osmformat.HeaderBBox prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-    
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageLite.Builder<
-          crosby.binary.Osmformat.HeaderBBox, Builder>
-        implements crosby.binary.Osmformat.HeaderBBoxOrBuilder {
-      // Construct using crosby.binary.Osmformat.HeaderBBox.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-      
-      private void maybeForceBuilderInitialization() {
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-      
-      public Builder clear() {
-        super.clear();
-        left_ = 0L;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        right_ = 0L;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        top_ = 0L;
-        bitField0_ = (bitField0_ & ~0x00000004);
-        bottom_ = 0L;
-        bitField0_ = (bitField0_ & ~0x00000008);
-        return this;
-      }
-      
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-      
-      public crosby.binary.Osmformat.HeaderBBox getDefaultInstanceForType() {
-        return crosby.binary.Osmformat.HeaderBBox.getDefaultInstance();
-      }
-      
-      public crosby.binary.Osmformat.HeaderBBox build() {
-        crosby.binary.Osmformat.HeaderBBox result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-      
-      private crosby.binary.Osmformat.HeaderBBox buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        crosby.binary.Osmformat.HeaderBBox result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
-      public crosby.binary.Osmformat.HeaderBBox buildPartial() {
-        crosby.binary.Osmformat.HeaderBBox result = new crosby.binary.Osmformat.HeaderBBox(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.left_ = left_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.right_ = right_;
-        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
-          to_bitField0_ |= 0x00000004;
-        }
-        result.top_ = top_;
-        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
-          to_bitField0_ |= 0x00000008;
-        }
-        result.bottom_ = bottom_;
-        result.bitField0_ = to_bitField0_;
-        return result;
-      }
-      
-      public Builder mergeFrom(crosby.binary.Osmformat.HeaderBBox other) {
-        if (other == crosby.binary.Osmformat.HeaderBBox.getDefaultInstance()) return this;
-        if (other.hasLeft()) {
-          setLeft(other.getLeft());
-        }
-        if (other.hasRight()) {
-          setRight(other.getRight());
-        }
-        if (other.hasTop()) {
-          setTop(other.getTop());
-        }
-        if (other.hasBottom()) {
-          setBottom(other.getBottom());
-        }
-        return this;
-      }
-      
-      public final boolean isInitialized() {
-        if (!hasLeft()) {
-          
-          return false;
-        }
-        if (!hasRight()) {
-          
-          return false;
-        }
-        if (!hasTop()) {
-          
-          return false;
-        }
-        if (!hasBottom()) {
-          
-          return false;
-        }
-        return true;
-      }
-      
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        while (true) {
+      initFields();
+      int mutable_bitField0_ = 0;
+      try {
+        boolean done = false;
+        while (!done) {
           int tag = input.readTag();
           switch (tag) {
             case 0:
-              
-              return this;
+              done = true;
+              break;
             default: {
-              if (!parseUnknownField(input, extensionRegistry, tag)) {
-                
-                return this;
+              if (!parseUnknownField(input,
+                                     extensionRegistry, tag)) {
+                done = true;
               }
               break;
@@ -1127,16 +1742,378 @@
           }
         }
-      }
-      
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        makeExtensionsImmutable();
+      }
+    }
+    public static com.google.protobuf.Parser<HeaderBBox> PARSER =
+        new com.google.protobuf.AbstractParser<HeaderBBox>() {
+      public HeaderBBox parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new HeaderBBox(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<HeaderBBox> getParserForType() {
+      return PARSER;
+    }
+
+    private int bitField0_;
+    // required sint64 left = 1;
+    public static final int LEFT_FIELD_NUMBER = 1;
+    private long left_;
+    /**
+     * <code>required sint64 left = 1;</code>
+     */
+    public boolean hasLeft() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>required sint64 left = 1;</code>
+     */
+    public long getLeft() {
+      return left_;
+    }
+
+    // required sint64 right = 2;
+    public static final int RIGHT_FIELD_NUMBER = 2;
+    private long right_;
+    /**
+     * <code>required sint64 right = 2;</code>
+     */
+    public boolean hasRight() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>required sint64 right = 2;</code>
+     */
+    public long getRight() {
+      return right_;
+    }
+
+    // required sint64 top = 3;
+    public static final int TOP_FIELD_NUMBER = 3;
+    private long top_;
+    /**
+     * <code>required sint64 top = 3;</code>
+     */
+    public boolean hasTop() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    /**
+     * <code>required sint64 top = 3;</code>
+     */
+    public long getTop() {
+      return top_;
+    }
+
+    // required sint64 bottom = 4;
+    public static final int BOTTOM_FIELD_NUMBER = 4;
+    private long bottom_;
+    /**
+     * <code>required sint64 bottom = 4;</code>
+     */
+    public boolean hasBottom() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    /**
+     * <code>required sint64 bottom = 4;</code>
+     */
+    public long getBottom() {
+      return bottom_;
+    }
+
+    private void initFields() {
+      left_ = 0L;
+      right_ = 0L;
+      top_ = 0L;
+      bottom_ = 0L;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+
+      if (!hasLeft()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasRight()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasTop()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasBottom()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeSInt64(1, left_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeSInt64(2, right_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeSInt64(3, top_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeSInt64(4, bottom_);
+      }
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeSInt64Size(1, left_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeSInt64Size(2, right_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeSInt64Size(3, top_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeSInt64Size(4, bottom_);
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+
+    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static crosby.binary.Osmformat.HeaderBBox parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static crosby.binary.Osmformat.HeaderBBox parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static crosby.binary.Osmformat.HeaderBBox parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static crosby.binary.Osmformat.HeaderBBox parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Osmformat.HeaderBBox prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+
+    /**
+     * Protobuf type {@code OSMPBF.HeaderBBox}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Osmformat.HeaderBBox, Builder>
+        implements crosby.binary.Osmformat.HeaderBBoxOrBuilder {
+      // Construct using crosby.binary.Osmformat.HeaderBBox.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        left_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        right_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        top_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        bottom_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public crosby.binary.Osmformat.HeaderBBox getDefaultInstanceForType() {
+        return crosby.binary.Osmformat.HeaderBBox.getDefaultInstance();
+      }
+
+      public crosby.binary.Osmformat.HeaderBBox build() {
+        crosby.binary.Osmformat.HeaderBBox result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public crosby.binary.Osmformat.HeaderBBox buildPartial() {
+        crosby.binary.Osmformat.HeaderBBox result = new crosby.binary.Osmformat.HeaderBBox(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.left_ = left_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.right_ = right_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.top_ = top_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.bottom_ = bottom_;
+        result.bitField0_ = to_bitField0_;
+        return result;
+      }
+
+      public Builder mergeFrom(crosby.binary.Osmformat.HeaderBBox other) {
+        if (other == crosby.binary.Osmformat.HeaderBBox.getDefaultInstance()) return this;
+        if (other.hasLeft()) {
+          setLeft(other.getLeft());
+        }
+        if (other.hasRight()) {
+          setRight(other.getRight());
+        }
+        if (other.hasTop()) {
+          setTop(other.getTop());
+        }
+        if (other.hasBottom()) {
+          setBottom(other.getBottom());
+        }
+        return this;
+      }
+
+      public final boolean isInitialized() {
+        if (!hasLeft()) {
+          
+          return false;
+        }
+        if (!hasRight()) {
+          
+          return false;
+        }
+        if (!hasTop()) {
+          
+          return false;
+        }
+        if (!hasBottom()) {
+          
+          return false;
+        }
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        crosby.binary.Osmformat.HeaderBBox parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (crosby.binary.Osmformat.HeaderBBox) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
       private int bitField0_;
-      
+
       // required sint64 left = 1;
       private long left_ ;
+      /**
+       * <code>required sint64 left = 1;</code>
+       */
       public boolean hasLeft() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
+      /**
+       * <code>required sint64 left = 1;</code>
+       */
       public long getLeft() {
         return left_;
       }
+      /**
+       * <code>required sint64 left = 1;</code>
+       */
       public Builder setLeft(long value) {
         bitField0_ |= 0x00000001;
@@ -1145,4 +2122,7 @@
         return this;
       }
+      /**
+       * <code>required sint64 left = 1;</code>
+       */
       public Builder clearLeft() {
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -1151,13 +2131,22 @@
         return this;
       }
-      
+
       // required sint64 right = 2;
       private long right_ ;
+      /**
+       * <code>required sint64 right = 2;</code>
+       */
       public boolean hasRight() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
+      /**
+       * <code>required sint64 right = 2;</code>
+       */
       public long getRight() {
         return right_;
       }
+      /**
+       * <code>required sint64 right = 2;</code>
+       */
       public Builder setRight(long value) {
         bitField0_ |= 0x00000002;
@@ -1166,4 +2155,7 @@
         return this;
       }
+      /**
+       * <code>required sint64 right = 2;</code>
+       */
       public Builder clearRight() {
         bitField0_ = (bitField0_ & ~0x00000002);
@@ -1172,13 +2164,22 @@
         return this;
       }
-      
+
       // required sint64 top = 3;
       private long top_ ;
+      /**
+       * <code>required sint64 top = 3;</code>
+       */
       public boolean hasTop() {
         return ((bitField0_ & 0x00000004) == 0x00000004);
       }
+      /**
+       * <code>required sint64 top = 3;</code>
+       */
       public long getTop() {
         return top_;
       }
+      /**
+       * <code>required sint64 top = 3;</code>
+       */
       public Builder setTop(long value) {
         bitField0_ |= 0x00000004;
@@ -1187,4 +2188,7 @@
         return this;
       }
+      /**
+       * <code>required sint64 top = 3;</code>
+       */
       public Builder clearTop() {
         bitField0_ = (bitField0_ & ~0x00000004);
@@ -1193,13 +2197,22 @@
         return this;
       }
-      
+
       // required sint64 bottom = 4;
       private long bottom_ ;
+      /**
+       * <code>required sint64 bottom = 4;</code>
+       */
       public boolean hasBottom() {
         return ((bitField0_ & 0x00000008) == 0x00000008);
       }
+      /**
+       * <code>required sint64 bottom = 4;</code>
+       */
       public long getBottom() {
         return bottom_;
       }
+      /**
+       * <code>required sint64 bottom = 4;</code>
+       */
       public Builder setBottom(long value) {
         bitField0_ |= 0x00000008;
@@ -1208,4 +2221,7 @@
         return this;
       }
+      /**
+       * <code>required sint64 bottom = 4;</code>
+       */
       public Builder clearBottom() {
         bitField0_ = (bitField0_ & ~0x00000008);
@@ -1214,135 +2230,362 @@
         return this;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:OSMPBF.HeaderBBox)
     }
-    
+
     static {
       defaultInstance = new HeaderBBox(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:OSMPBF.HeaderBBox)
   }
-  
+
   public interface PrimitiveBlockOrBuilder
       extends com.google.protobuf.MessageLiteOrBuilder {
-    
+
     // required .OSMPBF.StringTable stringtable = 1;
+    /**
+     * <code>required .OSMPBF.StringTable stringtable = 1;</code>
+     */
     boolean hasStringtable();
+    /**
+     * <code>required .OSMPBF.StringTable stringtable = 1;</code>
+     */
     crosby.binary.Osmformat.StringTable getStringtable();
-    
+
     // repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;
+    /**
+     * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+     */
     java.util.List<crosby.binary.Osmformat.PrimitiveGroup> 
         getPrimitivegroupList();
+    /**
+     * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+     */
     crosby.binary.Osmformat.PrimitiveGroup getPrimitivegroup(int index);
+    /**
+     * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+     */
     int getPrimitivegroupCount();
-    
+
     // optional int32 granularity = 17 [default = 100];
+    /**
+     * <code>optional int32 granularity = 17 [default = 100];</code>
+     *
+     * <pre>
+     * Granularity, units of nanodegrees, used to store coordinates in this block
+     * </pre>
+     */
     boolean hasGranularity();
+    /**
+     * <code>optional int32 granularity = 17 [default = 100];</code>
+     *
+     * <pre>
+     * Granularity, units of nanodegrees, used to store coordinates in this block
+     * </pre>
+     */
     int getGranularity();
-    
+
     // optional int64 lat_offset = 19 [default = 0];
+    /**
+     * <code>optional int64 lat_offset = 19 [default = 0];</code>
+     *
+     * <pre>
+     * Offset value between the output coordinates coordinates and the granularity grid in unites of nanodegrees.
+     * </pre>
+     */
     boolean hasLatOffset();
+    /**
+     * <code>optional int64 lat_offset = 19 [default = 0];</code>
+     *
+     * <pre>
+     * Offset value between the output coordinates coordinates and the granularity grid in unites of nanodegrees.
+     * </pre>
+     */
     long getLatOffset();
-    
+
     // optional int64 lon_offset = 20 [default = 0];
+    /**
+     * <code>optional int64 lon_offset = 20 [default = 0];</code>
+     */
     boolean hasLonOffset();
+    /**
+     * <code>optional int64 lon_offset = 20 [default = 0];</code>
+     */
     long getLonOffset();
-    
+
     // optional int32 date_granularity = 18 [default = 1000];
+    /**
+     * <code>optional int32 date_granularity = 18 [default = 1000];</code>
+     *
+     * <pre>
+     * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
+     * </pre>
+     */
     boolean hasDateGranularity();
+    /**
+     * <code>optional int32 date_granularity = 18 [default = 1000];</code>
+     *
+     * <pre>
+     * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
+     * </pre>
+     */
     int getDateGranularity();
   }
+  /**
+   * Protobuf type {@code OSMPBF.PrimitiveBlock}
+   */
   public static final class PrimitiveBlock extends
       com.google.protobuf.GeneratedMessageLite
       implements PrimitiveBlockOrBuilder {
     // Use PrimitiveBlock.newBuilder() to construct.
-    private PrimitiveBlock(Builder builder) {
+    private PrimitiveBlock(com.google.protobuf.GeneratedMessageLite.Builder builder) {
       super(builder);
+
     }
     private PrimitiveBlock(boolean noInit) {}
-    
+
     private static final PrimitiveBlock defaultInstance;
     public static PrimitiveBlock getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public PrimitiveBlock getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
+
+    private PrimitiveBlock(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 10: {
+              crosby.binary.Osmformat.StringTable.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000001) == 0x00000001)) {
+                subBuilder = stringtable_.toBuilder();
+              }
+              stringtable_ = input.readMessage(crosby.binary.Osmformat.StringTable.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(stringtable_);
+                stringtable_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000001;
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+                primitivegroup_ = new java.util.ArrayList<crosby.binary.Osmformat.PrimitiveGroup>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              primitivegroup_.add(input.readMessage(crosby.binary.Osmformat.PrimitiveGroup.PARSER, extensionRegistry));
+              break;
+            }
+            case 136: {
+              bitField0_ |= 0x00000002;
+              granularity_ = input.readInt32();
+              break;
+            }
+            case 144: {
+              bitField0_ |= 0x00000010;
+              dateGranularity_ = input.readInt32();
+              break;
+            }
+            case 152: {
+              bitField0_ |= 0x00000004;
+              latOffset_ = input.readInt64();
+              break;
+            }
+            case 160: {
+              bitField0_ |= 0x00000008;
+              lonOffset_ = input.readInt64();
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+          primitivegroup_ = java.util.Collections.unmodifiableList(primitivegroup_);
+        }
+        makeExtensionsImmutable();
+      }
+    }
+    public static com.google.protobuf.Parser<PrimitiveBlock> PARSER =
+        new com.google.protobuf.AbstractParser<PrimitiveBlock>() {
+      public PrimitiveBlock parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PrimitiveBlock(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PrimitiveBlock> getParserForType() {
+      return PARSER;
+    }
+
     private int bitField0_;
     // required .OSMPBF.StringTable stringtable = 1;
     public static final int STRINGTABLE_FIELD_NUMBER = 1;
     private crosby.binary.Osmformat.StringTable stringtable_;
+    /**
+     * <code>required .OSMPBF.StringTable stringtable = 1;</code>
+     */
     public boolean hasStringtable() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
+    /**
+     * <code>required .OSMPBF.StringTable stringtable = 1;</code>
+     */
     public crosby.binary.Osmformat.StringTable getStringtable() {
       return stringtable_;
     }
-    
+
     // repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;
     public static final int PRIMITIVEGROUP_FIELD_NUMBER = 2;
     private java.util.List<crosby.binary.Osmformat.PrimitiveGroup> primitivegroup_;
+    /**
+     * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+     */
     public java.util.List<crosby.binary.Osmformat.PrimitiveGroup> getPrimitivegroupList() {
       return primitivegroup_;
     }
+    /**
+     * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+     */
     public java.util.List<? extends crosby.binary.Osmformat.PrimitiveGroupOrBuilder> 
         getPrimitivegroupOrBuilderList() {
       return primitivegroup_;
     }
+    /**
+     * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+     */
     public int getPrimitivegroupCount() {
       return primitivegroup_.size();
     }
+    /**
+     * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+     */
     public crosby.binary.Osmformat.PrimitiveGroup getPrimitivegroup(int index) {
       return primitivegroup_.get(index);
     }
+    /**
+     * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+     */
     public crosby.binary.Osmformat.PrimitiveGroupOrBuilder getPrimitivegroupOrBuilder(
         int index) {
       return primitivegroup_.get(index);
     }
-    
+
     // optional int32 granularity = 17 [default = 100];
     public static final int GRANULARITY_FIELD_NUMBER = 17;
     private int granularity_;
+    /**
+     * <code>optional int32 granularity = 17 [default = 100];</code>
+     *
+     * <pre>
+     * Granularity, units of nanodegrees, used to store coordinates in this block
+     * </pre>
+     */
     public boolean hasGranularity() {
       return ((bitField0_ & 0x00000002) == 0x00000002);
     }
+    /**
+     * <code>optional int32 granularity = 17 [default = 100];</code>
+     *
+     * <pre>
+     * Granularity, units of nanodegrees, used to store coordinates in this block
+     * </pre>
+     */
     public int getGranularity() {
       return granularity_;
     }
-    
+
     // optional int64 lat_offset = 19 [default = 0];
     public static final int LAT_OFFSET_FIELD_NUMBER = 19;
     private long latOffset_;
+    /**
+     * <code>optional int64 lat_offset = 19 [default = 0];</code>
+     *
+     * <pre>
+     * Offset value between the output coordinates coordinates and the granularity grid in unites of nanodegrees.
+     * </pre>
+     */
     public boolean hasLatOffset() {
       return ((bitField0_ & 0x00000004) == 0x00000004);
     }
+    /**
+     * <code>optional int64 lat_offset = 19 [default = 0];</code>
+     *
+     * <pre>
+     * Offset value between the output coordinates coordinates and the granularity grid in unites of nanodegrees.
+     * </pre>
+     */
     public long getLatOffset() {
       return latOffset_;
     }
-    
+
     // optional int64 lon_offset = 20 [default = 0];
     public static final int LON_OFFSET_FIELD_NUMBER = 20;
     private long lonOffset_;
+    /**
+     * <code>optional int64 lon_offset = 20 [default = 0];</code>
+     */
     public boolean hasLonOffset() {
       return ((bitField0_ & 0x00000008) == 0x00000008);
     }
+    /**
+     * <code>optional int64 lon_offset = 20 [default = 0];</code>
+     */
     public long getLonOffset() {
       return lonOffset_;
     }
-    
+
     // optional int32 date_granularity = 18 [default = 1000];
     public static final int DATE_GRANULARITY_FIELD_NUMBER = 18;
     private int dateGranularity_;
+    /**
+     * <code>optional int32 date_granularity = 18 [default = 1000];</code>
+     *
+     * <pre>
+     * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
+     * </pre>
+     */
     public boolean hasDateGranularity() {
       return ((bitField0_ & 0x00000010) == 0x00000010);
     }
+    /**
+     * <code>optional int32 date_granularity = 18 [default = 1000];</code>
+     *
+     * <pre>
+     * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
+     * </pre>
+     */
     public int getDateGranularity() {
       return dateGranularity_;
     }
-    
+
     private void initFields() {
       stringtable_ = crosby.binary.Osmformat.StringTable.getDefaultInstance();
@@ -1357,5 +2600,5 @@
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
-      
+
       if (!hasStringtable()) {
         memoizedIsInitialized = 0;
@@ -1371,5 +2614,5 @@
       return true;
     }
-    
+
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
@@ -1394,10 +2637,10 @@
       }
     }
-    
+
     private int memoizedSerializedSize = -1;
     public int getSerializedSize() {
       int size = memoizedSerializedSize;
       if (size != -1) return size;
-    
+
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
@@ -1428,5 +2671,5 @@
       return size;
     }
-    
+
     private static final long serialVersionUID = 0L;
     @java.lang.Override
@@ -1435,9 +2678,9 @@
       return super.writeReplace();
     }
-    
+
     public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
@@ -1445,10 +2688,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
@@ -1456,10 +2698,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
@@ -1467,15 +2708,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(input, extensionRegistry);
     }
     public static crosby.binary.Osmformat.PrimitiveBlock parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input);
     }
     public static crosby.binary.Osmformat.PrimitiveBlock parseDelimitedFrom(
@@ -1483,15 +2718,10 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
     public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
@@ -1499,8 +2729,7 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
@@ -1509,5 +2738,8 @@
     }
     public Builder toBuilder() { return newBuilder(this); }
-    
+
+    /**
+     * Protobuf type {@code OSMPBF.PrimitiveBlock}
+     */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageLite.Builder<
@@ -1518,5 +2750,5 @@
         maybeForceBuilderInitialization();
       }
-      
+
       private void maybeForceBuilderInitialization() {
       }
@@ -1524,5 +2756,5 @@
         return new Builder();
       }
-      
+
       public Builder clear() {
         super.clear();
@@ -1541,13 +2773,13 @@
         return this;
       }
-      
+
       public Builder clone() {
         return create().mergeFrom(buildPartial());
       }
-      
+
       public crosby.binary.Osmformat.PrimitiveBlock getDefaultInstanceForType() {
         return crosby.binary.Osmformat.PrimitiveBlock.getDefaultInstance();
       }
-      
+
       public crosby.binary.Osmformat.PrimitiveBlock build() {
         crosby.binary.Osmformat.PrimitiveBlock result = buildPartial();
@@ -1557,15 +2789,5 @@
         return result;
       }
-      
-      private crosby.binary.Osmformat.PrimitiveBlock buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        crosby.binary.Osmformat.PrimitiveBlock result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
+
       public crosby.binary.Osmformat.PrimitiveBlock buildPartial() {
         crosby.binary.Osmformat.PrimitiveBlock result = new crosby.binary.Osmformat.PrimitiveBlock(this);
@@ -1600,5 +2822,5 @@
         return result;
       }
-      
+
       public Builder mergeFrom(crosby.binary.Osmformat.PrimitiveBlock other) {
         if (other == crosby.binary.Osmformat.PrimitiveBlock.getDefaultInstance()) return this;
@@ -1630,5 +2852,5 @@
         return this;
       }
-      
+
       public final boolean isInitialized() {
         if (!hasStringtable()) {
@@ -1644,71 +2866,41 @@
         return true;
       }
-      
+
       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 10: {
-              crosby.binary.Osmformat.StringTable.Builder subBuilder = crosby.binary.Osmformat.StringTable.newBuilder();
-              if (hasStringtable()) {
-                subBuilder.mergeFrom(getStringtable());
-              }
-              input.readMessage(subBuilder, extensionRegistry);
-              setStringtable(subBuilder.buildPartial());
-              break;
-            }
-            case 18: {
-              crosby.binary.Osmformat.PrimitiveGroup.Builder subBuilder = crosby.binary.Osmformat.PrimitiveGroup.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addPrimitivegroup(subBuilder.buildPartial());
-              break;
-            }
-            case 136: {
-              bitField0_ |= 0x00000004;
-              granularity_ = input.readInt32();
-              break;
-            }
-            case 144: {
-              bitField0_ |= 0x00000020;
-              dateGranularity_ = input.readInt32();
-              break;
-            }
-            case 152: {
-              bitField0_ |= 0x00000008;
-              latOffset_ = input.readInt64();
-              break;
-            }
-            case 160: {
-              bitField0_ |= 0x00000010;
-              lonOffset_ = input.readInt64();
-              break;
-            }
+        crosby.binary.Osmformat.PrimitiveBlock parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (crosby.binary.Osmformat.PrimitiveBlock) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
         }
-      }
-      
+        return this;
+      }
       private int bitField0_;
-      
+
       // required .OSMPBF.StringTable stringtable = 1;
       private crosby.binary.Osmformat.StringTable stringtable_ = crosby.binary.Osmformat.StringTable.getDefaultInstance();
+      /**
+       * <code>required .OSMPBF.StringTable stringtable = 1;</code>
+       */
       public boolean hasStringtable() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
+      /**
+       * <code>required .OSMPBF.StringTable stringtable = 1;</code>
+       */
       public crosby.binary.Osmformat.StringTable getStringtable() {
         return stringtable_;
       }
+      /**
+       * <code>required .OSMPBF.StringTable stringtable = 1;</code>
+       */
       public Builder setStringtable(crosby.binary.Osmformat.StringTable value) {
         if (value == null) {
@@ -1716,15 +2908,21 @@
         }
         stringtable_ = value;
-        
+
         bitField0_ |= 0x00000001;
         return this;
       }
+      /**
+       * <code>required .OSMPBF.StringTable stringtable = 1;</code>
+       */
       public Builder setStringtable(
           crosby.binary.Osmformat.StringTable.Builder builderForValue) {
         stringtable_ = builderForValue.build();
-        
+
         bitField0_ |= 0x00000001;
         return this;
       }
+      /**
+       * <code>required .OSMPBF.StringTable stringtable = 1;</code>
+       */
       public Builder mergeStringtable(crosby.binary.Osmformat.StringTable value) {
         if (((bitField0_ & 0x00000001) == 0x00000001) &&
@@ -1735,15 +2933,18 @@
           stringtable_ = value;
         }
-        
+
         bitField0_ |= 0x00000001;
         return this;
       }
+      /**
+       * <code>required .OSMPBF.StringTable stringtable = 1;</code>
+       */
       public Builder clearStringtable() {
         stringtable_ = crosby.binary.Osmformat.StringTable.getDefaultInstance();
-        
+
         bitField0_ = (bitField0_ & ~0x00000001);
         return this;
       }
-      
+
       // repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;
       private java.util.List<crosby.binary.Osmformat.PrimitiveGroup> primitivegroup_ =
@@ -1755,14 +2956,26 @@
          }
       }
-      
+
+      /**
+       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+       */
       public java.util.List<crosby.binary.Osmformat.PrimitiveGroup> getPrimitivegroupList() {
         return java.util.Collections.unmodifiableList(primitivegroup_);
       }
+      /**
+       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+       */
       public int getPrimitivegroupCount() {
         return primitivegroup_.size();
       }
+      /**
+       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+       */
       public crosby.binary.Osmformat.PrimitiveGroup getPrimitivegroup(int index) {
         return primitivegroup_.get(index);
       }
+      /**
+       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+       */
       public Builder setPrimitivegroup(
           int index, crosby.binary.Osmformat.PrimitiveGroup value) {
@@ -1772,14 +2985,20 @@
         ensurePrimitivegroupIsMutable();
         primitivegroup_.set(index, value);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+       */
       public Builder setPrimitivegroup(
           int index, crosby.binary.Osmformat.PrimitiveGroup.Builder builderForValue) {
         ensurePrimitivegroupIsMutable();
         primitivegroup_.set(index, builderForValue.build());
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+       */
       public Builder addPrimitivegroup(crosby.binary.Osmformat.PrimitiveGroup value) {
         if (value == null) {
@@ -1788,7 +3007,10 @@
         ensurePrimitivegroupIsMutable();
         primitivegroup_.add(value);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+       */
       public Builder addPrimitivegroup(
           int index, crosby.binary.Osmformat.PrimitiveGroup value) {
@@ -1798,49 +3020,85 @@
         ensurePrimitivegroupIsMutable();
         primitivegroup_.add(index, value);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+       */
       public Builder addPrimitivegroup(
           crosby.binary.Osmformat.PrimitiveGroup.Builder builderForValue) {
         ensurePrimitivegroupIsMutable();
         primitivegroup_.add(builderForValue.build());
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+       */
       public Builder addPrimitivegroup(
           int index, crosby.binary.Osmformat.PrimitiveGroup.Builder builderForValue) {
         ensurePrimitivegroupIsMutable();
         primitivegroup_.add(index, builderForValue.build());
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+       */
       public Builder addAllPrimitivegroup(
           java.lang.Iterable<? extends crosby.binary.Osmformat.PrimitiveGroup> values) {
         ensurePrimitivegroupIsMutable();
         super.addAll(values, primitivegroup_);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+       */
       public Builder clearPrimitivegroup() {
         primitivegroup_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000002);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
+       */
       public Builder removePrimitivegroup(int index) {
         ensurePrimitivegroupIsMutable();
         primitivegroup_.remove(index);
-        
-        return this;
-      }
-      
+
+        return this;
+      }
+
       // optional int32 granularity = 17 [default = 100];
       private int granularity_ = 100;
+      /**
+       * <code>optional int32 granularity = 17 [default = 100];</code>
+       *
+       * <pre>
+       * Granularity, units of nanodegrees, used to store coordinates in this block
+       * </pre>
+       */
       public boolean hasGranularity() {
         return ((bitField0_ & 0x00000004) == 0x00000004);
       }
+      /**
+       * <code>optional int32 granularity = 17 [default = 100];</code>
+       *
+       * <pre>
+       * Granularity, units of nanodegrees, used to store coordinates in this block
+       * </pre>
+       */
       public int getGranularity() {
         return granularity_;
       }
+      /**
+       * <code>optional int32 granularity = 17 [default = 100];</code>
+       *
+       * <pre>
+       * Granularity, units of nanodegrees, used to store coordinates in this block
+       * </pre>
+       */
       public Builder setGranularity(int value) {
         bitField0_ |= 0x00000004;
@@ -1849,4 +3107,11 @@
         return this;
       }
+      /**
+       * <code>optional int32 granularity = 17 [default = 100];</code>
+       *
+       * <pre>
+       * Granularity, units of nanodegrees, used to store coordinates in this block
+       * </pre>
+       */
       public Builder clearGranularity() {
         bitField0_ = (bitField0_ & ~0x00000004);
@@ -1855,13 +3120,34 @@
         return this;
       }
-      
+
       // optional int64 lat_offset = 19 [default = 0];
       private long latOffset_ ;
+      /**
+       * <code>optional int64 lat_offset = 19 [default = 0];</code>
+       *
+       * <pre>
+       * Offset value between the output coordinates coordinates and the granularity grid in unites of nanodegrees.
+       * </pre>
+       */
       public boolean hasLatOffset() {
         return ((bitField0_ & 0x00000008) == 0x00000008);
       }
+      /**
+       * <code>optional int64 lat_offset = 19 [default = 0];</code>
+       *
+       * <pre>
+       * Offset value between the output coordinates coordinates and the granularity grid in unites of nanodegrees.
+       * </pre>
+       */
       public long getLatOffset() {
         return latOffset_;
       }
+      /**
+       * <code>optional int64 lat_offset = 19 [default = 0];</code>
+       *
+       * <pre>
+       * Offset value between the output coordinates coordinates and the granularity grid in unites of nanodegrees.
+       * </pre>
+       */
       public Builder setLatOffset(long value) {
         bitField0_ |= 0x00000008;
@@ -1870,4 +3156,11 @@
         return this;
       }
+      /**
+       * <code>optional int64 lat_offset = 19 [default = 0];</code>
+       *
+       * <pre>
+       * Offset value between the output coordinates coordinates and the granularity grid in unites of nanodegrees.
+       * </pre>
+       */
       public Builder clearLatOffset() {
         bitField0_ = (bitField0_ & ~0x00000008);
@@ -1876,13 +3169,22 @@
         return this;
       }
-      
+
       // optional int64 lon_offset = 20 [default = 0];
       private long lonOffset_ ;
+      /**
+       * <code>optional int64 lon_offset = 20 [default = 0];</code>
+       */
       public boolean hasLonOffset() {
         return ((bitField0_ & 0x00000010) == 0x00000010);
       }
+      /**
+       * <code>optional int64 lon_offset = 20 [default = 0];</code>
+       */
       public long getLonOffset() {
         return lonOffset_;
       }
+      /**
+       * <code>optional int64 lon_offset = 20 [default = 0];</code>
+       */
       public Builder setLonOffset(long value) {
         bitField0_ |= 0x00000010;
@@ -1891,4 +3193,7 @@
         return this;
       }
+      /**
+       * <code>optional int64 lon_offset = 20 [default = 0];</code>
+       */
       public Builder clearLonOffset() {
         bitField0_ = (bitField0_ & ~0x00000010);
@@ -1897,13 +3202,34 @@
         return this;
       }
-      
+
       // optional int32 date_granularity = 18 [default = 1000];
       private int dateGranularity_ = 1000;
+      /**
+       * <code>optional int32 date_granularity = 18 [default = 1000];</code>
+       *
+       * <pre>
+       * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
+       * </pre>
+       */
       public boolean hasDateGranularity() {
         return ((bitField0_ & 0x00000020) == 0x00000020);
       }
+      /**
+       * <code>optional int32 date_granularity = 18 [default = 1000];</code>
+       *
+       * <pre>
+       * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
+       * </pre>
+       */
       public int getDateGranularity() {
         return dateGranularity_;
       }
+      /**
+       * <code>optional int32 date_granularity = 18 [default = 1000];</code>
+       *
+       * <pre>
+       * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
+       * </pre>
+       */
       public Builder setDateGranularity(int value) {
         bitField0_ |= 0x00000020;
@@ -1912,4 +3238,11 @@
         return this;
       }
+      /**
+       * <code>optional int32 date_granularity = 18 [default = 1000];</code>
+       *
+       * <pre>
+       * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
+       * </pre>
+       */
       public Builder clearDateGranularity() {
         bitField0_ = (bitField0_ & ~0x00000020);
@@ -1918,160 +3251,380 @@
         return this;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:OSMPBF.PrimitiveBlock)
     }
-    
+
     static {
       defaultInstance = new PrimitiveBlock(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:OSMPBF.PrimitiveBlock)
   }
-  
+
   public interface PrimitiveGroupOrBuilder
       extends com.google.protobuf.MessageLiteOrBuilder {
-    
+
     // repeated .OSMPBF.Node nodes = 1;
+    /**
+     * <code>repeated .OSMPBF.Node nodes = 1;</code>
+     */
     java.util.List<crosby.binary.Osmformat.Node> 
         getNodesList();
+    /**
+     * <code>repeated .OSMPBF.Node nodes = 1;</code>
+     */
     crosby.binary.Osmformat.Node getNodes(int index);
+    /**
+     * <code>repeated .OSMPBF.Node nodes = 1;</code>
+     */
     int getNodesCount();
-    
+
     // optional .OSMPBF.DenseNodes dense = 2;
+    /**
+     * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
+     */
     boolean hasDense();
+    /**
+     * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
+     */
     crosby.binary.Osmformat.DenseNodes getDense();
-    
+
     // repeated .OSMPBF.Way ways = 3;
+    /**
+     * <code>repeated .OSMPBF.Way ways = 3;</code>
+     */
     java.util.List<crosby.binary.Osmformat.Way> 
         getWaysList();
+    /**
+     * <code>repeated .OSMPBF.Way ways = 3;</code>
+     */
     crosby.binary.Osmformat.Way getWays(int index);
+    /**
+     * <code>repeated .OSMPBF.Way ways = 3;</code>
+     */
     int getWaysCount();
-    
+
     // repeated .OSMPBF.Relation relations = 4;
+    /**
+     * <code>repeated .OSMPBF.Relation relations = 4;</code>
+     */
     java.util.List<crosby.binary.Osmformat.Relation> 
         getRelationsList();
+    /**
+     * <code>repeated .OSMPBF.Relation relations = 4;</code>
+     */
     crosby.binary.Osmformat.Relation getRelations(int index);
+    /**
+     * <code>repeated .OSMPBF.Relation relations = 4;</code>
+     */
     int getRelationsCount();
-    
+
     // repeated .OSMPBF.ChangeSet changesets = 5;
+    /**
+     * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+     */
     java.util.List<crosby.binary.Osmformat.ChangeSet> 
         getChangesetsList();
+    /**
+     * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+     */
     crosby.binary.Osmformat.ChangeSet getChangesets(int index);
+    /**
+     * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+     */
     int getChangesetsCount();
   }
+  /**
+   * Protobuf type {@code OSMPBF.PrimitiveGroup}
+   *
+   * <pre>
+   * Group of OSMPrimitives. All primitives in a group must be the same type.
+   * </pre>
+   */
   public static final class PrimitiveGroup extends
       com.google.protobuf.GeneratedMessageLite
       implements PrimitiveGroupOrBuilder {
     // Use PrimitiveGroup.newBuilder() to construct.
-    private PrimitiveGroup(Builder builder) {
+    private PrimitiveGroup(com.google.protobuf.GeneratedMessageLite.Builder builder) {
       super(builder);
+
     }
     private PrimitiveGroup(boolean noInit) {}
-    
+
     private static final PrimitiveGroup defaultInstance;
     public static PrimitiveGroup getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public PrimitiveGroup getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
+
+    private PrimitiveGroup(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+                nodes_ = new java.util.ArrayList<crosby.binary.Osmformat.Node>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              nodes_.add(input.readMessage(crosby.binary.Osmformat.Node.PARSER, extensionRegistry));
+              break;
+            }
+            case 18: {
+              crosby.binary.Osmformat.DenseNodes.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000001) == 0x00000001)) {
+                subBuilder = dense_.toBuilder();
+              }
+              dense_ = input.readMessage(crosby.binary.Osmformat.DenseNodes.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(dense_);
+                dense_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000001;
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+                ways_ = new java.util.ArrayList<crosby.binary.Osmformat.Way>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              ways_.add(input.readMessage(crosby.binary.Osmformat.Way.PARSER, extensionRegistry));
+              break;
+            }
+            case 34: {
+              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
+                relations_ = new java.util.ArrayList<crosby.binary.Osmformat.Relation>();
+                mutable_bitField0_ |= 0x00000008;
+              }
+              relations_.add(input.readMessage(crosby.binary.Osmformat.Relation.PARSER, extensionRegistry));
+              break;
+            }
+            case 42: {
+              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
+                changesets_ = new java.util.ArrayList<crosby.binary.Osmformat.ChangeSet>();
+                mutable_bitField0_ |= 0x00000010;
+              }
+              changesets_.add(input.readMessage(crosby.binary.Osmformat.ChangeSet.PARSER, extensionRegistry));
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+          nodes_ = java.util.Collections.unmodifiableList(nodes_);
+        }
+        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+          ways_ = java.util.Collections.unmodifiableList(ways_);
+        }
+        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
+          relations_ = java.util.Collections.unmodifiableList(relations_);
+        }
+        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
+          changesets_ = java.util.Collections.unmodifiableList(changesets_);
+        }
+        makeExtensionsImmutable();
+      }
+    }
+    public static com.google.protobuf.Parser<PrimitiveGroup> PARSER =
+        new com.google.protobuf.AbstractParser<PrimitiveGroup>() {
+      public PrimitiveGroup parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PrimitiveGroup(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PrimitiveGroup> getParserForType() {
+      return PARSER;
+    }
+
     private int bitField0_;
     // repeated .OSMPBF.Node nodes = 1;
     public static final int NODES_FIELD_NUMBER = 1;
     private java.util.List<crosby.binary.Osmformat.Node> nodes_;
+    /**
+     * <code>repeated .OSMPBF.Node nodes = 1;</code>
+     */
     public java.util.List<crosby.binary.Osmformat.Node> getNodesList() {
       return nodes_;
     }
+    /**
+     * <code>repeated .OSMPBF.Node nodes = 1;</code>
+     */
     public java.util.List<? extends crosby.binary.Osmformat.NodeOrBuilder> 
         getNodesOrBuilderList() {
       return nodes_;
     }
+    /**
+     * <code>repeated .OSMPBF.Node nodes = 1;</code>
+     */
     public int getNodesCount() {
       return nodes_.size();
     }
+    /**
+     * <code>repeated .OSMPBF.Node nodes = 1;</code>
+     */
     public crosby.binary.Osmformat.Node getNodes(int index) {
       return nodes_.get(index);
     }
+    /**
+     * <code>repeated .OSMPBF.Node nodes = 1;</code>
+     */
     public crosby.binary.Osmformat.NodeOrBuilder getNodesOrBuilder(
         int index) {
       return nodes_.get(index);
     }
-    
+
     // optional .OSMPBF.DenseNodes dense = 2;
     public static final int DENSE_FIELD_NUMBER = 2;
     private crosby.binary.Osmformat.DenseNodes dense_;
+    /**
+     * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
+     */
     public boolean hasDense() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
+    /**
+     * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
+     */
     public crosby.binary.Osmformat.DenseNodes getDense() {
       return dense_;
     }
-    
+
     // repeated .OSMPBF.Way ways = 3;
     public static final int WAYS_FIELD_NUMBER = 3;
     private java.util.List<crosby.binary.Osmformat.Way> ways_;
+    /**
+     * <code>repeated .OSMPBF.Way ways = 3;</code>
+     */
     public java.util.List<crosby.binary.Osmformat.Way> getWaysList() {
       return ways_;
     }
+    /**
+     * <code>repeated .OSMPBF.Way ways = 3;</code>
+     */
     public java.util.List<? extends crosby.binary.Osmformat.WayOrBuilder> 
         getWaysOrBuilderList() {
       return ways_;
     }
+    /**
+     * <code>repeated .OSMPBF.Way ways = 3;</code>
+     */
     public int getWaysCount() {
       return ways_.size();
     }
+    /**
+     * <code>repeated .OSMPBF.Way ways = 3;</code>
+     */
     public crosby.binary.Osmformat.Way getWays(int index) {
       return ways_.get(index);
     }
+    /**
+     * <code>repeated .OSMPBF.Way ways = 3;</code>
+     */
     public crosby.binary.Osmformat.WayOrBuilder getWaysOrBuilder(
         int index) {
       return ways_.get(index);
     }
-    
+
     // repeated .OSMPBF.Relation relations = 4;
     public static final int RELATIONS_FIELD_NUMBER = 4;
     private java.util.List<crosby.binary.Osmformat.Relation> relations_;
+    /**
+     * <code>repeated .OSMPBF.Relation relations = 4;</code>
+     */
     public java.util.List<crosby.binary.Osmformat.Relation> getRelationsList() {
       return relations_;
     }
+    /**
+     * <code>repeated .OSMPBF.Relation relations = 4;</code>
+     */
     public java.util.List<? extends crosby.binary.Osmformat.RelationOrBuilder> 
         getRelationsOrBuilderList() {
       return relations_;
     }
+    /**
+     * <code>repeated .OSMPBF.Relation relations = 4;</code>
+     */
     public int getRelationsCount() {
       return relations_.size();
     }
+    /**
+     * <code>repeated .OSMPBF.Relation relations = 4;</code>
+     */
     public crosby.binary.Osmformat.Relation getRelations(int index) {
       return relations_.get(index);
     }
+    /**
+     * <code>repeated .OSMPBF.Relation relations = 4;</code>
+     */
     public crosby.binary.Osmformat.RelationOrBuilder getRelationsOrBuilder(
         int index) {
       return relations_.get(index);
     }
-    
+
     // repeated .OSMPBF.ChangeSet changesets = 5;
     public static final int CHANGESETS_FIELD_NUMBER = 5;
     private java.util.List<crosby.binary.Osmformat.ChangeSet> changesets_;
+    /**
+     * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+     */
     public java.util.List<crosby.binary.Osmformat.ChangeSet> getChangesetsList() {
       return changesets_;
     }
+    /**
+     * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+     */
     public java.util.List<? extends crosby.binary.Osmformat.ChangeSetOrBuilder> 
         getChangesetsOrBuilderList() {
       return changesets_;
     }
+    /**
+     * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+     */
     public int getChangesetsCount() {
       return changesets_.size();
     }
+    /**
+     * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+     */
     public crosby.binary.Osmformat.ChangeSet getChangesets(int index) {
       return changesets_.get(index);
     }
+    /**
+     * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+     */
     public crosby.binary.Osmformat.ChangeSetOrBuilder getChangesetsOrBuilder(
         int index) {
       return changesets_.get(index);
     }
-    
+
     private void initFields() {
       nodes_ = java.util.Collections.emptyList();
@@ -2085,5 +3638,5 @@
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
-      
+
       for (int i = 0; i < getNodesCount(); i++) {
         if (!getNodes(i).isInitialized()) {
@@ -2113,5 +3666,5 @@
       return true;
     }
-    
+
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
@@ -2133,10 +3686,10 @@
       }
     }
-    
+
     private int memoizedSerializedSize = -1;
     public int getSerializedSize() {
       int size = memoizedSerializedSize;
       if (size != -1) return size;
-    
+
       size = 0;
       for (int i = 0; i < nodes_.size(); i++) {
@@ -2163,5 +3716,5 @@
       return size;
     }
-    
+
     private static final long serialVersionUID = 0L;
     @java.lang.Override
@@ -2170,9 +3723,9 @@
       return super.writeReplace();
     }
-    
+
     public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
@@ -2180,10 +3733,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
@@ -2191,10 +3743,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
@@ -2202,15 +3753,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(input, extensionRegistry);
     }
     public static crosby.binary.Osmformat.PrimitiveGroup parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input);
     }
     public static crosby.binary.Osmformat.PrimitiveGroup parseDelimitedFrom(
@@ -2218,15 +3763,10 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
     public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
@@ -2234,8 +3774,7 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
@@ -2244,5 +3783,12 @@
     }
     public Builder toBuilder() { return newBuilder(this); }
-    
+
+    /**
+     * Protobuf type {@code OSMPBF.PrimitiveGroup}
+     *
+     * <pre>
+     * Group of OSMPrimitives. All primitives in a group must be the same type.
+     * </pre>
+     */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageLite.Builder<
@@ -2253,5 +3799,5 @@
         maybeForceBuilderInitialization();
       }
-      
+
       private void maybeForceBuilderInitialization() {
       }
@@ -2259,5 +3805,5 @@
         return new Builder();
       }
-      
+
       public Builder clear() {
         super.clear();
@@ -2274,13 +3820,13 @@
         return this;
       }
-      
+
       public Builder clone() {
         return create().mergeFrom(buildPartial());
       }
-      
+
       public crosby.binary.Osmformat.PrimitiveGroup getDefaultInstanceForType() {
         return crosby.binary.Osmformat.PrimitiveGroup.getDefaultInstance();
       }
-      
+
       public crosby.binary.Osmformat.PrimitiveGroup build() {
         crosby.binary.Osmformat.PrimitiveGroup result = buildPartial();
@@ -2290,15 +3836,5 @@
         return result;
       }
-      
-      private crosby.binary.Osmformat.PrimitiveGroup buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        crosby.binary.Osmformat.PrimitiveGroup result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
+
       public crosby.binary.Osmformat.PrimitiveGroup buildPartial() {
         crosby.binary.Osmformat.PrimitiveGroup result = new crosby.binary.Osmformat.PrimitiveGroup(this);
@@ -2332,5 +3868,5 @@
         return result;
       }
-      
+
       public Builder mergeFrom(crosby.binary.Osmformat.PrimitiveGroup other) {
         if (other == crosby.binary.Osmformat.PrimitiveGroup.getDefaultInstance()) return this;
@@ -2380,5 +3916,5 @@
         return this;
       }
-      
+
       public final boolean isInitialized() {
         for (int i = 0; i < getNodesCount(); i++) {
@@ -2408,61 +3944,24 @@
         return true;
       }
-      
+
       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 10: {
-              crosby.binary.Osmformat.Node.Builder subBuilder = crosby.binary.Osmformat.Node.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addNodes(subBuilder.buildPartial());
-              break;
-            }
-            case 18: {
-              crosby.binary.Osmformat.DenseNodes.Builder subBuilder = crosby.binary.Osmformat.DenseNodes.newBuilder();
-              if (hasDense()) {
-                subBuilder.mergeFrom(getDense());
-              }
-              input.readMessage(subBuilder, extensionRegistry);
-              setDense(subBuilder.buildPartial());
-              break;
-            }
-            case 26: {
-              crosby.binary.Osmformat.Way.Builder subBuilder = crosby.binary.Osmformat.Way.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addWays(subBuilder.buildPartial());
-              break;
-            }
-            case 34: {
-              crosby.binary.Osmformat.Relation.Builder subBuilder = crosby.binary.Osmformat.Relation.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addRelations(subBuilder.buildPartial());
-              break;
-            }
-            case 42: {
-              crosby.binary.Osmformat.ChangeSet.Builder subBuilder = crosby.binary.Osmformat.ChangeSet.newBuilder();
-              input.readMessage(subBuilder, extensionRegistry);
-              addChangesets(subBuilder.buildPartial());
-              break;
-            }
+        crosby.binary.Osmformat.PrimitiveGroup parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (crosby.binary.Osmformat.PrimitiveGroup) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
         }
-      }
-      
+        return this;
+      }
       private int bitField0_;
-      
+
       // repeated .OSMPBF.Node nodes = 1;
       private java.util.List<crosby.binary.Osmformat.Node> nodes_ =
@@ -2474,14 +3973,26 @@
          }
       }
-      
+
+      /**
+       * <code>repeated .OSMPBF.Node nodes = 1;</code>
+       */
       public java.util.List<crosby.binary.Osmformat.Node> getNodesList() {
         return java.util.Collections.unmodifiableList(nodes_);
       }
+      /**
+       * <code>repeated .OSMPBF.Node nodes = 1;</code>
+       */
       public int getNodesCount() {
         return nodes_.size();
       }
+      /**
+       * <code>repeated .OSMPBF.Node nodes = 1;</code>
+       */
       public crosby.binary.Osmformat.Node getNodes(int index) {
         return nodes_.get(index);
       }
+      /**
+       * <code>repeated .OSMPBF.Node nodes = 1;</code>
+       */
       public Builder setNodes(
           int index, crosby.binary.Osmformat.Node value) {
@@ -2491,14 +4002,20 @@
         ensureNodesIsMutable();
         nodes_.set(index, value);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Node nodes = 1;</code>
+       */
       public Builder setNodes(
           int index, crosby.binary.Osmformat.Node.Builder builderForValue) {
         ensureNodesIsMutable();
         nodes_.set(index, builderForValue.build());
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Node nodes = 1;</code>
+       */
       public Builder addNodes(crosby.binary.Osmformat.Node value) {
         if (value == null) {
@@ -2507,7 +4024,10 @@
         ensureNodesIsMutable();
         nodes_.add(value);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Node nodes = 1;</code>
+       */
       public Builder addNodes(
           int index, crosby.binary.Osmformat.Node value) {
@@ -2517,49 +4037,73 @@
         ensureNodesIsMutable();
         nodes_.add(index, value);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Node nodes = 1;</code>
+       */
       public Builder addNodes(
           crosby.binary.Osmformat.Node.Builder builderForValue) {
         ensureNodesIsMutable();
         nodes_.add(builderForValue.build());
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Node nodes = 1;</code>
+       */
       public Builder addNodes(
           int index, crosby.binary.Osmformat.Node.Builder builderForValue) {
         ensureNodesIsMutable();
         nodes_.add(index, builderForValue.build());
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Node nodes = 1;</code>
+       */
       public Builder addAllNodes(
           java.lang.Iterable<? extends crosby.binary.Osmformat.Node> values) {
         ensureNodesIsMutable();
         super.addAll(values, nodes_);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Node nodes = 1;</code>
+       */
       public Builder clearNodes() {
         nodes_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000001);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Node nodes = 1;</code>
+       */
       public Builder removeNodes(int index) {
         ensureNodesIsMutable();
         nodes_.remove(index);
-        
-        return this;
-      }
-      
+
+        return this;
+      }
+
       // optional .OSMPBF.DenseNodes dense = 2;
       private crosby.binary.Osmformat.DenseNodes dense_ = crosby.binary.Osmformat.DenseNodes.getDefaultInstance();
+      /**
+       * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
+       */
       public boolean hasDense() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
+      /**
+       * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
+       */
       public crosby.binary.Osmformat.DenseNodes getDense() {
         return dense_;
       }
+      /**
+       * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
+       */
       public Builder setDense(crosby.binary.Osmformat.DenseNodes value) {
         if (value == null) {
@@ -2567,15 +4111,21 @@
         }
         dense_ = value;
-        
+
         bitField0_ |= 0x00000002;
         return this;
       }
+      /**
+       * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
+       */
       public Builder setDense(
           crosby.binary.Osmformat.DenseNodes.Builder builderForValue) {
         dense_ = builderForValue.build();
-        
+
         bitField0_ |= 0x00000002;
         return this;
       }
+      /**
+       * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
+       */
       public Builder mergeDense(crosby.binary.Osmformat.DenseNodes value) {
         if (((bitField0_ & 0x00000002) == 0x00000002) &&
@@ -2586,15 +4136,18 @@
           dense_ = value;
         }
-        
+
         bitField0_ |= 0x00000002;
         return this;
       }
+      /**
+       * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
+       */
       public Builder clearDense() {
         dense_ = crosby.binary.Osmformat.DenseNodes.getDefaultInstance();
-        
+
         bitField0_ = (bitField0_ & ~0x00000002);
         return this;
       }
-      
+
       // repeated .OSMPBF.Way ways = 3;
       private java.util.List<crosby.binary.Osmformat.Way> ways_ =
@@ -2606,14 +4159,26 @@
          }
       }
-      
+
+      /**
+       * <code>repeated .OSMPBF.Way ways = 3;</code>
+       */
       public java.util.List<crosby.binary.Osmformat.Way> getWaysList() {
         return java.util.Collections.unmodifiableList(ways_);
       }
+      /**
+       * <code>repeated .OSMPBF.Way ways = 3;</code>
+       */
       public int getWaysCount() {
         return ways_.size();
       }
+      /**
+       * <code>repeated .OSMPBF.Way ways = 3;</code>
+       */
       public crosby.binary.Osmformat.Way getWays(int index) {
         return ways_.get(index);
       }
+      /**
+       * <code>repeated .OSMPBF.Way ways = 3;</code>
+       */
       public Builder setWays(
           int index, crosby.binary.Osmformat.Way value) {
@@ -2623,14 +4188,20 @@
         ensureWaysIsMutable();
         ways_.set(index, value);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Way ways = 3;</code>
+       */
       public Builder setWays(
           int index, crosby.binary.Osmformat.Way.Builder builderForValue) {
         ensureWaysIsMutable();
         ways_.set(index, builderForValue.build());
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Way ways = 3;</code>
+       */
       public Builder addWays(crosby.binary.Osmformat.Way value) {
         if (value == null) {
@@ -2639,7 +4210,10 @@
         ensureWaysIsMutable();
         ways_.add(value);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Way ways = 3;</code>
+       */
       public Builder addWays(
           int index, crosby.binary.Osmformat.Way value) {
@@ -2649,41 +4223,56 @@
         ensureWaysIsMutable();
         ways_.add(index, value);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Way ways = 3;</code>
+       */
       public Builder addWays(
           crosby.binary.Osmformat.Way.Builder builderForValue) {
         ensureWaysIsMutable();
         ways_.add(builderForValue.build());
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Way ways = 3;</code>
+       */
       public Builder addWays(
           int index, crosby.binary.Osmformat.Way.Builder builderForValue) {
         ensureWaysIsMutable();
         ways_.add(index, builderForValue.build());
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Way ways = 3;</code>
+       */
       public Builder addAllWays(
           java.lang.Iterable<? extends crosby.binary.Osmformat.Way> values) {
         ensureWaysIsMutable();
         super.addAll(values, ways_);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Way ways = 3;</code>
+       */
       public Builder clearWays() {
         ways_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000004);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Way ways = 3;</code>
+       */
       public Builder removeWays(int index) {
         ensureWaysIsMutable();
         ways_.remove(index);
-        
-        return this;
-      }
-      
+
+        return this;
+      }
+
       // repeated .OSMPBF.Relation relations = 4;
       private java.util.List<crosby.binary.Osmformat.Relation> relations_ =
@@ -2695,14 +4284,26 @@
          }
       }
-      
+
+      /**
+       * <code>repeated .OSMPBF.Relation relations = 4;</code>
+       */
       public java.util.List<crosby.binary.Osmformat.Relation> getRelationsList() {
         return java.util.Collections.unmodifiableList(relations_);
       }
+      /**
+       * <code>repeated .OSMPBF.Relation relations = 4;</code>
+       */
       public int getRelationsCount() {
         return relations_.size();
       }
+      /**
+       * <code>repeated .OSMPBF.Relation relations = 4;</code>
+       */
       public crosby.binary.Osmformat.Relation getRelations(int index) {
         return relations_.get(index);
       }
+      /**
+       * <code>repeated .OSMPBF.Relation relations = 4;</code>
+       */
       public Builder setRelations(
           int index, crosby.binary.Osmformat.Relation value) {
@@ -2712,14 +4313,20 @@
         ensureRelationsIsMutable();
         relations_.set(index, value);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Relation relations = 4;</code>
+       */
       public Builder setRelations(
           int index, crosby.binary.Osmformat.Relation.Builder builderForValue) {
         ensureRelationsIsMutable();
         relations_.set(index, builderForValue.build());
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Relation relations = 4;</code>
+       */
       public Builder addRelations(crosby.binary.Osmformat.Relation value) {
         if (value == null) {
@@ -2728,7 +4335,10 @@
         ensureRelationsIsMutable();
         relations_.add(value);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Relation relations = 4;</code>
+       */
       public Builder addRelations(
           int index, crosby.binary.Osmformat.Relation value) {
@@ -2738,41 +4348,56 @@
         ensureRelationsIsMutable();
         relations_.add(index, value);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Relation relations = 4;</code>
+       */
       public Builder addRelations(
           crosby.binary.Osmformat.Relation.Builder builderForValue) {
         ensureRelationsIsMutable();
         relations_.add(builderForValue.build());
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Relation relations = 4;</code>
+       */
       public Builder addRelations(
           int index, crosby.binary.Osmformat.Relation.Builder builderForValue) {
         ensureRelationsIsMutable();
         relations_.add(index, builderForValue.build());
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Relation relations = 4;</code>
+       */
       public Builder addAllRelations(
           java.lang.Iterable<? extends crosby.binary.Osmformat.Relation> values) {
         ensureRelationsIsMutable();
         super.addAll(values, relations_);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Relation relations = 4;</code>
+       */
       public Builder clearRelations() {
         relations_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000008);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.Relation relations = 4;</code>
+       */
       public Builder removeRelations(int index) {
         ensureRelationsIsMutable();
         relations_.remove(index);
-        
-        return this;
-      }
-      
+
+        return this;
+      }
+
       // repeated .OSMPBF.ChangeSet changesets = 5;
       private java.util.List<crosby.binary.Osmformat.ChangeSet> changesets_ =
@@ -2784,14 +4409,26 @@
          }
       }
-      
+
+      /**
+       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+       */
       public java.util.List<crosby.binary.Osmformat.ChangeSet> getChangesetsList() {
         return java.util.Collections.unmodifiableList(changesets_);
       }
+      /**
+       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+       */
       public int getChangesetsCount() {
         return changesets_.size();
       }
+      /**
+       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+       */
       public crosby.binary.Osmformat.ChangeSet getChangesets(int index) {
         return changesets_.get(index);
       }
+      /**
+       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+       */
       public Builder setChangesets(
           int index, crosby.binary.Osmformat.ChangeSet value) {
@@ -2801,14 +4438,20 @@
         ensureChangesetsIsMutable();
         changesets_.set(index, value);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+       */
       public Builder setChangesets(
           int index, crosby.binary.Osmformat.ChangeSet.Builder builderForValue) {
         ensureChangesetsIsMutable();
         changesets_.set(index, builderForValue.build());
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+       */
       public Builder addChangesets(crosby.binary.Osmformat.ChangeSet value) {
         if (value == null) {
@@ -2817,7 +4460,10 @@
         ensureChangesetsIsMutable();
         changesets_.add(value);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+       */
       public Builder addChangesets(
           int index, crosby.binary.Osmformat.ChangeSet value) {
@@ -2827,94 +4473,196 @@
         ensureChangesetsIsMutable();
         changesets_.add(index, value);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+       */
       public Builder addChangesets(
           crosby.binary.Osmformat.ChangeSet.Builder builderForValue) {
         ensureChangesetsIsMutable();
         changesets_.add(builderForValue.build());
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+       */
       public Builder addChangesets(
           int index, crosby.binary.Osmformat.ChangeSet.Builder builderForValue) {
         ensureChangesetsIsMutable();
         changesets_.add(index, builderForValue.build());
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+       */
       public Builder addAllChangesets(
           java.lang.Iterable<? extends crosby.binary.Osmformat.ChangeSet> values) {
         ensureChangesetsIsMutable();
         super.addAll(values, changesets_);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+       */
       public Builder clearChangesets() {
         changesets_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000010);
-        
-        return this;
-      }
+
+        return this;
+      }
+      /**
+       * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
+       */
       public Builder removeChangesets(int index) {
         ensureChangesetsIsMutable();
         changesets_.remove(index);
-        
-        return this;
-      }
-      
+
+        return this;
+      }
+
       // @@protoc_insertion_point(builder_scope:OSMPBF.PrimitiveGroup)
     }
-    
+
     static {
       defaultInstance = new PrimitiveGroup(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:OSMPBF.PrimitiveGroup)
   }
-  
+
   public interface StringTableOrBuilder
       extends com.google.protobuf.MessageLiteOrBuilder {
-    
+
     // repeated bytes s = 1;
+    /**
+     * <code>repeated bytes s = 1;</code>
+     */
     java.util.List<com.google.protobuf.ByteString> getSList();
+    /**
+     * <code>repeated bytes s = 1;</code>
+     */
     int getSCount();
+    /**
+     * <code>repeated bytes s = 1;</code>
+     */
     com.google.protobuf.ByteString getS(int index);
   }
+  /**
+   * Protobuf type {@code OSMPBF.StringTable}
+   *
+   * <pre>
+   ** String table, contains the common strings in each block.
+   *
+   *Note that we reserve index '0' as a delimiter, so the entry at that
+   *index in the table is ALWAYS blank and unused.
+   * </pre>
+   */
   public static final class StringTable extends
       com.google.protobuf.GeneratedMessageLite
       implements StringTableOrBuilder {
     // Use StringTable.newBuilder() to construct.
-    private StringTable(Builder builder) {
+    private StringTable(com.google.protobuf.GeneratedMessageLite.Builder builder) {
       super(builder);
+
     }
     private StringTable(boolean noInit) {}
-    
+
     private static final StringTable defaultInstance;
     public static StringTable getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public StringTable getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
+
+    private StringTable(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+                s_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              s_.add(input.readBytes());
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+          s_ = java.util.Collections.unmodifiableList(s_);
+        }
+        makeExtensionsImmutable();
+      }
+    }
+    public static com.google.protobuf.Parser<StringTable> PARSER =
+        new com.google.protobuf.AbstractParser<StringTable>() {
+      public StringTable parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new StringTable(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<StringTable> getParserForType() {
+      return PARSER;
+    }
+
     // repeated bytes s = 1;
     public static final int S_FIELD_NUMBER = 1;
     private java.util.List<com.google.protobuf.ByteString> s_;
+    /**
+     * <code>repeated bytes s = 1;</code>
+     */
     public java.util.List<com.google.protobuf.ByteString>
         getSList() {
       return s_;
     }
+    /**
+     * <code>repeated bytes s = 1;</code>
+     */
     public int getSCount() {
       return s_.size();
     }
+    /**
+     * <code>repeated bytes s = 1;</code>
+     */
     public com.google.protobuf.ByteString getS(int index) {
       return s_.get(index);
     }
-    
+
     private void initFields() {
-      s_ = java.util.Collections.emptyList();;
+      s_ = java.util.Collections.emptyList();
     }
     private byte memoizedIsInitialized = -1;
@@ -2922,9 +4670,9 @@
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
-      
+
       memoizedIsInitialized = 1;
       return true;
     }
-    
+
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
@@ -2934,10 +4682,10 @@
       }
     }
-    
+
     private int memoizedSerializedSize = -1;
     public int getSerializedSize() {
       int size = memoizedSerializedSize;
       if (size != -1) return size;
-    
+
       size = 0;
       {
@@ -2953,5 +4701,5 @@
       return size;
     }
-    
+
     private static final long serialVersionUID = 0L;
     @java.lang.Override
@@ -2960,9 +4708,9 @@
       return super.writeReplace();
     }
-    
+
     public static crosby.binary.Osmformat.StringTable parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static crosby.binary.Osmformat.StringTable parseFrom(
@@ -2970,10 +4718,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static crosby.binary.Osmformat.StringTable parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static crosby.binary.Osmformat.StringTable parseFrom(
@@ -2981,10 +4728,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static crosby.binary.Osmformat.StringTable parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static crosby.binary.Osmformat.StringTable parseFrom(
@@ -2992,15 +4738,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(input, extensionRegistry);
     }
     public static crosby.binary.Osmformat.StringTable parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input);
     }
     public static crosby.binary.Osmformat.StringTable parseDelimitedFrom(
@@ -3008,15 +4748,10 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
     public static crosby.binary.Osmformat.StringTable parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static crosby.binary.Osmformat.StringTable parseFrom(
@@ -3024,8 +4759,7 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
@@ -3034,5 +4768,15 @@
     }
     public Builder toBuilder() { return newBuilder(this); }
-    
+
+    /**
+     * Protobuf type {@code OSMPBF.StringTable}
+     *
+     * <pre>
+     ** String table, contains the common strings in each block.
+     *
+     *Note that we reserve index '0' as a delimiter, so the entry at that
+     *index in the table is ALWAYS blank and unused.
+     * </pre>
+     */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageLite.Builder<
@@ -3043,5 +4787,5 @@
         maybeForceBuilderInitialization();
       }
-      
+
       private void maybeForceBuilderInitialization() {
       }
@@ -3049,20 +4793,20 @@
         return new Builder();
       }
-      
+
       public Builder clear() {
         super.clear();
-        s_ = java.util.Collections.emptyList();;
+        s_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000001);
         return this;
       }
-      
+
       public Builder clone() {
         return create().mergeFrom(buildPartial());
       }
-      
+
       public crosby.binary.Osmformat.StringTable getDefaultInstanceForType() {
         return crosby.binary.Osmformat.StringTable.getDefaultInstance();
       }
-      
+
       public crosby.binary.Osmformat.StringTable build() {
         crosby.binary.Osmformat.StringTable result = buildPartial();
@@ -3072,18 +4816,8 @@
         return result;
       }
-      
-      private crosby.binary.Osmformat.StringTable buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        crosby.binary.Osmformat.StringTable result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
+
       public crosby.binary.Osmformat.StringTable buildPartial() {
         crosby.binary.Osmformat.StringTable result = new crosby.binary.Osmformat.StringTable(this);
-        //int from_bitField0_ = bitField0_;
+        int from_bitField0_ = bitField0_;
         if (((bitField0_ & 0x00000001) == 0x00000001)) {
           s_ = java.util.Collections.unmodifiableList(s_);
@@ -3093,5 +4827,5 @@
         return result;
       }
-      
+
       public Builder mergeFrom(crosby.binary.Osmformat.StringTable other) {
         if (other == crosby.binary.Osmformat.StringTable.getDefaultInstance()) return this;
@@ -3108,39 +4842,30 @@
         return this;
       }
-      
+
       public final boolean isInitialized() {
         return true;
       }
-      
+
       public Builder mergeFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        while (true) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              
-              return this;
-            default: {
-              if (!parseUnknownField(input, extensionRegistry, tag)) {
-                
-                return this;
-              }
-              break;
-            }
-            case 10: {
-              ensureSIsMutable();
-              s_.add(input.readBytes());
-              break;
-            }
+        crosby.binary.Osmformat.StringTable parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (crosby.binary.Osmformat.StringTable) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
         }
-      }
-      
+        return this;
+      }
       private int bitField0_;
-      
+
       // repeated bytes s = 1;
-      private java.util.List<com.google.protobuf.ByteString> s_ = java.util.Collections.emptyList();;
+      private java.util.List<com.google.protobuf.ByteString> s_ = java.util.Collections.emptyList();
       private void ensureSIsMutable() {
         if (!((bitField0_ & 0x00000001) == 0x00000001)) {
@@ -3149,14 +4874,26 @@
          }
       }
+      /**
+       * <code>repeated bytes s = 1;</code>
+       */
       public java.util.List<com.google.protobuf.ByteString>
           getSList() {
         return java.util.Collections.unmodifiableList(s_);
       }
+      /**
+       * <code>repeated bytes s = 1;</code>
+       */
       public int getSCount() {
         return s_.size();
       }
+      /**
+       * <code>repeated bytes s = 1;</code>
+       */
       public com.google.protobuf.ByteString getS(int index) {
         return s_.get(index);
       }
+      /**
+       * <code>repeated bytes s = 1;</code>
+       */
       public Builder setS(
           int index, com.google.protobuf.ByteString value) {
@@ -3169,4 +4906,7 @@
         return this;
       }
+      /**
+       * <code>repeated bytes s = 1;</code>
+       */
       public Builder addS(com.google.protobuf.ByteString value) {
         if (value == null) {
@@ -3178,4 +4918,7 @@
         return this;
       }
+      /**
+       * <code>repeated bytes s = 1;</code>
+       */
       public Builder addAllS(
           java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
@@ -3185,383 +4928,162 @@
         return this;
       }
+      /**
+       * <code>repeated bytes s = 1;</code>
+       */
       public Builder clearS() {
-        s_ = java.util.Collections.emptyList();;
+        s_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000001);
         
         return this;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:OSMPBF.StringTable)
     }
-    
+
     static {
       defaultInstance = new StringTable(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:OSMPBF.StringTable)
   }
-  
+
   public interface InfoOrBuilder
       extends com.google.protobuf.MessageLiteOrBuilder {
-    
+
     // optional int32 version = 1 [default = -1];
+    /**
+     * <code>optional int32 version = 1 [default = -1];</code>
+     */
     boolean hasVersion();
+    /**
+     * <code>optional int32 version = 1 [default = -1];</code>
+     */
     int getVersion();
-    
+
     // optional int64 timestamp = 2;
+    /**
+     * <code>optional int64 timestamp = 2;</code>
+     */
     boolean hasTimestamp();
+    /**
+     * <code>optional int64 timestamp = 2;</code>
+     */
     long getTimestamp();
-    
+
     // optional int64 changeset = 3;
+    /**
+     * <code>optional int64 changeset = 3;</code>
+     */
     boolean hasChangeset();
+    /**
+     * <code>optional int64 changeset = 3;</code>
+     */
     long getChangeset();
-    
+
     // optional int32 uid = 4;
+    /**
+     * <code>optional int32 uid = 4;</code>
+     */
     boolean hasUid();
+    /**
+     * <code>optional int32 uid = 4;</code>
+     */
     int getUid();
-    
+
     // optional uint32 user_sid = 5;
+    /**
+     * <code>optional uint32 user_sid = 5;</code>
+     *
+     * <pre>
+     * String IDs
+     * </pre>
+     */
     boolean hasUserSid();
+    /**
+     * <code>optional uint32 user_sid = 5;</code>
+     *
+     * <pre>
+     * String IDs
+     * </pre>
+     */
     int getUserSid();
+
+    // optional bool visible = 6;
+    /**
+     * <code>optional bool visible = 6;</code>
+     *
+     * <pre>
+     * The visible flag is used to store history information. It indicates that
+     * the current object version has been created by a delete operation on the
+     * OSM API.
+     * When a writer sets this flag, it MUST add a required_features tag with
+     * value "HistoricalInformation" to the HeaderBlock.
+     * If this flag is not available for some object it MUST be assumed to be
+     * true if the file has the required_features tag "HistoricalInformation"
+     * set.
+     * </pre>
+     */
+    boolean hasVisible();
+    /**
+     * <code>optional bool visible = 6;</code>
+     *
+     * <pre>
+     * The visible flag is used to store history information. It indicates that
+     * the current object version has been created by a delete operation on the
+     * OSM API.
+     * When a writer sets this flag, it MUST add a required_features tag with
+     * value "HistoricalInformation" to the HeaderBlock.
+     * If this flag is not available for some object it MUST be assumed to be
+     * true if the file has the required_features tag "HistoricalInformation"
+     * set.
+     * </pre>
+     */
+    boolean getVisible();
   }
+  /**
+   * Protobuf type {@code OSMPBF.Info}
+   *
+   * <pre>
+   * Optional metadata that may be included into each primitive. 
+   * </pre>
+   */
   public static final class Info extends
       com.google.protobuf.GeneratedMessageLite
       implements InfoOrBuilder {
     // Use Info.newBuilder() to construct.
-    private Info(Builder builder) {
+    private Info(com.google.protobuf.GeneratedMessageLite.Builder builder) {
       super(builder);
+
     }
     private Info(boolean noInit) {}
-    
+
     private static final Info defaultInstance;
     public static Info getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public Info getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
-    private int bitField0_;
-    // optional int32 version = 1 [default = -1];
-    public static final int VERSION_FIELD_NUMBER = 1;
-    private int version_;
-    public boolean hasVersion() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    public int getVersion() {
-      return version_;
-    }
-    
-    // optional int64 timestamp = 2;
-    public static final int TIMESTAMP_FIELD_NUMBER = 2;
-    private long timestamp_;
-    public boolean hasTimestamp() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    public long getTimestamp() {
-      return timestamp_;
-    }
-    
-    // optional int64 changeset = 3;
-    public static final int CHANGESET_FIELD_NUMBER = 3;
-    private long changeset_;
-    public boolean hasChangeset() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
-    }
-    public long getChangeset() {
-      return changeset_;
-    }
-    
-    // optional int32 uid = 4;
-    public static final int UID_FIELD_NUMBER = 4;
-    private int uid_;
-    public boolean hasUid() {
-      return ((bitField0_ & 0x00000008) == 0x00000008);
-    }
-    public int getUid() {
-      return uid_;
-    }
-    
-    // optional uint32 user_sid = 5;
-    public static final int USER_SID_FIELD_NUMBER = 5;
-    private int userSid_;
-    public boolean hasUserSid() {
-      return ((bitField0_ & 0x00000010) == 0x00000010);
-    }
-    public int getUserSid() {
-      return userSid_;
-    }
-    
-    private void initFields() {
-      version_ = -1;
-      timestamp_ = 0L;
-      changeset_ = 0L;
-      uid_ = 0;
-      userSid_ = 0;
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
-      
-      memoizedIsInitialized = 1;
-      return true;
-    }
-    
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeInt32(1, version_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeInt64(2, timestamp_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeInt64(3, changeset_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        output.writeInt32(4, uid_);
-      }
-      if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        output.writeUInt32(5, userSid_);
-      }
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-    
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(1, version_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt64Size(2, timestamp_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt64Size(3, changeset_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(4, uid_);
-      }
-      if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(5, userSid_);
-      }
-      memoizedSerializedSize = size;
-      return size;
-    }
-    
-    private static final long serialVersionUID = 0L;
-    @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-    
-    public static crosby.binary.Osmformat.Info parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static crosby.binary.Osmformat.Info parseFrom(
-        com.google.protobuf.ByteString data,
+
+    private Info(
+        com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static crosby.binary.Osmformat.Info parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static crosby.binary.Osmformat.Info parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static crosby.binary.Osmformat.Info parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static crosby.binary.Osmformat.Info parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    public static crosby.binary.Osmformat.Info parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
-    }
-    public static crosby.binary.Osmformat.Info 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 crosby.binary.Osmformat.Info parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static crosby.binary.Osmformat.Info 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(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(crosby.binary.Osmformat.Info prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-    
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageLite.Builder<
-          crosby.binary.Osmformat.Info, Builder>
-        implements crosby.binary.Osmformat.InfoOrBuilder {
-      // Construct using crosby.binary.Osmformat.Info.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-      
-      private void maybeForceBuilderInitialization() {
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-      
-      public Builder clear() {
-        super.clear();
-        version_ = -1;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        timestamp_ = 0L;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        changeset_ = 0L;
-        bitField0_ = (bitField0_ & ~0x00000004);
-        uid_ = 0;
-        bitField0_ = (bitField0_ & ~0x00000008);
-        userSid_ = 0;
-        bitField0_ = (bitField0_ & ~0x00000010);
-        return this;
-      }
-      
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-      
-      public crosby.binary.Osmformat.Info getDefaultInstanceForType() {
-        return crosby.binary.Osmformat.Info.getDefaultInstance();
-      }
-      
-      public crosby.binary.Osmformat.Info build() {
-        crosby.binary.Osmformat.Info result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-      
-      private crosby.binary.Osmformat.Info buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        crosby.binary.Osmformat.Info result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
-      public crosby.binary.Osmformat.Info buildPartial() {
-        crosby.binary.Osmformat.Info result = new crosby.binary.Osmformat.Info(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.version_ = version_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.timestamp_ = timestamp_;
-        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
-          to_bitField0_ |= 0x00000004;
-        }
-        result.changeset_ = changeset_;
-        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
-          to_bitField0_ |= 0x00000008;
-        }
-        result.uid_ = uid_;
-        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
-          to_bitField0_ |= 0x00000010;
-        }
-        result.userSid_ = userSid_;
-        result.bitField0_ = to_bitField0_;
-        return result;
-      }
-      
-      public Builder mergeFrom(crosby.binary.Osmformat.Info other) {
-        if (other == crosby.binary.Osmformat.Info.getDefaultInstance()) return this;
-        if (other.hasVersion()) {
-          setVersion(other.getVersion());
-        }
-        if (other.hasTimestamp()) {
-          setTimestamp(other.getTimestamp());
-        }
-        if (other.hasChangeset()) {
-          setChangeset(other.getChangeset());
-        }
-        if (other.hasUid()) {
-          setUid(other.getUid());
-        }
-        if (other.hasUserSid()) {
-          setUserSid(other.getUserSid());
-        }
-        return this;
-      }
-      
-      public final boolean isInitialized() {
-        return true;
-      }
-      
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        while (true) {
+      initFields();
+      int mutable_bitField0_ = 0;
+      try {
+        boolean done = false;
+        while (!done) {
           int tag = input.readTag();
           switch (tag) {
             case 0:
-              
-              return this;
+              done = true;
+              break;
             default: {
-              if (!parseUnknownField(input, extensionRegistry, tag)) {
-                
-                return this;
+              if (!parseUnknownField(input,
+                                     extensionRegistry, tag)) {
+                done = true;
               }
               break;
@@ -3592,18 +5114,453 @@
               break;
             }
+            case 48: {
+              bitField0_ |= 0x00000020;
+              visible_ = input.readBool();
+              break;
+            }
           }
         }
-      }
-      
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        makeExtensionsImmutable();
+      }
+    }
+    public static com.google.protobuf.Parser<Info> PARSER =
+        new com.google.protobuf.AbstractParser<Info>() {
+      public Info parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Info(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Info> getParserForType() {
+      return PARSER;
+    }
+
+    private int bitField0_;
+    // optional int32 version = 1 [default = -1];
+    public static final int VERSION_FIELD_NUMBER = 1;
+    private int version_;
+    /**
+     * <code>optional int32 version = 1 [default = -1];</code>
+     */
+    public boolean hasVersion() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>optional int32 version = 1 [default = -1];</code>
+     */
+    public int getVersion() {
+      return version_;
+    }
+
+    // optional int64 timestamp = 2;
+    public static final int TIMESTAMP_FIELD_NUMBER = 2;
+    private long timestamp_;
+    /**
+     * <code>optional int64 timestamp = 2;</code>
+     */
+    public boolean hasTimestamp() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>optional int64 timestamp = 2;</code>
+     */
+    public long getTimestamp() {
+      return timestamp_;
+    }
+
+    // optional int64 changeset = 3;
+    public static final int CHANGESET_FIELD_NUMBER = 3;
+    private long changeset_;
+    /**
+     * <code>optional int64 changeset = 3;</code>
+     */
+    public boolean hasChangeset() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    /**
+     * <code>optional int64 changeset = 3;</code>
+     */
+    public long getChangeset() {
+      return changeset_;
+    }
+
+    // optional int32 uid = 4;
+    public static final int UID_FIELD_NUMBER = 4;
+    private int uid_;
+    /**
+     * <code>optional int32 uid = 4;</code>
+     */
+    public boolean hasUid() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    /**
+     * <code>optional int32 uid = 4;</code>
+     */
+    public int getUid() {
+      return uid_;
+    }
+
+    // optional uint32 user_sid = 5;
+    public static final int USER_SID_FIELD_NUMBER = 5;
+    private int userSid_;
+    /**
+     * <code>optional uint32 user_sid = 5;</code>
+     *
+     * <pre>
+     * String IDs
+     * </pre>
+     */
+    public boolean hasUserSid() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    /**
+     * <code>optional uint32 user_sid = 5;</code>
+     *
+     * <pre>
+     * String IDs
+     * </pre>
+     */
+    public int getUserSid() {
+      return userSid_;
+    }
+
+    // optional bool visible = 6;
+    public static final int VISIBLE_FIELD_NUMBER = 6;
+    private boolean visible_;
+    /**
+     * <code>optional bool visible = 6;</code>
+     *
+     * <pre>
+     * The visible flag is used to store history information. It indicates that
+     * the current object version has been created by a delete operation on the
+     * OSM API.
+     * When a writer sets this flag, it MUST add a required_features tag with
+     * value "HistoricalInformation" to the HeaderBlock.
+     * If this flag is not available for some object it MUST be assumed to be
+     * true if the file has the required_features tag "HistoricalInformation"
+     * set.
+     * </pre>
+     */
+    public boolean hasVisible() {
+      return ((bitField0_ & 0x00000020) == 0x00000020);
+    }
+    /**
+     * <code>optional bool visible = 6;</code>
+     *
+     * <pre>
+     * The visible flag is used to store history information. It indicates that
+     * the current object version has been created by a delete operation on the
+     * OSM API.
+     * When a writer sets this flag, it MUST add a required_features tag with
+     * value "HistoricalInformation" to the HeaderBlock.
+     * If this flag is not available for some object it MUST be assumed to be
+     * true if the file has the required_features tag "HistoricalInformation"
+     * set.
+     * </pre>
+     */
+    public boolean getVisible() {
+      return visible_;
+    }
+
+    private void initFields() {
+      version_ = -1;
+      timestamp_ = 0L;
+      changeset_ = 0L;
+      uid_ = 0;
+      userSid_ = 0;
+      visible_ = false;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeInt32(1, version_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeInt64(2, timestamp_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeInt64(3, changeset_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeInt32(4, uid_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeUInt32(5, userSid_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        output.writeBool(6, visible_);
+      }
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(1, version_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, timestamp_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, changeset_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(4, uid_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(5, userSid_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(6, visible_);
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+
+    public static crosby.binary.Osmformat.Info parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static crosby.binary.Osmformat.Info parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static crosby.binary.Osmformat.Info parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static crosby.binary.Osmformat.Info parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static crosby.binary.Osmformat.Info parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static crosby.binary.Osmformat.Info parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static crosby.binary.Osmformat.Info parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static crosby.binary.Osmformat.Info parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static crosby.binary.Osmformat.Info parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static crosby.binary.Osmformat.Info parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Osmformat.Info prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+
+    /**
+     * Protobuf type {@code OSMPBF.Info}
+     *
+     * <pre>
+     * Optional metadata that may be included into each primitive. 
+     * </pre>
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Osmformat.Info, Builder>
+        implements crosby.binary.Osmformat.InfoOrBuilder {
+      // Construct using crosby.binary.Osmformat.Info.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        version_ = -1;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        timestamp_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        changeset_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        uid_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        userSid_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        visible_ = false;
+        bitField0_ = (bitField0_ & ~0x00000020);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public crosby.binary.Osmformat.Info getDefaultInstanceForType() {
+        return crosby.binary.Osmformat.Info.getDefaultInstance();
+      }
+
+      public crosby.binary.Osmformat.Info build() {
+        crosby.binary.Osmformat.Info result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public crosby.binary.Osmformat.Info buildPartial() {
+        crosby.binary.Osmformat.Info result = new crosby.binary.Osmformat.Info(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.version_ = version_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.timestamp_ = timestamp_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.changeset_ = changeset_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.uid_ = uid_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.userSid_ = userSid_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000020;
+        }
+        result.visible_ = visible_;
+        result.bitField0_ = to_bitField0_;
+        return result;
+      }
+
+      public Builder mergeFrom(crosby.binary.Osmformat.Info other) {
+        if (other == crosby.binary.Osmformat.Info.getDefaultInstance()) return this;
+        if (other.hasVersion()) {
+          setVersion(other.getVersion());
+        }
+        if (other.hasTimestamp()) {
+          setTimestamp(other.getTimestamp());
+        }
+        if (other.hasChangeset()) {
+          setChangeset(other.getChangeset());
+        }
+        if (other.hasUid()) {
+          setUid(other.getUid());
+        }
+        if (other.hasUserSid()) {
+          setUserSid(other.getUserSid());
+        }
+        if (other.hasVisible()) {
+          setVisible(other.getVisible());
+        }
+        return this;
+      }
+
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        crosby.binary.Osmformat.Info parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (crosby.binary.Osmformat.Info) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
       private int bitField0_;
-      
+
       // optional int32 version = 1 [default = -1];
       private int version_ = -1;
+      /**
+       * <code>optional int32 version = 1 [default = -1];</code>
+       */
       public boolean hasVersion() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
+      /**
+       * <code>optional int32 version = 1 [default = -1];</code>
+       */
       public int getVersion() {
         return version_;
       }
+      /**
+       * <code>optional int32 version = 1 [default = -1];</code>
+       */
       public Builder setVersion(int value) {
         bitField0_ |= 0x00000001;
@@ -3612,4 +5569,7 @@
         return this;
       }
+      /**
+       * <code>optional int32 version = 1 [default = -1];</code>
+       */
       public Builder clearVersion() {
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -3618,13 +5578,22 @@
         return this;
       }
-      
+
       // optional int64 timestamp = 2;
       private long timestamp_ ;
+      /**
+       * <code>optional int64 timestamp = 2;</code>
+       */
       public boolean hasTimestamp() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
+      /**
+       * <code>optional int64 timestamp = 2;</code>
+       */
       public long getTimestamp() {
         return timestamp_;
       }
+      /**
+       * <code>optional int64 timestamp = 2;</code>
+       */
       public Builder setTimestamp(long value) {
         bitField0_ |= 0x00000002;
@@ -3633,4 +5602,7 @@
         return this;
       }
+      /**
+       * <code>optional int64 timestamp = 2;</code>
+       */
       public Builder clearTimestamp() {
         bitField0_ = (bitField0_ & ~0x00000002);
@@ -3639,13 +5611,22 @@
         return this;
       }
-      
+
       // optional int64 changeset = 3;
       private long changeset_ ;
+      /**
+       * <code>optional int64 changeset = 3;</code>
+       */
       public boolean hasChangeset() {
         return ((bitField0_ & 0x00000004) == 0x00000004);
       }
+      /**
+       * <code>optional int64 changeset = 3;</code>
+       */
       public long getChangeset() {
         return changeset_;
       }
+      /**
+       * <code>optional int64 changeset = 3;</code>
+       */
       public Builder setChangeset(long value) {
         bitField0_ |= 0x00000004;
@@ -3654,4 +5635,7 @@
         return this;
       }
+      /**
+       * <code>optional int64 changeset = 3;</code>
+       */
       public Builder clearChangeset() {
         bitField0_ = (bitField0_ & ~0x00000004);
@@ -3660,13 +5644,22 @@
         return this;
       }
-      
+
       // optional int32 uid = 4;
       private int uid_ ;
+      /**
+       * <code>optional int32 uid = 4;</code>
+       */
       public boolean hasUid() {
         return ((bitField0_ & 0x00000008) == 0x00000008);
       }
+      /**
+       * <code>optional int32 uid = 4;</code>
+       */
       public int getUid() {
         return uid_;
       }
+      /**
+       * <code>optional int32 uid = 4;</code>
+       */
       public Builder setUid(int value) {
         bitField0_ |= 0x00000008;
@@ -3675,4 +5668,7 @@
         return this;
       }
+      /**
+       * <code>optional int32 uid = 4;</code>
+       */
       public Builder clearUid() {
         bitField0_ = (bitField0_ & ~0x00000008);
@@ -3681,13 +5677,34 @@
         return this;
       }
-      
+
       // optional uint32 user_sid = 5;
       private int userSid_ ;
+      /**
+       * <code>optional uint32 user_sid = 5;</code>
+       *
+       * <pre>
+       * String IDs
+       * </pre>
+       */
       public boolean hasUserSid() {
         return ((bitField0_ & 0x00000010) == 0x00000010);
       }
+      /**
+       * <code>optional uint32 user_sid = 5;</code>
+       *
+       * <pre>
+       * String IDs
+       * </pre>
+       */
       public int getUserSid() {
         return userSid_;
       }
+      /**
+       * <code>optional uint32 user_sid = 5;</code>
+       *
+       * <pre>
+       * String IDs
+       * </pre>
+       */
       public Builder setUserSid(int value) {
         bitField0_ |= 0x00000010;
@@ -3696,4 +5713,11 @@
         return this;
       }
+      /**
+       * <code>optional uint32 user_sid = 5;</code>
+       *
+       * <pre>
+       * String IDs
+       * </pre>
+       */
       public Builder clearUserSid() {
         bitField0_ = (bitField0_ & ~0x00000010);
@@ -3702,143 +5726,710 @@
         return this;
       }
-      
+
+      // optional bool visible = 6;
+      private boolean visible_ ;
+      /**
+       * <code>optional bool visible = 6;</code>
+       *
+       * <pre>
+       * The visible flag is used to store history information. It indicates that
+       * the current object version has been created by a delete operation on the
+       * OSM API.
+       * When a writer sets this flag, it MUST add a required_features tag with
+       * value "HistoricalInformation" to the HeaderBlock.
+       * If this flag is not available for some object it MUST be assumed to be
+       * true if the file has the required_features tag "HistoricalInformation"
+       * set.
+       * </pre>
+       */
+      public boolean hasVisible() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      /**
+       * <code>optional bool visible = 6;</code>
+       *
+       * <pre>
+       * The visible flag is used to store history information. It indicates that
+       * the current object version has been created by a delete operation on the
+       * OSM API.
+       * When a writer sets this flag, it MUST add a required_features tag with
+       * value "HistoricalInformation" to the HeaderBlock.
+       * If this flag is not available for some object it MUST be assumed to be
+       * true if the file has the required_features tag "HistoricalInformation"
+       * set.
+       * </pre>
+       */
+      public boolean getVisible() {
+        return visible_;
+      }
+      /**
+       * <code>optional bool visible = 6;</code>
+       *
+       * <pre>
+       * The visible flag is used to store history information. It indicates that
+       * the current object version has been created by a delete operation on the
+       * OSM API.
+       * When a writer sets this flag, it MUST add a required_features tag with
+       * value "HistoricalInformation" to the HeaderBlock.
+       * If this flag is not available for some object it MUST be assumed to be
+       * true if the file has the required_features tag "HistoricalInformation"
+       * set.
+       * </pre>
+       */
+      public Builder setVisible(boolean value) {
+        bitField0_ |= 0x00000020;
+        visible_ = value;
+        
+        return this;
+      }
+      /**
+       * <code>optional bool visible = 6;</code>
+       *
+       * <pre>
+       * The visible flag is used to store history information. It indicates that
+       * the current object version has been created by a delete operation on the
+       * OSM API.
+       * When a writer sets this flag, it MUST add a required_features tag with
+       * value "HistoricalInformation" to the HeaderBlock.
+       * If this flag is not available for some object it MUST be assumed to be
+       * true if the file has the required_features tag "HistoricalInformation"
+       * set.
+       * </pre>
+       */
+      public Builder clearVisible() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        visible_ = false;
+        
+        return this;
+      }
+
       // @@protoc_insertion_point(builder_scope:OSMPBF.Info)
     }
-    
+
     static {
       defaultInstance = new Info(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:OSMPBF.Info)
   }
-  
+
   public interface DenseInfoOrBuilder
       extends com.google.protobuf.MessageLiteOrBuilder {
-    
+
     // repeated int32 version = 1 [packed = true];
+    /**
+     * <code>repeated int32 version = 1 [packed = true];</code>
+     */
     java.util.List<java.lang.Integer> getVersionList();
+    /**
+     * <code>repeated int32 version = 1 [packed = true];</code>
+     */
     int getVersionCount();
+    /**
+     * <code>repeated int32 version = 1 [packed = true];</code>
+     */
     int getVersion(int index);
-    
+
     // repeated sint64 timestamp = 2 [packed = true];
+    /**
+     * <code>repeated sint64 timestamp = 2 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     java.util.List<java.lang.Long> getTimestampList();
+    /**
+     * <code>repeated sint64 timestamp = 2 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     int getTimestampCount();
+    /**
+     * <code>repeated sint64 timestamp = 2 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     long getTimestamp(int index);
-    
+
     // repeated sint64 changeset = 3 [packed = true];
+    /**
+     * <code>repeated sint64 changeset = 3 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     java.util.List<java.lang.Long> getChangesetList();
+    /**
+     * <code>repeated sint64 changeset = 3 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     int getChangesetCount();
+    /**
+     * <code>repeated sint64 changeset = 3 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     long getChangeset(int index);
-    
+
     // repeated sint32 uid = 4 [packed = true];
+    /**
+     * <code>repeated sint32 uid = 4 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     java.util.List<java.lang.Integer> getUidList();
+    /**
+     * <code>repeated sint32 uid = 4 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     int getUidCount();
+    /**
+     * <code>repeated sint32 uid = 4 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     int getUid(int index);
-    
+
     // repeated sint32 user_sid = 5 [packed = true];
+    /**
+     * <code>repeated sint32 user_sid = 5 [packed = true];</code>
+     *
+     * <pre>
+     * String IDs for usernames. DELTA coded
+     * </pre>
+     */
     java.util.List<java.lang.Integer> getUserSidList();
+    /**
+     * <code>repeated sint32 user_sid = 5 [packed = true];</code>
+     *
+     * <pre>
+     * String IDs for usernames. DELTA coded
+     * </pre>
+     */
     int getUserSidCount();
+    /**
+     * <code>repeated sint32 user_sid = 5 [packed = true];</code>
+     *
+     * <pre>
+     * String IDs for usernames. DELTA coded
+     * </pre>
+     */
     int getUserSid(int index);
+
+    // repeated bool visible = 6 [packed = true];
+    /**
+     * <code>repeated bool visible = 6 [packed = true];</code>
+     *
+     * <pre>
+     * The visible flag is used to store history information. It indicates that
+     * the current object version has been created by a delete operation on the
+     * OSM API.
+     * When a writer sets this flag, it MUST add a required_features tag with
+     * value "HistoricalInformation" to the HeaderBlock.
+     * If this flag is not available for some object it MUST be assumed to be
+     * true if the file has the required_features tag "HistoricalInformation"
+     * set.
+     * </pre>
+     */
+    java.util.List<java.lang.Boolean> getVisibleList();
+    /**
+     * <code>repeated bool visible = 6 [packed = true];</code>
+     *
+     * <pre>
+     * The visible flag is used to store history information. It indicates that
+     * the current object version has been created by a delete operation on the
+     * OSM API.
+     * When a writer sets this flag, it MUST add a required_features tag with
+     * value "HistoricalInformation" to the HeaderBlock.
+     * If this flag is not available for some object it MUST be assumed to be
+     * true if the file has the required_features tag "HistoricalInformation"
+     * set.
+     * </pre>
+     */
+    int getVisibleCount();
+    /**
+     * <code>repeated bool visible = 6 [packed = true];</code>
+     *
+     * <pre>
+     * The visible flag is used to store history information. It indicates that
+     * the current object version has been created by a delete operation on the
+     * OSM API.
+     * When a writer sets this flag, it MUST add a required_features tag with
+     * value "HistoricalInformation" to the HeaderBlock.
+     * If this flag is not available for some object it MUST be assumed to be
+     * true if the file has the required_features tag "HistoricalInformation"
+     * set.
+     * </pre>
+     */
+    boolean getVisible(int index);
   }
+  /**
+   * Protobuf type {@code OSMPBF.DenseInfo}
+   *
+   * <pre>
+   ** Optional metadata that may be included into each primitive. Special dense format used in DenseNodes. 
+   * </pre>
+   */
   public static final class DenseInfo extends
       com.google.protobuf.GeneratedMessageLite
       implements DenseInfoOrBuilder {
     // Use DenseInfo.newBuilder() to construct.
-    private DenseInfo(Builder builder) {
+    private DenseInfo(com.google.protobuf.GeneratedMessageLite.Builder builder) {
       super(builder);
+
     }
     private DenseInfo(boolean noInit) {}
-    
+
     private static final DenseInfo defaultInstance;
     public static DenseInfo getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public DenseInfo getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
+
+    private DenseInfo(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 8: {
+              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+                version_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              version_.add(input.readInt32());
+              break;
+            }
+            case 10: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001) && input.getBytesUntilLimit() > 0) {
+                version_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              while (input.getBytesUntilLimit() > 0) {
+                version_.add(input.readInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 16: {
+              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+                timestamp_ = new java.util.ArrayList<java.lang.Long>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              timestamp_.add(input.readSInt64());
+              break;
+            }
+            case 18: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) {
+                timestamp_ = new java.util.ArrayList<java.lang.Long>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              while (input.getBytesUntilLimit() > 0) {
+                timestamp_.add(input.readSInt64());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 24: {
+              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+                changeset_ = new java.util.ArrayList<java.lang.Long>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              changeset_.add(input.readSInt64());
+              break;
+            }
+            case 26: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004) && input.getBytesUntilLimit() > 0) {
+                changeset_ = new java.util.ArrayList<java.lang.Long>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              while (input.getBytesUntilLimit() > 0) {
+                changeset_.add(input.readSInt64());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 32: {
+              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
+                uid_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000008;
+              }
+              uid_.add(input.readSInt32());
+              break;
+            }
+            case 34: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008) && input.getBytesUntilLimit() > 0) {
+                uid_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000008;
+              }
+              while (input.getBytesUntilLimit() > 0) {
+                uid_.add(input.readSInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 40: {
+              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
+                userSid_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000010;
+              }
+              userSid_.add(input.readSInt32());
+              break;
+            }
+            case 42: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010) && input.getBytesUntilLimit() > 0) {
+                userSid_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000010;
+              }
+              while (input.getBytesUntilLimit() > 0) {
+                userSid_.add(input.readSInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 48: {
+              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
+                visible_ = new java.util.ArrayList<java.lang.Boolean>();
+                mutable_bitField0_ |= 0x00000020;
+              }
+              visible_.add(input.readBool());
+              break;
+            }
+            case 50: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020) && input.getBytesUntilLimit() > 0) {
+                visible_ = new java.util.ArrayList<java.lang.Boolean>();
+                mutable_bitField0_ |= 0x00000020;
+              }
+              while (input.getBytesUntilLimit() > 0) {
+                visible_.add(input.readBool());
+              }
+              input.popLimit(limit);
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+          version_ = java.util.Collections.unmodifiableList(version_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+          timestamp_ = java.util.Collections.unmodifiableList(timestamp_);
+        }
+        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+          changeset_ = java.util.Collections.unmodifiableList(changeset_);
+        }
+        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
+          uid_ = java.util.Collections.unmodifiableList(uid_);
+        }
+        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
+          userSid_ = java.util.Collections.unmodifiableList(userSid_);
+        }
+        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
+          visible_ = java.util.Collections.unmodifiableList(visible_);
+        }
+        makeExtensionsImmutable();
+      }
+    }
+    public static com.google.protobuf.Parser<DenseInfo> PARSER =
+        new com.google.protobuf.AbstractParser<DenseInfo>() {
+      public DenseInfo parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DenseInfo(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DenseInfo> getParserForType() {
+      return PARSER;
+    }
+
     // repeated int32 version = 1 [packed = true];
     public static final int VERSION_FIELD_NUMBER = 1;
     private java.util.List<java.lang.Integer> version_;
+    /**
+     * <code>repeated int32 version = 1 [packed = true];</code>
+     */
     public java.util.List<java.lang.Integer>
         getVersionList() {
       return version_;
     }
+    /**
+     * <code>repeated int32 version = 1 [packed = true];</code>
+     */
     public int getVersionCount() {
       return version_.size();
     }
+    /**
+     * <code>repeated int32 version = 1 [packed = true];</code>
+     */
     public int getVersion(int index) {
       return version_.get(index);
     }
     private int versionMemoizedSerializedSize = -1;
-    
+
     // repeated sint64 timestamp = 2 [packed = true];
     public static final int TIMESTAMP_FIELD_NUMBER = 2;
     private java.util.List<java.lang.Long> timestamp_;
+    /**
+     * <code>repeated sint64 timestamp = 2 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public java.util.List<java.lang.Long>
         getTimestampList() {
       return timestamp_;
     }
+    /**
+     * <code>repeated sint64 timestamp = 2 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public int getTimestampCount() {
       return timestamp_.size();
     }
+    /**
+     * <code>repeated sint64 timestamp = 2 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public long getTimestamp(int index) {
       return timestamp_.get(index);
     }
     private int timestampMemoizedSerializedSize = -1;
-    
+
     // repeated sint64 changeset = 3 [packed = true];
     public static final int CHANGESET_FIELD_NUMBER = 3;
     private java.util.List<java.lang.Long> changeset_;
+    /**
+     * <code>repeated sint64 changeset = 3 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public java.util.List<java.lang.Long>
         getChangesetList() {
       return changeset_;
     }
+    /**
+     * <code>repeated sint64 changeset = 3 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public int getChangesetCount() {
       return changeset_.size();
     }
+    /**
+     * <code>repeated sint64 changeset = 3 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public long getChangeset(int index) {
       return changeset_.get(index);
     }
     private int changesetMemoizedSerializedSize = -1;
-    
+
     // repeated sint32 uid = 4 [packed = true];
     public static final int UID_FIELD_NUMBER = 4;
     private java.util.List<java.lang.Integer> uid_;
+    /**
+     * <code>repeated sint32 uid = 4 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public java.util.List<java.lang.Integer>
         getUidList() {
       return uid_;
     }
+    /**
+     * <code>repeated sint32 uid = 4 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public int getUidCount() {
       return uid_.size();
     }
+    /**
+     * <code>repeated sint32 uid = 4 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public int getUid(int index) {
       return uid_.get(index);
     }
     private int uidMemoizedSerializedSize = -1;
-    
+
     // repeated sint32 user_sid = 5 [packed = true];
     public static final int USER_SID_FIELD_NUMBER = 5;
     private java.util.List<java.lang.Integer> userSid_;
+    /**
+     * <code>repeated sint32 user_sid = 5 [packed = true];</code>
+     *
+     * <pre>
+     * String IDs for usernames. DELTA coded
+     * </pre>
+     */
     public java.util.List<java.lang.Integer>
         getUserSidList() {
       return userSid_;
     }
+    /**
+     * <code>repeated sint32 user_sid = 5 [packed = true];</code>
+     *
+     * <pre>
+     * String IDs for usernames. DELTA coded
+     * </pre>
+     */
     public int getUserSidCount() {
       return userSid_.size();
     }
+    /**
+     * <code>repeated sint32 user_sid = 5 [packed = true];</code>
+     *
+     * <pre>
+     * String IDs for usernames. DELTA coded
+     * </pre>
+     */
     public int getUserSid(int index) {
       return userSid_.get(index);
     }
     private int userSidMemoizedSerializedSize = -1;
-    
+
+    // repeated bool visible = 6 [packed = true];
+    public static final int VISIBLE_FIELD_NUMBER = 6;
+    private java.util.List<java.lang.Boolean> visible_;
+    /**
+     * <code>repeated bool visible = 6 [packed = true];</code>
+     *
+     * <pre>
+     * The visible flag is used to store history information. It indicates that
+     * the current object version has been created by a delete operation on the
+     * OSM API.
+     * When a writer sets this flag, it MUST add a required_features tag with
+     * value "HistoricalInformation" to the HeaderBlock.
+     * If this flag is not available for some object it MUST be assumed to be
+     * true if the file has the required_features tag "HistoricalInformation"
+     * set.
+     * </pre>
+     */
+    public java.util.List<java.lang.Boolean>
+        getVisibleList() {
+      return visible_;
+    }
+    /**
+     * <code>repeated bool visible = 6 [packed = true];</code>
+     *
+     * <pre>
+     * The visible flag is used to store history information. It indicates that
+     * the current object version has been created by a delete operation on the
+     * OSM API.
+     * When a writer sets this flag, it MUST add a required_features tag with
+     * value "HistoricalInformation" to the HeaderBlock.
+     * If this flag is not available for some object it MUST be assumed to be
+     * true if the file has the required_features tag "HistoricalInformation"
+     * set.
+     * </pre>
+     */
+    public int getVisibleCount() {
+      return visible_.size();
+    }
+    /**
+     * <code>repeated bool visible = 6 [packed = true];</code>
+     *
+     * <pre>
+     * The visible flag is used to store history information. It indicates that
+     * the current object version has been created by a delete operation on the
+     * OSM API.
+     * When a writer sets this flag, it MUST add a required_features tag with
+     * value "HistoricalInformation" to the HeaderBlock.
+     * If this flag is not available for some object it MUST be assumed to be
+     * true if the file has the required_features tag "HistoricalInformation"
+     * set.
+     * </pre>
+     */
+    public boolean getVisible(int index) {
+      return visible_.get(index);
+    }
+    private int visibleMemoizedSerializedSize = -1;
+
     private void initFields() {
-      version_ = java.util.Collections.emptyList();;
-      timestamp_ = java.util.Collections.emptyList();;
-      changeset_ = java.util.Collections.emptyList();;
-      uid_ = java.util.Collections.emptyList();;
-      userSid_ = java.util.Collections.emptyList();;
+      version_ = java.util.Collections.emptyList();
+      timestamp_ = java.util.Collections.emptyList();
+      changeset_ = java.util.Collections.emptyList();
+      uid_ = java.util.Collections.emptyList();
+      userSid_ = java.util.Collections.emptyList();
+      visible_ = java.util.Collections.emptyList();
     }
     private byte memoizedIsInitialized = -1;
@@ -3846,9 +6437,9 @@
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
-      
+
       memoizedIsInitialized = 1;
       return true;
     }
-    
+
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
@@ -3889,11 +6480,18 @@
         output.writeSInt32NoTag(userSid_.get(i));
       }
-    }
-    
+      if (getVisibleList().size() > 0) {
+        output.writeRawVarint32(50);
+        output.writeRawVarint32(visibleMemoizedSerializedSize);
+      }
+      for (int i = 0; i < visible_.size(); i++) {
+        output.writeBoolNoTag(visible_.get(i));
+      }
+    }
+
     private int memoizedSerializedSize = -1;
     public int getSerializedSize() {
       int size = memoizedSerializedSize;
       if (size != -1) return size;
-    
+
       size = 0;
       {
@@ -3967,8 +6565,19 @@
         userSidMemoizedSerializedSize = dataSize;
       }
+      {
+        int dataSize = 0;
+        dataSize = 1 * getVisibleList().size();
+        size += dataSize;
+        if (!getVisibleList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        visibleMemoizedSerializedSize = dataSize;
+      }
       memoizedSerializedSize = size;
       return size;
     }
-    
+
     private static final long serialVersionUID = 0L;
     @java.lang.Override
@@ -3977,9 +6586,9 @@
       return super.writeReplace();
     }
-    
+
     public static crosby.binary.Osmformat.DenseInfo parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static crosby.binary.Osmformat.DenseInfo parseFrom(
@@ -3987,10 +6596,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static crosby.binary.Osmformat.DenseInfo parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static crosby.binary.Osmformat.DenseInfo parseFrom(
@@ -3998,10 +6606,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static crosby.binary.Osmformat.DenseInfo parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static crosby.binary.Osmformat.DenseInfo parseFrom(
@@ -4009,15 +6616,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(input, extensionRegistry);
     }
     public static crosby.binary.Osmformat.DenseInfo parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input);
     }
     public static crosby.binary.Osmformat.DenseInfo parseDelimitedFrom(
@@ -4025,15 +6626,10 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
     public static crosby.binary.Osmformat.DenseInfo parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static crosby.binary.Osmformat.DenseInfo parseFrom(
@@ -4041,8 +6637,7 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
@@ -4051,5 +6646,12 @@
     }
     public Builder toBuilder() { return newBuilder(this); }
-    
+
+    /**
+     * Protobuf type {@code OSMPBF.DenseInfo}
+     *
+     * <pre>
+     ** Optional metadata that may be included into each primitive. Special dense format used in DenseNodes. 
+     * </pre>
+     */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageLite.Builder<
@@ -4060,5 +6662,5 @@
         maybeForceBuilderInitialization();
       }
-      
+
       private void maybeForceBuilderInitialization() {
       }
@@ -4066,28 +6668,30 @@
         return new Builder();
       }
-      
+
       public Builder clear() {
         super.clear();
-        version_ = java.util.Collections.emptyList();;
+        version_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000001);
-        timestamp_ = java.util.Collections.emptyList();;
+        timestamp_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000002);
-        changeset_ = java.util.Collections.emptyList();;
+        changeset_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000004);
-        uid_ = java.util.Collections.emptyList();;
+        uid_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000008);
-        userSid_ = java.util.Collections.emptyList();;
+        userSid_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000010);
-        return this;
-      }
-      
+        visible_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000020);
+        return this;
+      }
+
       public Builder clone() {
         return create().mergeFrom(buildPartial());
       }
-      
+
       public crosby.binary.Osmformat.DenseInfo getDefaultInstanceForType() {
         return crosby.binary.Osmformat.DenseInfo.getDefaultInstance();
       }
-      
+
       public crosby.binary.Osmformat.DenseInfo build() {
         crosby.binary.Osmformat.DenseInfo result = buildPartial();
@@ -4097,18 +6701,8 @@
         return result;
       }
-      
-      private crosby.binary.Osmformat.DenseInfo buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        crosby.binary.Osmformat.DenseInfo result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
+
       public crosby.binary.Osmformat.DenseInfo buildPartial() {
         crosby.binary.Osmformat.DenseInfo result = new crosby.binary.Osmformat.DenseInfo(this);
-        //int from_bitField0_ = bitField0_;
+        int from_bitField0_ = bitField0_;
         if (((bitField0_ & 0x00000001) == 0x00000001)) {
           version_ = java.util.Collections.unmodifiableList(version_);
@@ -4136,7 +6730,12 @@
         }
         result.userSid_ = userSid_;
+        if (((bitField0_ & 0x00000020) == 0x00000020)) {
+          visible_ = java.util.Collections.unmodifiableList(visible_);
+          bitField0_ = (bitField0_ & ~0x00000020);
+        }
+        result.visible_ = visible_;
         return result;
       }
-      
+
       public Builder mergeFrom(crosby.binary.Osmformat.DenseInfo other) {
         if (other == crosby.binary.Osmformat.DenseInfo.getDefaultInstance()) return this;
@@ -4191,106 +6790,42 @@
           
         }
-        return this;
-      }
-      
+        if (!other.visible_.isEmpty()) {
+          if (visible_.isEmpty()) {
+            visible_ = other.visible_;
+            bitField0_ = (bitField0_ & ~0x00000020);
+          } else {
+            ensureVisibleIsMutable();
+            visible_.addAll(other.visible_);
+          }
+          
+        }
+        return this;
+      }
+
       public final boolean isInitialized() {
         return true;
       }
-      
+
       public Builder mergeFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        while (true) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              
-              return this;
-            default: {
-              if (!parseUnknownField(input, extensionRegistry, tag)) {
-                
-                return this;
-              }
-              break;
-            }
-            case 8: {
-              ensureVersionIsMutable();
-              version_.add(input.readInt32());
-              break;
-            }
-            case 10: {
-              int length = input.readRawVarint32();
-              int limit = input.pushLimit(length);
-              while (input.getBytesUntilLimit() > 0) {
-                addVersion(input.readInt32());
-              }
-              input.popLimit(limit);
-              break;
-            }
-            case 16: {
-              ensureTimestampIsMutable();
-              timestamp_.add(input.readSInt64());
-              break;
-            }
-            case 18: {
-              int length = input.readRawVarint32();
-              int limit = input.pushLimit(length);
-              while (input.getBytesUntilLimit() > 0) {
-                addTimestamp(input.readSInt64());
-              }
-              input.popLimit(limit);
-              break;
-            }
-            case 24: {
-              ensureChangesetIsMutable();
-              changeset_.add(input.readSInt64());
-              break;
-            }
-            case 26: {
-              int length = input.readRawVarint32();
-              int limit = input.pushLimit(length);
-              while (input.getBytesUntilLimit() > 0) {
-                addChangeset(input.readSInt64());
-              }
-              input.popLimit(limit);
-              break;
-            }
-            case 32: {
-              ensureUidIsMutable();
-              uid_.add(input.readSInt32());
-              break;
-            }
-            case 34: {
-              int length = input.readRawVarint32();
-              int limit = input.pushLimit(length);
-              while (input.getBytesUntilLimit() > 0) {
-                addUid(input.readSInt32());
-              }
-              input.popLimit(limit);
-              break;
-            }
-            case 40: {
-              ensureUserSidIsMutable();
-              userSid_.add(input.readSInt32());
-              break;
-            }
-            case 42: {
-              int length = input.readRawVarint32();
-              int limit = input.pushLimit(length);
-              while (input.getBytesUntilLimit() > 0) {
-                addUserSid(input.readSInt32());
-              }
-              input.popLimit(limit);
-              break;
-            }
+        crosby.binary.Osmformat.DenseInfo parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (crosby.binary.Osmformat.DenseInfo) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
         }
-      }
-      
+        return this;
+      }
       private int bitField0_;
-      
+
       // repeated int32 version = 1 [packed = true];
-      private java.util.List<java.lang.Integer> version_ = java.util.Collections.emptyList();;
+      private java.util.List<java.lang.Integer> version_ = java.util.Collections.emptyList();
       private void ensureVersionIsMutable() {
         if (!((bitField0_ & 0x00000001) == 0x00000001)) {
@@ -4299,14 +6834,26 @@
          }
       }
+      /**
+       * <code>repeated int32 version = 1 [packed = true];</code>
+       */
       public java.util.List<java.lang.Integer>
           getVersionList() {
         return java.util.Collections.unmodifiableList(version_);
       }
+      /**
+       * <code>repeated int32 version = 1 [packed = true];</code>
+       */
       public int getVersionCount() {
         return version_.size();
       }
+      /**
+       * <code>repeated int32 version = 1 [packed = true];</code>
+       */
       public int getVersion(int index) {
         return version_.get(index);
       }
+      /**
+       * <code>repeated int32 version = 1 [packed = true];</code>
+       */
       public Builder setVersion(
           int index, int value) {
@@ -4316,4 +6863,7 @@
         return this;
       }
+      /**
+       * <code>repeated int32 version = 1 [packed = true];</code>
+       */
       public Builder addVersion(int value) {
         ensureVersionIsMutable();
@@ -4322,4 +6872,7 @@
         return this;
       }
+      /**
+       * <code>repeated int32 version = 1 [packed = true];</code>
+       */
       public Builder addAllVersion(
           java.lang.Iterable<? extends java.lang.Integer> values) {
@@ -4329,13 +6882,16 @@
         return this;
       }
+      /**
+       * <code>repeated int32 version = 1 [packed = true];</code>
+       */
       public Builder clearVersion() {
-        version_ = java.util.Collections.emptyList();;
+        version_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000001);
         
         return this;
       }
-      
+
       // repeated sint64 timestamp = 2 [packed = true];
-      private java.util.List<java.lang.Long> timestamp_ = java.util.Collections.emptyList();;
+      private java.util.List<java.lang.Long> timestamp_ = java.util.Collections.emptyList();
       private void ensureTimestampIsMutable() {
         if (!((bitField0_ & 0x00000002) == 0x00000002)) {
@@ -4344,14 +6900,42 @@
          }
       }
+      /**
+       * <code>repeated sint64 timestamp = 2 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public java.util.List<java.lang.Long>
           getTimestampList() {
         return java.util.Collections.unmodifiableList(timestamp_);
       }
+      /**
+       * <code>repeated sint64 timestamp = 2 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public int getTimestampCount() {
         return timestamp_.size();
       }
+      /**
+       * <code>repeated sint64 timestamp = 2 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public long getTimestamp(int index) {
         return timestamp_.get(index);
       }
+      /**
+       * <code>repeated sint64 timestamp = 2 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder setTimestamp(
           int index, long value) {
@@ -4361,4 +6945,11 @@
         return this;
       }
+      /**
+       * <code>repeated sint64 timestamp = 2 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder addTimestamp(long value) {
         ensureTimestampIsMutable();
@@ -4367,4 +6958,11 @@
         return this;
       }
+      /**
+       * <code>repeated sint64 timestamp = 2 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder addAllTimestamp(
           java.lang.Iterable<? extends java.lang.Long> values) {
@@ -4374,13 +6972,20 @@
         return this;
       }
+      /**
+       * <code>repeated sint64 timestamp = 2 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder clearTimestamp() {
-        timestamp_ = java.util.Collections.emptyList();;
+        timestamp_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000002);
         
         return this;
       }
-      
+
       // repeated sint64 changeset = 3 [packed = true];
-      private java.util.List<java.lang.Long> changeset_ = java.util.Collections.emptyList();;
+      private java.util.List<java.lang.Long> changeset_ = java.util.Collections.emptyList();
       private void ensureChangesetIsMutable() {
         if (!((bitField0_ & 0x00000004) == 0x00000004)) {
@@ -4389,14 +6994,42 @@
          }
       }
+      /**
+       * <code>repeated sint64 changeset = 3 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public java.util.List<java.lang.Long>
           getChangesetList() {
         return java.util.Collections.unmodifiableList(changeset_);
       }
+      /**
+       * <code>repeated sint64 changeset = 3 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public int getChangesetCount() {
         return changeset_.size();
       }
+      /**
+       * <code>repeated sint64 changeset = 3 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public long getChangeset(int index) {
         return changeset_.get(index);
       }
+      /**
+       * <code>repeated sint64 changeset = 3 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder setChangeset(
           int index, long value) {
@@ -4406,4 +7039,11 @@
         return this;
       }
+      /**
+       * <code>repeated sint64 changeset = 3 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder addChangeset(long value) {
         ensureChangesetIsMutable();
@@ -4412,4 +7052,11 @@
         return this;
       }
+      /**
+       * <code>repeated sint64 changeset = 3 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder addAllChangeset(
           java.lang.Iterable<? extends java.lang.Long> values) {
@@ -4419,13 +7066,20 @@
         return this;
       }
+      /**
+       * <code>repeated sint64 changeset = 3 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder clearChangeset() {
-        changeset_ = java.util.Collections.emptyList();;
+        changeset_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000004);
         
         return this;
       }
-      
+
       // repeated sint32 uid = 4 [packed = true];
-      private java.util.List<java.lang.Integer> uid_ = java.util.Collections.emptyList();;
+      private java.util.List<java.lang.Integer> uid_ = java.util.Collections.emptyList();
       private void ensureUidIsMutable() {
         if (!((bitField0_ & 0x00000008) == 0x00000008)) {
@@ -4434,14 +7088,42 @@
          }
       }
+      /**
+       * <code>repeated sint32 uid = 4 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public java.util.List<java.lang.Integer>
           getUidList() {
         return java.util.Collections.unmodifiableList(uid_);
       }
+      /**
+       * <code>repeated sint32 uid = 4 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public int getUidCount() {
         return uid_.size();
       }
+      /**
+       * <code>repeated sint32 uid = 4 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public int getUid(int index) {
         return uid_.get(index);
       }
+      /**
+       * <code>repeated sint32 uid = 4 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder setUid(
           int index, int value) {
@@ -4451,4 +7133,11 @@
         return this;
       }
+      /**
+       * <code>repeated sint32 uid = 4 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder addUid(int value) {
         ensureUidIsMutable();
@@ -4457,4 +7146,11 @@
         return this;
       }
+      /**
+       * <code>repeated sint32 uid = 4 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder addAllUid(
           java.lang.Iterable<? extends java.lang.Integer> values) {
@@ -4464,13 +7160,20 @@
         return this;
       }
+      /**
+       * <code>repeated sint32 uid = 4 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder clearUid() {
-        uid_ = java.util.Collections.emptyList();;
+        uid_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000008);
         
         return this;
       }
-      
+
       // repeated sint32 user_sid = 5 [packed = true];
-      private java.util.List<java.lang.Integer> userSid_ = java.util.Collections.emptyList();;
+      private java.util.List<java.lang.Integer> userSid_ = java.util.Collections.emptyList();
       private void ensureUserSidIsMutable() {
         if (!((bitField0_ & 0x00000010) == 0x00000010)) {
@@ -4479,14 +7182,42 @@
          }
       }
+      /**
+       * <code>repeated sint32 user_sid = 5 [packed = true];</code>
+       *
+       * <pre>
+       * String IDs for usernames. DELTA coded
+       * </pre>
+       */
       public java.util.List<java.lang.Integer>
           getUserSidList() {
         return java.util.Collections.unmodifiableList(userSid_);
       }
+      /**
+       * <code>repeated sint32 user_sid = 5 [packed = true];</code>
+       *
+       * <pre>
+       * String IDs for usernames. DELTA coded
+       * </pre>
+       */
       public int getUserSidCount() {
         return userSid_.size();
       }
+      /**
+       * <code>repeated sint32 user_sid = 5 [packed = true];</code>
+       *
+       * <pre>
+       * String IDs for usernames. DELTA coded
+       * </pre>
+       */
       public int getUserSid(int index) {
         return userSid_.get(index);
       }
+      /**
+       * <code>repeated sint32 user_sid = 5 [packed = true];</code>
+       *
+       * <pre>
+       * String IDs for usernames. DELTA coded
+       * </pre>
+       */
       public Builder setUserSid(
           int index, int value) {
@@ -4496,4 +7227,11 @@
         return this;
       }
+      /**
+       * <code>repeated sint32 user_sid = 5 [packed = true];</code>
+       *
+       * <pre>
+       * String IDs for usernames. DELTA coded
+       * </pre>
+       */
       public Builder addUserSid(int value) {
         ensureUserSidIsMutable();
@@ -4502,4 +7240,11 @@
         return this;
       }
+      /**
+       * <code>repeated sint32 user_sid = 5 [packed = true];</code>
+       *
+       * <pre>
+       * String IDs for usernames. DELTA coded
+       * </pre>
+       */
       public Builder addAllUserSid(
           java.lang.Iterable<? extends java.lang.Integer> values) {
@@ -4509,267 +7254,248 @@
         return this;
       }
+      /**
+       * <code>repeated sint32 user_sid = 5 [packed = true];</code>
+       *
+       * <pre>
+       * String IDs for usernames. DELTA coded
+       * </pre>
+       */
       public Builder clearUserSid() {
-        userSid_ = java.util.Collections.emptyList();;
+        userSid_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000010);
         
         return this;
       }
-      
+
+      // repeated bool visible = 6 [packed = true];
+      private java.util.List<java.lang.Boolean> visible_ = java.util.Collections.emptyList();
+      private void ensureVisibleIsMutable() {
+        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
+          visible_ = new java.util.ArrayList<java.lang.Boolean>(visible_);
+          bitField0_ |= 0x00000020;
+         }
+      }
+      /**
+       * <code>repeated bool visible = 6 [packed = true];</code>
+       *
+       * <pre>
+       * The visible flag is used to store history information. It indicates that
+       * the current object version has been created by a delete operation on the
+       * OSM API.
+       * When a writer sets this flag, it MUST add a required_features tag with
+       * value "HistoricalInformation" to the HeaderBlock.
+       * If this flag is not available for some object it MUST be assumed to be
+       * true if the file has the required_features tag "HistoricalInformation"
+       * set.
+       * </pre>
+       */
+      public java.util.List<java.lang.Boolean>
+          getVisibleList() {
+        return java.util.Collections.unmodifiableList(visible_);
+      }
+      /**
+       * <code>repeated bool visible = 6 [packed = true];</code>
+       *
+       * <pre>
+       * The visible flag is used to store history information. It indicates that
+       * the current object version has been created by a delete operation on the
+       * OSM API.
+       * When a writer sets this flag, it MUST add a required_features tag with
+       * value "HistoricalInformation" to the HeaderBlock.
+       * If this flag is not available for some object it MUST be assumed to be
+       * true if the file has the required_features tag "HistoricalInformation"
+       * set.
+       * </pre>
+       */
+      public int getVisibleCount() {
+        return visible_.size();
+      }
+      /**
+       * <code>repeated bool visible = 6 [packed = true];</code>
+       *
+       * <pre>
+       * The visible flag is used to store history information. It indicates that
+       * the current object version has been created by a delete operation on the
+       * OSM API.
+       * When a writer sets this flag, it MUST add a required_features tag with
+       * value "HistoricalInformation" to the HeaderBlock.
+       * If this flag is not available for some object it MUST be assumed to be
+       * true if the file has the required_features tag "HistoricalInformation"
+       * set.
+       * </pre>
+       */
+      public boolean getVisible(int index) {
+        return visible_.get(index);
+      }
+      /**
+       * <code>repeated bool visible = 6 [packed = true];</code>
+       *
+       * <pre>
+       * The visible flag is used to store history information. It indicates that
+       * the current object version has been created by a delete operation on the
+       * OSM API.
+       * When a writer sets this flag, it MUST add a required_features tag with
+       * value "HistoricalInformation" to the HeaderBlock.
+       * If this flag is not available for some object it MUST be assumed to be
+       * true if the file has the required_features tag "HistoricalInformation"
+       * set.
+       * </pre>
+       */
+      public Builder setVisible(
+          int index, boolean value) {
+        ensureVisibleIsMutable();
+        visible_.set(index, value);
+        
+        return this;
+      }
+      /**
+       * <code>repeated bool visible = 6 [packed = true];</code>
+       *
+       * <pre>
+       * The visible flag is used to store history information. It indicates that
+       * the current object version has been created by a delete operation on the
+       * OSM API.
+       * When a writer sets this flag, it MUST add a required_features tag with
+       * value "HistoricalInformation" to the HeaderBlock.
+       * If this flag is not available for some object it MUST be assumed to be
+       * true if the file has the required_features tag "HistoricalInformation"
+       * set.
+       * </pre>
+       */
+      public Builder addVisible(boolean value) {
+        ensureVisibleIsMutable();
+        visible_.add(value);
+        
+        return this;
+      }
+      /**
+       * <code>repeated bool visible = 6 [packed = true];</code>
+       *
+       * <pre>
+       * The visible flag is used to store history information. It indicates that
+       * the current object version has been created by a delete operation on the
+       * OSM API.
+       * When a writer sets this flag, it MUST add a required_features tag with
+       * value "HistoricalInformation" to the HeaderBlock.
+       * If this flag is not available for some object it MUST be assumed to be
+       * true if the file has the required_features tag "HistoricalInformation"
+       * set.
+       * </pre>
+       */
+      public Builder addAllVisible(
+          java.lang.Iterable<? extends java.lang.Boolean> values) {
+        ensureVisibleIsMutable();
+        super.addAll(values, visible_);
+        
+        return this;
+      }
+      /**
+       * <code>repeated bool visible = 6 [packed = true];</code>
+       *
+       * <pre>
+       * The visible flag is used to store history information. It indicates that
+       * the current object version has been created by a delete operation on the
+       * OSM API.
+       * When a writer sets this flag, it MUST add a required_features tag with
+       * value "HistoricalInformation" to the HeaderBlock.
+       * If this flag is not available for some object it MUST be assumed to be
+       * true if the file has the required_features tag "HistoricalInformation"
+       * set.
+       * </pre>
+       */
+      public Builder clearVisible() {
+        visible_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000020);
+        
+        return this;
+      }
+
       // @@protoc_insertion_point(builder_scope:OSMPBF.DenseInfo)
     }
-    
+
     static {
       defaultInstance = new DenseInfo(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:OSMPBF.DenseInfo)
   }
-  
+
   public interface ChangeSetOrBuilder
       extends com.google.protobuf.MessageLiteOrBuilder {
-    
+
     // required int64 id = 1;
+    /**
+     * <code>required int64 id = 1;</code>
+     *
+     * <pre>
+     *   
+     *   // Parallel arrays.
+     *   repeated uint32 keys = 2 [packed = true]; // String IDs.
+     *   repeated uint32 vals = 3 [packed = true]; // String IDs.
+     *
+     *   optional Info info = 4;
+     * </pre>
+     */
     boolean hasId();
+    /**
+     * <code>required int64 id = 1;</code>
+     *
+     * <pre>
+     *   
+     *   // Parallel arrays.
+     *   repeated uint32 keys = 2 [packed = true]; // String IDs.
+     *   repeated uint32 vals = 3 [packed = true]; // String IDs.
+     *
+     *   optional Info info = 4;
+     * </pre>
+     */
     long getId();
   }
+  /**
+   * Protobuf type {@code OSMPBF.ChangeSet}
+   *
+   * <pre>
+   * THIS IS STUB DESIGN FOR CHANGESETS. NOT USED RIGHT NOW.
+   * TODO:    REMOVE THIS?
+   * </pre>
+   */
   public static final class ChangeSet extends
       com.google.protobuf.GeneratedMessageLite
       implements ChangeSetOrBuilder {
     // Use ChangeSet.newBuilder() to construct.
-    private ChangeSet(Builder builder) {
+    private ChangeSet(com.google.protobuf.GeneratedMessageLite.Builder builder) {
       super(builder);
+
     }
     private ChangeSet(boolean noInit) {}
-    
+
     private static final ChangeSet defaultInstance;
     public static ChangeSet getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public ChangeSet getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
-    private int bitField0_;
-    // required int64 id = 1;
-    public static final int ID_FIELD_NUMBER = 1;
-    private long id_;
-    public boolean hasId() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    public long getId() {
-      return id_;
-    }
-    
-    private void initFields() {
-      id_ = 0L;
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
-      
-      if (!hasId()) {
-        memoizedIsInitialized = 0;
-        return false;
-      }
-      memoizedIsInitialized = 1;
-      return true;
-    }
-    
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeInt64(1, id_);
-      }
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-    
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt64Size(1, id_);
-      }
-      memoizedSerializedSize = size;
-      return size;
-    }
-    
-    private static final long serialVersionUID = 0L;
-    @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-    
-    public static crosby.binary.Osmformat.ChangeSet parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static crosby.binary.Osmformat.ChangeSet parseFrom(
-        com.google.protobuf.ByteString data,
+
+    private ChangeSet(
+        com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static crosby.binary.Osmformat.ChangeSet parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static crosby.binary.Osmformat.ChangeSet parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static crosby.binary.Osmformat.ChangeSet parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static crosby.binary.Osmformat.ChangeSet parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    public static crosby.binary.Osmformat.ChangeSet parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
-    }
-    public static crosby.binary.Osmformat.ChangeSet 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 crosby.binary.Osmformat.ChangeSet parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static crosby.binary.Osmformat.ChangeSet 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(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(crosby.binary.Osmformat.ChangeSet prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-    
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageLite.Builder<
-          crosby.binary.Osmformat.ChangeSet, Builder>
-        implements crosby.binary.Osmformat.ChangeSetOrBuilder {
-      // Construct using crosby.binary.Osmformat.ChangeSet.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-      
-      private void maybeForceBuilderInitialization() {
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-      
-      public Builder clear() {
-        super.clear();
-        id_ = 0L;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        return this;
-      }
-      
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-      
-      public crosby.binary.Osmformat.ChangeSet getDefaultInstanceForType() {
-        return crosby.binary.Osmformat.ChangeSet.getDefaultInstance();
-      }
-      
-      public crosby.binary.Osmformat.ChangeSet build() {
-        crosby.binary.Osmformat.ChangeSet result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-      
-      private crosby.binary.Osmformat.ChangeSet buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        crosby.binary.Osmformat.ChangeSet result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
-      public crosby.binary.Osmformat.ChangeSet buildPartial() {
-        crosby.binary.Osmformat.ChangeSet result = new crosby.binary.Osmformat.ChangeSet(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.id_ = id_;
-        result.bitField0_ = to_bitField0_;
-        return result;
-      }
-      
-      public Builder mergeFrom(crosby.binary.Osmformat.ChangeSet other) {
-        if (other == crosby.binary.Osmformat.ChangeSet.getDefaultInstance()) return this;
-        if (other.hasId()) {
-          setId(other.getId());
-        }
-        return this;
-      }
-      
-      public final boolean isInitialized() {
-        if (!hasId()) {
-          
-          return false;
-        }
-        return true;
-      }
-      
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        while (true) {
+      initFields();
+      int mutable_bitField0_ = 0;
+      try {
+        boolean done = false;
+        while (!done) {
           int tag = input.readTag();
           switch (tag) {
             case 0:
-              
-              return this;
+              done = true;
+              break;
             default: {
-              if (!parseUnknownField(input, extensionRegistry, tag)) {
-                
-                return this;
+              if (!parseUnknownField(input,
+                                     extensionRegistry, tag)) {
+                done = true;
               }
               break;
@@ -4782,16 +7508,305 @@
           }
         }
-      }
-      
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        makeExtensionsImmutable();
+      }
+    }
+    public static com.google.protobuf.Parser<ChangeSet> PARSER =
+        new com.google.protobuf.AbstractParser<ChangeSet>() {
+      public ChangeSet parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ChangeSet(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ChangeSet> getParserForType() {
+      return PARSER;
+    }
+
+    private int bitField0_;
+    // required int64 id = 1;
+    public static final int ID_FIELD_NUMBER = 1;
+    private long id_;
+    /**
+     * <code>required int64 id = 1;</code>
+     *
+     * <pre>
+     *   
+     *   // Parallel arrays.
+     *   repeated uint32 keys = 2 [packed = true]; // String IDs.
+     *   repeated uint32 vals = 3 [packed = true]; // String IDs.
+     *
+     *   optional Info info = 4;
+     * </pre>
+     */
+    public boolean hasId() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>required int64 id = 1;</code>
+     *
+     * <pre>
+     *   
+     *   // Parallel arrays.
+     *   repeated uint32 keys = 2 [packed = true]; // String IDs.
+     *   repeated uint32 vals = 3 [packed = true]; // String IDs.
+     *
+     *   optional Info info = 4;
+     * </pre>
+     */
+    public long getId() {
+      return id_;
+    }
+
+    private void initFields() {
+      id_ = 0L;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+
+      if (!hasId()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeInt64(1, id_);
+      }
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(1, id_);
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+
+    public static crosby.binary.Osmformat.ChangeSet parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static crosby.binary.Osmformat.ChangeSet parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static crosby.binary.Osmformat.ChangeSet parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static crosby.binary.Osmformat.ChangeSet parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static crosby.binary.Osmformat.ChangeSet parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static crosby.binary.Osmformat.ChangeSet parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static crosby.binary.Osmformat.ChangeSet parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static crosby.binary.Osmformat.ChangeSet parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static crosby.binary.Osmformat.ChangeSet parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static crosby.binary.Osmformat.ChangeSet parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Osmformat.ChangeSet prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+
+    /**
+     * Protobuf type {@code OSMPBF.ChangeSet}
+     *
+     * <pre>
+     * THIS IS STUB DESIGN FOR CHANGESETS. NOT USED RIGHT NOW.
+     * TODO:    REMOVE THIS?
+     * </pre>
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Osmformat.ChangeSet, Builder>
+        implements crosby.binary.Osmformat.ChangeSetOrBuilder {
+      // Construct using crosby.binary.Osmformat.ChangeSet.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        id_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public crosby.binary.Osmformat.ChangeSet getDefaultInstanceForType() {
+        return crosby.binary.Osmformat.ChangeSet.getDefaultInstance();
+      }
+
+      public crosby.binary.Osmformat.ChangeSet build() {
+        crosby.binary.Osmformat.ChangeSet result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public crosby.binary.Osmformat.ChangeSet buildPartial() {
+        crosby.binary.Osmformat.ChangeSet result = new crosby.binary.Osmformat.ChangeSet(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.id_ = id_;
+        result.bitField0_ = to_bitField0_;
+        return result;
+      }
+
+      public Builder mergeFrom(crosby.binary.Osmformat.ChangeSet other) {
+        if (other == crosby.binary.Osmformat.ChangeSet.getDefaultInstance()) return this;
+        if (other.hasId()) {
+          setId(other.getId());
+        }
+        return this;
+      }
+
+      public final boolean isInitialized() {
+        if (!hasId()) {
+          
+          return false;
+        }
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        crosby.binary.Osmformat.ChangeSet parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (crosby.binary.Osmformat.ChangeSet) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
       private int bitField0_;
-      
+
       // required int64 id = 1;
       private long id_ ;
+      /**
+       * <code>required int64 id = 1;</code>
+       *
+       * <pre>
+       *   
+       *   // Parallel arrays.
+       *   repeated uint32 keys = 2 [packed = true]; // String IDs.
+       *   repeated uint32 vals = 3 [packed = true]; // String IDs.
+       *
+       *   optional Info info = 4;
+       * </pre>
+       */
       public boolean hasId() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
+      /**
+       * <code>required int64 id = 1;</code>
+       *
+       * <pre>
+       *   
+       *   // Parallel arrays.
+       *   repeated uint32 keys = 2 [packed = true]; // String IDs.
+       *   repeated uint32 vals = 3 [packed = true]; // String IDs.
+       *
+       *   optional Info info = 4;
+       * </pre>
+       */
       public long getId() {
         return id_;
       }
+      /**
+       * <code>required int64 id = 1;</code>
+       *
+       * <pre>
+       *   
+       *   // Parallel arrays.
+       *   repeated uint32 keys = 2 [packed = true]; // String IDs.
+       *   repeated uint32 vals = 3 [packed = true]; // String IDs.
+       *
+       *   optional Info info = 4;
+       * </pre>
+       */
       public Builder setId(long value) {
         bitField0_ |= 0x00000001;
@@ -4800,4 +7815,16 @@
         return this;
       }
+      /**
+       * <code>required int64 id = 1;</code>
+       *
+       * <pre>
+       *   
+       *   // Parallel arrays.
+       *   repeated uint32 keys = 2 [packed = true]; // String IDs.
+       *   repeated uint32 vals = 3 [packed = true]; // String IDs.
+       *
+       *   optional Info info = 4;
+       * </pre>
+       */
       public Builder clearId() {
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -4806,138 +7833,413 @@
         return this;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:OSMPBF.ChangeSet)
     }
-    
+
     static {
       defaultInstance = new ChangeSet(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:OSMPBF.ChangeSet)
   }
-  
+
   public interface NodeOrBuilder
       extends com.google.protobuf.MessageLiteOrBuilder {
-    
+
     // required sint64 id = 1;
+    /**
+     * <code>required sint64 id = 1;</code>
+     */
     boolean hasId();
+    /**
+     * <code>required sint64 id = 1;</code>
+     */
     long getId();
-    
+
     // repeated uint32 keys = 2 [packed = true];
+    /**
+     * <code>repeated uint32 keys = 2 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays.
+     * </pre>
+     */
     java.util.List<java.lang.Integer> getKeysList();
+    /**
+     * <code>repeated uint32 keys = 2 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays.
+     * </pre>
+     */
     int getKeysCount();
+    /**
+     * <code>repeated uint32 keys = 2 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays.
+     * </pre>
+     */
     int getKeys(int index);
-    
+
     // repeated uint32 vals = 3 [packed = true];
+    /**
+     * <code>repeated uint32 vals = 3 [packed = true];</code>
+     *
+     * <pre>
+     * String IDs.
+     * </pre>
+     */
     java.util.List<java.lang.Integer> getValsList();
+    /**
+     * <code>repeated uint32 vals = 3 [packed = true];</code>
+     *
+     * <pre>
+     * String IDs.
+     * </pre>
+     */
     int getValsCount();
+    /**
+     * <code>repeated uint32 vals = 3 [packed = true];</code>
+     *
+     * <pre>
+     * String IDs.
+     * </pre>
+     */
     int getVals(int index);
-    
+
     // optional .OSMPBF.Info info = 4;
+    /**
+     * <code>optional .OSMPBF.Info info = 4;</code>
+     *
+     * <pre>
+     * May be omitted in omitmeta
+     * </pre>
+     */
     boolean hasInfo();
+    /**
+     * <code>optional .OSMPBF.Info info = 4;</code>
+     *
+     * <pre>
+     * May be omitted in omitmeta
+     * </pre>
+     */
     crosby.binary.Osmformat.Info getInfo();
-    
+
     // required sint64 lat = 8;
+    /**
+     * <code>required sint64 lat = 8;</code>
+     */
     boolean hasLat();
+    /**
+     * <code>required sint64 lat = 8;</code>
+     */
     long getLat();
-    
+
     // required sint64 lon = 9;
+    /**
+     * <code>required sint64 lon = 9;</code>
+     */
     boolean hasLon();
+    /**
+     * <code>required sint64 lon = 9;</code>
+     */
     long getLon();
   }
+  /**
+   * Protobuf type {@code OSMPBF.Node}
+   */
   public static final class Node extends
       com.google.protobuf.GeneratedMessageLite
       implements NodeOrBuilder {
     // Use Node.newBuilder() to construct.
-    private Node(Builder builder) {
+    private Node(com.google.protobuf.GeneratedMessageLite.Builder builder) {
       super(builder);
+
     }
     private Node(boolean noInit) {}
-    
+
     private static final Node defaultInstance;
     public static Node getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public Node getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
+
+    private Node(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              id_ = input.readSInt64();
+              break;
+            }
+            case 16: {
+              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+                keys_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              keys_.add(input.readUInt32());
+              break;
+            }
+            case 18: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) {
+                keys_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              while (input.getBytesUntilLimit() > 0) {
+                keys_.add(input.readUInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 24: {
+              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+                vals_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              vals_.add(input.readUInt32());
+              break;
+            }
+            case 26: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004) && input.getBytesUntilLimit() > 0) {
+                vals_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              while (input.getBytesUntilLimit() > 0) {
+                vals_.add(input.readUInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 34: {
+              crosby.binary.Osmformat.Info.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000002) == 0x00000002)) {
+                subBuilder = info_.toBuilder();
+              }
+              info_ = input.readMessage(crosby.binary.Osmformat.Info.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(info_);
+                info_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000002;
+              break;
+            }
+            case 64: {
+              bitField0_ |= 0x00000004;
+              lat_ = input.readSInt64();
+              break;
+            }
+            case 72: {
+              bitField0_ |= 0x00000008;
+              lon_ = input.readSInt64();
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+          keys_ = java.util.Collections.unmodifiableList(keys_);
+        }
+        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+          vals_ = java.util.Collections.unmodifiableList(vals_);
+        }
+        makeExtensionsImmutable();
+      }
+    }
+    public static com.google.protobuf.Parser<Node> PARSER =
+        new com.google.protobuf.AbstractParser<Node>() {
+      public Node parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Node(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Node> getParserForType() {
+      return PARSER;
+    }
+
     private int bitField0_;
     // required sint64 id = 1;
     public static final int ID_FIELD_NUMBER = 1;
     private long id_;
+    /**
+     * <code>required sint64 id = 1;</code>
+     */
     public boolean hasId() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
+    /**
+     * <code>required sint64 id = 1;</code>
+     */
     public long getId() {
       return id_;
     }
-    
+
     // repeated uint32 keys = 2 [packed = true];
     public static final int KEYS_FIELD_NUMBER = 2;
     private java.util.List<java.lang.Integer> keys_;
+    /**
+     * <code>repeated uint32 keys = 2 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays.
+     * </pre>
+     */
     public java.util.List<java.lang.Integer>
         getKeysList() {
       return keys_;
     }
+    /**
+     * <code>repeated uint32 keys = 2 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays.
+     * </pre>
+     */
     public int getKeysCount() {
       return keys_.size();
     }
+    /**
+     * <code>repeated uint32 keys = 2 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays.
+     * </pre>
+     */
     public int getKeys(int index) {
       return keys_.get(index);
     }
     private int keysMemoizedSerializedSize = -1;
-    
+
     // repeated uint32 vals = 3 [packed = true];
     public static final int VALS_FIELD_NUMBER = 3;
     private java.util.List<java.lang.Integer> vals_;
+    /**
+     * <code>repeated uint32 vals = 3 [packed = true];</code>
+     *
+     * <pre>
+     * String IDs.
+     * </pre>
+     */
     public java.util.List<java.lang.Integer>
         getValsList() {
       return vals_;
     }
+    /**
+     * <code>repeated uint32 vals = 3 [packed = true];</code>
+     *
+     * <pre>
+     * String IDs.
+     * </pre>
+     */
     public int getValsCount() {
       return vals_.size();
     }
+    /**
+     * <code>repeated uint32 vals = 3 [packed = true];</code>
+     *
+     * <pre>
+     * String IDs.
+     * </pre>
+     */
     public int getVals(int index) {
       return vals_.get(index);
     }
     private int valsMemoizedSerializedSize = -1;
-    
+
     // optional .OSMPBF.Info info = 4;
     public static final int INFO_FIELD_NUMBER = 4;
     private crosby.binary.Osmformat.Info info_;
+    /**
+     * <code>optional .OSMPBF.Info info = 4;</code>
+     *
+     * <pre>
+     * May be omitted in omitmeta
+     * </pre>
+     */
     public boolean hasInfo() {
       return ((bitField0_ & 0x00000002) == 0x00000002);
     }
+    /**
+     * <code>optional .OSMPBF.Info info = 4;</code>
+     *
+     * <pre>
+     * May be omitted in omitmeta
+     * </pre>
+     */
     public crosby.binary.Osmformat.Info getInfo() {
       return info_;
     }
-    
+
     // required sint64 lat = 8;
     public static final int LAT_FIELD_NUMBER = 8;
     private long lat_;
+    /**
+     * <code>required sint64 lat = 8;</code>
+     */
     public boolean hasLat() {
       return ((bitField0_ & 0x00000004) == 0x00000004);
     }
+    /**
+     * <code>required sint64 lat = 8;</code>
+     */
     public long getLat() {
       return lat_;
     }
-    
+
     // required sint64 lon = 9;
     public static final int LON_FIELD_NUMBER = 9;
     private long lon_;
+    /**
+     * <code>required sint64 lon = 9;</code>
+     */
     public boolean hasLon() {
       return ((bitField0_ & 0x00000008) == 0x00000008);
     }
+    /**
+     * <code>required sint64 lon = 9;</code>
+     */
     public long getLon() {
       return lon_;
     }
-    
+
     private void initFields() {
       id_ = 0L;
-      keys_ = java.util.Collections.emptyList();;
-      vals_ = java.util.Collections.emptyList();;
+      keys_ = java.util.Collections.emptyList();
+      vals_ = java.util.Collections.emptyList();
       info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
       lat_ = 0L;
@@ -4948,5 +8250,5 @@
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
-      
+
       if (!hasId()) {
         memoizedIsInitialized = 0;
@@ -4964,5 +8266,5 @@
       return true;
     }
-    
+
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
@@ -4995,10 +8297,10 @@
       }
     }
-    
+
     private int memoizedSerializedSize = -1;
     public int getSerializedSize() {
       int size = memoizedSerializedSize;
       if (size != -1) return size;
-    
+
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
@@ -5049,5 +8351,5 @@
       return size;
     }
-    
+
     private static final long serialVersionUID = 0L;
     @java.lang.Override
@@ -5056,9 +8358,9 @@
       return super.writeReplace();
     }
-    
+
     public static crosby.binary.Osmformat.Node parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static crosby.binary.Osmformat.Node parseFrom(
@@ -5066,10 +8368,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static crosby.binary.Osmformat.Node parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static crosby.binary.Osmformat.Node parseFrom(
@@ -5077,10 +8378,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static crosby.binary.Osmformat.Node parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static crosby.binary.Osmformat.Node parseFrom(
@@ -5088,15 +8388,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(input, extensionRegistry);
     }
     public static crosby.binary.Osmformat.Node parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input);
     }
     public static crosby.binary.Osmformat.Node parseDelimitedFrom(
@@ -5104,15 +8398,10 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
     public static crosby.binary.Osmformat.Node parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static crosby.binary.Osmformat.Node parseFrom(
@@ -5120,8 +8409,7 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
@@ -5130,5 +8418,8 @@
     }
     public Builder toBuilder() { return newBuilder(this); }
-    
+
+    /**
+     * Protobuf type {@code OSMPBF.Node}
+     */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageLite.Builder<
@@ -5139,5 +8430,5 @@
         maybeForceBuilderInitialization();
       }
-      
+
       private void maybeForceBuilderInitialization() {
       }
@@ -5145,12 +8436,12 @@
         return new Builder();
       }
-      
+
       public Builder clear() {
         super.clear();
         id_ = 0L;
         bitField0_ = (bitField0_ & ~0x00000001);
-        keys_ = java.util.Collections.emptyList();;
+        keys_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000002);
-        vals_ = java.util.Collections.emptyList();;
+        vals_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000004);
         info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
@@ -5162,13 +8453,13 @@
         return this;
       }
-      
+
       public Builder clone() {
         return create().mergeFrom(buildPartial());
       }
-      
+
       public crosby.binary.Osmformat.Node getDefaultInstanceForType() {
         return crosby.binary.Osmformat.Node.getDefaultInstance();
       }
-      
+
       public crosby.binary.Osmformat.Node build() {
         crosby.binary.Osmformat.Node result = buildPartial();
@@ -5178,15 +8469,5 @@
         return result;
       }
-      
-      private crosby.binary.Osmformat.Node buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        crosby.binary.Osmformat.Node result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
+
       public crosby.binary.Osmformat.Node buildPartial() {
         crosby.binary.Osmformat.Node result = new crosby.binary.Osmformat.Node(this);
@@ -5222,5 +8503,5 @@
         return result;
       }
-      
+
       public Builder mergeFrom(crosby.binary.Osmformat.Node other) {
         if (other == crosby.binary.Osmformat.Node.getDefaultInstance()) return this;
@@ -5259,5 +8540,5 @@
         return this;
       }
-      
+
       public final boolean isInitialized() {
         if (!hasId()) {
@@ -5275,88 +8556,41 @@
         return true;
       }
-      
+
       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: {
-              bitField0_ |= 0x00000001;
-              id_ = input.readSInt64();
-              break;
-            }
-            case 16: {
-              ensureKeysIsMutable();
-              keys_.add(input.readUInt32());
-              break;
-            }
-            case 18: {
-              int length = input.readRawVarint32();
-              int limit = input.pushLimit(length);
-              while (input.getBytesUntilLimit() > 0) {
-                addKeys(input.readUInt32());
-              }
-              input.popLimit(limit);
-              break;
-            }
-            case 24: {
-              ensureValsIsMutable();
-              vals_.add(input.readUInt32());
-              break;
-            }
-            case 26: {
-              int length = input.readRawVarint32();
-              int limit = input.pushLimit(length);
-              while (input.getBytesUntilLimit() > 0) {
-                addVals(input.readUInt32());
-              }
-              input.popLimit(limit);
-              break;
-            }
-            case 34: {
-              crosby.binary.Osmformat.Info.Builder subBuilder = crosby.binary.Osmformat.Info.newBuilder();
-              if (hasInfo()) {
-                subBuilder.mergeFrom(getInfo());
-              }
-              input.readMessage(subBuilder, extensionRegistry);
-              setInfo(subBuilder.buildPartial());
-              break;
-            }
-            case 64: {
-              bitField0_ |= 0x00000010;
-              lat_ = input.readSInt64();
-              break;
-            }
-            case 72: {
-              bitField0_ |= 0x00000020;
-              lon_ = input.readSInt64();
-              break;
-            }
+        crosby.binary.Osmformat.Node parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (crosby.binary.Osmformat.Node) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
         }
-      }
-      
+        return this;
+      }
       private int bitField0_;
-      
+
       // required sint64 id = 1;
       private long id_ ;
+      /**
+       * <code>required sint64 id = 1;</code>
+       */
       public boolean hasId() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
+      /**
+       * <code>required sint64 id = 1;</code>
+       */
       public long getId() {
         return id_;
       }
+      /**
+       * <code>required sint64 id = 1;</code>
+       */
       public Builder setId(long value) {
         bitField0_ |= 0x00000001;
@@ -5365,4 +8599,7 @@
         return this;
       }
+      /**
+       * <code>required sint64 id = 1;</code>
+       */
       public Builder clearId() {
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -5371,7 +8608,7 @@
         return this;
       }
-      
+
       // repeated uint32 keys = 2 [packed = true];
-      private java.util.List<java.lang.Integer> keys_ = java.util.Collections.emptyList();;
+      private java.util.List<java.lang.Integer> keys_ = java.util.Collections.emptyList();
       private void ensureKeysIsMutable() {
         if (!((bitField0_ & 0x00000002) == 0x00000002)) {
@@ -5380,14 +8617,42 @@
          }
       }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
       public java.util.List<java.lang.Integer>
           getKeysList() {
         return java.util.Collections.unmodifiableList(keys_);
       }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
       public int getKeysCount() {
         return keys_.size();
       }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
       public int getKeys(int index) {
         return keys_.get(index);
       }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
       public Builder setKeys(
           int index, int value) {
@@ -5397,4 +8662,11 @@
         return this;
       }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
       public Builder addKeys(int value) {
         ensureKeysIsMutable();
@@ -5403,4 +8675,11 @@
         return this;
       }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
       public Builder addAllKeys(
           java.lang.Iterable<? extends java.lang.Integer> values) {
@@ -5410,13 +8689,20 @@
         return this;
       }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
       public Builder clearKeys() {
-        keys_ = java.util.Collections.emptyList();;
+        keys_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000002);
         
         return this;
       }
-      
+
       // repeated uint32 vals = 3 [packed = true];
-      private java.util.List<java.lang.Integer> vals_ = java.util.Collections.emptyList();;
+      private java.util.List<java.lang.Integer> vals_ = java.util.Collections.emptyList();
       private void ensureValsIsMutable() {
         if (!((bitField0_ & 0x00000004) == 0x00000004)) {
@@ -5425,14 +8711,42 @@
          }
       }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       *
+       * <pre>
+       * String IDs.
+       * </pre>
+       */
       public java.util.List<java.lang.Integer>
           getValsList() {
         return java.util.Collections.unmodifiableList(vals_);
       }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       *
+       * <pre>
+       * String IDs.
+       * </pre>
+       */
       public int getValsCount() {
         return vals_.size();
       }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       *
+       * <pre>
+       * String IDs.
+       * </pre>
+       */
       public int getVals(int index) {
         return vals_.get(index);
       }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       *
+       * <pre>
+       * String IDs.
+       * </pre>
+       */
       public Builder setVals(
           int index, int value) {
@@ -5442,4 +8756,11 @@
         return this;
       }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       *
+       * <pre>
+       * String IDs.
+       * </pre>
+       */
       public Builder addVals(int value) {
         ensureValsIsMutable();
@@ -5448,4 +8769,11 @@
         return this;
       }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       *
+       * <pre>
+       * String IDs.
+       * </pre>
+       */
       public Builder addAllVals(
           java.lang.Iterable<? extends java.lang.Integer> values) {
@@ -5455,19 +8783,47 @@
         return this;
       }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       *
+       * <pre>
+       * String IDs.
+       * </pre>
+       */
       public Builder clearVals() {
-        vals_ = java.util.Collections.emptyList();;
+        vals_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000004);
         
         return this;
       }
-      
+
       // optional .OSMPBF.Info info = 4;
       private crosby.binary.Osmformat.Info info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
+      /**
+       * <code>optional .OSMPBF.Info info = 4;</code>
+       *
+       * <pre>
+       * May be omitted in omitmeta
+       * </pre>
+       */
       public boolean hasInfo() {
         return ((bitField0_ & 0x00000008) == 0x00000008);
       }
+      /**
+       * <code>optional .OSMPBF.Info info = 4;</code>
+       *
+       * <pre>
+       * May be omitted in omitmeta
+       * </pre>
+       */
       public crosby.binary.Osmformat.Info getInfo() {
         return info_;
       }
+      /**
+       * <code>optional .OSMPBF.Info info = 4;</code>
+       *
+       * <pre>
+       * May be omitted in omitmeta
+       * </pre>
+       */
       public Builder setInfo(crosby.binary.Osmformat.Info value) {
         if (value == null) {
@@ -5475,15 +8831,29 @@
         }
         info_ = value;
-        
+
         bitField0_ |= 0x00000008;
         return this;
       }
+      /**
+       * <code>optional .OSMPBF.Info info = 4;</code>
+       *
+       * <pre>
+       * May be omitted in omitmeta
+       * </pre>
+       */
       public Builder setInfo(
           crosby.binary.Osmformat.Info.Builder builderForValue) {
         info_ = builderForValue.build();
-        
+
         bitField0_ |= 0x00000008;
         return this;
       }
+      /**
+       * <code>optional .OSMPBF.Info info = 4;</code>
+       *
+       * <pre>
+       * May be omitted in omitmeta
+       * </pre>
+       */
       public Builder mergeInfo(crosby.binary.Osmformat.Info value) {
         if (((bitField0_ & 0x00000008) == 0x00000008) &&
@@ -5494,23 +8864,39 @@
           info_ = value;
         }
-        
+
         bitField0_ |= 0x00000008;
         return this;
       }
+      /**
+       * <code>optional .OSMPBF.Info info = 4;</code>
+       *
+       * <pre>
+       * May be omitted in omitmeta
+       * </pre>
+       */
       public Builder clearInfo() {
         info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
-        
+
         bitField0_ = (bitField0_ & ~0x00000008);
         return this;
       }
-      
+
       // required sint64 lat = 8;
       private long lat_ ;
+      /**
+       * <code>required sint64 lat = 8;</code>
+       */
       public boolean hasLat() {
         return ((bitField0_ & 0x00000010) == 0x00000010);
       }
+      /**
+       * <code>required sint64 lat = 8;</code>
+       */
       public long getLat() {
         return lat_;
       }
+      /**
+       * <code>required sint64 lat = 8;</code>
+       */
       public Builder setLat(long value) {
         bitField0_ |= 0x00000010;
@@ -5519,4 +8905,7 @@
         return this;
       }
+      /**
+       * <code>required sint64 lat = 8;</code>
+       */
       public Builder clearLat() {
         bitField0_ = (bitField0_ & ~0x00000010);
@@ -5525,13 +8914,22 @@
         return this;
       }
-      
+
       // required sint64 lon = 9;
       private long lon_ ;
+      /**
+       * <code>required sint64 lon = 9;</code>
+       */
       public boolean hasLon() {
         return ((bitField0_ & 0x00000020) == 0x00000020);
       }
+      /**
+       * <code>required sint64 lon = 9;</code>
+       */
       public long getLon() {
         return lon_;
       }
+      /**
+       * <code>required sint64 lon = 9;</code>
+       */
       public Builder setLon(long value) {
         bitField0_ |= 0x00000020;
@@ -5540,4 +8938,7 @@
         return this;
       }
+      /**
+       * <code>required sint64 lon = 9;</code>
+       */
       public Builder clearLon() {
         bitField0_ = (bitField0_ & ~0x00000020);
@@ -5546,138 +8947,494 @@
         return this;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:OSMPBF.Node)
     }
-    
+
     static {
       defaultInstance = new Node(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:OSMPBF.Node)
   }
-  
+
   public interface DenseNodesOrBuilder
       extends com.google.protobuf.MessageLiteOrBuilder {
-    
+
     // repeated sint64 id = 1 [packed = true];
+    /**
+     * <code>repeated sint64 id = 1 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     java.util.List<java.lang.Long> getIdList();
+    /**
+     * <code>repeated sint64 id = 1 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     int getIdCount();
+    /**
+     * <code>repeated sint64 id = 1 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     long getId(int index);
-    
+
     // optional .OSMPBF.DenseInfo denseinfo = 5;
+    /**
+     * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
+     *
+     * <pre>
+     *repeated Info info = 4;
+     * </pre>
+     */
     boolean hasDenseinfo();
+    /**
+     * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
+     *
+     * <pre>
+     *repeated Info info = 4;
+     * </pre>
+     */
     crosby.binary.Osmformat.DenseInfo getDenseinfo();
-    
+
     // repeated sint64 lat = 8 [packed = true];
+    /**
+     * <code>repeated sint64 lat = 8 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     java.util.List<java.lang.Long> getLatList();
+    /**
+     * <code>repeated sint64 lat = 8 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     int getLatCount();
+    /**
+     * <code>repeated sint64 lat = 8 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     long getLat(int index);
-    
+
     // repeated sint64 lon = 9 [packed = true];
+    /**
+     * <code>repeated sint64 lon = 9 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     java.util.List<java.lang.Long> getLonList();
+    /**
+     * <code>repeated sint64 lon = 9 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     int getLonCount();
+    /**
+     * <code>repeated sint64 lon = 9 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     long getLon(int index);
-    
+
     // repeated int32 keys_vals = 10 [packed = true];
+    /**
+     * <code>repeated int32 keys_vals = 10 [packed = true];</code>
+     *
+     * <pre>
+     * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
+     * </pre>
+     */
     java.util.List<java.lang.Integer> getKeysValsList();
+    /**
+     * <code>repeated int32 keys_vals = 10 [packed = true];</code>
+     *
+     * <pre>
+     * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
+     * </pre>
+     */
     int getKeysValsCount();
+    /**
+     * <code>repeated int32 keys_vals = 10 [packed = true];</code>
+     *
+     * <pre>
+     * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
+     * </pre>
+     */
     int getKeysVals(int index);
   }
+  /**
+   * Protobuf type {@code OSMPBF.DenseNodes}
+   */
   public static final class DenseNodes extends
       com.google.protobuf.GeneratedMessageLite
       implements DenseNodesOrBuilder {
     // Use DenseNodes.newBuilder() to construct.
-    private DenseNodes(Builder builder) {
+    private DenseNodes(com.google.protobuf.GeneratedMessageLite.Builder builder) {
       super(builder);
+
     }
     private DenseNodes(boolean noInit) {}
-    
+
     private static final DenseNodes defaultInstance;
     public static DenseNodes getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public DenseNodes getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
+
+    private DenseNodes(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 8: {
+              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+                id_ = new java.util.ArrayList<java.lang.Long>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              id_.add(input.readSInt64());
+              break;
+            }
+            case 10: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001) && input.getBytesUntilLimit() > 0) {
+                id_ = new java.util.ArrayList<java.lang.Long>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              while (input.getBytesUntilLimit() > 0) {
+                id_.add(input.readSInt64());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 42: {
+              crosby.binary.Osmformat.DenseInfo.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000001) == 0x00000001)) {
+                subBuilder = denseinfo_.toBuilder();
+              }
+              denseinfo_ = input.readMessage(crosby.binary.Osmformat.DenseInfo.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(denseinfo_);
+                denseinfo_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000001;
+              break;
+            }
+            case 64: {
+              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+                lat_ = new java.util.ArrayList<java.lang.Long>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              lat_.add(input.readSInt64());
+              break;
+            }
+            case 66: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004) && input.getBytesUntilLimit() > 0) {
+                lat_ = new java.util.ArrayList<java.lang.Long>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              while (input.getBytesUntilLimit() > 0) {
+                lat_.add(input.readSInt64());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 72: {
+              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
+                lon_ = new java.util.ArrayList<java.lang.Long>();
+                mutable_bitField0_ |= 0x00000008;
+              }
+              lon_.add(input.readSInt64());
+              break;
+            }
+            case 74: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008) && input.getBytesUntilLimit() > 0) {
+                lon_ = new java.util.ArrayList<java.lang.Long>();
+                mutable_bitField0_ |= 0x00000008;
+              }
+              while (input.getBytesUntilLimit() > 0) {
+                lon_.add(input.readSInt64());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 80: {
+              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
+                keysVals_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000010;
+              }
+              keysVals_.add(input.readInt32());
+              break;
+            }
+            case 82: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010) && input.getBytesUntilLimit() > 0) {
+                keysVals_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000010;
+              }
+              while (input.getBytesUntilLimit() > 0) {
+                keysVals_.add(input.readInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+          id_ = java.util.Collections.unmodifiableList(id_);
+        }
+        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+          lat_ = java.util.Collections.unmodifiableList(lat_);
+        }
+        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
+          lon_ = java.util.Collections.unmodifiableList(lon_);
+        }
+        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
+          keysVals_ = java.util.Collections.unmodifiableList(keysVals_);
+        }
+        makeExtensionsImmutable();
+      }
+    }
+    public static com.google.protobuf.Parser<DenseNodes> PARSER =
+        new com.google.protobuf.AbstractParser<DenseNodes>() {
+      public DenseNodes parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DenseNodes(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DenseNodes> getParserForType() {
+      return PARSER;
+    }
+
     private int bitField0_;
     // repeated sint64 id = 1 [packed = true];
     public static final int ID_FIELD_NUMBER = 1;
     private java.util.List<java.lang.Long> id_;
+    /**
+     * <code>repeated sint64 id = 1 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public java.util.List<java.lang.Long>
         getIdList() {
       return id_;
     }
+    /**
+     * <code>repeated sint64 id = 1 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public int getIdCount() {
       return id_.size();
     }
+    /**
+     * <code>repeated sint64 id = 1 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public long getId(int index) {
       return id_.get(index);
     }
     private int idMemoizedSerializedSize = -1;
-    
+
     // optional .OSMPBF.DenseInfo denseinfo = 5;
     public static final int DENSEINFO_FIELD_NUMBER = 5;
     private crosby.binary.Osmformat.DenseInfo denseinfo_;
+    /**
+     * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
+     *
+     * <pre>
+     *repeated Info info = 4;
+     * </pre>
+     */
     public boolean hasDenseinfo() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
+    /**
+     * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
+     *
+     * <pre>
+     *repeated Info info = 4;
+     * </pre>
+     */
     public crosby.binary.Osmformat.DenseInfo getDenseinfo() {
       return denseinfo_;
     }
-    
+
     // repeated sint64 lat = 8 [packed = true];
     public static final int LAT_FIELD_NUMBER = 8;
     private java.util.List<java.lang.Long> lat_;
+    /**
+     * <code>repeated sint64 lat = 8 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public java.util.List<java.lang.Long>
         getLatList() {
       return lat_;
     }
+    /**
+     * <code>repeated sint64 lat = 8 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public int getLatCount() {
       return lat_.size();
     }
+    /**
+     * <code>repeated sint64 lat = 8 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public long getLat(int index) {
       return lat_.get(index);
     }
     private int latMemoizedSerializedSize = -1;
-    
+
     // repeated sint64 lon = 9 [packed = true];
     public static final int LON_FIELD_NUMBER = 9;
     private java.util.List<java.lang.Long> lon_;
+    /**
+     * <code>repeated sint64 lon = 9 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public java.util.List<java.lang.Long>
         getLonList() {
       return lon_;
     }
+    /**
+     * <code>repeated sint64 lon = 9 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public int getLonCount() {
       return lon_.size();
     }
+    /**
+     * <code>repeated sint64 lon = 9 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public long getLon(int index) {
       return lon_.get(index);
     }
     private int lonMemoizedSerializedSize = -1;
-    
+
     // repeated int32 keys_vals = 10 [packed = true];
     public static final int KEYS_VALS_FIELD_NUMBER = 10;
     private java.util.List<java.lang.Integer> keysVals_;
+    /**
+     * <code>repeated int32 keys_vals = 10 [packed = true];</code>
+     *
+     * <pre>
+     * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
+     * </pre>
+     */
     public java.util.List<java.lang.Integer>
         getKeysValsList() {
       return keysVals_;
     }
+    /**
+     * <code>repeated int32 keys_vals = 10 [packed = true];</code>
+     *
+     * <pre>
+     * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
+     * </pre>
+     */
     public int getKeysValsCount() {
       return keysVals_.size();
     }
+    /**
+     * <code>repeated int32 keys_vals = 10 [packed = true];</code>
+     *
+     * <pre>
+     * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
+     * </pre>
+     */
     public int getKeysVals(int index) {
       return keysVals_.get(index);
     }
     private int keysValsMemoizedSerializedSize = -1;
-    
+
     private void initFields() {
-      id_ = java.util.Collections.emptyList();;
+      id_ = java.util.Collections.emptyList();
       denseinfo_ = crosby.binary.Osmformat.DenseInfo.getDefaultInstance();
-      lat_ = java.util.Collections.emptyList();;
-      lon_ = java.util.Collections.emptyList();;
-      keysVals_ = java.util.Collections.emptyList();;
+      lat_ = java.util.Collections.emptyList();
+      lon_ = java.util.Collections.emptyList();
+      keysVals_ = java.util.Collections.emptyList();
     }
     private byte memoizedIsInitialized = -1;
@@ -5685,9 +9442,9 @@
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
-      
+
       memoizedIsInitialized = 1;
       return true;
     }
-    
+
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
@@ -5725,10 +9482,10 @@
       }
     }
-    
+
     private int memoizedSerializedSize = -1;
     public int getSerializedSize() {
       int size = memoizedSerializedSize;
       if (size != -1) return size;
-    
+
       size = 0;
       {
@@ -5795,5 +9552,5 @@
       return size;
     }
-    
+
     private static final long serialVersionUID = 0L;
     @java.lang.Override
@@ -5802,9 +9559,9 @@
       return super.writeReplace();
     }
-    
+
     public static crosby.binary.Osmformat.DenseNodes parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static crosby.binary.Osmformat.DenseNodes parseFrom(
@@ -5812,10 +9569,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static crosby.binary.Osmformat.DenseNodes parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static crosby.binary.Osmformat.DenseNodes parseFrom(
@@ -5823,10 +9579,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static crosby.binary.Osmformat.DenseNodes parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static crosby.binary.Osmformat.DenseNodes parseFrom(
@@ -5834,15 +9589,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(input, extensionRegistry);
     }
     public static crosby.binary.Osmformat.DenseNodes parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input);
     }
     public static crosby.binary.Osmformat.DenseNodes parseDelimitedFrom(
@@ -5850,15 +9599,10 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
     public static crosby.binary.Osmformat.DenseNodes parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static crosby.binary.Osmformat.DenseNodes parseFrom(
@@ -5866,8 +9610,7 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
@@ -5876,5 +9619,8 @@
     }
     public Builder toBuilder() { return newBuilder(this); }
-    
+
+    /**
+     * Protobuf type {@code OSMPBF.DenseNodes}
+     */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageLite.Builder<
@@ -5885,5 +9631,5 @@
         maybeForceBuilderInitialization();
       }
-      
+
       private void maybeForceBuilderInitialization() {
       }
@@ -5891,28 +9637,28 @@
         return new Builder();
       }
-      
+
       public Builder clear() {
         super.clear();
-        id_ = java.util.Collections.emptyList();;
+        id_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000001);
         denseinfo_ = crosby.binary.Osmformat.DenseInfo.getDefaultInstance();
         bitField0_ = (bitField0_ & ~0x00000002);
-        lat_ = java.util.Collections.emptyList();;
+        lat_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000004);
-        lon_ = java.util.Collections.emptyList();;
+        lon_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000008);
-        keysVals_ = java.util.Collections.emptyList();;
+        keysVals_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000010);
         return this;
       }
-      
+
       public Builder clone() {
         return create().mergeFrom(buildPartial());
       }
-      
+
       public crosby.binary.Osmformat.DenseNodes getDefaultInstanceForType() {
         return crosby.binary.Osmformat.DenseNodes.getDefaultInstance();
       }
-      
+
       public crosby.binary.Osmformat.DenseNodes build() {
         crosby.binary.Osmformat.DenseNodes result = buildPartial();
@@ -5922,15 +9668,5 @@
         return result;
       }
-      
-      private crosby.binary.Osmformat.DenseNodes buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        crosby.binary.Osmformat.DenseNodes result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
+
       public crosby.binary.Osmformat.DenseNodes buildPartial() {
         crosby.binary.Osmformat.DenseNodes result = new crosby.binary.Osmformat.DenseNodes(this);
@@ -5964,5 +9700,5 @@
         return result;
       }
-      
+
       public Builder mergeFrom(crosby.binary.Osmformat.DenseNodes other) {
         if (other == crosby.binary.Osmformat.DenseNodes.getDefaultInstance()) return this;
@@ -6012,99 +9748,30 @@
         return this;
       }
-      
+
       public final boolean isInitialized() {
         return true;
       }
-      
+
       public Builder mergeFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        while (true) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              
-              return this;
-            default: {
-              if (!parseUnknownField(input, extensionRegistry, tag)) {
-                
-                return this;
-              }
-              break;
-            }
-            case 8: {
-              ensureIdIsMutable();
-              id_.add(input.readSInt64());
-              break;
-            }
-            case 10: {
-              int length = input.readRawVarint32();
-              int limit = input.pushLimit(length);
-              while (input.getBytesUntilLimit() > 0) {
-                addId(input.readSInt64());
-              }
-              input.popLimit(limit);
-              break;
-            }
-            case 42: {
-              crosby.binary.Osmformat.DenseInfo.Builder subBuilder = crosby.binary.Osmformat.DenseInfo.newBuilder();
-              if (hasDenseinfo()) {
-                subBuilder.mergeFrom(getDenseinfo());
-              }
-              input.readMessage(subBuilder, extensionRegistry);
-              setDenseinfo(subBuilder.buildPartial());
-              break;
-            }
-            case 64: {
-              ensureLatIsMutable();
-              lat_.add(input.readSInt64());
-              break;
-            }
-            case 66: {
-              int length = input.readRawVarint32();
-              int limit = input.pushLimit(length);
-              while (input.getBytesUntilLimit() > 0) {
-                addLat(input.readSInt64());
-              }
-              input.popLimit(limit);
-              break;
-            }
-            case 72: {
-              ensureLonIsMutable();
-              lon_.add(input.readSInt64());
-              break;
-            }
-            case 74: {
-              int length = input.readRawVarint32();
-              int limit = input.pushLimit(length);
-              while (input.getBytesUntilLimit() > 0) {
-                addLon(input.readSInt64());
-              }
-              input.popLimit(limit);
-              break;
-            }
-            case 80: {
-              ensureKeysValsIsMutable();
-              keysVals_.add(input.readInt32());
-              break;
-            }
-            case 82: {
-              int length = input.readRawVarint32();
-              int limit = input.pushLimit(length);
-              while (input.getBytesUntilLimit() > 0) {
-                addKeysVals(input.readInt32());
-              }
-              input.popLimit(limit);
-              break;
-            }
+        crosby.binary.Osmformat.DenseNodes parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (crosby.binary.Osmformat.DenseNodes) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
         }
-      }
-      
+        return this;
+      }
       private int bitField0_;
-      
+
       // repeated sint64 id = 1 [packed = true];
-      private java.util.List<java.lang.Long> id_ = java.util.Collections.emptyList();;
+      private java.util.List<java.lang.Long> id_ = java.util.Collections.emptyList();
       private void ensureIdIsMutable() {
         if (!((bitField0_ & 0x00000001) == 0x00000001)) {
@@ -6113,14 +9780,42 @@
          }
       }
+      /**
+       * <code>repeated sint64 id = 1 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public java.util.List<java.lang.Long>
           getIdList() {
         return java.util.Collections.unmodifiableList(id_);
       }
+      /**
+       * <code>repeated sint64 id = 1 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public int getIdCount() {
         return id_.size();
       }
+      /**
+       * <code>repeated sint64 id = 1 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public long getId(int index) {
         return id_.get(index);
       }
+      /**
+       * <code>repeated sint64 id = 1 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder setId(
           int index, long value) {
@@ -6130,4 +9825,11 @@
         return this;
       }
+      /**
+       * <code>repeated sint64 id = 1 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder addId(long value) {
         ensureIdIsMutable();
@@ -6136,4 +9838,11 @@
         return this;
       }
+      /**
+       * <code>repeated sint64 id = 1 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder addAllId(
           java.lang.Iterable<? extends java.lang.Long> values) {
@@ -6143,19 +9852,47 @@
         return this;
       }
+      /**
+       * <code>repeated sint64 id = 1 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder clearId() {
-        id_ = java.util.Collections.emptyList();;
+        id_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000001);
         
         return this;
       }
-      
+
       // optional .OSMPBF.DenseInfo denseinfo = 5;
       private crosby.binary.Osmformat.DenseInfo denseinfo_ = crosby.binary.Osmformat.DenseInfo.getDefaultInstance();
+      /**
+       * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
+       *
+       * <pre>
+       *repeated Info info = 4;
+       * </pre>
+       */
       public boolean hasDenseinfo() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
+      /**
+       * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
+       *
+       * <pre>
+       *repeated Info info = 4;
+       * </pre>
+       */
       public crosby.binary.Osmformat.DenseInfo getDenseinfo() {
         return denseinfo_;
       }
+      /**
+       * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
+       *
+       * <pre>
+       *repeated Info info = 4;
+       * </pre>
+       */
       public Builder setDenseinfo(crosby.binary.Osmformat.DenseInfo value) {
         if (value == null) {
@@ -6163,15 +9900,29 @@
         }
         denseinfo_ = value;
-        
+
         bitField0_ |= 0x00000002;
         return this;
       }
+      /**
+       * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
+       *
+       * <pre>
+       *repeated Info info = 4;
+       * </pre>
+       */
       public Builder setDenseinfo(
           crosby.binary.Osmformat.DenseInfo.Builder builderForValue) {
         denseinfo_ = builderForValue.build();
-        
+
         bitField0_ |= 0x00000002;
         return this;
       }
+      /**
+       * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
+       *
+       * <pre>
+       *repeated Info info = 4;
+       * </pre>
+       */
       public Builder mergeDenseinfo(crosby.binary.Osmformat.DenseInfo value) {
         if (((bitField0_ & 0x00000002) == 0x00000002) &&
@@ -6182,17 +9933,24 @@
           denseinfo_ = value;
         }
-        
+
         bitField0_ |= 0x00000002;
         return this;
       }
+      /**
+       * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
+       *
+       * <pre>
+       *repeated Info info = 4;
+       * </pre>
+       */
       public Builder clearDenseinfo() {
         denseinfo_ = crosby.binary.Osmformat.DenseInfo.getDefaultInstance();
-        
+
         bitField0_ = (bitField0_ & ~0x00000002);
         return this;
       }
-      
+
       // repeated sint64 lat = 8 [packed = true];
-      private java.util.List<java.lang.Long> lat_ = java.util.Collections.emptyList();;
+      private java.util.List<java.lang.Long> lat_ = java.util.Collections.emptyList();
       private void ensureLatIsMutable() {
         if (!((bitField0_ & 0x00000004) == 0x00000004)) {
@@ -6201,14 +9959,42 @@
          }
       }
+      /**
+       * <code>repeated sint64 lat = 8 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public java.util.List<java.lang.Long>
           getLatList() {
         return java.util.Collections.unmodifiableList(lat_);
       }
+      /**
+       * <code>repeated sint64 lat = 8 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public int getLatCount() {
         return lat_.size();
       }
+      /**
+       * <code>repeated sint64 lat = 8 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public long getLat(int index) {
         return lat_.get(index);
       }
+      /**
+       * <code>repeated sint64 lat = 8 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder setLat(
           int index, long value) {
@@ -6218,4 +10004,11 @@
         return this;
       }
+      /**
+       * <code>repeated sint64 lat = 8 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder addLat(long value) {
         ensureLatIsMutable();
@@ -6224,4 +10017,11 @@
         return this;
       }
+      /**
+       * <code>repeated sint64 lat = 8 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder addAllLat(
           java.lang.Iterable<? extends java.lang.Long> values) {
@@ -6231,13 +10031,20 @@
         return this;
       }
+      /**
+       * <code>repeated sint64 lat = 8 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder clearLat() {
-        lat_ = java.util.Collections.emptyList();;
+        lat_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000004);
         
         return this;
       }
-      
+
       // repeated sint64 lon = 9 [packed = true];
-      private java.util.List<java.lang.Long> lon_ = java.util.Collections.emptyList();;
+      private java.util.List<java.lang.Long> lon_ = java.util.Collections.emptyList();
       private void ensureLonIsMutable() {
         if (!((bitField0_ & 0x00000008) == 0x00000008)) {
@@ -6246,14 +10053,42 @@
          }
       }
+      /**
+       * <code>repeated sint64 lon = 9 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public java.util.List<java.lang.Long>
           getLonList() {
         return java.util.Collections.unmodifiableList(lon_);
       }
+      /**
+       * <code>repeated sint64 lon = 9 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public int getLonCount() {
         return lon_.size();
       }
+      /**
+       * <code>repeated sint64 lon = 9 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public long getLon(int index) {
         return lon_.get(index);
       }
+      /**
+       * <code>repeated sint64 lon = 9 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder setLon(
           int index, long value) {
@@ -6263,4 +10098,11 @@
         return this;
       }
+      /**
+       * <code>repeated sint64 lon = 9 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder addLon(long value) {
         ensureLonIsMutable();
@@ -6269,4 +10111,11 @@
         return this;
       }
+      /**
+       * <code>repeated sint64 lon = 9 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder addAllLon(
           java.lang.Iterable<? extends java.lang.Long> values) {
@@ -6276,13 +10125,20 @@
         return this;
       }
+      /**
+       * <code>repeated sint64 lon = 9 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
       public Builder clearLon() {
-        lon_ = java.util.Collections.emptyList();;
+        lon_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000008);
         
         return this;
       }
-      
+
       // repeated int32 keys_vals = 10 [packed = true];
-      private java.util.List<java.lang.Integer> keysVals_ = java.util.Collections.emptyList();;
+      private java.util.List<java.lang.Integer> keysVals_ = java.util.Collections.emptyList();
       private void ensureKeysValsIsMutable() {
         if (!((bitField0_ & 0x00000010) == 0x00000010)) {
@@ -6291,14 +10147,42 @@
          }
       }
+      /**
+       * <code>repeated int32 keys_vals = 10 [packed = true];</code>
+       *
+       * <pre>
+       * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
+       * </pre>
+       */
       public java.util.List<java.lang.Integer>
           getKeysValsList() {
         return java.util.Collections.unmodifiableList(keysVals_);
       }
+      /**
+       * <code>repeated int32 keys_vals = 10 [packed = true];</code>
+       *
+       * <pre>
+       * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
+       * </pre>
+       */
       public int getKeysValsCount() {
         return keysVals_.size();
       }
+      /**
+       * <code>repeated int32 keys_vals = 10 [packed = true];</code>
+       *
+       * <pre>
+       * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
+       * </pre>
+       */
       public int getKeysVals(int index) {
         return keysVals_.get(index);
       }
+      /**
+       * <code>repeated int32 keys_vals = 10 [packed = true];</code>
+       *
+       * <pre>
+       * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
+       * </pre>
+       */
       public Builder setKeysVals(
           int index, int value) {
@@ -6308,4 +10192,11 @@
         return this;
       }
+      /**
+       * <code>repeated int32 keys_vals = 10 [packed = true];</code>
+       *
+       * <pre>
+       * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
+       * </pre>
+       */
       public Builder addKeysVals(int value) {
         ensureKeysValsIsMutable();
@@ -6314,4 +10205,11 @@
         return this;
       }
+      /**
+       * <code>repeated int32 keys_vals = 10 [packed = true];</code>
+       *
+       * <pre>
+       * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
+       * </pre>
+       */
       public Builder addAllKeysVals(
           java.lang.Iterable<? extends java.lang.Integer> values) {
@@ -6321,138 +10219,412 @@
         return this;
       }
+      /**
+       * <code>repeated int32 keys_vals = 10 [packed = true];</code>
+       *
+       * <pre>
+       * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
+       * </pre>
+       */
       public Builder clearKeysVals() {
-        keysVals_ = java.util.Collections.emptyList();;
+        keysVals_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000010);
         
         return this;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:OSMPBF.DenseNodes)
     }
-    
+
     static {
       defaultInstance = new DenseNodes(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:OSMPBF.DenseNodes)
   }
-  
+
   public interface WayOrBuilder
       extends com.google.protobuf.MessageLiteOrBuilder {
-    
+
     // required int64 id = 1;
+    /**
+     * <code>required int64 id = 1;</code>
+     */
     boolean hasId();
+    /**
+     * <code>required int64 id = 1;</code>
+     */
     long getId();
-    
+
     // repeated uint32 keys = 2 [packed = true];
+    /**
+     * <code>repeated uint32 keys = 2 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays.
+     * </pre>
+     */
     java.util.List<java.lang.Integer> getKeysList();
+    /**
+     * <code>repeated uint32 keys = 2 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays.
+     * </pre>
+     */
     int getKeysCount();
+    /**
+     * <code>repeated uint32 keys = 2 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays.
+     * </pre>
+     */
     int getKeys(int index);
-    
+
     // repeated uint32 vals = 3 [packed = true];
+    /**
+     * <code>repeated uint32 vals = 3 [packed = true];</code>
+     */
     java.util.List<java.lang.Integer> getValsList();
+    /**
+     * <code>repeated uint32 vals = 3 [packed = true];</code>
+     */
     int getValsCount();
+    /**
+     * <code>repeated uint32 vals = 3 [packed = true];</code>
+     */
     int getVals(int index);
-    
+
     // optional .OSMPBF.Info info = 4;
+    /**
+     * <code>optional .OSMPBF.Info info = 4;</code>
+     */
     boolean hasInfo();
+    /**
+     * <code>optional .OSMPBF.Info info = 4;</code>
+     */
     crosby.binary.Osmformat.Info getInfo();
-    
+
     // repeated sint64 refs = 8 [packed = true];
+    /**
+     * <code>repeated sint64 refs = 8 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     java.util.List<java.lang.Long> getRefsList();
+    /**
+     * <code>repeated sint64 refs = 8 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     int getRefsCount();
+    /**
+     * <code>repeated sint64 refs = 8 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     long getRefs(int index);
   }
+  /**
+   * Protobuf type {@code OSMPBF.Way}
+   */
   public static final class Way extends
       com.google.protobuf.GeneratedMessageLite
       implements WayOrBuilder {
     // Use Way.newBuilder() to construct.
-    private Way(Builder builder) {
+    private Way(com.google.protobuf.GeneratedMessageLite.Builder builder) {
       super(builder);
+
     }
     private Way(boolean noInit) {}
-    
+
     private static final Way defaultInstance;
     public static Way getDefaultInstance() {
       return defaultInstance;
     }
-    
+
     public Way getDefaultInstanceForType() {
       return defaultInstance;
     }
-    
+
+    private Way(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              id_ = input.readInt64();
+              break;
+            }
+            case 16: {
+              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+                keys_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              keys_.add(input.readUInt32());
+              break;
+            }
+            case 18: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) {
+                keys_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              while (input.getBytesUntilLimit() > 0) {
+                keys_.add(input.readUInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 24: {
+              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+                vals_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              vals_.add(input.readUInt32());
+              break;
+            }
+            case 26: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004) && input.getBytesUntilLimit() > 0) {
+                vals_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              while (input.getBytesUntilLimit() > 0) {
+                vals_.add(input.readUInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 34: {
+              crosby.binary.Osmformat.Info.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000002) == 0x00000002)) {
+                subBuilder = info_.toBuilder();
+              }
+              info_ = input.readMessage(crosby.binary.Osmformat.Info.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(info_);
+                info_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000002;
+              break;
+            }
+            case 64: {
+              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
+                refs_ = new java.util.ArrayList<java.lang.Long>();
+                mutable_bitField0_ |= 0x00000010;
+              }
+              refs_.add(input.readSInt64());
+              break;
+            }
+            case 66: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010) && input.getBytesUntilLimit() > 0) {
+                refs_ = new java.util.ArrayList<java.lang.Long>();
+                mutable_bitField0_ |= 0x00000010;
+              }
+              while (input.getBytesUntilLimit() > 0) {
+                refs_.add(input.readSInt64());
+              }
+              input.popLimit(limit);
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+          keys_ = java.util.Collections.unmodifiableList(keys_);
+        }
+        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+          vals_ = java.util.Collections.unmodifiableList(vals_);
+        }
+        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
+          refs_ = java.util.Collections.unmodifiableList(refs_);
+        }
+        makeExtensionsImmutable();
+      }
+    }
+    public static com.google.protobuf.Parser<Way> PARSER =
+        new com.google.protobuf.AbstractParser<Way>() {
+      public Way parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Way(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Way> getParserForType() {
+      return PARSER;
+    }
+
     private int bitField0_;
     // required int64 id = 1;
     public static final int ID_FIELD_NUMBER = 1;
     private long id_;
+    /**
+     * <code>required int64 id = 1;</code>
+     */
     public boolean hasId() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
+    /**
+     * <code>required int64 id = 1;</code>
+     */
     public long getId() {
       return id_;
     }
-    
+
     // repeated uint32 keys = 2 [packed = true];
     public static final int KEYS_FIELD_NUMBER = 2;
     private java.util.List<java.lang.Integer> keys_;
+    /**
+     * <code>repeated uint32 keys = 2 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays.
+     * </pre>
+     */
     public java.util.List<java.lang.Integer>
         getKeysList() {
       return keys_;
     }
+    /**
+     * <code>repeated uint32 keys = 2 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays.
+     * </pre>
+     */
     public int getKeysCount() {
       return keys_.size();
     }
+    /**
+     * <code>repeated uint32 keys = 2 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays.
+     * </pre>
+     */
     public int getKeys(int index) {
       return keys_.get(index);
     }
     private int keysMemoizedSerializedSize = -1;
-    
+
     // repeated uint32 vals = 3 [packed = true];
     public static final int VALS_FIELD_NUMBER = 3;
     private java.util.List<java.lang.Integer> vals_;
+    /**
+     * <code>repeated uint32 vals = 3 [packed = true];</code>
+     */
     public java.util.List<java.lang.Integer>
         getValsList() {
       return vals_;
     }
+    /**
+     * <code>repeated uint32 vals = 3 [packed = true];</code>
+     */
     public int getValsCount() {
       return vals_.size();
     }
+    /**
+     * <code>repeated uint32 vals = 3 [packed = true];</code>
+     */
     public int getVals(int index) {
       return vals_.get(index);
     }
     private int valsMemoizedSerializedSize = -1;
-    
+
     // optional .OSMPBF.Info info = 4;
     public static final int INFO_FIELD_NUMBER = 4;
     private crosby.binary.Osmformat.Info info_;
+    /**
+     * <code>optional .OSMPBF.Info info = 4;</code>
+     */
     public boolean hasInfo() {
       return ((bitField0_ & 0x00000002) == 0x00000002);
     }
+    /**
+     * <code>optional .OSMPBF.Info info = 4;</code>
+     */
     public crosby.binary.Osmformat.Info getInfo() {
       return info_;
     }
-    
+
     // repeated sint64 refs = 8 [packed = true];
     public static final int REFS_FIELD_NUMBER = 8;
     private java.util.List<java.lang.Long> refs_;
+    /**
+     * <code>repeated sint64 refs = 8 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public java.util.List<java.lang.Long>
         getRefsList() {
       return refs_;
     }
+    /**
+     * <code>repeated sint64 refs = 8 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public int getRefsCount() {
       return refs_.size();
     }
+    /**
+     * <code>repeated sint64 refs = 8 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA coded
+     * </pre>
+     */
     public long getRefs(int index) {
       return refs_.get(index);
     }
     private int refsMemoizedSerializedSize = -1;
-    
+
     private void initFields() {
       id_ = 0L;
-      keys_ = java.util.Collections.emptyList();;
-      vals_ = java.util.Collections.emptyList();;
+      keys_ = java.util.Collections.emptyList();
+      vals_ = java.util.Collections.emptyList();
       info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
-      refs_ = java.util.Collections.emptyList();;
+      refs_ = java.util.Collections.emptyList();
     }
     private byte memoizedIsInitialized = -1;
@@ -6460,5 +10632,5 @@
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
-      
+
       if (!hasId()) {
         memoizedIsInitialized = 0;
@@ -6468,5 +10640,5 @@
       return true;
     }
-    
+
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
@@ -6500,10 +10672,10 @@
       }
     }
-    
+
     private int memoizedSerializedSize = -1;
     public int getSerializedSize() {
       int size = memoizedSerializedSize;
       if (size != -1) return size;
-    
+
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
@@ -6560,5 +10732,5 @@
       return size;
     }
-    
+
     private static final long serialVersionUID = 0L;
     @java.lang.Override
@@ -6567,9 +10739,9 @@
       return super.writeReplace();
     }
-    
+
     public static crosby.binary.Osmformat.Way parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static crosby.binary.Osmformat.Way parseFrom(
@@ -6577,10 +10749,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static crosby.binary.Osmformat.Way parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
+      return PARSER.parseFrom(data);
     }
     public static crosby.binary.Osmformat.Way parseFrom(
@@ -6588,10 +10759,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(data, extensionRegistry);
     }
     public static crosby.binary.Osmformat.Way parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static crosby.binary.Osmformat.Way parseFrom(
@@ -6599,15 +10769,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
+      return PARSER.parseFrom(input, extensionRegistry);
     }
     public static crosby.binary.Osmformat.Way parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input);
     }
     public static crosby.binary.Osmformat.Way parseDelimitedFrom(
@@ -6615,15 +10779,10 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
     public static crosby.binary.Osmformat.Way parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
+      return PARSER.parseFrom(input);
     }
     public static crosby.binary.Osmformat.Way parseFrom(
@@ -6631,8 +10790,7 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
@@ -6641,5 +10799,8 @@
     }
     public Builder toBuilder() { return newBuilder(this); }
-    
+
+    /**
+     * Protobuf type {@code OSMPBF.Way}
+     */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageLite.Builder<
@@ -6650,5 +10811,5 @@
         maybeForceBuilderInitialization();
       }
-      
+
       private void maybeForceBuilderInitialization() {
       }
@@ -6656,28 +10817,28 @@
         return new Builder();
       }
-      
+
       public Builder clear() {
         super.clear();
         id_ = 0L;
         bitField0_ = (bitField0_ & ~0x00000001);
-        keys_ = java.util.Collections.emptyList();;
+        keys_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000002);
-        vals_ = java.util.Collections.emptyList();;
+        vals_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000004);
         info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
         bitField0_ = (bitField0_ & ~0x00000008);
-        refs_ = java.util.Collections.emptyList();;
+        refs_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000010);
         return this;
       }
-      
+
       public Builder clone() {
         return create().mergeFrom(buildPartial());
       }
-      
+
       public crosby.binary.Osmformat.Way getDefaultInstanceForType() {
         return crosby.binary.Osmformat.Way.getDefaultInstance();
       }
-      
+
       public crosby.binary.Osmformat.Way build() {
         crosby.binary.Osmformat.Way result = buildPartial();
@@ -6687,15 +10848,5 @@
         return result;
       }
-      
-      private crosby.binary.Osmformat.Way buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        crosby.binary.Osmformat.Way result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
+
       public crosby.binary.Osmformat.Way buildPartial() {
         crosby.binary.Osmformat.Way result = new crosby.binary.Osmformat.Way(this);
@@ -6728,5 +10879,5 @@
         return result;
       }
-      
+
       public Builder mergeFrom(crosby.binary.Osmformat.Way other) {
         if (other == crosby.binary.Osmformat.Way.getDefaultInstance()) return this;
@@ -6769,5 +10920,5 @@
         return this;
       }
-      
+
       public final boolean isInitialized() {
         if (!hasId()) {
@@ -6777,19 +10928,552 @@
         return true;
       }
-      
+
       public Builder mergeFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        while (true) {
+        crosby.binary.Osmformat.Way parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (crosby.binary.Osmformat.Way) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      // required int64 id = 1;
+      private long id_ ;
+      /**
+       * <code>required int64 id = 1;</code>
+       */
+      public boolean hasId() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      /**
+       * <code>required int64 id = 1;</code>
+       */
+      public long getId() {
+        return id_;
+      }
+      /**
+       * <code>required int64 id = 1;</code>
+       */
+      public Builder setId(long value) {
+        bitField0_ |= 0x00000001;
+        id_ = value;
+        
+        return this;
+      }
+      /**
+       * <code>required int64 id = 1;</code>
+       */
+      public Builder clearId() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        id_ = 0L;
+        
+        return this;
+      }
+
+      // repeated uint32 keys = 2 [packed = true];
+      private java.util.List<java.lang.Integer> keys_ = java.util.Collections.emptyList();
+      private void ensureKeysIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          keys_ = new java.util.ArrayList<java.lang.Integer>(keys_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
+      public java.util.List<java.lang.Integer>
+          getKeysList() {
+        return java.util.Collections.unmodifiableList(keys_);
+      }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
+      public int getKeysCount() {
+        return keys_.size();
+      }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
+      public int getKeys(int index) {
+        return keys_.get(index);
+      }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
+      public Builder setKeys(
+          int index, int value) {
+        ensureKeysIsMutable();
+        keys_.set(index, value);
+        
+        return this;
+      }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
+      public Builder addKeys(int value) {
+        ensureKeysIsMutable();
+        keys_.add(value);
+        
+        return this;
+      }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
+      public Builder addAllKeys(
+          java.lang.Iterable<? extends java.lang.Integer> values) {
+        ensureKeysIsMutable();
+        super.addAll(values, keys_);
+        
+        return this;
+      }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
+      public Builder clearKeys() {
+        keys_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000002);
+        
+        return this;
+      }
+
+      // repeated uint32 vals = 3 [packed = true];
+      private java.util.List<java.lang.Integer> vals_ = java.util.Collections.emptyList();
+      private void ensureValsIsMutable() {
+        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
+          vals_ = new java.util.ArrayList<java.lang.Integer>(vals_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       */
+      public java.util.List<java.lang.Integer>
+          getValsList() {
+        return java.util.Collections.unmodifiableList(vals_);
+      }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       */
+      public int getValsCount() {
+        return vals_.size();
+      }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       */
+      public int getVals(int index) {
+        return vals_.get(index);
+      }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       */
+      public Builder setVals(
+          int index, int value) {
+        ensureValsIsMutable();
+        vals_.set(index, value);
+        
+        return this;
+      }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       */
+      public Builder addVals(int value) {
+        ensureValsIsMutable();
+        vals_.add(value);
+        
+        return this;
+      }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       */
+      public Builder addAllVals(
+          java.lang.Iterable<? extends java.lang.Integer> values) {
+        ensureValsIsMutable();
+        super.addAll(values, vals_);
+        
+        return this;
+      }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       */
+      public Builder clearVals() {
+        vals_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000004);
+        
+        return this;
+      }
+
+      // optional .OSMPBF.Info info = 4;
+      private crosby.binary.Osmformat.Info info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
+      /**
+       * <code>optional .OSMPBF.Info info = 4;</code>
+       */
+      public boolean hasInfo() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      /**
+       * <code>optional .OSMPBF.Info info = 4;</code>
+       */
+      public crosby.binary.Osmformat.Info getInfo() {
+        return info_;
+      }
+      /**
+       * <code>optional .OSMPBF.Info info = 4;</code>
+       */
+      public Builder setInfo(crosby.binary.Osmformat.Info value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        info_ = value;
+
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      /**
+       * <code>optional .OSMPBF.Info info = 4;</code>
+       */
+      public Builder setInfo(
+          crosby.binary.Osmformat.Info.Builder builderForValue) {
+        info_ = builderForValue.build();
+
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      /**
+       * <code>optional .OSMPBF.Info info = 4;</code>
+       */
+      public Builder mergeInfo(crosby.binary.Osmformat.Info value) {
+        if (((bitField0_ & 0x00000008) == 0x00000008) &&
+            info_ != crosby.binary.Osmformat.Info.getDefaultInstance()) {
+          info_ =
+            crosby.binary.Osmformat.Info.newBuilder(info_).mergeFrom(value).buildPartial();
+        } else {
+          info_ = value;
+        }
+
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      /**
+       * <code>optional .OSMPBF.Info info = 4;</code>
+       */
+      public Builder clearInfo() {
+        info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
+
+        bitField0_ = (bitField0_ & ~0x00000008);
+        return this;
+      }
+
+      // repeated sint64 refs = 8 [packed = true];
+      private java.util.List<java.lang.Long> refs_ = java.util.Collections.emptyList();
+      private void ensureRefsIsMutable() {
+        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
+          refs_ = new java.util.ArrayList<java.lang.Long>(refs_);
+          bitField0_ |= 0x00000010;
+         }
+      }
+      /**
+       * <code>repeated sint64 refs = 8 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
+      public java.util.List<java.lang.Long>
+          getRefsList() {
+        return java.util.Collections.unmodifiableList(refs_);
+      }
+      /**
+       * <code>repeated sint64 refs = 8 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
+      public int getRefsCount() {
+        return refs_.size();
+      }
+      /**
+       * <code>repeated sint64 refs = 8 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
+      public long getRefs(int index) {
+        return refs_.get(index);
+      }
+      /**
+       * <code>repeated sint64 refs = 8 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
+      public Builder setRefs(
+          int index, long value) {
+        ensureRefsIsMutable();
+        refs_.set(index, value);
+        
+        return this;
+      }
+      /**
+       * <code>repeated sint64 refs = 8 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
+      public Builder addRefs(long value) {
+        ensureRefsIsMutable();
+        refs_.add(value);
+        
+        return this;
+      }
+      /**
+       * <code>repeated sint64 refs = 8 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
+      public Builder addAllRefs(
+          java.lang.Iterable<? extends java.lang.Long> values) {
+        ensureRefsIsMutable();
+        super.addAll(values, refs_);
+        
+        return this;
+      }
+      /**
+       * <code>repeated sint64 refs = 8 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA coded
+       * </pre>
+       */
+      public Builder clearRefs() {
+        refs_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000010);
+        
+        return this;
+      }
+
+      // @@protoc_insertion_point(builder_scope:OSMPBF.Way)
+    }
+
+    static {
+      defaultInstance = new Way(true);
+      defaultInstance.initFields();
+    }
+
+    // @@protoc_insertion_point(class_scope:OSMPBF.Way)
+  }
+
+  public interface RelationOrBuilder
+      extends com.google.protobuf.MessageLiteOrBuilder {
+
+    // required int64 id = 1;
+    /**
+     * <code>required int64 id = 1;</code>
+     */
+    boolean hasId();
+    /**
+     * <code>required int64 id = 1;</code>
+     */
+    long getId();
+
+    // repeated uint32 keys = 2 [packed = true];
+    /**
+     * <code>repeated uint32 keys = 2 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays.
+     * </pre>
+     */
+    java.util.List<java.lang.Integer> getKeysList();
+    /**
+     * <code>repeated uint32 keys = 2 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays.
+     * </pre>
+     */
+    int getKeysCount();
+    /**
+     * <code>repeated uint32 keys = 2 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays.
+     * </pre>
+     */
+    int getKeys(int index);
+
+    // repeated uint32 vals = 3 [packed = true];
+    /**
+     * <code>repeated uint32 vals = 3 [packed = true];</code>
+     */
+    java.util.List<java.lang.Integer> getValsList();
+    /**
+     * <code>repeated uint32 vals = 3 [packed = true];</code>
+     */
+    int getValsCount();
+    /**
+     * <code>repeated uint32 vals = 3 [packed = true];</code>
+     */
+    int getVals(int index);
+
+    // optional .OSMPBF.Info info = 4;
+    /**
+     * <code>optional .OSMPBF.Info info = 4;</code>
+     */
+    boolean hasInfo();
+    /**
+     * <code>optional .OSMPBF.Info info = 4;</code>
+     */
+    crosby.binary.Osmformat.Info getInfo();
+
+    // repeated int32 roles_sid = 8 [packed = true];
+    /**
+     * <code>repeated int32 roles_sid = 8 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays
+     * </pre>
+     */
+    java.util.List<java.lang.Integer> getRolesSidList();
+    /**
+     * <code>repeated int32 roles_sid = 8 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays
+     * </pre>
+     */
+    int getRolesSidCount();
+    /**
+     * <code>repeated int32 roles_sid = 8 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays
+     * </pre>
+     */
+    int getRolesSid(int index);
+
+    // repeated sint64 memids = 9 [packed = true];
+    /**
+     * <code>repeated sint64 memids = 9 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA encoded
+     * </pre>
+     */
+    java.util.List<java.lang.Long> getMemidsList();
+    /**
+     * <code>repeated sint64 memids = 9 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA encoded
+     * </pre>
+     */
+    int getMemidsCount();
+    /**
+     * <code>repeated sint64 memids = 9 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA encoded
+     * </pre>
+     */
+    long getMemids(int index);
+
+    // repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];
+    /**
+     * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
+     */
+    java.util.List<crosby.binary.Osmformat.Relation.MemberType> getTypesList();
+    /**
+     * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
+     */
+    int getTypesCount();
+    /**
+     * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
+     */
+    crosby.binary.Osmformat.Relation.MemberType getTypes(int index);
+  }
+  /**
+   * Protobuf type {@code OSMPBF.Relation}
+   */
+  public static final class Relation extends
+      com.google.protobuf.GeneratedMessageLite
+      implements RelationOrBuilder {
+    // Use Relation.newBuilder() to construct.
+    private Relation(com.google.protobuf.GeneratedMessageLite.Builder builder) {
+      super(builder);
+
+    }
+    private Relation(boolean noInit) {}
+
+    private static final Relation defaultInstance;
+    public static Relation getDefaultInstance() {
+      return defaultInstance;
+    }
+
+    public Relation getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+
+    private Relation(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      try {
+        boolean done = false;
+        while (!done) {
           int tag = input.readTag();
           switch (tag) {
             case 0:
-              
-              return this;
+              done = true;
+              break;
             default: {
-              if (!parseUnknownField(input, extensionRegistry, tag)) {
-                
-                return this;
+              if (!parseUnknownField(input,
+                                     extensionRegistry, tag)) {
+                done = true;
               }
               break;
@@ -6801,5 +11485,8 @@
             }
             case 16: {
-              ensureKeysIsMutable();
+              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+                keys_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000002;
+              }
               keys_.add(input.readUInt32());
               break;
@@ -6808,6 +11495,10 @@
               int length = input.readRawVarint32();
               int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) {
+                keys_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000002;
+              }
               while (input.getBytesUntilLimit() > 0) {
-                addKeys(input.readUInt32());
+                keys_.add(input.readUInt32());
               }
               input.popLimit(limit);
@@ -6815,5 +11506,8 @@
             }
             case 24: {
-              ensureValsIsMutable();
+              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+                vals_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000004;
+              }
               vals_.add(input.readUInt32());
               break;
@@ -6822,6 +11516,10 @@
               int length = input.readRawVarint32();
               int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004) && input.getBytesUntilLimit() > 0) {
+                vals_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000004;
+              }
               while (input.getBytesUntilLimit() > 0) {
-                addVals(input.readUInt32());
+                vals_.add(input.readUInt32());
               }
               input.popLimit(limit);
@@ -6829,901 +11527,21 @@
             }
             case 34: {
-              crosby.binary.Osmformat.Info.Builder subBuilder = crosby.binary.Osmformat.Info.newBuilder();
-              if (hasInfo()) {
-                subBuilder.mergeFrom(getInfo());
+              crosby.binary.Osmformat.Info.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000002) == 0x00000002)) {
+                subBuilder = info_.toBuilder();
               }
-              input.readMessage(subBuilder, extensionRegistry);
-              setInfo(subBuilder.buildPartial());
+              info_ = input.readMessage(crosby.binary.Osmformat.Info.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(info_);
+                info_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000002;
               break;
             }
             case 64: {
-              ensureRefsIsMutable();
-              refs_.add(input.readSInt64());
-              break;
-            }
-            case 66: {
-              int length = input.readRawVarint32();
-              int limit = input.pushLimit(length);
-              while (input.getBytesUntilLimit() > 0) {
-                addRefs(input.readSInt64());
+              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
+                rolesSid_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000010;
               }
-              input.popLimit(limit);
-              break;
-            }
-          }
-        }
-      }
-      
-      private int bitField0_;
-      
-      // required int64 id = 1;
-      private long id_ ;
-      public boolean hasId() {
-        return ((bitField0_ & 0x00000001) == 0x00000001);
-      }
-      public long getId() {
-        return id_;
-      }
-      public Builder setId(long value) {
-        bitField0_ |= 0x00000001;
-        id_ = value;
-        
-        return this;
-      }
-      public Builder clearId() {
-        bitField0_ = (bitField0_ & ~0x00000001);
-        id_ = 0L;
-        
-        return this;
-      }
-      
-      // repeated uint32 keys = 2 [packed = true];
-      private java.util.List<java.lang.Integer> keys_ = java.util.Collections.emptyList();;
-      private void ensureKeysIsMutable() {
-        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
-          keys_ = new java.util.ArrayList<java.lang.Integer>(keys_);
-          bitField0_ |= 0x00000002;
-         }
-      }
-      public java.util.List<java.lang.Integer>
-          getKeysList() {
-        return java.util.Collections.unmodifiableList(keys_);
-      }
-      public int getKeysCount() {
-        return keys_.size();
-      }
-      public int getKeys(int index) {
-        return keys_.get(index);
-      }
-      public Builder setKeys(
-          int index, int value) {
-        ensureKeysIsMutable();
-        keys_.set(index, value);
-        
-        return this;
-      }
-      public Builder addKeys(int value) {
-        ensureKeysIsMutable();
-        keys_.add(value);
-        
-        return this;
-      }
-      public Builder addAllKeys(
-          java.lang.Iterable<? extends java.lang.Integer> values) {
-        ensureKeysIsMutable();
-        super.addAll(values, keys_);
-        
-        return this;
-      }
-      public Builder clearKeys() {
-        keys_ = java.util.Collections.emptyList();;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        
-        return this;
-      }
-      
-      // repeated uint32 vals = 3 [packed = true];
-      private java.util.List<java.lang.Integer> vals_ = java.util.Collections.emptyList();;
-      private void ensureValsIsMutable() {
-        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
-          vals_ = new java.util.ArrayList<java.lang.Integer>(vals_);
-          bitField0_ |= 0x00000004;
-         }
-      }
-      public java.util.List<java.lang.Integer>
-          getValsList() {
-        return java.util.Collections.unmodifiableList(vals_);
-      }
-      public int getValsCount() {
-        return vals_.size();
-      }
-      public int getVals(int index) {
-        return vals_.get(index);
-      }
-      public Builder setVals(
-          int index, int value) {
-        ensureValsIsMutable();
-        vals_.set(index, value);
-        
-        return this;
-      }
-      public Builder addVals(int value) {
-        ensureValsIsMutable();
-        vals_.add(value);
-        
-        return this;
-      }
-      public Builder addAllVals(
-          java.lang.Iterable<? extends java.lang.Integer> values) {
-        ensureValsIsMutable();
-        super.addAll(values, vals_);
-        
-        return this;
-      }
-      public Builder clearVals() {
-        vals_ = java.util.Collections.emptyList();;
-        bitField0_ = (bitField0_ & ~0x00000004);
-        
-        return this;
-      }
-      
-      // optional .OSMPBF.Info info = 4;
-      private crosby.binary.Osmformat.Info info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
-      public boolean hasInfo() {
-        return ((bitField0_ & 0x00000008) == 0x00000008);
-      }
-      public crosby.binary.Osmformat.Info getInfo() {
-        return info_;
-      }
-      public Builder setInfo(crosby.binary.Osmformat.Info value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        info_ = value;
-        
-        bitField0_ |= 0x00000008;
-        return this;
-      }
-      public Builder setInfo(
-          crosby.binary.Osmformat.Info.Builder builderForValue) {
-        info_ = builderForValue.build();
-        
-        bitField0_ |= 0x00000008;
-        return this;
-      }
-      public Builder mergeInfo(crosby.binary.Osmformat.Info value) {
-        if (((bitField0_ & 0x00000008) == 0x00000008) &&
-            info_ != crosby.binary.Osmformat.Info.getDefaultInstance()) {
-          info_ =
-            crosby.binary.Osmformat.Info.newBuilder(info_).mergeFrom(value).buildPartial();
-        } else {
-          info_ = value;
-        }
-        
-        bitField0_ |= 0x00000008;
-        return this;
-      }
-      public Builder clearInfo() {
-        info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
-        
-        bitField0_ = (bitField0_ & ~0x00000008);
-        return this;
-      }
-      
-      // repeated sint64 refs = 8 [packed = true];
-      private java.util.List<java.lang.Long> refs_ = java.util.Collections.emptyList();;
-      private void ensureRefsIsMutable() {
-        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
-          refs_ = new java.util.ArrayList<java.lang.Long>(refs_);
-          bitField0_ |= 0x00000010;
-         }
-      }
-      public java.util.List<java.lang.Long>
-          getRefsList() {
-        return java.util.Collections.unmodifiableList(refs_);
-      }
-      public int getRefsCount() {
-        return refs_.size();
-      }
-      public long getRefs(int index) {
-        return refs_.get(index);
-      }
-      public Builder setRefs(
-          int index, long value) {
-        ensureRefsIsMutable();
-        refs_.set(index, value);
-        
-        return this;
-      }
-      public Builder addRefs(long value) {
-        ensureRefsIsMutable();
-        refs_.add(value);
-        
-        return this;
-      }
-      public Builder addAllRefs(
-          java.lang.Iterable<? extends java.lang.Long> values) {
-        ensureRefsIsMutable();
-        super.addAll(values, refs_);
-        
-        return this;
-      }
-      public Builder clearRefs() {
-        refs_ = java.util.Collections.emptyList();;
-        bitField0_ = (bitField0_ & ~0x00000010);
-        
-        return this;
-      }
-      
-      // @@protoc_insertion_point(builder_scope:OSMPBF.Way)
-    }
-    
-    static {
-      defaultInstance = new Way(true);
-      defaultInstance.initFields();
-    }
-    
-    // @@protoc_insertion_point(class_scope:OSMPBF.Way)
-  }
-  
-  public interface RelationOrBuilder
-      extends com.google.protobuf.MessageLiteOrBuilder {
-    
-    // required int64 id = 1;
-    boolean hasId();
-    long getId();
-    
-    // repeated uint32 keys = 2 [packed = true];
-    java.util.List<java.lang.Integer> getKeysList();
-    int getKeysCount();
-    int getKeys(int index);
-    
-    // repeated uint32 vals = 3 [packed = true];
-    java.util.List<java.lang.Integer> getValsList();
-    int getValsCount();
-    int getVals(int index);
-    
-    // optional .OSMPBF.Info info = 4;
-    boolean hasInfo();
-    crosby.binary.Osmformat.Info getInfo();
-    
-    // repeated int32 roles_sid = 8 [packed = true];
-    java.util.List<java.lang.Integer> getRolesSidList();
-    int getRolesSidCount();
-    int getRolesSid(int index);
-    
-    // repeated sint64 memids = 9 [packed = true];
-    java.util.List<java.lang.Long> getMemidsList();
-    int getMemidsCount();
-    long getMemids(int index);
-    
-    // repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];
-    java.util.List<crosby.binary.Osmformat.Relation.MemberType> getTypesList();
-    int getTypesCount();
-    crosby.binary.Osmformat.Relation.MemberType getTypes(int index);
-  }
-  public static final class Relation extends
-      com.google.protobuf.GeneratedMessageLite
-      implements RelationOrBuilder {
-    // Use Relation.newBuilder() to construct.
-    private Relation(Builder builder) {
-      super(builder);
-    }
-    private Relation(boolean noInit) {}
-    
-    private static final Relation defaultInstance;
-    public static Relation getDefaultInstance() {
-      return defaultInstance;
-    }
-    
-    public Relation getDefaultInstanceForType() {
-      return defaultInstance;
-    }
-    
-    public enum MemberType
-        implements com.google.protobuf.Internal.EnumLite {
-      NODE(0, 0),
-      WAY(1, 1),
-      RELATION(2, 2),
-      ;
-      
-      public static final int NODE_VALUE = 0;
-      public static final int WAY_VALUE = 1;
-      public static final int RELATION_VALUE = 2;
-      
-      
-      public final int getNumber() { return value; }
-      
-      public static MemberType valueOf(int value) {
-        switch (value) {
-          case 0: return NODE;
-          case 1: return WAY;
-          case 2: return RELATION;
-          default: return null;
-        }
-      }
-      
-      public static com.google.protobuf.Internal.EnumLiteMap<MemberType>
-          internalGetValueMap() {
-        return internalValueMap;
-      }
-      private static com.google.protobuf.Internal.EnumLiteMap<MemberType>
-          internalValueMap =
-            new com.google.protobuf.Internal.EnumLiteMap<MemberType>() {
-              public MemberType findValueByNumber(int number) {
-                return MemberType.valueOf(number);
-              }
-            };
-      
-      private final int value;
-      
-      private MemberType(int index, int value) {
-        this.value = value;
-      }
-      
-      // @@protoc_insertion_point(enum_scope:OSMPBF.Relation.MemberType)
-    }
-    
-    private int bitField0_;
-    // required int64 id = 1;
-    public static final int ID_FIELD_NUMBER = 1;
-    private long id_;
-    public boolean hasId() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    public long getId() {
-      return id_;
-    }
-    
-    // repeated uint32 keys = 2 [packed = true];
-    public static final int KEYS_FIELD_NUMBER = 2;
-    private java.util.List<java.lang.Integer> keys_;
-    public java.util.List<java.lang.Integer>
-        getKeysList() {
-      return keys_;
-    }
-    public int getKeysCount() {
-      return keys_.size();
-    }
-    public int getKeys(int index) {
-      return keys_.get(index);
-    }
-    private int keysMemoizedSerializedSize = -1;
-    
-    // repeated uint32 vals = 3 [packed = true];
-    public static final int VALS_FIELD_NUMBER = 3;
-    private java.util.List<java.lang.Integer> vals_;
-    public java.util.List<java.lang.Integer>
-        getValsList() {
-      return vals_;
-    }
-    public int getValsCount() {
-      return vals_.size();
-    }
-    public int getVals(int index) {
-      return vals_.get(index);
-    }
-    private int valsMemoizedSerializedSize = -1;
-    
-    // optional .OSMPBF.Info info = 4;
-    public static final int INFO_FIELD_NUMBER = 4;
-    private crosby.binary.Osmformat.Info info_;
-    public boolean hasInfo() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    public crosby.binary.Osmformat.Info getInfo() {
-      return info_;
-    }
-    
-    // repeated int32 roles_sid = 8 [packed = true];
-    public static final int ROLES_SID_FIELD_NUMBER = 8;
-    private java.util.List<java.lang.Integer> rolesSid_;
-    public java.util.List<java.lang.Integer>
-        getRolesSidList() {
-      return rolesSid_;
-    }
-    public int getRolesSidCount() {
-      return rolesSid_.size();
-    }
-    public int getRolesSid(int index) {
-      return rolesSid_.get(index);
-    }
-    private int rolesSidMemoizedSerializedSize = -1;
-    
-    // repeated sint64 memids = 9 [packed = true];
-    public static final int MEMIDS_FIELD_NUMBER = 9;
-    private java.util.List<java.lang.Long> memids_;
-    public java.util.List<java.lang.Long>
-        getMemidsList() {
-      return memids_;
-    }
-    public int getMemidsCount() {
-      return memids_.size();
-    }
-    public long getMemids(int index) {
-      return memids_.get(index);
-    }
-    private int memidsMemoizedSerializedSize = -1;
-    
-    // repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];
-    public static final int TYPES_FIELD_NUMBER = 10;
-    private java.util.List<crosby.binary.Osmformat.Relation.MemberType> types_;
-    public java.util.List<crosby.binary.Osmformat.Relation.MemberType> getTypesList() {
-      return types_;
-    }
-    public int getTypesCount() {
-      return types_.size();
-    }
-    public crosby.binary.Osmformat.Relation.MemberType getTypes(int index) {
-      return types_.get(index);
-    }
-    private int typesMemoizedSerializedSize;
-    
-    private void initFields() {
-      id_ = 0L;
-      keys_ = java.util.Collections.emptyList();;
-      vals_ = java.util.Collections.emptyList();;
-      info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
-      rolesSid_ = java.util.Collections.emptyList();;
-      memids_ = java.util.Collections.emptyList();;
-      types_ = java.util.Collections.emptyList();
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
-      
-      if (!hasId()) {
-        memoizedIsInitialized = 0;
-        return false;
-      }
-      memoizedIsInitialized = 1;
-      return true;
-    }
-    
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeInt64(1, id_);
-      }
-      if (getKeysList().size() > 0) {
-        output.writeRawVarint32(18);
-        output.writeRawVarint32(keysMemoizedSerializedSize);
-      }
-      for (int i = 0; i < keys_.size(); i++) {
-        output.writeUInt32NoTag(keys_.get(i));
-      }
-      if (getValsList().size() > 0) {
-        output.writeRawVarint32(26);
-        output.writeRawVarint32(valsMemoizedSerializedSize);
-      }
-      for (int i = 0; i < vals_.size(); i++) {
-        output.writeUInt32NoTag(vals_.get(i));
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeMessage(4, info_);
-      }
-      if (getRolesSidList().size() > 0) {
-        output.writeRawVarint32(66);
-        output.writeRawVarint32(rolesSidMemoizedSerializedSize);
-      }
-      for (int i = 0; i < rolesSid_.size(); i++) {
-        output.writeInt32NoTag(rolesSid_.get(i));
-      }
-      if (getMemidsList().size() > 0) {
-        output.writeRawVarint32(74);
-        output.writeRawVarint32(memidsMemoizedSerializedSize);
-      }
-      for (int i = 0; i < memids_.size(); i++) {
-        output.writeSInt64NoTag(memids_.get(i));
-      }
-      if (getTypesList().size() > 0) {
-        output.writeRawVarint32(82);
-        output.writeRawVarint32(typesMemoizedSerializedSize);
-      }
-      for (int i = 0; i < types_.size(); i++) {
-        output.writeEnumNoTag(types_.get(i).getNumber());
-      }
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-    
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt64Size(1, id_);
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < keys_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeUInt32SizeNoTag(keys_.get(i));
-        }
-        size += dataSize;
-        if (!getKeysList().isEmpty()) {
-          size += 1;
-          size += com.google.protobuf.CodedOutputStream
-              .computeInt32SizeNoTag(dataSize);
-        }
-        keysMemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < vals_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeUInt32SizeNoTag(vals_.get(i));
-        }
-        size += dataSize;
-        if (!getValsList().isEmpty()) {
-          size += 1;
-          size += com.google.protobuf.CodedOutputStream
-              .computeInt32SizeNoTag(dataSize);
-        }
-        valsMemoizedSerializedSize = dataSize;
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, info_);
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < rolesSid_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeInt32SizeNoTag(rolesSid_.get(i));
-        }
-        size += dataSize;
-        if (!getRolesSidList().isEmpty()) {
-          size += 1;
-          size += com.google.protobuf.CodedOutputStream
-              .computeInt32SizeNoTag(dataSize);
-        }
-        rolesSidMemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < memids_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeSInt64SizeNoTag(memids_.get(i));
-        }
-        size += dataSize;
-        if (!getMemidsList().isEmpty()) {
-          size += 1;
-          size += com.google.protobuf.CodedOutputStream
-              .computeInt32SizeNoTag(dataSize);
-        }
-        memidsMemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < types_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeEnumSizeNoTag(types_.get(i).getNumber());
-        }
-        size += dataSize;
-        if (!getTypesList().isEmpty()) {  size += 1;
-          size += com.google.protobuf.CodedOutputStream
-            .computeRawVarint32Size(dataSize);
-        }typesMemoizedSerializedSize = dataSize;
-      }
-      memoizedSerializedSize = size;
-      return size;
-    }
-    
-    private static final long serialVersionUID = 0L;
-    @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-    
-    public static crosby.binary.Osmformat.Relation parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static crosby.binary.Osmformat.Relation parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static crosby.binary.Osmformat.Relation parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static crosby.binary.Osmformat.Relation parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static crosby.binary.Osmformat.Relation parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static crosby.binary.Osmformat.Relation parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    public static crosby.binary.Osmformat.Relation parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      Builder builder = newBuilder();
-      if (builder.mergeDelimitedFrom(input)) {
-        return builder.buildParsed();
-      } else {
-        return null;
-      }
-    }
-    public static crosby.binary.Osmformat.Relation 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 crosby.binary.Osmformat.Relation parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static crosby.binary.Osmformat.Relation 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(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(crosby.binary.Osmformat.Relation prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-    
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageLite.Builder<
-          crosby.binary.Osmformat.Relation, Builder>
-        implements crosby.binary.Osmformat.RelationOrBuilder {
-      // Construct using crosby.binary.Osmformat.Relation.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-      
-      private void maybeForceBuilderInitialization() {
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-      
-      public Builder clear() {
-        super.clear();
-        id_ = 0L;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        keys_ = java.util.Collections.emptyList();;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        vals_ = java.util.Collections.emptyList();;
-        bitField0_ = (bitField0_ & ~0x00000004);
-        info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
-        bitField0_ = (bitField0_ & ~0x00000008);
-        rolesSid_ = java.util.Collections.emptyList();;
-        bitField0_ = (bitField0_ & ~0x00000010);
-        memids_ = java.util.Collections.emptyList();;
-        bitField0_ = (bitField0_ & ~0x00000020);
-        types_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000040);
-        return this;
-      }
-      
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-      
-      public crosby.binary.Osmformat.Relation getDefaultInstanceForType() {
-        return crosby.binary.Osmformat.Relation.getDefaultInstance();
-      }
-      
-      public crosby.binary.Osmformat.Relation build() {
-        crosby.binary.Osmformat.Relation result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-      
-      private crosby.binary.Osmformat.Relation buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        crosby.binary.Osmformat.Relation result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return result;
-      }
-      
-      public crosby.binary.Osmformat.Relation buildPartial() {
-        crosby.binary.Osmformat.Relation result = new crosby.binary.Osmformat.Relation(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.id_ = id_;
-        if (((bitField0_ & 0x00000002) == 0x00000002)) {
-          keys_ = java.util.Collections.unmodifiableList(keys_);
-          bitField0_ = (bitField0_ & ~0x00000002);
-        }
-        result.keys_ = keys_;
-        if (((bitField0_ & 0x00000004) == 0x00000004)) {
-          vals_ = java.util.Collections.unmodifiableList(vals_);
-          bitField0_ = (bitField0_ & ~0x00000004);
-        }
-        result.vals_ = vals_;
-        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.info_ = info_;
-        if (((bitField0_ & 0x00000010) == 0x00000010)) {
-          rolesSid_ = java.util.Collections.unmodifiableList(rolesSid_);
-          bitField0_ = (bitField0_ & ~0x00000010);
-        }
-        result.rolesSid_ = rolesSid_;
-        if (((bitField0_ & 0x00000020) == 0x00000020)) {
-          memids_ = java.util.Collections.unmodifiableList(memids_);
-          bitField0_ = (bitField0_ & ~0x00000020);
-        }
-        result.memids_ = memids_;
-        if (((bitField0_ & 0x00000040) == 0x00000040)) {
-          types_ = java.util.Collections.unmodifiableList(types_);
-          bitField0_ = (bitField0_ & ~0x00000040);
-        }
-        result.types_ = types_;
-        result.bitField0_ = to_bitField0_;
-        return result;
-      }
-      
-      public Builder mergeFrom(crosby.binary.Osmformat.Relation other) {
-        if (other == crosby.binary.Osmformat.Relation.getDefaultInstance()) return this;
-        if (other.hasId()) {
-          setId(other.getId());
-        }
-        if (!other.keys_.isEmpty()) {
-          if (keys_.isEmpty()) {
-            keys_ = other.keys_;
-            bitField0_ = (bitField0_ & ~0x00000002);
-          } else {
-            ensureKeysIsMutable();
-            keys_.addAll(other.keys_);
-          }
-          
-        }
-        if (!other.vals_.isEmpty()) {
-          if (vals_.isEmpty()) {
-            vals_ = other.vals_;
-            bitField0_ = (bitField0_ & ~0x00000004);
-          } else {
-            ensureValsIsMutable();
-            vals_.addAll(other.vals_);
-          }
-          
-        }
-        if (other.hasInfo()) {
-          mergeInfo(other.getInfo());
-        }
-        if (!other.rolesSid_.isEmpty()) {
-          if (rolesSid_.isEmpty()) {
-            rolesSid_ = other.rolesSid_;
-            bitField0_ = (bitField0_ & ~0x00000010);
-          } else {
-            ensureRolesSidIsMutable();
-            rolesSid_.addAll(other.rolesSid_);
-          }
-          
-        }
-        if (!other.memids_.isEmpty()) {
-          if (memids_.isEmpty()) {
-            memids_ = other.memids_;
-            bitField0_ = (bitField0_ & ~0x00000020);
-          } else {
-            ensureMemidsIsMutable();
-            memids_.addAll(other.memids_);
-          }
-          
-        }
-        if (!other.types_.isEmpty()) {
-          if (types_.isEmpty()) {
-            types_ = other.types_;
-            bitField0_ = (bitField0_ & ~0x00000040);
-          } else {
-            ensureTypesIsMutable();
-            types_.addAll(other.types_);
-          }
-          
-        }
-        return this;
-      }
-      
-      public final boolean isInitialized() {
-        if (!hasId()) {
-          
-          return false;
-        }
-        return true;
-      }
-      
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        while (true) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              
-              return this;
-            default: {
-              if (!parseUnknownField(input, extensionRegistry, tag)) {
-                
-                return this;
-              }
-              break;
-            }
-            case 8: {
-              bitField0_ |= 0x00000001;
-              id_ = input.readInt64();
-              break;
-            }
-            case 16: {
-              ensureKeysIsMutable();
-              keys_.add(input.readUInt32());
-              break;
-            }
-            case 18: {
-              int length = input.readRawVarint32();
-              int limit = input.pushLimit(length);
-              while (input.getBytesUntilLimit() > 0) {
-                addKeys(input.readUInt32());
-              }
-              input.popLimit(limit);
-              break;
-            }
-            case 24: {
-              ensureValsIsMutable();
-              vals_.add(input.readUInt32());
-              break;
-            }
-            case 26: {
-              int length = input.readRawVarint32();
-              int limit = input.pushLimit(length);
-              while (input.getBytesUntilLimit() > 0) {
-                addVals(input.readUInt32());
-              }
-              input.popLimit(limit);
-              break;
-            }
-            case 34: {
-              crosby.binary.Osmformat.Info.Builder subBuilder = crosby.binary.Osmformat.Info.newBuilder();
-              if (hasInfo()) {
-                subBuilder.mergeFrom(getInfo());
-              }
-              input.readMessage(subBuilder, extensionRegistry);
-              setInfo(subBuilder.buildPartial());
-              break;
-            }
-            case 64: {
-              ensureRolesSidIsMutable();
               rolesSid_.add(input.readInt32());
               break;
@@ -7732,6 +11550,10 @@
               int length = input.readRawVarint32();
               int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010) && input.getBytesUntilLimit() > 0) {
+                rolesSid_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000010;
+              }
               while (input.getBytesUntilLimit() > 0) {
-                addRolesSid(input.readInt32());
+                rolesSid_.add(input.readInt32());
               }
               input.popLimit(limit);
@@ -7739,5 +11561,8 @@
             }
             case 72: {
-              ensureMemidsIsMutable();
+              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
+                memids_ = new java.util.ArrayList<java.lang.Long>();
+                mutable_bitField0_ |= 0x00000020;
+              }
               memids_.add(input.readSInt64());
               break;
@@ -7746,6 +11571,10 @@
               int length = input.readRawVarint32();
               int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020) && input.getBytesUntilLimit() > 0) {
+                memids_ = new java.util.ArrayList<java.lang.Long>();
+                mutable_bitField0_ |= 0x00000020;
+              }
               while (input.getBytesUntilLimit() > 0) {
-                addMemids(input.readSInt64());
+                memids_.add(input.readSInt64());
               }
               input.popLimit(limit);
@@ -7756,5 +11585,9 @@
               crosby.binary.Osmformat.Relation.MemberType value = crosby.binary.Osmformat.Relation.MemberType.valueOf(rawValue);
               if (value != null) {
-                addTypes(value);
+                if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
+                  types_ = new java.util.ArrayList<crosby.binary.Osmformat.Relation.MemberType>();
+                  mutable_bitField0_ |= 0x00000040;
+                }
+                types_.add(value);
               }
               break;
@@ -7767,5 +11600,9 @@
                 crosby.binary.Osmformat.Relation.MemberType value = crosby.binary.Osmformat.Relation.MemberType.valueOf(rawValue);
                 if (value != null) {
-                  addTypes(value);
+                  if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
+                    types_ = new java.util.ArrayList<crosby.binary.Osmformat.Relation.MemberType>();
+                    mutable_bitField0_ |= 0x00000040;
+                  }
+                  types_.add(value);
                 }
               }
@@ -7775,16 +11612,716 @@
           }
         }
-      }
-      
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+          keys_ = java.util.Collections.unmodifiableList(keys_);
+        }
+        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+          vals_ = java.util.Collections.unmodifiableList(vals_);
+        }
+        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
+          rolesSid_ = java.util.Collections.unmodifiableList(rolesSid_);
+        }
+        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
+          memids_ = java.util.Collections.unmodifiableList(memids_);
+        }
+        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
+          types_ = java.util.Collections.unmodifiableList(types_);
+        }
+        makeExtensionsImmutable();
+      }
+    }
+    public static com.google.protobuf.Parser<Relation> PARSER =
+        new com.google.protobuf.AbstractParser<Relation>() {
+      public Relation parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Relation(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Relation> getParserForType() {
+      return PARSER;
+    }
+
+    /**
+     * Protobuf enum {@code OSMPBF.Relation.MemberType}
+     */
+    public enum MemberType
+        implements com.google.protobuf.Internal.EnumLite {
+      /**
+       * <code>NODE = 0;</code>
+       */
+      NODE(0, 0),
+      /**
+       * <code>WAY = 1;</code>
+       */
+      WAY(1, 1),
+      /**
+       * <code>RELATION = 2;</code>
+       */
+      RELATION(2, 2),
+      ;
+
+      /**
+       * <code>NODE = 0;</code>
+       */
+      public static final int NODE_VALUE = 0;
+      /**
+       * <code>WAY = 1;</code>
+       */
+      public static final int WAY_VALUE = 1;
+      /**
+       * <code>RELATION = 2;</code>
+       */
+      public static final int RELATION_VALUE = 2;
+
+
+      public final int getNumber() { return value; }
+
+      public static MemberType valueOf(int value) {
+        switch (value) {
+          case 0: return NODE;
+          case 1: return WAY;
+          case 2: return RELATION;
+          default: return null;
+        }
+      }
+
+      public static com.google.protobuf.Internal.EnumLiteMap<MemberType>
+          internalGetValueMap() {
+        return internalValueMap;
+      }
+      private static com.google.protobuf.Internal.EnumLiteMap<MemberType>
+          internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<MemberType>() {
+              public MemberType findValueByNumber(int number) {
+                return MemberType.valueOf(number);
+              }
+            };
+
+      private final int value;
+
+      private MemberType(int index, int value) {
+        this.value = value;
+      }
+
+      // @@protoc_insertion_point(enum_scope:OSMPBF.Relation.MemberType)
+    }
+
+    private int bitField0_;
+    // required int64 id = 1;
+    public static final int ID_FIELD_NUMBER = 1;
+    private long id_;
+    /**
+     * <code>required int64 id = 1;</code>
+     */
+    public boolean hasId() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>required int64 id = 1;</code>
+     */
+    public long getId() {
+      return id_;
+    }
+
+    // repeated uint32 keys = 2 [packed = true];
+    public static final int KEYS_FIELD_NUMBER = 2;
+    private java.util.List<java.lang.Integer> keys_;
+    /**
+     * <code>repeated uint32 keys = 2 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays.
+     * </pre>
+     */
+    public java.util.List<java.lang.Integer>
+        getKeysList() {
+      return keys_;
+    }
+    /**
+     * <code>repeated uint32 keys = 2 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays.
+     * </pre>
+     */
+    public int getKeysCount() {
+      return keys_.size();
+    }
+    /**
+     * <code>repeated uint32 keys = 2 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays.
+     * </pre>
+     */
+    public int getKeys(int index) {
+      return keys_.get(index);
+    }
+    private int keysMemoizedSerializedSize = -1;
+
+    // repeated uint32 vals = 3 [packed = true];
+    public static final int VALS_FIELD_NUMBER = 3;
+    private java.util.List<java.lang.Integer> vals_;
+    /**
+     * <code>repeated uint32 vals = 3 [packed = true];</code>
+     */
+    public java.util.List<java.lang.Integer>
+        getValsList() {
+      return vals_;
+    }
+    /**
+     * <code>repeated uint32 vals = 3 [packed = true];</code>
+     */
+    public int getValsCount() {
+      return vals_.size();
+    }
+    /**
+     * <code>repeated uint32 vals = 3 [packed = true];</code>
+     */
+    public int getVals(int index) {
+      return vals_.get(index);
+    }
+    private int valsMemoizedSerializedSize = -1;
+
+    // optional .OSMPBF.Info info = 4;
+    public static final int INFO_FIELD_NUMBER = 4;
+    private crosby.binary.Osmformat.Info info_;
+    /**
+     * <code>optional .OSMPBF.Info info = 4;</code>
+     */
+    public boolean hasInfo() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>optional .OSMPBF.Info info = 4;</code>
+     */
+    public crosby.binary.Osmformat.Info getInfo() {
+      return info_;
+    }
+
+    // repeated int32 roles_sid = 8 [packed = true];
+    public static final int ROLES_SID_FIELD_NUMBER = 8;
+    private java.util.List<java.lang.Integer> rolesSid_;
+    /**
+     * <code>repeated int32 roles_sid = 8 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays
+     * </pre>
+     */
+    public java.util.List<java.lang.Integer>
+        getRolesSidList() {
+      return rolesSid_;
+    }
+    /**
+     * <code>repeated int32 roles_sid = 8 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays
+     * </pre>
+     */
+    public int getRolesSidCount() {
+      return rolesSid_.size();
+    }
+    /**
+     * <code>repeated int32 roles_sid = 8 [packed = true];</code>
+     *
+     * <pre>
+     * Parallel arrays
+     * </pre>
+     */
+    public int getRolesSid(int index) {
+      return rolesSid_.get(index);
+    }
+    private int rolesSidMemoizedSerializedSize = -1;
+
+    // repeated sint64 memids = 9 [packed = true];
+    public static final int MEMIDS_FIELD_NUMBER = 9;
+    private java.util.List<java.lang.Long> memids_;
+    /**
+     * <code>repeated sint64 memids = 9 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA encoded
+     * </pre>
+     */
+    public java.util.List<java.lang.Long>
+        getMemidsList() {
+      return memids_;
+    }
+    /**
+     * <code>repeated sint64 memids = 9 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA encoded
+     * </pre>
+     */
+    public int getMemidsCount() {
+      return memids_.size();
+    }
+    /**
+     * <code>repeated sint64 memids = 9 [packed = true];</code>
+     *
+     * <pre>
+     * DELTA encoded
+     * </pre>
+     */
+    public long getMemids(int index) {
+      return memids_.get(index);
+    }
+    private int memidsMemoizedSerializedSize = -1;
+
+    // repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];
+    public static final int TYPES_FIELD_NUMBER = 10;
+    private java.util.List<crosby.binary.Osmformat.Relation.MemberType> types_;
+    /**
+     * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
+     */
+    public java.util.List<crosby.binary.Osmformat.Relation.MemberType> getTypesList() {
+      return types_;
+    }
+    /**
+     * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
+     */
+    public int getTypesCount() {
+      return types_.size();
+    }
+    /**
+     * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
+     */
+    public crosby.binary.Osmformat.Relation.MemberType getTypes(int index) {
+      return types_.get(index);
+    }
+    private int typesMemoizedSerializedSize;
+
+    private void initFields() {
+      id_ = 0L;
+      keys_ = java.util.Collections.emptyList();
+      vals_ = java.util.Collections.emptyList();
+      info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
+      rolesSid_ = java.util.Collections.emptyList();
+      memids_ = java.util.Collections.emptyList();
+      types_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+
+      if (!hasId()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeInt64(1, id_);
+      }
+      if (getKeysList().size() > 0) {
+        output.writeRawVarint32(18);
+        output.writeRawVarint32(keysMemoizedSerializedSize);
+      }
+      for (int i = 0; i < keys_.size(); i++) {
+        output.writeUInt32NoTag(keys_.get(i));
+      }
+      if (getValsList().size() > 0) {
+        output.writeRawVarint32(26);
+        output.writeRawVarint32(valsMemoizedSerializedSize);
+      }
+      for (int i = 0; i < vals_.size(); i++) {
+        output.writeUInt32NoTag(vals_.get(i));
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeMessage(4, info_);
+      }
+      if (getRolesSidList().size() > 0) {
+        output.writeRawVarint32(66);
+        output.writeRawVarint32(rolesSidMemoizedSerializedSize);
+      }
+      for (int i = 0; i < rolesSid_.size(); i++) {
+        output.writeInt32NoTag(rolesSid_.get(i));
+      }
+      if (getMemidsList().size() > 0) {
+        output.writeRawVarint32(74);
+        output.writeRawVarint32(memidsMemoizedSerializedSize);
+      }
+      for (int i = 0; i < memids_.size(); i++) {
+        output.writeSInt64NoTag(memids_.get(i));
+      }
+      if (getTypesList().size() > 0) {
+        output.writeRawVarint32(82);
+        output.writeRawVarint32(typesMemoizedSerializedSize);
+      }
+      for (int i = 0; i < types_.size(); i++) {
+        output.writeEnumNoTag(types_.get(i).getNumber());
+      }
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(1, id_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < keys_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(keys_.get(i));
+        }
+        size += dataSize;
+        if (!getKeysList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        keysMemoizedSerializedSize = dataSize;
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < vals_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(vals_.get(i));
+        }
+        size += dataSize;
+        if (!getValsList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        valsMemoizedSerializedSize = dataSize;
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, info_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < rolesSid_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(rolesSid_.get(i));
+        }
+        size += dataSize;
+        if (!getRolesSidList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        rolesSidMemoizedSerializedSize = dataSize;
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < memids_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeSInt64SizeNoTag(memids_.get(i));
+        }
+        size += dataSize;
+        if (!getMemidsList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        memidsMemoizedSerializedSize = dataSize;
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < types_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeEnumSizeNoTag(types_.get(i).getNumber());
+        }
+        size += dataSize;
+        if (!getTypesList().isEmpty()) {  size += 1;
+          size += com.google.protobuf.CodedOutputStream
+            .computeRawVarint32Size(dataSize);
+        }typesMemoizedSerializedSize = dataSize;
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+
+    public static crosby.binary.Osmformat.Relation parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static crosby.binary.Osmformat.Relation parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static crosby.binary.Osmformat.Relation parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static crosby.binary.Osmformat.Relation parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static crosby.binary.Osmformat.Relation parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static crosby.binary.Osmformat.Relation parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static crosby.binary.Osmformat.Relation parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static crosby.binary.Osmformat.Relation parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static crosby.binary.Osmformat.Relation parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static crosby.binary.Osmformat.Relation parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Osmformat.Relation prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+
+    /**
+     * Protobuf type {@code OSMPBF.Relation}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Osmformat.Relation, Builder>
+        implements crosby.binary.Osmformat.RelationOrBuilder {
+      // Construct using crosby.binary.Osmformat.Relation.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        id_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        keys_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000002);
+        vals_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000004);
+        info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
+        bitField0_ = (bitField0_ & ~0x00000008);
+        rolesSid_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000010);
+        memids_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000020);
+        types_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000040);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public crosby.binary.Osmformat.Relation getDefaultInstanceForType() {
+        return crosby.binary.Osmformat.Relation.getDefaultInstance();
+      }
+
+      public crosby.binary.Osmformat.Relation build() {
+        crosby.binary.Osmformat.Relation result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public crosby.binary.Osmformat.Relation buildPartial() {
+        crosby.binary.Osmformat.Relation result = new crosby.binary.Osmformat.Relation(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.id_ = id_;
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          keys_ = java.util.Collections.unmodifiableList(keys_);
+          bitField0_ = (bitField0_ & ~0x00000002);
+        }
+        result.keys_ = keys_;
+        if (((bitField0_ & 0x00000004) == 0x00000004)) {
+          vals_ = java.util.Collections.unmodifiableList(vals_);
+          bitField0_ = (bitField0_ & ~0x00000004);
+        }
+        result.vals_ = vals_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.info_ = info_;
+        if (((bitField0_ & 0x00000010) == 0x00000010)) {
+          rolesSid_ = java.util.Collections.unmodifiableList(rolesSid_);
+          bitField0_ = (bitField0_ & ~0x00000010);
+        }
+        result.rolesSid_ = rolesSid_;
+        if (((bitField0_ & 0x00000020) == 0x00000020)) {
+          memids_ = java.util.Collections.unmodifiableList(memids_);
+          bitField0_ = (bitField0_ & ~0x00000020);
+        }
+        result.memids_ = memids_;
+        if (((bitField0_ & 0x00000040) == 0x00000040)) {
+          types_ = java.util.Collections.unmodifiableList(types_);
+          bitField0_ = (bitField0_ & ~0x00000040);
+        }
+        result.types_ = types_;
+        result.bitField0_ = to_bitField0_;
+        return result;
+      }
+
+      public Builder mergeFrom(crosby.binary.Osmformat.Relation other) {
+        if (other == crosby.binary.Osmformat.Relation.getDefaultInstance()) return this;
+        if (other.hasId()) {
+          setId(other.getId());
+        }
+        if (!other.keys_.isEmpty()) {
+          if (keys_.isEmpty()) {
+            keys_ = other.keys_;
+            bitField0_ = (bitField0_ & ~0x00000002);
+          } else {
+            ensureKeysIsMutable();
+            keys_.addAll(other.keys_);
+          }
+          
+        }
+        if (!other.vals_.isEmpty()) {
+          if (vals_.isEmpty()) {
+            vals_ = other.vals_;
+            bitField0_ = (bitField0_ & ~0x00000004);
+          } else {
+            ensureValsIsMutable();
+            vals_.addAll(other.vals_);
+          }
+          
+        }
+        if (other.hasInfo()) {
+          mergeInfo(other.getInfo());
+        }
+        if (!other.rolesSid_.isEmpty()) {
+          if (rolesSid_.isEmpty()) {
+            rolesSid_ = other.rolesSid_;
+            bitField0_ = (bitField0_ & ~0x00000010);
+          } else {
+            ensureRolesSidIsMutable();
+            rolesSid_.addAll(other.rolesSid_);
+          }
+          
+        }
+        if (!other.memids_.isEmpty()) {
+          if (memids_.isEmpty()) {
+            memids_ = other.memids_;
+            bitField0_ = (bitField0_ & ~0x00000020);
+          } else {
+            ensureMemidsIsMutable();
+            memids_.addAll(other.memids_);
+          }
+          
+        }
+        if (!other.types_.isEmpty()) {
+          if (types_.isEmpty()) {
+            types_ = other.types_;
+            bitField0_ = (bitField0_ & ~0x00000040);
+          } else {
+            ensureTypesIsMutable();
+            types_.addAll(other.types_);
+          }
+          
+        }
+        return this;
+      }
+
+      public final boolean isInitialized() {
+        if (!hasId()) {
+          
+          return false;
+        }
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        crosby.binary.Osmformat.Relation parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (crosby.binary.Osmformat.Relation) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
       private int bitField0_;
-      
+
       // required int64 id = 1;
       private long id_ ;
+      /**
+       * <code>required int64 id = 1;</code>
+       */
       public boolean hasId() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
+      /**
+       * <code>required int64 id = 1;</code>
+       */
       public long getId() {
         return id_;
       }
+      /**
+       * <code>required int64 id = 1;</code>
+       */
       public Builder setId(long value) {
         bitField0_ |= 0x00000001;
@@ -7793,4 +12330,7 @@
         return this;
       }
+      /**
+       * <code>required int64 id = 1;</code>
+       */
       public Builder clearId() {
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -7799,7 +12339,7 @@
         return this;
       }
-      
+
       // repeated uint32 keys = 2 [packed = true];
-      private java.util.List<java.lang.Integer> keys_ = java.util.Collections.emptyList();;
+      private java.util.List<java.lang.Integer> keys_ = java.util.Collections.emptyList();
       private void ensureKeysIsMutable() {
         if (!((bitField0_ & 0x00000002) == 0x00000002)) {
@@ -7808,14 +12348,42 @@
          }
       }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
       public java.util.List<java.lang.Integer>
           getKeysList() {
         return java.util.Collections.unmodifiableList(keys_);
       }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
       public int getKeysCount() {
         return keys_.size();
       }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
       public int getKeys(int index) {
         return keys_.get(index);
       }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
       public Builder setKeys(
           int index, int value) {
@@ -7825,4 +12393,11 @@
         return this;
       }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
       public Builder addKeys(int value) {
         ensureKeysIsMutable();
@@ -7831,4 +12406,11 @@
         return this;
       }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
       public Builder addAllKeys(
           java.lang.Iterable<? extends java.lang.Integer> values) {
@@ -7838,13 +12420,20 @@
         return this;
       }
+      /**
+       * <code>repeated uint32 keys = 2 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays.
+       * </pre>
+       */
       public Builder clearKeys() {
-        keys_ = java.util.Collections.emptyList();;
+        keys_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000002);
         
         return this;
       }
-      
+
       // repeated uint32 vals = 3 [packed = true];
-      private java.util.List<java.lang.Integer> vals_ = java.util.Collections.emptyList();;
+      private java.util.List<java.lang.Integer> vals_ = java.util.Collections.emptyList();
       private void ensureValsIsMutable() {
         if (!((bitField0_ & 0x00000004) == 0x00000004)) {
@@ -7853,14 +12442,26 @@
          }
       }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       */
       public java.util.List<java.lang.Integer>
           getValsList() {
         return java.util.Collections.unmodifiableList(vals_);
       }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       */
       public int getValsCount() {
         return vals_.size();
       }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       */
       public int getVals(int index) {
         return vals_.get(index);
       }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       */
       public Builder setVals(
           int index, int value) {
@@ -7870,4 +12471,7 @@
         return this;
       }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       */
       public Builder addVals(int value) {
         ensureValsIsMutable();
@@ -7876,4 +12480,7 @@
         return this;
       }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       */
       public Builder addAllVals(
           java.lang.Iterable<? extends java.lang.Integer> values) {
@@ -7883,19 +12490,31 @@
         return this;
       }
+      /**
+       * <code>repeated uint32 vals = 3 [packed = true];</code>
+       */
       public Builder clearVals() {
-        vals_ = java.util.Collections.emptyList();;
+        vals_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000004);
         
         return this;
       }
-      
+
       // optional .OSMPBF.Info info = 4;
       private crosby.binary.Osmformat.Info info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
+      /**
+       * <code>optional .OSMPBF.Info info = 4;</code>
+       */
       public boolean hasInfo() {
         return ((bitField0_ & 0x00000008) == 0x00000008);
       }
+      /**
+       * <code>optional .OSMPBF.Info info = 4;</code>
+       */
       public crosby.binary.Osmformat.Info getInfo() {
         return info_;
       }
+      /**
+       * <code>optional .OSMPBF.Info info = 4;</code>
+       */
       public Builder setInfo(crosby.binary.Osmformat.Info value) {
         if (value == null) {
@@ -7903,15 +12522,21 @@
         }
         info_ = value;
-        
+
         bitField0_ |= 0x00000008;
         return this;
       }
+      /**
+       * <code>optional .OSMPBF.Info info = 4;</code>
+       */
       public Builder setInfo(
           crosby.binary.Osmformat.Info.Builder builderForValue) {
         info_ = builderForValue.build();
-        
+
         bitField0_ |= 0x00000008;
         return this;
       }
+      /**
+       * <code>optional .OSMPBF.Info info = 4;</code>
+       */
       public Builder mergeInfo(crosby.binary.Osmformat.Info value) {
         if (((bitField0_ & 0x00000008) == 0x00000008) &&
@@ -7922,17 +12547,20 @@
           info_ = value;
         }
-        
+
         bitField0_ |= 0x00000008;
         return this;
       }
+      /**
+       * <code>optional .OSMPBF.Info info = 4;</code>
+       */
       public Builder clearInfo() {
         info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
-        
+
         bitField0_ = (bitField0_ & ~0x00000008);
         return this;
       }
-      
+
       // repeated int32 roles_sid = 8 [packed = true];
-      private java.util.List<java.lang.Integer> rolesSid_ = java.util.Collections.emptyList();;
+      private java.util.List<java.lang.Integer> rolesSid_ = java.util.Collections.emptyList();
       private void ensureRolesSidIsMutable() {
         if (!((bitField0_ & 0x00000010) == 0x00000010)) {
@@ -7941,14 +12569,42 @@
          }
       }
+      /**
+       * <code>repeated int32 roles_sid = 8 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays
+       * </pre>
+       */
       public java.util.List<java.lang.Integer>
           getRolesSidList() {
         return java.util.Collections.unmodifiableList(rolesSid_);
       }
+      /**
+       * <code>repeated int32 roles_sid = 8 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays
+       * </pre>
+       */
       public int getRolesSidCount() {
         return rolesSid_.size();
       }
+      /**
+       * <code>repeated int32 roles_sid = 8 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays
+       * </pre>
+       */
       public int getRolesSid(int index) {
         return rolesSid_.get(index);
       }
+      /**
+       * <code>repeated int32 roles_sid = 8 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays
+       * </pre>
+       */
       public Builder setRolesSid(
           int index, int value) {
@@ -7958,4 +12614,11 @@
         return this;
       }
+      /**
+       * <code>repeated int32 roles_sid = 8 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays
+       * </pre>
+       */
       public Builder addRolesSid(int value) {
         ensureRolesSidIsMutable();
@@ -7964,4 +12627,11 @@
         return this;
       }
+      /**
+       * <code>repeated int32 roles_sid = 8 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays
+       * </pre>
+       */
       public Builder addAllRolesSid(
           java.lang.Iterable<? extends java.lang.Integer> values) {
@@ -7971,13 +12641,20 @@
         return this;
       }
+      /**
+       * <code>repeated int32 roles_sid = 8 [packed = true];</code>
+       *
+       * <pre>
+       * Parallel arrays
+       * </pre>
+       */
       public Builder clearRolesSid() {
-        rolesSid_ = java.util.Collections.emptyList();;
+        rolesSid_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000010);
         
         return this;
       }
-      
+
       // repeated sint64 memids = 9 [packed = true];
-      private java.util.List<java.lang.Long> memids_ = java.util.Collections.emptyList();;
+      private java.util.List<java.lang.Long> memids_ = java.util.Collections.emptyList();
       private void ensureMemidsIsMutable() {
         if (!((bitField0_ & 0x00000020) == 0x00000020)) {
@@ -7986,14 +12663,42 @@
          }
       }
+      /**
+       * <code>repeated sint64 memids = 9 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA encoded
+       * </pre>
+       */
       public java.util.List<java.lang.Long>
           getMemidsList() {
         return java.util.Collections.unmodifiableList(memids_);
       }
+      /**
+       * <code>repeated sint64 memids = 9 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA encoded
+       * </pre>
+       */
       public int getMemidsCount() {
         return memids_.size();
       }
+      /**
+       * <code>repeated sint64 memids = 9 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA encoded
+       * </pre>
+       */
       public long getMemids(int index) {
         return memids_.get(index);
       }
+      /**
+       * <code>repeated sint64 memids = 9 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA encoded
+       * </pre>
+       */
       public Builder setMemids(
           int index, long value) {
@@ -8003,4 +12708,11 @@
         return this;
       }
+      /**
+       * <code>repeated sint64 memids = 9 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA encoded
+       * </pre>
+       */
       public Builder addMemids(long value) {
         ensureMemidsIsMutable();
@@ -8009,4 +12721,11 @@
         return this;
       }
+      /**
+       * <code>repeated sint64 memids = 9 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA encoded
+       * </pre>
+       */
       public Builder addAllMemids(
           java.lang.Iterable<? extends java.lang.Long> values) {
@@ -8016,11 +12735,18 @@
         return this;
       }
+      /**
+       * <code>repeated sint64 memids = 9 [packed = true];</code>
+       *
+       * <pre>
+       * DELTA encoded
+       * </pre>
+       */
       public Builder clearMemids() {
-        memids_ = java.util.Collections.emptyList();;
+        memids_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000020);
         
         return this;
       }
-      
+
       // repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];
       private java.util.List<crosby.binary.Osmformat.Relation.MemberType> types_ =
@@ -8032,13 +12758,25 @@
         }
       }
+      /**
+       * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
+       */
       public java.util.List<crosby.binary.Osmformat.Relation.MemberType> getTypesList() {
         return java.util.Collections.unmodifiableList(types_);
       }
+      /**
+       * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
+       */
       public int getTypesCount() {
         return types_.size();
       }
+      /**
+       * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
+       */
       public crosby.binary.Osmformat.Relation.MemberType getTypes(int index) {
         return types_.get(index);
       }
+      /**
+       * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
+       */
       public Builder setTypes(
           int index, crosby.binary.Osmformat.Relation.MemberType value) {
@@ -8051,4 +12789,7 @@
         return this;
       }
+      /**
+       * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
+       */
       public Builder addTypes(crosby.binary.Osmformat.Relation.MemberType value) {
         if (value == null) {
@@ -8060,4 +12801,7 @@
         return this;
       }
+      /**
+       * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
+       */
       public Builder addAllTypes(
           java.lang.Iterable<? extends crosby.binary.Osmformat.Relation.MemberType> values) {
@@ -8067,4 +12811,7 @@
         return this;
       }
+      /**
+       * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
+       */
       public Builder clearTypes() {
         types_ = java.util.Collections.emptyList();
@@ -8073,20 +12820,20 @@
         return this;
       }
-      
+
       // @@protoc_insertion_point(builder_scope:OSMPBF.Relation)
     }
-    
+
     static {
       defaultInstance = new Relation(true);
       defaultInstance.initFields();
     }
-    
+
     // @@protoc_insertion_point(class_scope:OSMPBF.Relation)
   }
-  
-  
+
+
   static {
   }
-  
+
   // @@protoc_insertion_point(outer_class_scope)
 }
Index: /applications/editors/josm/plugins/pbf/src/crosby/binary/BinaryParser.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/crosby/binary/BinaryParser.java	(revision 30489)
+++ /applications/editors/josm/plugins/pbf/src/crosby/binary/BinaryParser.java	(revision 30490)
@@ -55,5 +55,5 @@
     }
     
-    //@Override
+    @Override
     public void handleBlock(FileBlock message) {
         // TODO Auto-generated method stub
@@ -77,5 +77,5 @@
 
 
-    //@Override
+    @Override
     public boolean skipBlock(FileBlockPosition block) {
         // System.out.println("Seeing block of type: "+block.getType());
Index: /applications/editors/josm/plugins/pbf/src/crosby/binary/StringTable.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/crosby/binary/StringTable.java	(revision 30489)
+++ /applications/editors/josm/plugins/pbf/src/crosby/binary/StringTable.java	(revision 30490)
@@ -2,6 +2,6 @@
 
    This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as 
-   published by the Free Software Foundation, either version 3 of the 
+   it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation, either version 3 of the
    License, or (at your option) any later version.
 
@@ -46,5 +46,5 @@
 
     /** After the stringtable has been built, return the offset of a string in it.
-     * 
+     *
      * Note, value '0' is reserved for use as a delimiter and will not be returned.
      * @param s
@@ -57,5 +57,5 @@
     public void finish() {
         Comparator<String> comparator = new Comparator<String>() {
-            //@Override
+            @Override
             public int compare(final String s1, String s2) {
                 int diff = counts.get(s2) - counts.get(s1);
@@ -63,4 +63,39 @@
             }
         };
+
+        /* Sort the stringtable */
+
+        /*
+        When a string is referenced, strings in the stringtable with indices:
+               0                : Is reserved (used as a delimiter in tags
+         A:  1 to 127          : Uses can be represented with 1 byte
+         B: 128 to 128**2-1 : Uses can be represented with 2 bytes,
+         C: 128*128  to X    : Uses can be represented with 3 bytes in the unlikely case we have >16k strings in a block. No block will contain enough strings that we'll need 4 bytes.
+
+        There are goals that will improve compression:
+          1. I want to use 1 bytes for the most frequently occurring strings, then 2 bytes, then 3 bytes.
+          2. I want to use low integers as frequently as possible (for better
+             entropy encoding out of deflate)
+          3. I want the stringtable to compress as small as possible.
+
+        Condition 1 is obvious. Condition 2 makes deflate compress stringtable references more effectively.
+        When compressing entities, delta coding causes small positive integers to occur more frequently
+        than larger integers. Even though a stringtable references to indices of 1 and 127 both use one
+        byte in a decompressed file, the small integer bias causes deflate to use fewer bits to represent
+        the smaller index when compressed. Condition 3 is most effective when adjacent strings in the
+        stringtable have a lot of common substrings.
+
+        So, when I decide on the master stringtable to use, I put the 127 most frequently occurring
+        strings into A (accomplishing goal 1), and sort them by frequency (to accomplish goal 2), but
+        for B and C, which contain the less progressively less frequently encountered strings, I sort
+        them lexiconographically, to maximize goal 3 and ignoring goal 2.
+
+        Goal 1 is the most important. Goal 2 helped enough to be worth it, and goal 3 was pretty minor,
+        but all should be re-benchmarked.
+
+
+        */
+
+
 
         set = counts.keySet().toArray(new String[0]);
@@ -71,8 +106,8 @@
           // sorted lexiconographically.
           // to maximize deflate compression.
-          
+
           // Don't sort the first array. There's not likely to be much benefit, and we want frequent values to be small.
           //Arrays.sort(set, Math.min(0, set.length-1), Math.min(1 << 7, set.length-1));
-          
+
           Arrays.sort(set, Math.min(1 << 7, set.length-1), Math.min(1 << 14,
               set.length-1));
Index: /applications/editors/josm/plugins/pbf/src/crosby/binary/fileformat.proto
===================================================================
--- /applications/editors/josm/plugins/pbf/src/crosby/binary/fileformat.proto	(revision 30490)
+++ /applications/editors/josm/plugins/pbf/src/crosby/binary/fileformat.proto	(revision 30490)
@@ -0,0 +1,54 @@
+/** Copyright (c) 2010 Scott A. Crosby. <scott@sacrosby.com>
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as 
+   published by the Free Software Foundation, either version 3 of the 
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+option optimize_for = LITE_RUNTIME;
+option java_package = "crosby.binary";
+package OSMPBF;
+
+//protoc --java_out=../.. fileformat.proto
+
+
+//
+//  STORAGE LAYER: Storing primitives.
+//
+
+message Blob {
+  optional bytes raw = 1; // No compression
+  optional int32 raw_size = 2; // When compressed, the uncompressed size
+
+  // Possible compressed versions of the data.
+  optional bytes zlib_data = 3;
+
+  // PROPOSED feature for LZMA compressed data. SUPPORT IS NOT REQUIRED.
+  optional bytes lzma_data = 4;
+
+  // Formerly used for bzip2 compressed data. Depreciated in 2010.
+  optional bytes OBSOLETE_bzip2_data = 5 [deprecated=true]; // Don't reuse this tag number.
+}
+
+/* A file contains an sequence of fileblock headers, each prefixed by
+their length in network byte order, followed by a data block
+containing the actual data. types staring with a "_" are reserved.
+*/
+
+message BlobHeader {
+  required string type = 1;
+  optional bytes indexdata = 2;
+  required int32 datasize = 3;
+}
+
+
Index: /applications/editors/josm/plugins/pbf/src/crosby/binary/osmformat.proto
===================================================================
--- /applications/editors/josm/plugins/pbf/src/crosby/binary/osmformat.proto	(revision 30490)
+++ /applications/editors/josm/plugins/pbf/src/crosby/binary/osmformat.proto	(revision 30490)
@@ -0,0 +1,260 @@
+/** Copyright (c) 2010 Scott A. Crosby. <scott@sacrosby.com>
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as 
+   published by the Free Software Foundation, either version 3 of the 
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+option optimize_for = LITE_RUNTIME;
+option java_package = "crosby.binary";
+package OSMPBF;
+
+/* OSM Binary file format 
+
+This is the master schema file of the OSM binary file format. This
+file is designed to support limited random-access and future
+extendability.
+
+A binary OSM file consists of a sequence of FileBlocks (please see
+fileformat.proto). The first fileblock contains a serialized instance
+of HeaderBlock, followed by a sequence of PrimitiveBlock blocks that
+contain the primitives.
+
+Each primitiveblock is designed to be independently parsable. It
+contains a string table storing all strings in that block (keys and
+values in tags, roles in relations, usernames, etc.) as well as
+metadata containing the precision of coordinates or timestamps in that
+block.
+
+A primitiveblock contains a sequence of primitive groups, each
+containing primitives of the same type (nodes, densenodes, ways,
+relations). Coordinates are stored in signed 64-bit integers. Lat&lon
+are measured in units <granularity> nanodegrees. The default of
+granularity of 100 nanodegrees corresponds to about 1cm on the ground,
+and a full lat or lon fits into 32 bits.
+
+Converting an integer to a lattitude or longitude uses the formula:
+$OUT = IN * granularity / 10**9$. Many encoding schemes use delta
+coding when representing nodes and relations.
+
+*/
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+/* Contains the file header. */
+
+message HeaderBlock {
+  optional HeaderBBox bbox = 1;
+  /* Additional tags to aid in parsing this dataset */
+  repeated string required_features = 4;
+  repeated string optional_features = 5;
+
+  optional string writingprogram = 16; 
+  optional string source = 17; // From the bbox field.
+
+  /* Tags that allow continuing an Osmosis replication */
+
+  // replication timestamp, expressed in seconds since the epoch, 
+  // otherwise the same value as in the "timestamp=..." field
+  // in the state.txt file used by Osmosis
+  optional int64 osmosis_replication_timestamp = 32;
+
+  // replication sequence number (sequenceNumber in state.txt)
+  optional int64 osmosis_replication_sequence_number = 33;
+
+  // replication base URL (from Osmosis' configuration.txt file)
+  optional string osmosis_replication_base_url = 34;
+}
+
+
+/** The bounding box field in the OSM header. BBOX, as used in the OSM
+header. Units are always in nanodegrees -- they do not obey
+granularity rules. */
+
+message HeaderBBox {
+   required sint64 left = 1;
+   required sint64 right = 2;
+   required sint64 top = 3;
+   required sint64 bottom = 4;
+}
+
+
+///////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////
+
+
+message PrimitiveBlock {
+  required StringTable stringtable = 1;
+  repeated PrimitiveGroup primitivegroup = 2;
+
+  // Granularity, units of nanodegrees, used to store coordinates in this block
+  optional int32 granularity = 17 [default=100]; 
+  // Offset value between the output coordinates coordinates and the granularity grid in unites of nanodegrees.
+  optional int64 lat_offset = 19 [default=0];
+  optional int64 lon_offset = 20 [default=0]; 
+
+// Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
+  optional int32 date_granularity = 18 [default=1000]; 
+
+
+  // Proposed extension:
+  //optional BBox bbox = XX;
+}
+
+// Group of OSMPrimitives. All primitives in a group must be the same type.
+message PrimitiveGroup {
+  repeated Node     nodes = 1;
+  optional DenseNodes dense = 2;
+  repeated Way      ways = 3;
+  repeated Relation relations = 4;
+  repeated ChangeSet changesets = 5;
+}
+
+
+/** String table, contains the common strings in each block.
+
+ Note that we reserve index '0' as a delimiter, so the entry at that
+ index in the table is ALWAYS blank and unused.
+
+ */
+message StringTable {
+   repeated bytes s = 1;
+}
+
+/* Optional metadata that may be included into each primitive. */
+message Info {
+   optional int32 version = 1 [default = -1];
+   optional int64 timestamp = 2;
+   optional int64 changeset = 3;
+   optional int32 uid = 4;
+   optional uint32 user_sid = 5; // String IDs
+
+   // The visible flag is used to store history information. It indicates that
+   // the current object version has been created by a delete operation on the
+   // OSM API.
+   // When a writer sets this flag, it MUST add a required_features tag with
+   // value "HistoricalInformation" to the HeaderBlock.
+   // If this flag is not available for some object it MUST be assumed to be
+   // true if the file has the required_features tag "HistoricalInformation"
+   // set.
+   optional bool visible = 6;
+}
+
+/** Optional metadata that may be included into each primitive. Special dense format used in DenseNodes. */
+message DenseInfo {
+   repeated int32 version = 1 [packed = true]; 
+   repeated sint64 timestamp = 2 [packed = true]; // DELTA coded
+   repeated sint64 changeset = 3 [packed = true]; // DELTA coded
+   repeated sint32 uid = 4 [packed = true]; // DELTA coded
+   repeated sint32 user_sid = 5 [packed = true]; // String IDs for usernames. DELTA coded
+
+   // The visible flag is used to store history information. It indicates that
+   // the current object version has been created by a delete operation on the
+   // OSM API.
+   // When a writer sets this flag, it MUST add a required_features tag with
+   // value "HistoricalInformation" to the HeaderBlock.
+   // If this flag is not available for some object it MUST be assumed to be
+   // true if the file has the required_features tag "HistoricalInformation"
+   // set.
+   repeated bool visible = 6 [packed = true];
+}
+
+
+// THIS IS STUB DESIGN FOR CHANGESETS. NOT USED RIGHT NOW.
+// TODO:    REMOVE THIS?
+message ChangeSet {
+   required int64 id = 1;
+//   
+//   // Parallel arrays.
+//   repeated uint32 keys = 2 [packed = true]; // String IDs.
+//   repeated uint32 vals = 3 [packed = true]; // String IDs.
+//
+//   optional Info info = 4;
+
+//   optional int64 created_at = 8;
+//   optional int64 closetime_delta = 9;
+//   optional bool open = 10;
+//   optional HeaderBBox bbox = 11;
+}
+
+
+message Node {
+   required sint64 id = 1;
+   // Parallel arrays.
+   repeated uint32 keys = 2 [packed = true]; // String IDs.
+   repeated uint32 vals = 3 [packed = true]; // String IDs.
+
+   optional Info info = 4; // May be omitted in omitmeta
+
+   required sint64 lat = 8;
+   required sint64 lon = 9;
+}
+
+/* Used to densly represent a sequence of nodes that do not have any tags.
+
+We represent these nodes columnwise as five columns: ID's, lats, and
+lons, all delta coded. When metadata is not omitted, 
+
+We encode keys & vals for all nodes as a single array of integers
+containing key-stringid and val-stringid, using a stringid of 0 as a
+delimiter between nodes.
+
+   ( (<keyid> <valid>)* '0' )*
+ */
+
+message DenseNodes {
+   repeated sint64 id = 1 [packed = true]; // DELTA coded
+
+   //repeated Info info = 4;
+   optional DenseInfo denseinfo = 5;
+
+   repeated sint64 lat = 8 [packed = true]; // DELTA coded
+   repeated sint64 lon = 9 [packed = true]; // DELTA coded
+
+   // Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
+   repeated int32 keys_vals = 10 [packed = true]; 
+}
+
+
+message Way {
+   required int64 id = 1;
+   // Parallel arrays.
+   repeated uint32 keys = 2 [packed = true];
+   repeated uint32 vals = 3 [packed = true];
+
+   optional Info info = 4;
+
+   repeated sint64 refs = 8 [packed = true];  // DELTA coded
+}
+
+message Relation {
+  enum MemberType {
+    NODE = 0;
+    WAY = 1;
+    RELATION = 2;
+  } 
+   required int64 id = 1;
+
+   // Parallel arrays.
+   repeated uint32 keys = 2 [packed = true];
+   repeated uint32 vals = 3 [packed = true];
+
+   optional Info info = 4;
+
+   // Parallel arrays
+   repeated int32 roles_sid = 8 [packed = true];
+   repeated sint64 memids = 9 [packed = true]; // DELTA encoded
+   repeated MemberType types = 10 [packed = true];
+}
+
