úÎ2,E=      !"#$%&'()*+,-./0123456789:;<##Represents Distinguished Name (DN) BRepresents ChangeModify operations upon one entry within given DN  2Represents one LDAP operation within changes LDIF @Represents one data record within LDIF file with DN and content E | Represents one change record within LDIF file with DN and content ERepresents LDIF structure, it can be either simply LDIF data dump or & | changes LDIF with LDAP operations &Type of LDIF Files (Content, Changes)  !"#  !")      !" #        !""+#;Parse string as LDIF content and return LDIF or ParseError $;Read and parse provided file and return LDIF or ParseError =>Read and parse provided string and return LDIF or ParserError F | If LDIF type is specified than given type is expected for parsing % | and mismatch generates ParseError %&4Parse string as DN and return DN type or ParseError >@Preprocessing for concat wrapped lines and remove comment lines ?Remove Comment Lines @FUnwrap lines, lines with space at begin is continue of previous line ABCParsec ldif parser DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc#$%&#%$&#$%&'Serialize LDIF in LDIF Format d'Serialize version to LDIF Format Lines (Serialize DN to LDIF Format )(Serialize Content Record in LDIF Format efgh'()'()'()* Find all Contents with given DN +!Find first Content with given DN ,1Find fist Attribute within attributes pairs list -5Filter Attribute Value list according Attribute name .!Change record without any impact /01i23"Check if the dn1 is prefix of dn2 j4klm56789*+,-./0123456789*+312/0,-.475689*+,-./0123456789:4Create Change LDIF between to LDIF contents. If any = | of input argument is not LDIFContent it returns Nothing. 9 | If there is not difference the Change LDIF with empty  | change list is returned.  |  | Unsing following strategy:  | 1. Iterate over L1 DN' s and Modify / Remove Content 0 | 2. Iterate over L2 and Add Content not in L1 n;.Diff two AttrVal Records if any of provided. a | Implementation uses inefficient algorithm for large count of attributes within ContentRecord. :;:;:;<9Apply one LDIF to another LDIF. The destination LDIF has  | to be Content LDIF oApply one LDIF Content/1Change Record into LDIF and produce Changed LDIF pApply one LDIF Change (adddel(modf) for given DN within LDIF Content q!Apply Attribute Modification (AddDel<Replace) to ContentRecord and produce changed ContentRecord <<<=  !"#$%&'()*+,-./0123456789:;<r      !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw ldif-0.0.8Text.LDIF.TypesText.LDIF.ParserText.LDIF.PrinterText.LDIF.UtilsText.LDIF.DiffText.LDIF.Apply Text.LDIFDNDNi dnAttrValsModify ModReplace ModDeleteModAddmodAttr modAttrValsChange ChangeModDN ChangeModifychMods ChangeDelete ChangeAdd chAttrVals LDIFRecord ChangeRecordchOp ContentRecordreDN coAttrValsLDIF lcVersion lcEntriesLDIFType LDIFMixedTypeLDIFChangesTypeLDIFContentType AttrValueValue Attribute parseLDIFStr parseLDIFFileparseLDIFStrAs parseDNStrldif2strdn2str record2strfindRecordsByDNfindRecordByDN lookupAttr filterAttr isDummyRecordleafOfDNrootOfDNsizeOfDN takeDNPrefix isDNPrefixOf ldif2treeisContentRecordisChangeRecord getLDIFTypedn2dnI ldif2ldifIdiffLDIF diffRecord applyLDIFparseLDIFStrAs'preproc stripCommentsunwrap takeLinestakeLinepLdif pLdifChanges pLdifMixed pLdifContent pAttrValRecpRec pChangeRec pChangeAdd pChangeDel pChangeMod pChangeModDNpRDNpDNSpecpDN pAttrEqValue pAttrValueDN pVersionSpecpModSpecmkModpModTypepAttributeDescriptionpAttributeType pAttrValSpec pValueSpecpURL pSafeString pSafeString' pBase64StringpAttrTypeCharspLdapOidpFILLpSEPpSEPsver2str attrVals2Ln attrVal2Lnmods2Lnmod2Ln getDNValue dummyRootDNisParentRecordOf ldifRoots ldifRecs2tree diffLDIF'applyRecord2LDIFapplyChange2RecordapplyMod2Record