diff --git a/experiments/netconf/proto2yang/ietf-descriptor.yang b/experiments/netconf/proto2yang/ietf-descriptor.yang
new file mode 100644
index 0000000..487f100
--- /dev/null
+++ b/experiments/netconf/proto2yang/ietf-descriptor.yang
@@ -0,0 +1,1331 @@
+
+module ietf-descriptor {
+
+
+    namespace "urn:opencord:params:xml:ns:voltha:ietf-descriptor";
+    prefix descriptor;
+
+
+    organization "CORD";
+    contact
+        " Any name";
+
+    description
+        "";
+
+    revision "2016-11-15" {
+        description "Initial revision.";
+        reference "reference";
+    }
+
+
+    container FileDescriptorSet {
+        description
+            "The protocol compiler can output a FileDescriptorSet containing the .proto
+ files it parses.";
+        list file {
+            key "name";
+            uses  FileDescriptorProto;
+
+            description
+                "";
+        }
+
+    }
+
+    grouping FileDescriptorProto {
+        description
+            "Describes a complete .proto file.";
+        leaf name {
+            type  string; 
+            description
+                "file name, relative to root of source tree";
+        }
+
+        leaf package {
+            type  string; 
+            description
+                "e.g.  foo ,  foo.bar , etc.";
+        }
+
+        list dependency {
+            key "dependency";
+            leaf dependency {
+                type  string; 
+                description
+                    "Names of files imported by this file.";
+            }
+            description
+                "Names of files imported by this file.";
+        }
+
+        list public_dependency {
+            key "public_dependency";
+            leaf public_dependency {
+                type  int32; 
+                description
+                    "Indexes of the public imported files in the dependency list above.";
+            }
+            description
+                "Indexes of the public imported files in the dependency list above.";
+        }
+
+        list weak_dependency {
+            key "weak_dependency";
+            leaf weak_dependency {
+                type  int32; 
+                description
+                    "Indexes of the weak imported files in the dependency list.
+ For Google-internal migration only. Do not use.";
+            }
+            description
+                "Indexes of the weak imported files in the dependency list.
+ For Google-internal migration only. Do not use.";
+        }
+
+        list message_type {
+            key "name";
+            uses  DescriptorProto;
+
+            description
+                "All top-level definitions in this file.";
+        }
+
+        list enum_type {
+            key "name";
+            uses  EnumDescriptorProto;
+
+            description
+                "";
+        }
+
+        list service {
+            key "name";
+            uses  ServiceDescriptorProto;
+
+            description
+                "";
+        }
+
+        list extension {
+            key "name";
+            uses  FieldDescriptorProto;
+
+            description
+                "";
+        }
+
+        container options {
+            uses  FileOptions;
+
+            description
+                "";
+        }
+
+        container source_code_info {
+            uses  SourceCodeInfo;
+
+            description
+                "This field contains optional information about the original source code.
+ You may safely remove this entire field without harming runtime
+ functionality of the descriptors -- the information is needed only by
+ development tools.";
+        }
+
+        leaf syntax {
+            type  string; 
+            description
+                "The syntax of the proto file.
+ The supported values are  proto2  and  proto3 .";
+        }
+
+    }
+
+    grouping DescriptorProto {
+        description
+            "Describes a message type.";
+        leaf name {
+            type  string; 
+            description
+                "";
+        }
+
+        list field {
+            key "name";
+            uses  FieldDescriptorProto;
+
+            description
+                "";
+        }
+
+        list extension {
+            key "name";
+            uses  FieldDescriptorProto;
+
+            description
+                "";
+        }
+
+        list nested_type {
+            key "name";
+            uses  DescriptorProto;
+
+            description
+                "";
+        }
+
+        list enum_type {
+            key "name";
+            uses  EnumDescriptorProto;
+
+            description
+                "";
+        }
+
+
+        list oneof_decl {
+            key "name";
+            uses  OneofDescriptorProto;
+
+            description
+                "";
+        }
+
+        container options {
+            uses  MessageOptions;
+
+            description
+                "";
+        }
+
+
+        list reserved_name {
+            key "reserved_name";
+            leaf reserved_name {
+                type  string; 
+                description
+                    "Reserved field names, which may not be used by fields in the same message.
+ A given name may only be reserved once.";
+            }
+            description
+                "Reserved field names, which may not be used by fields in the same message.
+ A given name may only be reserved once.";
+        }
+
+        grouping ExtensionRange {
+            description
+                "";
+            leaf start {
+                type  int32; 
+                description
+                    "";
+            }
+    
+            leaf end {
+                type  int32; 
+                description
+                    "";
+            }
+    
+        }
+    
+        grouping ReservedRange {
+            description
+                "Range of reserved tag numbers. Reserved tag numbers may not be used by
+     fields or extension ranges in the same message. Reserved ranges may
+     not overlap.";
+            leaf start {
+                type  int32; 
+                description
+                    "Inclusive.";
+            }
+    
+            leaf end {
+                type  int32; 
+                description
+                    "Exclusive.";
+            }
+    
+        }
+    
+    }
+
+    grouping FieldDescriptorProto {
+        description
+            "Describes a field within a message.";
+        leaf name {
+            type  string; 
+            description
+                "";
+        }
+
+        leaf number {
+            type  int32; 
+            description
+                "";
+        }
+
+        leaf label {
+            type  Label; 
+            description
+                "";
+        }
+
+        leaf type {
+            type  Type; 
+            description
+                "If type_name is set, this need not be set.  If both this and type_name
+ are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.";
+        }
+
+        leaf type_name {
+            type  string; 
+            description
+                "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).";
+        }
+
+        leaf extendee {
+            type  string; 
+            description
+                "For extensions, this is the name of the type being extended.  It is
+ resolved in the same manner as type_name.";
+        }
+
+        leaf default_value {
+            type  string; 
+            description
+                "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 >= 128 are escaped.
+ TODO(kenton):  Base-64 encode?";
+        }
+
+        leaf oneof_index {
+            type  int32; 
+            description
+                "If set, gives the index of a oneof in the containing type's oneof_decl
+ list.  This field is a member of that oneof.";
+        }
+
+        leaf json_name {
+            type  string; 
+            description
+                "JSON name of this field. The value is set by protocol compiler. If the
+ user has set a  json_name  option on this field, that option's value
+ will be used. Otherwise, it's deduced from the field's name by converting
+ it to camelCase.";
+        }
+
+        container options {
+            uses  FieldOptions;
+
+            description
+                "";
+        }
+
+        typedef Type {
+            type enumeration {
+                enum TYPE_DOUBLE {
+                    description "";
+                }
+                enum TYPE_FLOAT {
+                    description "";
+                }
+                enum TYPE_INT64 {
+                    description "";
+                }
+                enum TYPE_UINT64 {
+                    description "";
+                }
+                enum TYPE_INT32 {
+                    description "";
+                }
+                enum TYPE_FIXED64 {
+                    description "";
+                }
+                enum TYPE_FIXED32 {
+                    description "";
+                }
+                enum TYPE_BOOL {
+                    description "";
+                }
+                enum TYPE_STRING {
+                    description "";
+                }
+                enum TYPE_GROUP {
+                    description "";
+                }
+                enum TYPE_MESSAGE {
+                    description "";
+                }
+                enum TYPE_BYTES {
+                    description "";
+                }
+                enum TYPE_UINT32 {
+                    description "";
+                }
+                enum TYPE_ENUM {
+                    description "";
+                }
+                enum TYPE_SFIXED32 {
+                    description "";
+                }
+                enum TYPE_SFIXED64 {
+                    description "";
+                }
+                enum TYPE_SINT32 {
+                    description "";
+                }
+                enum TYPE_SINT64 {
+                    description "";
+                }
+            }
+            description
+                "";
+        }
+
+        typedef Label {
+            type enumeration {
+                enum LABEL_OPTIONAL {
+                    description "";
+                }
+                enum LABEL_REQUIRED {
+                    description "";
+                }
+                enum LABEL_REPEATED {
+                    description "";
+                }
+            }
+            description
+                "";
+        }
+
+    }
+
+    grouping OneofDescriptorProto {
+        description
+            "Describes a oneof.";
+        leaf name {
+            type  string; 
+            description
+                "";
+        }
+
+        container options {
+            uses  OneofOptions;
+
+            description
+                "";
+        }
+
+    }
+
+    grouping EnumDescriptorProto {
+        description
+            "Describes an enum type.";
+        leaf name {
+            type  string; 
+            description
+                "";
+        }
+
+        list value {
+            key "name";
+            uses  EnumValueDescriptorProto;
+
+            description
+                "";
+        }
+
+        container options {
+            uses  EnumOptions;
+
+            description
+                "";
+        }
+
+    }
+
+    grouping EnumValueDescriptorProto {
+        description
+            "Describes a value within an enum.";
+        leaf name {
+            type  string; 
+            description
+                "";
+        }
+
+        leaf number {
+            type  int32; 
+            description
+                "";
+        }
+
+        container options {
+            uses  EnumValueOptions;
+
+            description
+                "";
+        }
+
+    }
+
+    grouping ServiceDescriptorProto {
+        description
+            "Describes a service.";
+        leaf name {
+            type  string; 
+            description
+                "";
+        }
+
+        list method {
+            key "name";
+            uses  MethodDescriptorProto;
+
+            description
+                "";
+        }
+
+        container options {
+            uses  ServiceOptions;
+
+            description
+                "";
+        }
+
+    }
+
+    grouping MethodDescriptorProto {
+        description
+            "Describes a method of a service.";
+        leaf name {
+            type  string; 
+            description
+                "";
+        }
+
+        leaf input_type {
+            type  string; 
+            description
+                "Input and output type names.  These are resolved in the same way as
+ FieldDescriptorProto.type_name, but must refer to a message type.";
+        }
+
+        leaf output_type {
+            type  string; 
+            description
+                "";
+        }
+
+        container options {
+            uses  MethodOptions;
+
+            description
+                "";
+        }
+
+        leaf client_streaming {
+            type  boolean; 
+            description
+                "Identifies if client streams multiple client messages";
+        }
+
+        leaf server_streaming {
+            type  boolean; 
+            description
+                "Identifies if server streams multiple server messages";
+        }
+
+    }
+
+    grouping FileOptions {
+        description
+            "===================================================================
+ Options
+Each of the definitions above may have  options  attached.  These are
+ just annotations which may cause code to be generated slightly differently
+ or may contain hints for code that manipulates protocol messages.
+
+ Clients may define custom options as extensions of the  Options messages.
+ These extensions may not yet be known at parsing time, so the parser cannot
+ store the values in them.  Instead it stores them in a field in the  Options
+ message called uninterpreted_option. This field must have the same name
+ across all  Options messages. We then use this field to populate the
+ extensions when we build a descriptor, at which point all protos have been
+ parsed and so all extensions are known.
+
+ Extension numbers for custom options may be chosen as follows:
+   For options which will only be used within a single application or
+   organization, or for experimental options, use field numbers 50000
+   through 99999.  It is up to you to ensure that you do not use the
+   same number for multiple options.
+   For options which will be published and used publicly by multiple
+   independent entities, e-mail protobuf-global-extension-registry@google.com
+   to reserve extension numbers. Simply provide your project name (e.g.
+   Objective-C plugin) and your project website (if available) -- there's no
+   need to explain how you intend to use them. Usually you only need one
+   extension number. You can declare multiple options with only one extension
+   number by putting them in a sub-message. See the Custom Options section of
+   the docs for examples:
+   https:  developers.google.com protocol-buffers docs proto#options
+   If this turns out to be popular, a web service will be set up
+   to automatically assign option numbers.";
+        leaf java_package {
+            type  string; 
+            description
+                "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.";
+        }
+
+        leaf java_outer_classname {
+            type  string; 
+            description
+                "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).";
+        }
+
+        leaf java_multiple_files {
+            type  boolean; 
+            description
+                "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.";
+        }
+
+        leaf java_generate_equals_and_hash {
+            type  boolean; 
+            description
+                "If set true, then the Java code generator will generate equals() and
+ hashCode() methods for all messages defined in the .proto file.
+ This increases generated code size, potentially substantially for large
+ protos, which may harm a memory-constrained application.
+ - In the full runtime this is a speed optimization, as the
+ AbstractMessage base class includes reflection-based implementations of
+ these methods.
+ - In the lite runtime, setting this option changes the semantics of
+ equals() and hashCode() to more closely match those of the full runtime;
+ the generated methods compute their results based on field values rather
+ than object identity. (Implementations should not assume that hashcodes
+ will be consistent across runtimes or versions of the protocol compiler.)";
+        }
+
+        leaf java_string_check_utf8 {
+            type  boolean; 
+            description
+                "If set true, then the Java2 code generator will generate code that
+ throws an exception whenever an attempt is made to assign a non-UTF-8
+ byte sequence to a string field.
+ Message reflection will do the same.
+ However, an extension field still accepts non-UTF-8 byte sequences.
+ This option has no effect on when used with the lite runtime.";
+        }
+
+        leaf optimize_for {
+            type  OptimizeMode; 
+            description
+                "";
+        }
+
+        leaf go_package {
+            type  string; 
+            description
+                "Sets the Go package where structs generated from this .proto will be
+ placed. If omitted, the Go package will be derived from the following:
+   - The basename of the package import path, if provided.
+   - Otherwise, the package statement in the .proto file, if present.
+   - Otherwise, the basename of the .proto file, without extension.";
+        }
+
+        leaf cc_generic_services {
+            type  boolean; 
+            description
+                "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 google.protobuf.
+
+ 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.";
+        }
+
+        leaf java_generic_services {
+            type  boolean; 
+            description
+                "";
+        }
+
+        leaf py_generic_services {
+            type  boolean; 
+            description
+                "";
+        }
+
+        leaf deprecated {
+            type  boolean; 
+            description
+                "Is this file deprecated?
+ Depending on the target platform, this can emit Deprecated annotations
+ for everything in the file, or it will be completely ignored; in the very
+ least, this is a formalization for deprecating files.";
+        }
+
+        leaf cc_enable_arenas {
+            type  boolean; 
+            description
+                "Enables the use of arenas for the proto messages in this file. This applies
+ only to generated classes for C++.";
+        }
+
+        leaf objc_class_prefix {
+            type  string; 
+            description
+                "Sets the objective c class prefix which is prepended to all objective c
+ generated classes from this .proto. There is no default.";
+        }
+
+        leaf csharp_namespace {
+            type  string; 
+            description
+                "Namespace for generated classes; defaults to the package.";
+        }
+
+        list uninterpreted_option {
+            key "identifier_value";
+            uses  UninterpretedOption;
+
+            description
+                "The parser stores options it doesn't recognize here. See above.";
+        }
+
+        typedef OptimizeMode {
+            type enumeration {
+                enum SPEED {
+                    description "";
+                }
+                enum CODE_SIZE {
+                    description "";
+                }
+                enum LITE_RUNTIME {
+                    description "";
+                }
+            }
+            description
+                "Generated classes can be optimized for speed or code size.";
+        }
+
+    }
+
+    grouping MessageOptions {
+        description
+            "";
+        leaf message_set_wire_format {
+            type  boolean; 
+            description
+                "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.";
+        }
+
+        leaf no_standard_descriptor_accessor {
+            type  boolean; 
+            description
+                "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 .";
+        }
+
+        leaf deprecated {
+            type  boolean; 
+            description
+                "Is this message deprecated?
+ Depending on the target platform, this can emit Deprecated annotations
+ for the message, or it will be completely ignored; in the very least,
+ this is a formalization for deprecating messages.";
+        }
+
+        leaf map_entry {
+            type  boolean; 
+            description
+                "Whether the message is an automatically generated map entry type for the
+ maps field.
+
+ For maps fields:
+     map<KeyType, ValueType> map_field = 1;
+ The parsed descriptor looks like:
+     message MapFieldEntry  
+         option map_entry = true;
+         optional KeyType key = 1;
+         optional ValueType value = 2;
+      
+     repeated MapFieldEntry map_field = 1;
+
+ Implementations may choose not to generate the map_entry=true message, but
+ use a native map in the target language to hold the keys and values.
+ The reflection APIs in such implementions still need to work as
+ if the field is a repeated message field.
+
+ NOTE: Do not set the option in .proto files. Always use the maps syntax
+ instead. The option should only be implicitly set by the proto compiler
+ parser.";
+        }
+
+        list uninterpreted_option {
+            key "identifier_value";
+            uses  UninterpretedOption;
+
+            description
+                "The parser stores options it doesn't recognize here. See above.";
+        }
+
+    }
+
+    grouping FieldOptions {
+        description
+            "";
+        leaf ctype {
+            type  CType; 
+            description
+                "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!";
+        }
+
+        leaf packed {
+            type  boolean; 
+            description
+                "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. In proto3, only explicit setting it to
+ false will avoid using packed encoding.";
+        }
+
+        leaf jstype {
+            type  JSType; 
+            description
+                "The jstype option determines the JavaScript type used for values of the
+ field.  The option is permitted only for 64 bit integral and fixed types
+ (int64, uint64, sint64, fixed64, sfixed64).  By default these types are
+ represented as JavaScript strings.  This avoids loss of precision that can
+ happen when a large value is converted to a floating point JavaScript
+ numbers.  Specifying JS_NUMBER for the jstype causes the generated
+ JavaScript code to use the JavaScript  number  type instead of strings.
+ This option is an enum to permit additional types to be added,
+ e.g. goog.math.Integer.";
+        }
+
+        leaf lazy {
+            type  boolean; 
+            description
+                "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.";
+        }
+
+        leaf deprecated {
+            type  boolean; 
+            description
+                "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.";
+        }
+
+        leaf weak {
+            type  boolean; 
+            description
+                "For Google-internal migration only. Do not use.";
+        }
+
+        list uninterpreted_option {
+            key "identifier_value";
+            uses  UninterpretedOption;
+
+            description
+                "The parser stores options it doesn't recognize here. See above.";
+        }
+
+        typedef CType {
+            type enumeration {
+                enum STRING {
+                    description "";
+                }
+                enum CORD {
+                    description "";
+                }
+                enum STRING_PIECE {
+                    description "";
+                }
+            }
+            description
+                "";
+        }
+
+        typedef JSType {
+            type enumeration {
+                enum JS_NORMAL {
+                    description "";
+                }
+                enum JS_STRING {
+                    description "";
+                }
+                enum JS_NUMBER {
+                    description "";
+                }
+            }
+            description
+                "";
+        }
+
+    }
+
+    grouping OneofOptions {
+        description
+            "";
+        list uninterpreted_option {
+            key "identifier_value";
+            uses  UninterpretedOption;
+
+            description
+                "The parser stores options it doesn't recognize here. See above.";
+        }
+
+    }
+
+    grouping EnumOptions {
+        description
+            "";
+        leaf allow_alias {
+            type  boolean; 
+            description
+                "Set this option to true to allow mapping different tag names to the same
+ value.";
+        }
+
+        leaf deprecated {
+            type  boolean; 
+            description
+                "Is this enum deprecated?
+ Depending on the target platform, this can emit Deprecated annotations
+ for the enum, or it will be completely ignored; in the very least, this
+ is a formalization for deprecating enums.";
+        }
+
+        list uninterpreted_option {
+            key "identifier_value";
+            uses  UninterpretedOption;
+
+            description
+                "The parser stores options it doesn't recognize here. See above.";
+        }
+
+    }
+
+    grouping EnumValueOptions {
+        description
+            "";
+        leaf deprecated {
+            type  boolean; 
+            description
+                "Is this enum value deprecated?
+ Depending on the target platform, this can emit Deprecated annotations
+ for the enum value, or it will be completely ignored; in the very least,
+ this is a formalization for deprecating enum values.";
+        }
+
+        list uninterpreted_option {
+            key "identifier_value";
+            uses  UninterpretedOption;
+
+            description
+                "The parser stores options it doesn't recognize here. See above.";
+        }
+
+    }
+
+    grouping ServiceOptions {
+        description
+            "";
+        leaf deprecated {
+            type  boolean; 
+            description
+                "Is this service deprecated?
+ Depending on the target platform, this can emit Deprecated annotations
+ for the service, or it will be completely ignored; in the very least,
+ this is a formalization for deprecating services.
+Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
+   framework.  We apologize for hoarding these numbers to ourselves, but
+   we were already using them long before we decided to release Protocol
+   Buffers.";
+        }
+
+        list uninterpreted_option {
+            key "identifier_value";
+            uses  UninterpretedOption;
+
+            description
+                "The parser stores options it doesn't recognize here. See above.";
+        }
+
+    }
+
+    grouping MethodOptions {
+        description
+            "";
+        leaf deprecated {
+            type  boolean; 
+            description
+                "Is this method deprecated?
+ Depending on the target platform, this can emit Deprecated annotations
+ for the method, or it will be completely ignored; in the very least,
+ this is a formalization for deprecating methods.
+Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
+   framework.  We apologize for hoarding these numbers to ourselves, but
+   we were already using them long before we decided to release Protocol
+   Buffers.";
+        }
+
+        list uninterpreted_option {
+            key "identifier_value";
+            uses  UninterpretedOption;
+
+            description
+                "The parser stores options it doesn't recognize here. See above.";
+        }
+
+    }
+
+    grouping UninterpretedOption {
+        description
+            "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.";
+
+        leaf identifier_value {
+            type  string; 
+            description
+                "The value of the uninterpreted option, in whatever type the tokenizer
+ identified it as during parsing. Exactly one of these should be set.";
+        }
+
+        leaf positive_int_value {
+            type  uint64; 
+            description
+                "";
+        }
+
+        leaf negative_int_value {
+            type  int64; 
+            description
+                "";
+        }
+
+        leaf double_value {
+            type decimal64 {
+               fraction-digits 5;
+            }
+            description
+                "";
+        }
+
+        leaf string_value {
+            type  binary; 
+            description
+                "";
+        }
+
+        leaf aggregate_value {
+            type  string; 
+            description
+                "";
+        }
+
+        grouping NamePart {
+            description
+                "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 .";
+            leaf name_part {
+                type  string; 
+                description
+                    "";
+            }
+    
+            leaf is_extension {
+                type  boolean; 
+                description
+                    "";
+            }
+    
+        }
+    
+    }
+
+    grouping SourceCodeInfo {
+        description
+            "Encapsulates information about the original source file from which a
+ FileDescriptorProto was generated.
+===================================================================
+ Optional source code info";
+
+        grouping Location {
+            description
+                "";
+            list path {
+                key "path";
+                leaf path {
+                    type  int32; 
+                    description
+                        "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).";
+                }
+                description
+                    "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).";
+            }
+    
+            list span {
+                key "span";
+                leaf span {
+                    type  int32; 
+                    description
+                        "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.";
+                }
+                description
+                    "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.";
+            }
+    
+            leaf leading_comments {
+                type  string; 
+                description
+                    "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.
+    
+     leading_detached_comments will keep paragraphs of comments that appear
+     before (but not connected to) the current element. Each paragraph,
+     separated by empty lines, will be one comment element in the repeated
+     field.
+    
+     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;
+    
+          Detached comment for corge. This is not leading or trailing comments
+          to qux or corge because there are blank lines separating it from
+          both.
+    
+          Detached comment for corge paragraph 2.
+    
+       optional string corge = 5;
+          Block comment attached
+          to corge.  Leading asterisks
+          will be removed.   
+          Block comment attached to
+          grault.   
+       optional int32 grault = 6;
+    
+          ignored detached comments.";
+            }
+    
+            leaf trailing_comments {
+                type  string; 
+                description
+                    "";
+            }
+    
+            list leading_detached_comments {
+                key "leading_detached_comments";
+                leaf leading_detached_comments {
+                    type  string; 
+                    description
+                        "";
+                }
+                description
+                    "";
+            }
+    
+        }
+    
+    }
+
+    container GeneratedCodeInfo {
+        description
+            "Describes the relationship between generated code and its original source
+ file. A GeneratedCodeInfo message is associated with only one generated
+ source file, but may contain references to different source .proto files.";
+
+        grouping Annotation {
+            description
+                "";
+            list path {
+                key "path";
+                leaf path {
+                    type  int32; 
+                    description
+                        "Identifies the element in the original source .proto file. This field
+     is formatted the same as SourceCodeInfo.Location.path.";
+                }
+                description
+                    "Identifies the element in the original source .proto file. This field
+     is formatted the same as SourceCodeInfo.Location.path.";
+            }
+    
+            leaf source_file {
+                type  string; 
+                description
+                    "Identifies the filesystem path to the original source .proto.";
+            }
+    
+            leaf begin {
+                type  int32; 
+                description
+                    "Identifies the starting offset in bytes in the generated code
+     that relates to the identified object.";
+            }
+    
+            leaf end {
+                type  int32; 
+                description
+                    "Identifies the ending offset in bytes in the generated code that
+     relates to the identified offset. The end offset should be one past
+     the last relevant byte (so the length of the text = end - begin).";
+            }
+    
+        }
+    
+    }
+
+}
\ No newline at end of file
