[IQ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefQRSTUVWXYZ[\]^_`abcdefQXWVUTSRRSTUVWXY`_^]\[ZZ[\]^_`aedcbbcdefghijklmnopqrstuvwxyz{hh |}~ +  %'Replaces multiple WPSs to a single SP. %% (Type for body of parsed e-mail message. /Type for field value of parsed e-mail message. -Type for field key of parsed e-mail message. ;Type for canonicalized field key of parsed e-mail message. &Field type for parsed e-mail message.  'Header type for parsed e-mail message.  Type for parsed e-mail message. #Body chunk for raw e-mail message. $Field value for raw e-mail message. "Field key for raw e-mail message. Type for raw e-mail message. Canonicalizing  for search.    1Type for temporary data to parse e-mail message. Initial value for . 9Storing field key and field value to the temporary data. *Storing body chunk to the temporary data.  Converting  to  .  Obtain   from a file. Obtain   from . "Parsing field value of tag=value.    Looking up  from   with . Obtaining the  of  and all fields under . !Obtaining all fields under . "*Obtaining all fields with DKIM algorithm. #$Obtaining folded (raw) field value. $0Obtaining unfolded (removing CRLF) field value. %Obtaining body. &1Obtaining body with a canonicalization function. 'Removing trailing empty lines.  !"#$%&'  !"#$%&' (?The result of domain authentication. For more information, see   #http://www.ietf.org/rfc/rfc5451.txt. )*+,-./01234 ()*+,-./01234 (43210/.-,+*) ( 43210/.-,+*))*+,-./01234 5Limit for SPF authentication. 67 How many "redirect"/"include" should be followed. 8<Ignoring IPv4 range whose mask length is shorter than this. 9<Ignoring IPv6 range whose mask length is shorter than this. :Whether or not "+all" is rejected. ;Default 65. 7 is 10. 8 is 16.  9 is 48. : is . 56789:;56789:6789:;<Process SPF authentication. # is an IP address of an SMTP peer.  If 5 is specified from SMTP MAIL FROM, authentication is  based on SPF. If * is specified from the From field of mail D header, authentication is based on SenderID. If condition reaches  65,  SpfPermError is returned. 56789:;<<56789:;<(  !"#$%&'(  !"#$%&'='Abstract type for DomainKey-Signature:      >,Canonicalized key for DomainKey-Signature:. ?Getting of the value of the "d" tag in DomainKey-Signature:. @Getting of the value of the "s" tag in DomainKey-Signature:. =     >?@=         >?@AParsing DomainKey-Signature:.  !"#A !"#A !"#$%&'()$)$)*+,-*+,-*+,-B Verifying   with DomainKeys. C Verifying  4 with DomainKeys. The value of DomainKey-Signature:  should be parsed beforehand. =>?@ABCBCA=?@>BCD./0123456789:;<=>E'Canonicalized key for DKIM-Signature:. FGetting of the value of the "d" tag in DKIM-Signature:. GGetting of the value of the "s" tag in DKIM-Signature:. D./0123456789:;<=>EFGD ./012345678./0123456789;::;<>==>EFG?@ABCDEFGHIJKHParsing DKIM-Signature:. LMNOPQRSTUV?@ABCDEFGHIJKHLMNOPQRSTUV?@ ABCDEFGHIJKABCDEFGHIJKHLMNOPQRSTUVWXYZ[\WZWZI Verifying   with DKIM. J Verifying  ) with DKIM. The value of DKIM-Signature:  should be parsed beforehand. DEFGHIJIJHDFGEIJK1Extract a domain from a value of a header field. KKLFAbstract type for context to decide PRD(purported responsible domain)  according to RFC 4407. ]^_`abcdefgMInitial context of PRD. N9Pushing a field key and its value in to the PRD context. O#Deciding PRD from the RPD context. P0Taking the value of From: from the RPD context. hijklmLMNOPLMNOPKLMNOPLMNOPKQ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPn !""#$%&''()*+,-./00123456789:;<=>?@ABCDEFGHIJKLMNOPPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                      !"#$W%&'()*+,-./01223456789:;<=>?@ABCDEFGHIJ^KLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwfxyz{|}~domain-auth-0.2.0Network.DomainAuth.MailNetwork.DomainAuth.TypesNetwork.DomainAuth.SPFNetwork.DomainAuth.DKNetwork.DomainAuth.DKIMNetwork.DomainAuth.PRDNetwork.DomainAuth.SPF.TypesNetwork.DomainAuth.SPF.ParserNetwork.DomainAuth.PRD.LexerNetwork.DomainAuth.Pubkey.DerNetwork.DomainAuth.DKIM.BtagNetwork.DomainAuth.Utils Network.DomainAuth.Pubkey.Base64Network.DomainAuth.SPF.ResolverNetwork.DomainAuth.Mail.TypesNetwork.DomainAuth.Mail.XMailNetwork.DomainAuth.Mail.ParserNetwork.DomainAuth.Mail.MailNetwork.DomainAuth.SPF.EvalNetwork.DomainAuth.DK.TypesNetwork.DomainAuth.DK.ParserNetwork.DomainAuth.DK.Verify Network.DomainAuth.Pubkey.RSAPubNetwork.DomainAuth.DKIM.TypesNetwork.DomainAuth.DKIM.ParserNetwork.DomainAuth.DKIM.VerifyNetwork.DomainAuth.PRD.DomainNetwork.DomainAuth.PRD.PRDNetwork.DomainAuthBody FieldValueFieldKey CanonFieldKeyFieldfieldSearchKeyfieldKey fieldValueHeaderMail mailHeadermailBody RawBodyChunk RawFieldValue RawFieldKeyRawMailisEmptycanonicalizeKeyXMail xmailHeader xmailBody initialXMail pushFieldpushBody finalizeMailreadMailgetMailparseTaggedValue lookupField fieldsFrom fieldsAfter fieldsWithfieldValueFoldedfieldValueUnfoldedfromBody fromBodyWithremoveTrailingEmptyLineDAResult DAUnknown DADiscard DANxDomainDAPolicyDANone DAPermError DATempErrorDAFail DANeutral DASoftFail DAHardFailDAPassLimitlimit ipv4_masklen ipv6_masklenreject_plus_all defaultLimitrunSPFDK dkFieldKeydkDomain dkSelectorparseDKrunDKrunDK'DKIM dkimFieldKey dkimDomain dkimSelector parseDKIMrunDKIMrunDKIM' extractDomainPRD initialPRDpushPRD decidePRD decideFromSpfSeq SS_SpfSeq SS_IF_Pass SS_IPv6Ranges SS_IPv4Ranges SS_IPv6Range SS_IPv4RangeSS_AllSPF SPF_RedirectSPF_All SPF_IncludeSPF_MX SPF_Address SPF_IPv6Range SPF_IPv4Range Qualifier Q_Neutral Q_Softfail Q_HardFailQ_PassqualifierSymbol DirectiveparseSPFspaces1spf spfPrefixmodifier directive qualifier mechanismip4ip6alladdressmxincludedomainoptionalDomainmask optionalMaskipv4Maskipv6Mask concatSpaceskipCharwsp structuredspecialsatextatomdtext domainLiteralqtextqcontent quotedStringvchar quoted_pairctextccontentcomment'commentSizeTagClassPrivContApplUnivTLVConstlvPrimclstagsizcntTermdecodeder primitive constructdefinitegetClassgetConstructorgetTagmultiTagincTag singleLengthgetMultigetLendefiniteLength multiLengthincLenanyIntnonZero classMask classShiftconsFlagtagMasktagEnd tagLenMasklenFlaglenMaskindefiniteMarkremoveBtagValue remBtagValueinFixbtagCook FWSRemovercrlf+++empty!!! appendCRLF appendCRLF'appendCRLFWith concatCRLFconcatCRLFWith reduceWSPinSPoutSP removeFWSremoveTrailingWSPhasTrailingWSPchopblinesbreak' isAlphaNumisDigitisUpperisLowerisSpacecCRcLFcSPcTBcPluscSlashcEqualcSmallAcAcZerocColon cSemiColonisBase64decdec'dec1'dec2'fromCharsplits resolveSPFfilterSPFWithIP exceptIPv4 exceptIPv6toSpfSeqdoit4doit6checkDNSRawFieldRawBody RawHeadersplitHeaderBodyfindEOH splitFields findFieldEnd begOfLine isContinued parseFieldisKeyOf isNotKeyOf dropWhileRghc-prim GHC.TypesTrueevalSPFevalspfeval iproute-1.2.4 Data.IP.AddrIP dns-0.3.1Network.DNS.InternalDomainspfErrorHandle dkAlgorithm dkSignature dkCanonAlgo dkDomain0dkFields dkSelector0DkFields DkCanonAlgoDK_NOFWS DK_SIMPLE DkAlgorithm DK_RSA_SHA1DKSetterMDK mdkAlgorithm mdkSignature mdkCanonAlgo mdkDomain mdkFields mdkSelector initialMDKdkTagDBsetDkAlgorithmsetDkSignaturesetDkCanonAlgo setDkDomain setDkFields setDkSelector prepareDK canonDkHeader canonDkFieldprepareDkHeader canonDkBodyverifyDKlookupPublicKeylookupPublicKey' extractPubdecodeRSAPublicyKey dkimVersion dkimSigAlgo dkimSignature dkimBodyHashdkimHeaderCanon dkimBodyCanon dkimDomain0 dkimFields dkimLength dkimSelector0 DkimCanonAlgo DKIM_RELAXED DKIM_SIMPLE DkimSigAlgo RSA_SHA256RSA_SHA1 DKIMSetterMDKIM mdkimVersion mdkimSigAlgomdkimSignature mdkimBodyHashmdkimHeaderCanonmdkimBodyCanon mdkimDomain mdkimFields mdkimLength mdkimSelector initialMDKIM dkimTagDBsetDkimVersionsetDkimSigAlgosetDkimSignaturesetDkimBodyHashsetDkimCanonAlgo setDkimDomain setDkimFields setDkimLengthsetDkimSelector prepareDKIMcanonDkimField canonDkimBody verifyDKIM hashAlgo1 hashAlgo2praFrom praSender praResentFrompraResentSender praHeaderDST DST_Valid DST_InvalidDST_ZeroHDtoMaybepushFrom pushSenderpushResentFrompushResentSender isFirstBlock