EXPECTED = {'Lightweight-Directory-Access-Protocol-V3': {'extensibility-implied': True,
                                              'imports': {},
                                              'object-classes': {},
                                              'object-sets': {},
                                              'tags': 'IMPLICIT',
                                              'types': {'AbandonRequest': {'tag': {'class': 'APPLICATION',
                                                                                   'number': 16},
                                                                           'type': 'MessageID'},
                                                        'AddRequest': {'members': [{'name': 'entry',
                                                                                    'type': 'LDAPDN'},
                                                                                   {'name': 'attributes',
                                                                                    'type': 'AttributeList'}],
                                                                       'tag': {'class': 'APPLICATION',
                                                                               'number': 8},
                                                                       'type': 'SEQUENCE'},
                                                        'AddResponse': {'tag': {'class': 'APPLICATION',
                                                                                'number': 9},
                                                                        'type': 'LDAPResult'},
                                                        'AssertionValue': {'type': 'OCTET '
                                                                                   'STRING'},
                                                        'Attribute': {'type': 'PartialAttribute'},
                                                        'AttributeDescription': {'type': 'LDAPString'},
                                                        'AttributeList': {'element': {'type': 'Attribute'},
                                                                          'type': 'SEQUENCE '
                                                                                  'OF'},
                                                        'AttributeSelection': {'element': {'type': 'LDAPString'},
                                                                               'type': 'SEQUENCE '
                                                                                       'OF'},
                                                        'AttributeValue': {'type': 'OCTET '
                                                                                   'STRING'},
                                                        'AttributeValueAssertion': {'members': [{'name': 'attributeDesc',
                                                                                                 'type': 'AttributeDescription'},
                                                                                                {'name': 'assertionValue',
                                                                                                 'type': 'AssertionValue'}],
                                                                                    'type': 'SEQUENCE'},
                                                        'AuthenticationChoice': {'members': [{'name': 'simple',
                                                                                              'tag': {'number': 0},
                                                                                              'type': 'OCTET '
                                                                                                      'STRING'},
                                                                                             {'name': 'sasl',
                                                                                              'tag': {'number': 3},
                                                                                              'type': 'SaslCredentials'},
                                                                                             '...'],
                                                                                 'type': 'CHOICE'},
                                                        'BindRequest': {'members': [{'name': 'version',
                                                                                     'restricted-to': [(1,
                                                                                                        127)],
                                                                                     'type': 'INTEGER'},
                                                                                    {'name': 'name',
                                                                                     'type': 'LDAPDN'},
                                                                                    {'name': 'authentication',
                                                                                     'type': 'AuthenticationChoice'}],
                                                                        'tag': {'class': 'APPLICATION',
                                                                                'number': 0},
                                                                        'type': 'SEQUENCE'},
                                                        'BindResponse': {'members': [{'components-of': 'LDAPResult'},
                                                                                     {'name': 'serverSaslCreds',
                                                                                      'optional': True,
                                                                                      'tag': {'number': 7},
                                                                                      'type': 'OCTET '
                                                                                              'STRING'}],
                                                                         'tag': {'class': 'APPLICATION',
                                                                                 'number': 1},
                                                                         'type': 'SEQUENCE'},
                                                        'CompareRequest': {'members': [{'name': 'entry',
                                                                                        'type': 'LDAPDN'},
                                                                                       {'name': 'ava',
                                                                                        'type': 'AttributeValueAssertion'}],
                                                                           'tag': {'class': 'APPLICATION',
                                                                                   'number': 14},
                                                                           'type': 'SEQUENCE'},
                                                        'CompareResponse': {'tag': {'class': 'APPLICATION',
                                                                                    'number': 15},
                                                                            'type': 'LDAPResult'},
                                                        'Control': {'members': [{'name': 'controlType',
                                                                                 'type': 'LDAPOID'},
                                                                                {'default': False,
                                                                                 'name': 'criticality',
                                                                                 'type': 'BOOLEAN'},
                                                                                {'name': 'controlValue',
                                                                                 'optional': True,
                                                                                 'type': 'OCTET '
                                                                                         'STRING'}],
                                                                    'type': 'SEQUENCE'},
                                                        'Controls': {'element': {'type': 'Control'},
                                                                     'type': 'SEQUENCE '
                                                                             'OF'},
                                                        'DelRequest': {'tag': {'class': 'APPLICATION',
                                                                               'number': 10},
                                                                       'type': 'LDAPDN'},
                                                        'DelResponse': {'tag': {'class': 'APPLICATION',
                                                                                'number': 11},
                                                                        'type': 'LDAPResult'},
                                                        'ExtendedRequest': {'members': [{'name': 'requestName',
                                                                                         'tag': {'number': 0},
                                                                                         'type': 'LDAPOID'},
                                                                                        {'name': 'requestValue',
                                                                                         'optional': True,
                                                                                         'tag': {'number': 1},
                                                                                         'type': 'OCTET '
                                                                                                 'STRING'}],
                                                                            'tag': {'class': 'APPLICATION',
                                                                                    'number': 23},
                                                                            'type': 'SEQUENCE'},
                                                        'ExtendedResponse': {'members': [{'components-of': 'LDAPResult'},
                                                                                         {'name': 'responseName',
                                                                                          'optional': True,
                                                                                          'tag': {'number': 10},
                                                                                          'type': 'LDAPOID'},
                                                                                         {'name': 'responseValue',
                                                                                          'optional': True,
                                                                                          'tag': {'number': 11},
                                                                                          'type': 'OCTET '
                                                                                                  'STRING'}],
                                                                             'tag': {'class': 'APPLICATION',
                                                                                     'number': 24},
                                                                             'type': 'SEQUENCE'},
                                                        'Filter': {'members': [{'element': {'type': 'Filter'},
                                                                                'name': 'and',
                                                                                'size': [(1,
                                                                                          'MAX')],
                                                                                'tag': {'number': 0},
                                                                                'type': 'SET '
                                                                                        'OF'},
                                                                               {'element': {'type': 'Filter'},
                                                                                'name': 'or',
                                                                                'size': [(1,
                                                                                          'MAX')],
                                                                                'tag': {'number': 1},
                                                                                'type': 'SET '
                                                                                        'OF'},
                                                                               {'name': 'not',
                                                                                'tag': {'number': 2},
                                                                                'type': 'Filter'},
                                                                               {'name': 'equalityMatch',
                                                                                'tag': {'number': 3},
                                                                                'type': 'AttributeValueAssertion'},
                                                                               {'name': 'substrings',
                                                                                'tag': {'number': 4},
                                                                                'type': 'SubstringFilter'},
                                                                               {'name': 'greaterOrEqual',
                                                                                'tag': {'number': 5},
                                                                                'type': 'AttributeValueAssertion'},
                                                                               {'name': 'lessOrEqual',
                                                                                'tag': {'number': 6},
                                                                                'type': 'AttributeValueAssertion'},
                                                                               {'name': 'present',
                                                                                'tag': {'number': 7},
                                                                                'type': 'AttributeDescription'},
                                                                               {'name': 'approxMatch',
                                                                                'tag': {'number': 8},
                                                                                'type': 'AttributeValueAssertion'},
                                                                               {'name': 'extensibleMatch',
                                                                                'tag': {'number': 9},
                                                                                'type': 'MatchingRuleAssertion'},
                                                                               '...'],
                                                                   'type': 'CHOICE'},
                                                        'IntermediateResponse': {'members': [{'name': 'responseName',
                                                                                              'optional': True,
                                                                                              'tag': {'number': 0},
                                                                                              'type': 'LDAPOID'},
                                                                                             {'name': 'responseValue',
                                                                                              'optional': True,
                                                                                              'tag': {'number': 1},
                                                                                              'type': 'OCTET '
                                                                                                      'STRING'}],
                                                                                 'tag': {'class': 'APPLICATION',
                                                                                         'number': 25},
                                                                                 'type': 'SEQUENCE'},
                                                        'LDAPDN': {'type': 'LDAPString'},
                                                        'LDAPMessage': {'members': [{'name': 'messageID',
                                                                                     'type': 'MessageID'},
                                                                                    {'members': [{'name': 'bindRequest',
                                                                                                  'type': 'BindRequest'},
                                                                                                 {'name': 'bindResponse',
                                                                                                  'type': 'BindResponse'},
                                                                                                 {'name': 'unbindRequest',
                                                                                                  'type': 'UnbindRequest'},
                                                                                                 {'name': 'searchRequest',
                                                                                                  'type': 'SearchRequest'},
                                                                                                 {'name': 'searchResEntry',
                                                                                                  'type': 'SearchResultEntry'},
                                                                                                 {'name': 'searchResDone',
                                                                                                  'type': 'SearchResultDone'},
                                                                                                 {'name': 'searchResRef',
                                                                                                  'type': 'SearchResultReference'},
                                                                                                 {'name': 'modifyRequest',
                                                                                                  'type': 'ModifyRequest'},
                                                                                                 {'name': 'modifyResponse',
                                                                                                  'type': 'ModifyResponse'},
                                                                                                 {'name': 'addRequest',
                                                                                                  'type': 'AddRequest'},
                                                                                                 {'name': 'addResponse',
                                                                                                  'type': 'AddResponse'},
                                                                                                 {'name': 'delRequest',
                                                                                                  'type': 'DelRequest'},
                                                                                                 {'name': 'delResponse',
                                                                                                  'type': 'DelResponse'},
                                                                                                 {'name': 'modDNRequest',
                                                                                                  'type': 'ModifyDNRequest'},
                                                                                                 {'name': 'modDNResponse',
                                                                                                  'type': 'ModifyDNResponse'},
                                                                                                 {'name': 'compareRequest',
                                                                                                  'type': 'CompareRequest'},
                                                                                                 {'name': 'compareResponse',
                                                                                                  'type': 'CompareResponse'},
                                                                                                 {'name': 'abandonRequest',
                                                                                                  'type': 'AbandonRequest'},
                                                                                                 {'name': 'extendedReq',
                                                                                                  'type': 'ExtendedRequest'},
                                                                                                 {'name': 'extendedResp',
                                                                                                  'type': 'ExtendedResponse'},
                                                                                                 '...',
                                                                                                 {'name': 'intermediateResponse',
                                                                                                  'type': 'IntermediateResponse'}],
                                                                                     'name': 'protocolOp',
                                                                                     'type': 'CHOICE'},
                                                                                    {'name': 'controls',
                                                                                     'optional': True,
                                                                                     'tag': {'number': 0},
                                                                                     'type': 'Controls'}],
                                                                        'type': 'SEQUENCE'},
                                                        'LDAPOID': {'type': 'OCTET '
                                                                            'STRING'},
                                                        'LDAPResult': {'members': [{'name': 'resultCode',
                                                                                    'type': 'ENUMERATED',
                                                                                    'values': [('success',
                                                                                                0),
                                                                                               ('operationsError',
                                                                                                1),
                                                                                               ('protocolError',
                                                                                                2),
                                                                                               ('timeLimitExceeded',
                                                                                                3),
                                                                                               ('sizeLimitExceeded',
                                                                                                4),
                                                                                               ('compareFalse',
                                                                                                5),
                                                                                               ('compareTrue',
                                                                                                6),
                                                                                               ('authMethodNotSupported',
                                                                                                7),
                                                                                               ('strongerAuthRequired',
                                                                                                8),
                                                                                               ('referral',
                                                                                                10),
                                                                                               ('adminLimitExceeded',
                                                                                                11),
                                                                                               ('unavailableCriticalExtension',
                                                                                                12),
                                                                                               ('confidentialityRequired',
                                                                                                13),
                                                                                               ('saslBindInProgress',
                                                                                                14),
                                                                                               ('noSuchAttribute',
                                                                                                16),
                                                                                               ('undefinedAttributeType',
                                                                                                17),
                                                                                               ('inappropriateMatching',
                                                                                                18),
                                                                                               ('constraintViolation',
                                                                                                19),
                                                                                               ('attributeOrValueExists',
                                                                                                20),
                                                                                               ('invalidAttributeSyntax',
                                                                                                21),
                                                                                               ('noSuchObject',
                                                                                                32),
                                                                                               ('aliasProblem',
                                                                                                33),
                                                                                               ('invalidDNSyntax',
                                                                                                34),
                                                                                               ('aliasDereferencingProblem',
                                                                                                36),
                                                                                               ('inappropriateAuthentication',
                                                                                                48),
                                                                                               ('invalidCredentials',
                                                                                                49),
                                                                                               ('insufficientAccessRights',
                                                                                                50),
                                                                                               ('busy',
                                                                                                51),
                                                                                               ('unavailable',
                                                                                                52),
                                                                                               ('unwillingToPerform',
                                                                                                53),
                                                                                               ('loopDetect',
                                                                                                54),
                                                                                               ('namingViolation',
                                                                                                64),
                                                                                               ('objectClassViolation',
                                                                                                65),
                                                                                               ('notAllowedOnNonLeaf',
                                                                                                66),
                                                                                               ('notAllowedOnRDN',
                                                                                                67),
                                                                                               ('entryAlreadyExists',
                                                                                                68),
                                                                                               ('objectClassModsProhibited',
                                                                                                69),
                                                                                               ('affectsMultipleDSAs',
                                                                                                71),
                                                                                               ('other',
                                                                                                80),
                                                                                               '...']},
                                                                                   {'name': 'matchedDN',
                                                                                    'type': 'LDAPDN'},
                                                                                   {'name': 'diagnosticMessage',
                                                                                    'type': 'LDAPString'},
                                                                                   {'name': 'referral',
                                                                                    'optional': True,
                                                                                    'tag': {'number': 3},
                                                                                    'type': 'Referral'}],
                                                                       'type': 'SEQUENCE'},
                                                        'LDAPString': {'type': 'OCTET '
                                                                               'STRING'},
                                                        'MatchingRuleAssertion': {'members': [{'name': 'matchingRule',
                                                                                               'optional': True,
                                                                                               'tag': {'number': 1},
                                                                                               'type': 'MatchingRuleId'},
                                                                                              {'name': 'type',
                                                                                               'optional': True,
                                                                                               'tag': {'number': 2},
                                                                                               'type': 'AttributeDescription'},
                                                                                              {'name': 'matchValue',
                                                                                               'tag': {'number': 3},
                                                                                               'type': 'AssertionValue'},
                                                                                              {'default': False,
                                                                                               'name': 'dnAttributes',
                                                                                               'tag': {'number': 4},
                                                                                               'type': 'BOOLEAN'}],
                                                                                  'type': 'SEQUENCE'},
                                                        'MatchingRuleId': {'type': 'LDAPString'},
                                                        'MessageID': {'restricted-to': [(0,
                                                                                         'maxInt')],
                                                                      'type': 'INTEGER'},
                                                        'ModifyDNRequest': {'members': [{'name': 'entry',
                                                                                         'type': 'LDAPDN'},
                                                                                        {'name': 'newrdn',
                                                                                         'type': 'RelativeLDAPDN'},
                                                                                        {'name': 'deleteoldrdn',
                                                                                         'type': 'BOOLEAN'},
                                                                                        {'name': 'newSuperior',
                                                                                         'optional': True,
                                                                                         'tag': {'number': 0},
                                                                                         'type': 'LDAPDN'}],
                                                                            'tag': {'class': 'APPLICATION',
                                                                                    'number': 12},
                                                                            'type': 'SEQUENCE'},
                                                        'ModifyDNResponse': {'tag': {'class': 'APPLICATION',
                                                                                     'number': 13},
                                                                             'type': 'LDAPResult'},
                                                        'ModifyRequest': {'members': [{'name': 'object',
                                                                                       'type': 'LDAPDN'},
                                                                                      {'element': {'members': [{'name': 'operation',
                                                                                                                'type': 'ENUMERATED',
                                                                                                                'values': [('add',
                                                                                                                            0),
                                                                                                                           ('delete',
                                                                                                                            1),
                                                                                                                           ('replace',
                                                                                                                            2),
                                                                                                                           '...']},
                                                                                                               {'name': 'modification',
                                                                                                                'type': 'PartialAttribute'}],
                                                                                                   'type': 'SEQUENCE'},
                                                                                       'name': 'changes',
                                                                                       'type': 'SEQUENCE '
                                                                                               'OF'}],
                                                                          'tag': {'class': 'APPLICATION',
                                                                                  'number': 6},
                                                                          'type': 'SEQUENCE'},
                                                        'ModifyResponse': {'tag': {'class': 'APPLICATION',
                                                                                   'number': 7},
                                                                           'type': 'LDAPResult'},
                                                        'PartialAttribute': {'members': [{'name': 'type',
                                                                                          'type': 'AttributeDescription'},
                                                                                         {'element': {'type': 'AttributeValue'},
                                                                                          'name': 'vals',
                                                                                          'type': 'SET '
                                                                                                  'OF'}],
                                                                             'type': 'SEQUENCE'},
                                                        'PartialAttributeList': {'element': {'type': 'PartialAttribute'},
                                                                                 'type': 'SEQUENCE '
                                                                                         'OF'},
                                                        'Referral': {'element': {'type': 'URI'},
                                                                     'size': [(1,
                                                                               'MAX')],
                                                                     'type': 'SEQUENCE '
                                                                             'OF'},
                                                        'RelativeLDAPDN': {'type': 'LDAPString'},
                                                        'SaslCredentials': {'members': [{'name': 'mechanism',
                                                                                         'type': 'LDAPString'},
                                                                                        {'name': 'credentials',
                                                                                         'optional': True,
                                                                                         'type': 'OCTET '
                                                                                                 'STRING'}],
                                                                            'type': 'SEQUENCE'},
                                                        'SearchRequest': {'members': [{'name': 'baseObject',
                                                                                       'type': 'LDAPDN'},
                                                                                      {'name': 'scope',
                                                                                       'type': 'ENUMERATED',
                                                                                       'values': [('baseObject',
                                                                                                   0),
                                                                                                  ('singleLevel',
                                                                                                   1),
                                                                                                  ('wholeSubtree',
                                                                                                   2),
                                                                                                  '...']},
                                                                                      {'name': 'derefAliases',
                                                                                       'type': 'ENUMERATED',
                                                                                       'values': [('neverDerefAliases',
                                                                                                   0),
                                                                                                  ('derefInSearching',
                                                                                                   1),
                                                                                                  ('derefFindingBaseObj',
                                                                                                   2),
                                                                                                  ('derefAlways',
                                                                                                   3)]},
                                                                                      {'name': 'sizeLimit',
                                                                                       'restricted-to': [(0,
                                                                                                          'maxInt')],
                                                                                       'type': 'INTEGER'},
                                                                                      {'name': 'timeLimit',
                                                                                       'restricted-to': [(0,
                                                                                                          'maxInt')],
                                                                                       'type': 'INTEGER'},
                                                                                      {'name': 'typesOnly',
                                                                                       'type': 'BOOLEAN'},
                                                                                      {'name': 'filter',
                                                                                       'type': 'Filter'},
                                                                                      {'name': 'attributes',
                                                                                       'type': 'AttributeSelection'}],
                                                                          'tag': {'class': 'APPLICATION',
                                                                                  'number': 3},
                                                                          'type': 'SEQUENCE'},
                                                        'SearchResultDone': {'tag': {'class': 'APPLICATION',
                                                                                     'number': 5},
                                                                             'type': 'LDAPResult'},
                                                        'SearchResultEntry': {'members': [{'name': 'objectName',
                                                                                           'type': 'LDAPDN'},
                                                                                          {'name': 'attributes',
                                                                                           'type': 'PartialAttributeList'}],
                                                                              'tag': {'class': 'APPLICATION',
                                                                                      'number': 4},
                                                                              'type': 'SEQUENCE'},
                                                        'SearchResultReference': {'element': {'type': 'URI'},
                                                                                  'size': [(1,
                                                                                            'MAX')],
                                                                                  'tag': {'class': 'APPLICATION',
                                                                                          'number': 19},
                                                                                  'type': 'SEQUENCE '
                                                                                          'OF'},
                                                        'SubstringFilter': {'members': [{'name': 'type',
                                                                                         'type': 'AttributeDescription'},
                                                                                        {'element': {'members': [{'name': 'initial',
                                                                                                                  'tag': {'number': 0},
                                                                                                                  'type': 'AssertionValue'},
                                                                                                                 {'name': 'any',
                                                                                                                  'tag': {'number': 1},
                                                                                                                  'type': 'AssertionValue'},
                                                                                                                 {'name': 'final',
                                                                                                                  'tag': {'number': 2},
                                                                                                                  'type': 'AssertionValue'}],
                                                                                                     'type': 'CHOICE'},
                                                                                         'name': 'substrings',
                                                                                         'size': [(1,
                                                                                                   'MAX')],
                                                                                         'type': 'SEQUENCE '
                                                                                                 'OF'}],
                                                                            'type': 'SEQUENCE'},
                                                        'URI': {'type': 'LDAPString'},
                                                        'UnbindRequest': {'tag': {'class': 'APPLICATION',
                                                                                  'number': 2},
                                                                          'type': 'NULL'}},
                                              'values': {'maxInt': {'type': 'INTEGER',
                                                                    'value': 2147483647}}}}