Ë
    á]jWb  ã                   óž  — d Z ddlZddlZddlZ ej                  dded¬«       ddlmZmZ ddlm	Z	 dd	l
mZmZ dd
l
mZ ddlmZ ddlmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZ ddlmZm Z  ddl!m"Z" e	jF                  Z$ e"e$«      Z%e	jL                  d   e	jL                  d   e	jL                  d   hZ'e	jL                  d   Z(e	jL                  d   Z)e	jL                  d   Z*e	jL                  d   Z+ e,d«      Z- e,d«      Z. G d„ d«      Z/ G d„ de «      Z0 G d„ de«      Z1d„ Z2d„ Z3d „ Z4 ejj                  d!«      Z6d"„ Z7 G d#„ d$e«      Z8y)%z‡
Shim module between Bleach and html5lib. This makes it easier to upgrade the
html5lib library without having to change a lot of code.
é    NÚignorez"html5lib's sanitizer is deprecatedzbleach._vendor.html5lib)ÚmessageÚcategoryÚmodule)Ú
HTMLParserÚgetTreeWalker)Ú	constants)Ú
namespacesÚprefixes)Ú_ReparseException)ÚFilter)Úallowed_protocolsÚallowed_css_propertiesÚallowed_svg_propertiesÚattr_val_is_uriÚsvg_attr_val_allows_refÚsvg_allow_local_href)ÚHTMLInputStream)ÚescapeÚHTMLSerializer)ÚattributeMapÚHTMLTokenizer)ÚTrieÚStartTagÚEndTagÚEmptyTagÚ
CharactersÚ
ParseError)pÚaÚabbrÚaddressÚareaÚarticleÚasideÚaudioÚbÚbaseÚbdiÚbdoÚ
blockquoteÚbodyÚbrÚbuttonÚcanvasÚcaptionÚciteÚcodeÚcolÚcolgroupÚdataÚdatalistÚddÚdelÚdetailsÚdfnÚdialogÚdivÚdlÚdtÚemÚembedÚfieldsetÚ
figcaptionÚfigureÚfooterÚformÚh1Úh2Úh3Úh4Úh5Úh6ÚheadÚheaderÚhgroupÚhrÚhtmlÚiÚiframeÚimgÚinputÚinsÚkbdÚkeygenÚlabelÚlegendÚliÚlinkÚmapÚmarkÚmenuÚmetaÚmeterÚnavÚnoscriptÚobjectÚolÚoptgroupÚoptionÚoutputÚpÚparamÚpictureÚpreÚprogressÚqÚrpÚrtÚrubyÚsÚsampÚscriptÚsectionÚselectÚslotÚsmallÚsourceÚspanÚstrongÚstyleÚsubÚsummaryÚsupÚtableÚtbodyÚtdÚtemplateÚtextareaÚtfootÚthÚtheadÚtimeÚtitleÚtrÚtrackÚuÚulÚvarÚvideoÚwbr)!r!   r#   r$   r*   r8   r:   r6   r;   r<   r=   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rL   rM   rN   rY   Úmainr`   rc   rg   rj   rs   r~   r‹   c                   óf   — e Zd ZdZd„ Zed„ «       Zed„ «       Zed„ «       Zd„ Z	dd„Z
d„ Zd	„ Zd
„ Zy)ÚInputStreamWithMemoryzÄWraps an HTMLInputStream to remember characters since last <

    This wraps existing HTMLInputStream classes to keep track of the stream
    since the last < which marked an open tag state.

    c                 óŒ   — || _         | j                   j                  | _        | j                   j                  | _        g | _        y ©N)Ú_inner_streamÚresetÚpositionÚ_buffer)ÚselfÚinner_streams     úK/var/www/zogu/zoguvenv/lib/python3.12/site-packages/bleach/html5lib_shim.pyÚ__init__zInputStreamWithMemory.__init__ü   s7   € Ø)ˆÔØ×'Ñ'×-Ñ-ˆŒ
Ø×*Ñ*×3Ñ3ˆŒØˆ�ó    c                 ó.   — | j                   j                  S r“   )r”   Úerrors©r˜   s    rš   rž   zInputStreamWithMemory.errors  s   € à×!Ñ!×(Ñ(Ð(rœ   c                 ó.   — | j                   j                  S r“   )r”   ÚcharEncodingrŸ   s    rš   r¡   z"InputStreamWithMemory.charEncoding  s   € à×!Ñ!×.Ñ.Ð.rœ   c                 ó.   — | j                   j                  S r“   )r”   ÚchangeEncodingrŸ   s    rš   r£   z$InputStreamWithMemory.changeEncoding
  s   € à×!Ñ!×0Ñ0Ð0rœ   c                 ót   — | j                   j                  «       }|r| j                  j                  |«       |S r“   )r”   Úcharr—   Úappend)r˜   Úcs     rš   r¥   zInputStreamWithMemory.char  s0   € Ø×Ñ×#Ñ#Ó%ˆáØ�L‰L×Ñ Ô"Øˆrœ   c                 óˆ   — | j                   j                  ||¬«      }| j                  j                  t	        |«      «       |S )N)Úopposite)r”   Ú
charsUntilr—   ÚextendÚlist)r˜   Ú
charactersr©   Úcharss       rš   rª   z InputStreamWithMemory.charsUntil  s8   € Ø×"Ñ"×-Ñ-¨jÀ8Ð-ÓLˆØ�‰×ÑœD ›KÔ(Øˆrœ   c                 ó†   — | j                   r| j                   j                  d«       | j                  j                  |«      S )Néÿÿÿÿ)r—   Úpopr”   Úunget)r˜   r¥   s     rš   r²   zInputStreamWithMemory.unget  s2   € Ø�<Š<Ø�L‰L×Ñ˜RÔ Ø×!Ñ!×'Ñ'¨Ó-Ð-rœ   c                 ó8   — dj                  | j                  «      S )zþReturns the stream history since last '<'

        Since the buffer starts at the last '<' as as seen by tagOpenState(),
        we know that everything from that point to when this method is called
        is the "tag" that is being tokenized.

        Ú )Újoinr—   rŸ   s    rš   Úget_tagzInputStreamWithMemory.get_tag  s   € ð �w‰w�t—|‘|Ó$Ð$rœ   c                 ó   — dg| _         y)z¶Resets stream history to just '<'

        This gets called by tagOpenState() which marks a '<' that denotes an
        open tag. Any time we see that, we reset the buffer.

        ú<N)r—   rŸ   s    rš   Ú	start_tagzInputStreamWithMemory.start_tag)  s   € ð �uˆ�rœ   N©F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r›   Úpropertyrž   r¡   r£   r¥   rª   r²   r¶   r¹   © rœ   rš   r‘   r‘   ô   sa   „ ñòð ñ)ó ð)ð ñ/ó ð/ð ñ1ó ð1òóò
.ò
%órœ   r‘   c                   óN   ‡ — e Zd ZdZdˆ fd„	Zˆ fd„Zdˆ fd„	Zˆ fd„Zˆ fd„Zˆ xZ	S )	ÚBleachHTMLTokenizerz1Tokenizer that doesn't consume character entitiesc                 ót   •— t        ‰| �  di |¤Ž || _        t        | j                  «      | _        d | _        y )NrÀ   )Úsuperr›   Úconsume_entitiesr‘   ÚstreamÚemitted_last_token)r˜   rÅ   ÚkwargsÚ	__class__s      €rš   r›   zBleachHTMLTokenizer.__init__6  s7   ø€ Ü‰ÑÑ"˜6Ò"à 0ˆÔô ,¨D¯K©KÓ8ˆŒð #'ˆÕrœ   c              #   óJ  •K  — d }t         ‰| �  «       D �]¬  }|��’|d   dk(  rJ|d   t        v r?|j                  d«      r.t	        d„ |d   j                  «       D «       «      |d<   d }|–— �n>|d   dv r˜|d   t        k(  rŒ|j                  d«      r{d|d   v rt|d   j                  dd«      \  }}|j                  «       j                  d«      r8|dz   |d<   |–— t        |«      D ]  }| j                  j                  |«       Œ n¤|–— nŸ|d   d	k(  rz| j                  j                  �d|d   j                  «       j                  «       | j                  j                  vr-| j                  j!                  «       |d<   t        |d<   d }|–— n|d   t"        k(  r|–— |}n
|–— |–— d }�Œ™|d   t"        k(  r|}�Œ©|–— �Œ¯ |r\|d   d
k(  r$t        | j                  j!                  «       dœ–— y |d   dv r$t        | j                  j!                  «       dœ–— y |–— y y ­w)Nr4   ú#invalid-character-in-attribute-nameÚtypec              3   óB   K  — | ]  \  }}d |vrd|vr
d|vr||f–— Œ y­w)ú"ú'r¸   NrÀ   )Ú.0Ú	attr_nameÚ
attr_values      rš   ú	<genexpr>z/BleachHTMLTokenizer.__iter__.<locals>.<genexpr>Q  s9   è ø€ ò 1á1˜I zà yÑ0Ø #¨9Ñ 4Ø #¨9Ñ 4ð # JÔ/ñ1ùs   ‚)rË   z&invalid-character-after-attribute-nameú é   r¸   z!expected-closing-tag-but-got-charzeof-in-tag-name©rÌ   r4   )zduplicate-attributezeof-in-attribute-namez eof-in-attribute-value-no-quoteszexpected-end-of-tag-but-got-eof)rÄ   Ú__iter__ÚTAG_TOKEN_TYPESÚgetr   ÚitemsÚTAG_TOKEN_TYPE_CHARACTERSÚsplitÚstripÚ
startswithÚreversedrÆ   r²   ÚparserÚtagsÚlowerr¶   ÚTAG_TOKEN_TYPE_PARSEERROR)r˜   Úlast_error_tokenÚtokenrK   Úrestr§   rÉ   s         €rš   r×   zBleachHTMLTokenizer.__iter__A  s^  øè ø€ ØÐä‘WÑ%Ó'ó a	ˆEØÑ+à$ VÑ,Ð0UÒUØ˜f™¬Ñ8ØŸ	™	 &Ô)ô %1ñ 1à5:¸6±]×5HÑ5HÓ5Jô1ó %�E˜&‘Mð (,Ð$Ø”Kð % VÑ,ðñð
 ˜f™Ô)BÒBØŸ	™	 &Ô)Ø˜u V™}Ñ,ð "' v¡×!4Ñ!4°S¸!Ó!<‘J�D˜$Ø—z‘z“|×.Ñ.¨sÔ3à(,¨s©
˜˜f™Ø#šô "*¨$£ò 1˜AØ ŸK™K×-Ñ-¨aÕ0ñ1ð $›ð % VÑ,Ð0SÒSØŸ™×(Ñ(Ð4Ø˜f™×+Ñ+Ó-×3Ñ3Ó5¸T¿[¹[×=MÑ=MÑMð %)§K¡K×$7Ñ$7Ó$9�E˜&‘MÜ$=�E˜&‘Mà'+Ð$Ø“Kà˜6‘]Ô&?Ò?ð +Ò*Ø',Ñ$ð +Ò*Ø’KØ'+Ð$áð �V‰}Ô 9Ò9Ø#(Ð ÙàŒKðCa	ñF Ø Ñ'Ð+<Ò<ô
  9À$Ç+Á+×BUÑBUÓBWÑXÓXà! &Ñ)ð .ñ ô   9À$Ç+Á+×BUÑBUÓBWÑXÓXð 'Ó&ð7 ùs   ƒH H#c                 óÂ   •— | j                   rt        ‰| �	  ||«      S |r| j                  d   d   dxx   dz  cc<   y | j                  j                  t        ddœ«       y )Nr4   r°   rÕ   ú&rÖ   )rÅ   rÄ   ÚconsumeEntityÚcurrentTokenÚ
tokenQueuer¦   rÛ   )r˜   ÚallowedCharÚfromAttributerÉ   s      €rš   ré   z!BleachHTMLTokenizer.consumeEntityÄ  s_   ø€ ð × Ò Ü‘7Ñ(¨°mÓDÐDñ Ø×Ñ˜fÑ% bÑ)¨!Ó,°Ñ3Ô,ð �O‰O×"Ñ"Ô,EÈsÑ#SÕTrœ   c                 óT   •— | j                   j                  «        t        ‰| �  «       S r“   )rÆ   r¹   rÄ   ÚtagOpenState)r˜   rÉ   s    €rš   rï   z BleachHTMLTokenizer.tagOpenStateÖ  s#   ø€ ð
 	�‰×ÑÔÜ‰wÑ#Ó%Ð%rœ   c                 óF  •— | j                   }| j                  j                  �ß|d   t        v rÔ|d   j	                  «       | j                  j                  vr«| j                  j
                  r7| j                  r(|d   t        k(  r|d   j	                  «       t        v rd}nd}n| j                  j                  «       }t        |dœ}|x| _         | _        | j                  j                  |«       | j                  | _        y | j                   | _        t         ‰| �E  «        y )NrÌ   Únameú
r´   rÖ   )rê   rà   rá   rØ   râ   rÝ   rÇ   ÚTAG_TOKEN_TYPE_STARTÚHTML_TAGS_BLOCK_LEVELrÆ   r¶   rÛ   rë   r¦   Ú	dataStateÚstaterÄ   ÚemitCurrentToken)r˜   rå   Únew_dataÚ	new_tokenrÉ   s       €rš   r÷   z$BleachHTMLTokenizer.emitCurrentTokenÞ  sû   ø€ Ø×!Ñ!ˆð �K‰K×ÑÐ(Ø�f‘¤Ñ0Ø�f‘×#Ñ#Ó%¨T¯[©[×-=Ñ-=Ñ=ð
 �{‰{× Ò à×+Ò+Ø˜f™Ô)=Ò=Ø˜f™×+Ñ+Ó-Ô1FÑFð
  $‘Hð  "‘Hð  Ÿ;™;×.Ñ.Ó0�ä!:ÀHÑMˆIà:CÐCˆDÔ Ô 7Ø�O‰O×"Ñ" 9Ô-ØŸ™ˆDŒJØà"&×"3Ñ"3ˆÔÜ‰Ñ Õ"rœ   rº   )NF)
r»   r¼   r½   r¾   r›   r×   ré   rï   r÷   Ú__classcell__©rÉ   s   @rš   rÂ   rÂ   3  s'   ø„ Ù;õ	'ôA'õFUô$&÷*#ð *#rœ   rÂ   c                   ó,   ‡ — e Zd ZdZˆ fd„Z	 dd„Zˆ xZS )ÚBleachHTMLParserz$Parser that uses BleachHTMLTokenizerc                 óv   •— |�t        d„ |D «       «      nd| _        || _        || _        t	        ‰| �  di |¤Ž y)aÏ  
        :arg tags: set of allowed tags--everything else is either stripped or
            escaped; if None, then this doesn't look at tags at all
        :arg strip: whether to strip disallowed tags (True) or escape them (False);
            if tags=None, then this doesn't have any effect
        :arg consume_entities: whether to consume entities (default behavior) or
            leave them as is when tokenizing (BleachHTMLTokenizer-added behavior)

        Nc              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr“   )râ   )rÐ   Útags     rš   rÓ   z,BleachHTMLParser.__init__.<locals>.<genexpr>  s   è ø€ Ò3 s�s—y‘y—{Ñ3ùs   ‚rÀ   )Ú	frozensetrá   rÝ   rÅ   rÄ   r›   )r˜   rá   rÝ   rÅ   rÈ   rÉ   s        €rš   r›   zBleachHTMLParser.__init__  sB   ø€ ð 9=Ð8HŒIÑ3¨dÔ3Ô4Èdð 	Œ	ð ˆŒ
Ø 0ˆÔÜ‰ÑÑ"˜6Ó"rœ   c                 ó
  — || _         || _        || _        t        d|| j                  | dœ|¤Ž| _        | j                  «        	 | j                  «        y # t        $ r# | j                  «        | j                  «        Y y w xY w)N)rÆ   rÅ   rà   rÀ   )	ÚinnerHTMLModeÚ	containerÚ	scriptingrÂ   rÅ   Ú	tokenizerr•   ÚmainLoopÚReparseException)r˜   rÆ   Ú	innerHTMLr  r  rÈ   s         rš   Ú_parsezBleachHTMLParser._parse  sz   € ð 'ˆÔØ"ˆŒØ"ˆŒÜ,ð 
Ø¨D×,AÑ,AÈ$ñ
ØRXñ
ˆŒð 	�
‰
Œð	Ø�M‰M�OøÜò 	Ø�J‰JŒLØ�M‰MŽOð	ús   ÁA Á)BÂB)Fr;   T)r»   r¼   r½   r¾   r›   r
  rú   rû   s   @rš   rý   rý     s   ø„ Ù.ô#ð$ CG÷rœ   rý   c                 óÞ   — | d   dk(  rPt        | «      dk  ry| d   dv r| dd d}}n| dd d}}|d	k(  ryt        ||«      }d|cxk  rd
k  rt        |«      S  yyt        j	                  | d«      S )a9  Convert an entity (minus the & and ; part) into what it represents

    This handles numeric, hex, and text entities.

    :arg value: the string (minus the ``&`` and ``;`` part) to convert

    :returns: unicode character or None if it's an ambiguous ampersand that
        doesn't match a character entity

    r   ú#é   NrÕ   ©ÚxÚXé   é
   r´   i   )ÚlenÚintÚchrÚENTITIESrÙ   )ÚvalueÚint_as_stringr'   Ú
code_points       rš   Úconvert_entityr  7  s’   € ð ˆQ�x�3‚Üˆu‹:˜Š>Øà�‰8�zÑ!à"'¨¨ )¨R˜4‰Mð #(¨¨ )¨R˜4ˆMà˜BÒØä˜¨Ó-ˆ
ØˆzÔ$˜HÒ$Ü�z“?Ð"ð %ñ ä�<‰<˜˜tÓ$Ð$rœ   c                 ó>  — d| vr| S g }t        | «      D ]w  }|sŒ|j                  d«      rPt        |«      }|�Ct        |«      }|�6|j	                  |«       |t        |«      dz   d }|r|j	                  |«       Œg|j	                  |«       Œy dj                  |«      S )z‘Converts all found entities in the text

    :arg text: the text to convert entities in

    :returns: unicode text with converted entities

    rè   Nr  r´   )Únext_possible_entityrÞ   Úmatch_entityr  r¦   r  rµ   )ÚtextÚnew_textÚpartÚentityÚ	convertedÚ	remainders         rš   Úconvert_entitiesr$  Y  s­   € ð �$�Øˆà€HÜ$ TÓ*ò ˆÙØà�?‰?˜3ÔÜ! $Ó'ˆFØÐ!Ü*¨6Ó2�	ð Ð(Ø—O‘O IÔ.Ø $¤S¨£[°1¡_Ð%6Ð 7�IÙØ Ÿ™¨	Ô2Øà�‰˜Õð%ð( �7‰7�8ÓÐrœ   c                 ó  — | d   dk7  rt        d«      ‚| dd } t        | «      } d}dt        j                  z   }| rz| d   dk(  rrd}| j	                  d«       | r| d   d	v rd
}|| j	                  d«      z  }nd}| r,| d   |vr%| j	                  d«      }||vrn||z  }| r| d   |vrŒ%|r| r
| d   dk(  r|S y| r=| d   |vr6| j	                  d«      }||z  }t
        j                  |«      sy| r| d   |vrŒ6|r| r
| d   dk(  r|S y)av  Returns first entity in stream or None if no entity exists

    Note: For Bleach purposes, entities must start with a "&" and end with a
    ";". This ignores ambiguous character entities that have no ";" at the end.

    :arg stream: the character stream

    :returns: the entity string without "&" or ";" if it's a valid character
        entity; ``None`` otherwise

    r   rè   zStream should begin with "&"rÕ   Nr´   z<&=;r  r  Ú0123456789abcdefABCDEFÚ
0123456789ú;)Ú
ValueErrorr¬   ÚstringÚ
whitespacer±   ÚENTITIES_TRIEÚhas_keys_with_prefix)rÆ   Úpossible_entityÚend_charactersÚallowedr§   s        rš   r  r  |  sQ  € ð ˆa�y�CÒÜÐ7Ó8Ð8à�A�BˆZ€Fä�&‹\€FØ€OØœf×/Ñ/Ñ/€Nñ �&˜‘)˜sÒ"ØˆØ�
‰
�1Œá�f˜Q‘i :Ñ-Ø.ˆGØ˜vŸz™z¨!›}Ñ,‰Oà"ˆGñ ˜ ™¨.Ñ8Ø—
‘
˜1“ˆAØ˜ÑØØ˜qÑ ˆOñ	 ˜ ™¨.Ò8ñ ™v¨&°©)°sÒ*:Ø"Ð"Øñ �V˜A‘Y nÑ4Ø�J‰J�q‹MˆØ˜1ÑˆÜ×1Ñ1°/ÔBð ñ �V˜A‘Y nÒ4ñ ™6 f¨Q¡i°3Ò&6ØÐàrœ   z(&)c              #   óŒ   K  — t        t        j                  | «      «      D ]  \  }}|dk(  r|–— Œ|dz  dk(  sŒd|z   –— Œ! y­w)z·Takes a text and generates a list of possible entities

    :arg text: the text to look at

    :returns: generator where each part (except the first) starts with an
        "&"

    r   r  rè   N)Ú	enumerateÚAMP_SPLIT_RErÜ   )r  rP   r   s      rš   r  r  »  sL   è ø€ ô œ\×/Ñ/°Ó5Ó6ò ‰ˆˆ4Ø�Š6Ø‹JØ�‰U�a‹ZØ˜‘*Óñ	ùs
   ‚7Aº
Ac                   ó.   ‡ — e Zd ZdZdZd„ Zdˆ fd„	Zˆ xZS )ÚBleachHTMLSerializerz[HTMLSerializer that undoes & -> &amp; in attributes and sets
    escape_rcdata to True
    Tc              #   ó  K  — |j                  dd«      }t        |«      D ]b  }|sŒ|j                  d«      r8t        |«      }|�+t	        |«      � d|› d�–— |t        |«      dz   d }|r|–— ŒO|j                  dd«      –— Œd y­w)z,Escapes just bare & in HTML attribute valuesz&amp;rè   Nr(  r  )Úreplacer  rÞ   r  r  r  )r˜   Ústokenr   r!  s       rš   Úescape_base_ampz$BleachHTMLSerializer.escape_base_ampØ  s�   è ø€ ð —‘ ¨Ó-ˆô )¨Ó0ò 	-ˆDÙØà�‰˜sÔ#Ü% dÓ+�ð Ð%¬.¸Ó*@Ð*LØ˜f˜X Q˜-Ò'ð  ¤ F£¨a¡Ð 1Ð2�DÙØ"š
Øà—,‘,˜s GÓ,Ó,ñ%	-ùs   ‚BBc              #   óä   •K  — d}d}t         ‰| �  ||«      D ]R  }|r7|dk(  rd}n*|r!|dk7  r#| j                  |«      E d{  –—†  d}Œ0|dk(  rd}|–— Œ<|j                  d«      rd}|–— ŒT y7 Œ-­w)zÜWrap HTMLSerializer.serialize and conver & to &amp; in attribute values

        Note that this converts & to &amp; in attribute values where the & isn't
        already part of an unambiguous character entity.

        Fú>rÎ   Nú=Tr¸   )rÄ   Ú	serializer9  rÞ   )r˜   Ú
treewalkerÚencodingÚin_tagÚafter_equalsr8  rÉ   s         €rš   r=  zBleachHTMLSerializer.serialize÷  s’   øè ø€ ð ˆØˆä‘gÑ'¨
°HÓ=ò 	ˆFÙØ˜S’=Ø"‘Fá!Ø ’}Ø#'×#7Ñ#7¸Ó#?×?Ð?à',˜Ø à˜s’]Ø#'�Là“à×$Ñ$ SÔ)Ø!�FØ“ñ'	ð @ús   ƒ=A0Á A.Á.A0r“   )r»   r¼   r½   r¾   Úescape_rcdatar9  r=  rú   rû   s   @rš   r5  r5  Ë  s   ø„ ñð €Mò-÷>ñ rœ   r5  )9r¾   Úrer*  ÚwarningsÚfilterwarningsÚDeprecationWarningÚbleach._vendor.html5libr   r   r	   Ú!bleach._vendor.html5lib.constantsr
   r   r   r  Ú$bleach._vendor.html5lib.filters.baser   Ú)bleach._vendor.html5lib.filters.sanitizerr   r   r   r   r   r   ÚSanitizerFilterÚ$bleach._vendor.html5lib._inputstreamr   Ú"bleach._vendor.html5lib.serializerr   r   Ú"bleach._vendor.html5lib._tokenizerr   r   Úbleach._vendor.html5lib._trier   Úentitiesr  r,  Ú
tokenTypesrØ   ró   ÚTAG_TOKEN_TYPE_ENDrÛ   rã   r  Ú	HTML_TAGSrô   r‘   rÂ   rý   r  r$  r  Úcompiler3  r  r5  rÀ   rœ   rš   ú<module>rU     s…  ðñó
 
Û Û ð €× Ñ ØØ0ØØ$õ	÷õ÷õõ÷÷ õõ÷÷õð ×Ñ€ñ �X“€ð ×Ñ˜Ñ$Ø×Ñ˜Ñ"Ø×Ñ˜Ñ$ð€ð
 !×+Ñ+¨JÑ7Ð Ø×)Ñ)¨(Ñ3Ð Ø%×0Ñ0°Ñ>Ð Ø%×0Ñ0°Ñ>Ð ñ
 ðqós€	ñr "ð"ó$Ð ÷N<ñ <ô~U#˜-ô U#ôp)�zô )òX%òD òF9ðx ˆr�z‰z˜%Ó €òô I˜>õ Irœ   