ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ A[c@sdZddlZddlZddlmZdZdZdZejrae Z dZ n e Z e Z dZ d efd YZd Zd Zd ZdZdZedZedZejejZdZedkrndS(s This is Victor Stinner's pure-Python implementation of PEP 383: the "surrogateescape" error handler of Python 3. Source: misc/python/surrogateescape.py in https://bitbucket.org/haypo/misc iN(tutilstsurrogateescapecCstjr |S|jdSdS(Ntunicode_escape(RtPY3tdecode(ttext((sM/opt/alt/python27/lib/python2.7/site-packages/future/utils/surrogateescape.pytus cCstjr|jdS|SdS(Ntlatin1(RRtencode(tdata((sM/opt/alt/python27/lib/python2.7/site-packages/future/utils/surrogateescape.pytbs  cCs t|fS(N(tbytes(tcode((sM/opt/alt/python27/lib/python2.7/site-packages/future/utils/surrogateescape.pyt#tcCs|j|j|j!}yFt|tr7t|}n$t|trUt|}n|Wntk ru|nX||jfS(s Pure Python implementation of the PEP 383: the "surrogateescape" error handler of Python 3. Undecodable bytes will be replaced by a Unicode character U+DCxx on decoding, and these are translated into the original bytes on encoding. ( tobjecttstarttendt isinstancetUnicodeDecodeErrortreplace_surrogate_decodetUnicodeEncodeErrortreplace_surrogate_encodetNotASurrogateError(texctmystringtdecoded((sM/opt/alt/python27/lib/python2.7/site-packages/future/utils/surrogateescape.pytsurrogateescape_handler(s   RcBseZRS((t__name__t __module__(((sM/opt/alt/python27/lib/python2.7/site-packages/future/utils/surrogateescape.pyRCscCsg}x|D]}t|}d|ko6dknsDtnd|ko[dknrz|jt|dq |dkr|jt|dq tq Wtj|S(s Returns a (unicode) string, not the more logical bytes, because the codecs register_error functionality expects this. iiii(tordRtappendt_unichrtstrtjoin(RRtchR ((sM/opt/alt/python27/lib/python2.7/site-packages/future/utils/surrogateescape.pyRGs     cCsg}x|D]}t|tr+|}n t|}d|koNdknrm|jtd|q |dkr|jt|q tq Wtj|S(s$ Returns a (unicode) string iiii(RtintRRR RR!R"(tmybytesRR#R ((sM/opt/alt/python27/lib/python2.7/site-packages/future/utils/surrogateescape.pyRds     cCstdkrg}xt|D]\}}t|}|dkrRt|}nKd|koidknrt|d}ntt|||dd|j|qWtj|Stdkrg}xt|D]\}}t|}d |ko d knrld|ko(dknrMt|d}|j|qtt|||dd q|jd}|j|qWtj|S|jtt SdS( Ntasciiiiiiisordinal not in range(128)sutf-8iissurrogates not allowed( t FS_ENCODINGt enumerateRt bytes_chrRRR R"Rt FS_ERRORS(tfntencodedtindexR#R tch_utf8((sM/opt/alt/python27/lib/python2.7/site-packages/future/utils/surrogateescape.pytencodefilename}s8       cCs|jttS(N(RR'R*(R+((sM/opt/alt/python27/lib/python2.7/site-packages/future/utils/surrogateescape.pytdecodefilenamesR&s[abc]s [abc\udcff]cCsFtjr dSytjtWn!tk rAtjttnXdS(sH Registers the surrogateescape error handler on Python 2 (only) N(RRtcodecst lookup_errorR*t LookupErrortregister_errorR(((sM/opt/alt/python27/lib/python2.7/site-packages/future/utils/surrogateescape.pytregister_surrogateescapes   t__main__(t__doc__R1tsystfutureRR*RR RtchrR R)tunichrRt ExceptionRRRR/R0R'R+R,tlookuptnameR5R(((sM/opt/alt/python27/lib/python2.7/site-packages/future/utils/surrogateescape.pyts0          '