ÿØÿà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Áß_ÿÙ aabc@sdZddlZddlZddlZyddlmZWn!ek raddlmZnXddlm Z ddl m Z ddl m Z m Z ddl mZmZyeWnek reZnXyeWnek reZnXyeWnek reZnXyeWnek r;eefZnXdd d d d d dgZejdejejBjZejdejjZejdejddkrejfnfj Z!ejdejj"Z#ejdejj"Z$ejdejj"Z%dZ&ejdjZ'ejdejejBZ(e j)dZ*e j)ddie d6Z+d e,fdYZ-e-Z.e.j/Z/ejdejejd ejgZ0d!d"d#d$d%d&gZ1ejd'ejejd(ejejd)gZ2d*gZ3e0e1e2e3d+Z4d,Z5d-Z6e4je6_d"d!d#gZ7d.gZ8d/e7e8ed0d1Z9d2Z:d3Z;ejd4ejZ<d5Z=dS(6scA cleanup tool for HTML. Removes unwanted tags and content. See the `Cleaner` class for details. iN(turlsplit(tetree(tdefs(t fromstringtXHTML_NAMESPACE(t xhtml_to_htmlt_transform_resultt clean_htmltcleantCleanertautolinkt autolink_htmlt word_breaktword_break_htmlsexpression\s*\(.*?\)s @\s*importssdescendant-or-self::*[@style]sdescendant-or-self::a [normalize-space(@href) and substring(normalize-space(@href),1,1) != '#'] |descendant-or-self::x:a[normalize-space(@href) and substring(normalize-space(@href),1,1) != '#']t namespacestxcBsOeZdZeZeZeZeZdZ eZ eZ eZ eZeZeZeZeZdZdZdZeZeZejZeZdZeddgZdZedddddd d gddddd dd dZ d Z!dZ"dZ#dZ$dZ%ddZ&dZ'e(j)de(j*j+Z,dZ-dZ.RS(s Instances cleans the document of each of the possible offending elements. The cleaning is controlled by attributes; you can override attributes in a subclass, or set them in the constructor. ``scripts``: Removes any ``