PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  YFTc@sdZddlmZddlZddlZyddlZWn ek r`ddljZnXddgZ ej Z e e dj Zdejfd YZd efd YZd efd YZdS(sHandle digesting the messages.i(tprint_functionNiii<tt HTMLStrippercBs2eZdZdZdZdZdZRS(sStrip all tags from the HTML.cCs0tjj||j||_t|_dS(N(t HTMLParsert__init__tresett collectortTruetcollect(tselfR((s0/usr/lib/python2.7/site-packages/pyzor/digest.pyRs  cCs2|j}|r.|jr.|jj|ndS(sKeep track of the data.N(tstripRRtappend(R tdata((s0/usr/lib/python2.7/site-packages/pyzor/digest.pyt handle_datas cCs8tjj||||jdkr4t|_ndS(Ntscripttstyle(sscriptR(Rthandle_starttagtlowertFalseR(R ttagtattrs((s0/usr/lib/python2.7/site-packages/pyzor/digest.pyR"scCs5tjj|||jdkr1t|_ndS(NRR(sscriptsstyle(Rt handle_endtagRRR(R R((s0/usr/lib/python2.7/site-packages/pyzor/digest.pyR's(t__name__t __module__t__doc__RR RR(((s0/usr/lib/python2.7/site-packages/pyzor/digest.pyRs    t DataDigestercBseZdZddgZdZdZejdZejdej Z ejdZ ejdZ d Z dd Zd Zd Zd ZedZedZedZedZRS(sThe major workhouse class.tvaluetdigestiis\S+@\S+s [a-z]+:\S+s\S{10,}s\sRcCs|dkrt}nd|_t|_g}x|j|D]r}xi|jD][}|j|}|j|rSy|j |j ddWqt k rqSqXqSqSWq@Wt ||j kr|j|n|j|||jj|_t |jtkstdS(Ntutf8tignore(tNonet digest_specRtHASHRtdigest_payloadst splitlinest normalizetshould_handle_lineR tencodet UnicodeErrortlentatomic_num_linest handle_atomict handle_piecedt hexdigestt HASH_SIZEtAssertionError(R tmsgtspectlinestpayloadtlinetnorm((s0/usr/lib/python2.7/site-packages/pyzor/digest.pyRJs$     cCs"x|D]}|j|qWdS(sWe digest everything.N(t handle_line(R R0R2((s0/usr/lib/python2.7/site-packages/pyzor/digest.pyR)ds cCsyxr|D]j\}}x[t|D]M}y&|t|t|d|}Wntk r_q X|j|q WqWdS(s#Digest stuff according to the spec.idN(txrangetintR't IndexErrorR4(R R0R/toffsettlengthtiR2((s0/usr/lib/python2.7/site-packages/pyzor/digest.pyR*is& cCs|jj|jdS(N(Rtupdatetrstrip(R R2((s0/usr/lib/python2.7/site-packages/pyzor/digest.pyR4tscCsa|j}|jj||}|jj||}|jj||}|jjd|jS(NR(tunwanted_txt_replt longstr_ptrntsubt email_ptrnturl_ptrntws_ptrnR (tclststrepl((s0/usr/lib/python2.7/site-packages/pyzor/digest.pyR#ws  cCsMg}t|}y|j|Wnttjfk r?nXdj|S(Nt (RtfeedtUnicodeDecodeErrorRtHTMLParseErrortjoin(RDR tstripper((s0/usr/lib/python2.7/site-packages/pyzor/digest.pytnormalize_html_parts cCst|o|jt|kS(N(R'tmin_line_length(RCRD((s0/usr/lib/python2.7/site-packages/pyzor/digest.pyR$sccs,x%|jD]}|jdkr |jdt}|j}d}|sXd}n'|jjddd krd }ny|j||}WnGtt t fk ry|jdd}Wqt k rq qXnX|j d kr|j |Vq$|Vq |j rq |jVq WdS(NttexttdecodeRtasciit_t-s quopri-codectquoprisquoted-printabletquotedprintabletstrictthtml(s quopri-codecsquoprisquoted-printablesquotedprintable(twalktget_content_maintypet get_payloadRtget_content_charsetRtreplaceROt LookupErrorR&R-tget_content_subtypeRLt is_multipart(RCR.tpartR1tcharsetterrors((s0/usr/lib/python2.7/site-packages/pyzor/digest.pyR!s.       N(RRRt __slots__RMR(tretcompileR@t IGNORECASERAR>RBR=RRR)R*R4t classmethodR#t staticmethodRLR$R!(((s0/usr/lib/python2.7/site-packages/pyzor/digest.pyR-s"      tPrintingDataDigestercBseZdZdZRS(s6Extends DataDigester: prints out what we're digesting.cCs-t|jdtt|j|dS(NR(tprintROtsuperRhR4(R R2((s0/usr/lib/python2.7/site-packages/pyzor/digest.pyR4s(RRRR4(((s0/usr/lib/python2.7/site-packages/pyzor/digest.pyRhs(ii(i<i(Rt __future__RRcthashlibRt ImportErrort html.parsertparserRtsha1R R'R+R,RtobjectRRh(((s0/usr/lib/python2.7/site-packages/pyzor/digest.pyts