§
    ¡”j~a  ã                   óÚ  — d dl Z d dlZd dlmZmZ d dlmZ d dlmZm	Z	 d dl
Z
ddlmZmZmZ  ed„ eD ¦   «         ¦  «        Z ed„ eD ¦   «         ¦  «        Z ed	„ e	D ¦   «         ¦  «        Ze ed
dg¦  «        z  Z ej        d¦  «        Zh d£Z ej        d¦  «        Zi Zd„ Z G d„ d¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Zd„ Z dS )é    N)ÚBytesIOÚStringIO)ÚPath)Úascii_lettersÚascii_uppercaseé   )ÚEOFÚReparseErrorÚspace_charactersc              #   ó>   K  — | ]}|                      ¦   «         V — Œd S ©N©Úencode©Ú.0Úitems     úd/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/tinyhtml5/inputstream.pyú	<genexpr>r      s*   è è € Ð"NÐ"N°T 4§;¢;¡=¤=Ð"NÐ"NÐ"NÐ"NÐ"NÐ"Nó    c              #   ó>   K  — | ]}|                      ¦   «         V — Œd S r   r   r   s     r   r   r      s*   è è € ÐHÐH°$ §¢¡¤ÐHÐHÐHÐHÐHÐHr   c              #   ó>   K  — | ]}|                      ¦   «         V — Œd S r   r   r   s     r   r   r      s*   è è € Ð!LÐ!L°D $§+¢+¡-¤-Ð!LÐ!LÐ!LÐ!LÐ!LÐ!Lr   ó   >ó   <u¡   [---ÂŸï·�-ï·¯ï¿¾ï¿¿ðŸ¿¾ðŸ¿¿ð¯¿¾ð¯¿¿ð¿¿¾ð¿¿¿ñ�¿¾ñ�¿¿ñŸ¿¾ñŸ¿¿ñ¯¿¾ñ¯¿¿ñ¿¿¾ñ¿¿¿ò�¿¾ò�¿¿òŸ¿¾òŸ¿¿ò¯¿¾ò¯¿¿ò¿¿¾ò¿¿¿ó�¿¾ó�¿¿óŸ¿¾óŸ¿¿ó¯¿¾ó¯¿¿ó¿¿¾ó¿¿¿ô�¿¾ô�¿¿í €-í¿¿]>    éþÿ éþÿ éþÿ éþÿ éþÿ éþÿ éþÿ éþÿ éþÿ	 éþÿ
 éþÿ éþÿ éþÿ éþÿ éþÿ éþÿ éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ	 éÿÿ
 éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ z[	- -/:-@\[-`{-~]c                 óü  — t          | t          ¦  «        r`t          | ¦  «        dk     rMt          | ¦  «                             ¦   «         r,t          t          | ¦  «                             ¦   «         fi |¤ŽS t          | t          ¦  «        rt          |                      ¦   «         fi |¤ŽS t          t          | d¦  «        r|                      d¦  «        n| t          ¦  «        rt          | fi |¤ŽS t          | fi |¤ŽS )NéÈ   Úreadr   )
Ú
isinstanceÚstrÚlenr   Úis_fileÚHTMLUnicodeInputStreamÚ	read_textÚhasattrr<   ÚHTMLBinaryInputStream)ÚsourceÚkwargss     r   ÚHTMLInputStreamrG   &   sò   € Ý�&�#ÑÔð 7¥3 v¡;¤;°Ò#4Ð#4½¸f¹¼×9MÒ9MÑ9OÔ9OÐ#4Ý%¥d¨6¡l¤l×&<Ò&<Ñ&>Ô&>ÐIÐIÀ&ÐIÐIÐIÝ	�F�DÑ	!Ô	!ð 7Ý% f×&6Ò&6Ñ&8Ô&8ÐCÐC¸FÐCÐCÐCÝ	¥g¨f°fÑ&=Ô&=ÐI�F—K’K ‘N”N�NÀ6Í3Ñ	OÔ	Oð 7Ý% fÐ7Ð7°Ð7Ð7Ð7å$ VÐ6Ð6¨vÐ6Ð6Ð6r   c                   óJ   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
dd
„Zd„ ZdS )rA   z×Provides a Unicode stream of characters to the HTMLTokenizer.

    This class takes care of character encoding and removing or replacing
    incorrect byte-sequences and also provides column and line tracking.

    c                 óž   — dg| _         t          d¦  «        df| _        |                      |¦  «        | _        |                      ¦   «          dS )z¸Initialise the HTMLInputStream.

        Create a normalized stream from source for use by tinyhtml5.

        source can be either a file-object, local filename or a string.

        r   úutf-8ÚcertainN)Ú	new_linesÚlookup_encodingÚencodingÚopen_streamÚstreamÚreset)ÚselfrE   rF   s      r   Ú__init__zHTMLUnicodeInputStream.__init__9   sG   € ð ˜ˆŒå(¨Ñ1Ô1°9Ð=ˆŒØ×&Ò& vÑ.Ô.ˆŒà�
Š
‰Œˆˆˆr   c                 óh   — d| _         d| _        d| _        g | _        d| _        d| _        d | _        d S )NÚ r   )ÚchunkÚ
chunk_sizeÚchunk_offsetÚerrorsÚprevious_number_linesÚprevious_number_columnsÚ_buffered_character©rR   s    r   rQ   zHTMLUnicodeInputStream.resetI   sA   € ØˆŒ
ØˆŒØˆÔØˆŒð &'ˆÔ"à'(ˆÔ$ð $(ˆÔ Ð Ð r   c                 óD   — t          |d¦  «        r|nt          |¦  «        S )zuProduce a file object from source.

        source can be either a file object, local filename or a string.

        r<   )rC   r   ©rR   rE   s     r   rO   z"HTMLUnicodeInputStream.open_streamW   s%   € õ ! ¨Ñ0Ô0ÐFˆvˆvµh¸vÑ6FÔ6FÐFr   c                 óº   — | j         }|                     dd|¦  «        }| j        |z   }|                     dd|¦  «        }|dk    r| j        |z   }n||dz   z
  }||fS )Nú
r   éÿÿÿÿr   )rV   ÚcountrZ   Úrfindr[   )rR   ÚoffsetrV   Únumber_linesÚposition_lineÚlast_line_positionÚposition_columns          r   Ú	_positionz HTMLUnicodeInputStream._position_   sv   € Ø”
ˆØ—{’{ 4¨¨FÑ3Ô3ˆØÔ2°\ÑAˆØ"Ÿ[š[¨¨q°&Ñ9Ô9ÐØ Ò#Ð#Ø"Ô:¸VÑCˆOˆOà$Ð(:¸QÑ(>Ñ?ˆOØ˜Ð/Ð/r   c                 óJ   — |                       | j        ¦  «        \  }}|dz   |fS )z9Return (line, col) of the current position in the stream.r   )rj   rX   )rR   ÚlineÚcolumns      r   ÚpositionzHTMLUnicodeInputStream.positionj   s)   € à—~’~ dÔ&7Ñ8Ô8‰ˆˆfØ�q‘˜&Ð!Ð!r   c                 ó˜   — | j         | j        k    r|                      ¦   «         st          S | j         }| j        |         }|dz   | _         |S )zlRead one character from the stream or queue if available.

        Return EOF when EOF is reached.

        r   )rX   rW   Ú
read_chunkr	   rV   )rR   rX   Ú	characters      r   rq   z HTMLUnicodeInputStream.charactero   sR   € ð Ô ¤Ò/Ð/Ø—?’?Ñ$Ô$ð Ý�
àÔ(ˆØ”J˜|Ô,ˆ	Ø(¨1Ñ,ˆÔàÐr   c                 óÆ  — |                       | j        ¦  «        \  | _        | _        d| _        d| _        d| _        | j                             d¦  «        }| j        r| j        |z   }d | _        n|sdS t          |¦  «        dk    rBt          |d         ¦  «        }|dk    sd|cxk    rd	k    rn n|d         | _        |d d…         }t          t          t                               |¦  «        ¦  «        ¦  «        D ]}| j                             d
¦  «         Œ|                     dd¦  «        }|                     dd¦  «        }|| _        t          |¦  «        | _        dS )NrU   r   i (  Fr   rb   é   i Ø  iÿÛ  zinvalid-codepointz
ra   úT)rj   rW   rZ   r[   rV   rX   rP   r<   r\   r?   ÚordÚrangeÚinvalid_unicode_reÚfindallrY   ÚappendÚreplace)rR   ÚdataÚlastÚ_s       r   rp   z!HTMLUnicodeInputStream.read_chunk€   sr  € ØCGÇ>Â>ØŒOñDô DÑ@ˆÔ" DÔ$@ð ˆŒ
ØˆŒØˆÔàŒ{×Ò Ñ&Ô&ˆð Ô#ð 	ØÔ+¨dÑ2ˆDØ'+ˆDÔ$Ð$Øð 	à�5åˆt‰9Œ9�qŠ=ˆ=Ý�t˜B”x‘=”=ˆDØ�tŠ|ˆ|˜v¨Ð7Ð7Ò7Ð7°Ò7Ð7Ð7Ð7Ð7Ø+/°¬8�Ô(Ø˜C˜R˜C”y�õ •sÕ-×5Ò5°dÑ;Ô;Ñ<Ô<Ñ=Ô=ð 	4ð 	4ˆAØŒK×ÒÐ2Ñ3Ô3Ð3Ð3ð �|Š|˜F DÑ)Ô)ˆØ�|Š|˜D $Ñ'Ô'ˆàˆŒ
Ý˜d™)œ)ˆŒàˆtr   Fc                 óŠ  — 	 t           ||f         }n\# t          $ rO d                     d„ |D ¦   «         ¦  «        }|sd|› �}t          j        d|› d�¦  «        }|x}t           ||f<   Y nw xY wg }	 |                     | j        | j        ¦  «        }|€| j        | j        k    rnŒnN| 	                    ¦   «         }|| j        k    r/| 
                    | j        | j        |…         ¦  «         || _        n=| 
                    | j        | j        d…         ¦  «         |                      ¦   «         snŒ¿d                     |¦  «        S )a   Return a string of characters from the stream.

        String goes up to but does not include any character in 'characters' or
        EOF. 'characters' must be a container that supports the 'in' method and
        iteration over its characters.

        rU   c                 ó4   — g | ]}d t          |¦  «        d›�‘ŒS )z\xÚ02x)ru   )r   rq   s     r   ú
<listcomp>z6HTMLUnicodeInputStream.chars_until.<locals>.<listcomp>²   s*   € ÐTÐTÐT¸IÐ7¥3 y¡>¤>Ð7Ð7Ð7ÐTÐTÐTr   ú^ú[z]+TN)Úcharacters_until_regexÚKeyErrorÚjoinÚreÚcompileÚmatchrV   rX   rW   Úendry   rp   )rR   Ú
charactersÚoppositeÚregexÚresultr‰   rŠ   s          r   Úchars_untilz"HTMLUnicodeInputStream.chars_until¥   s|  € ð	PÝ/°¸XÐ0FÔGˆJˆJøÝð 	Pð 	Pð 	PØ—G’GÐTÐTÈÐTÑTÔTÑUÔUˆEØð $Ø#˜E˜˜�Ý”J˜} 5˜}˜}˜}Ñ-Ô-ˆEØJOÐOˆJÕ/°¸XÐ0FÑGÐGÐGð	Pøøøð ˆð	à×$Ò$ T¤Z°Ô1BÑCÔCˆEØˆ}ð Ô$¨¬Ò7Ð7Øð 8ð —i’i‘k”k�ð ˜$œ/Ò)Ð)Ø—M’M $¤*¨TÔ->¸sÐ-BÔ"CÑDÔDÐDØ(+�DÔ%Øð �MŠM˜$œ* TÔ%6Ð%7Ð%7Ô8Ñ9Ô9Ð9Ø—?’?Ñ$Ô$ð àð+	ð. �wŠw�v‰ŒÐs   ‚ ’AA+Á*A+c                 óÄ   — |t           urT| j        dk    r!|| j        z   | _        | xj        dz  c_        d S | xj        dz  c_        | j        | j                 |k    sJ ‚d S d S )Nr   r   )r	   rX   rV   rW   )rR   Úchars     r   ÚungetzHTMLUnicodeInputStream.ungetÓ   s}   € ð •sˆ?ˆ?ØÔ  AÒ%Ð%ð
 " D¤JÑ.�”
Ø�” 1Ñ$�”��àÐ!Ô! QÑ&Ð!Ô!Ø”z $Ô"3Ô4¸Ò<Ð<Ð<Ð<ð ˆ?ð =Ð<r   N)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rS   rQ   rO   rj   rn   rq   rp   r�   r’   © r   r   rA   rA   1   s¯   € € € € € ðð ðð ð ð (ð (ð (ðGð Gð Gð	0ð 	0ð 	0ð"ð "ð "ð
ð ð ð"#ð #ð #ðJ,ð ,ð ,ð ,ð\=ð =ð =ð =ð =r   rA   c                   óN   ‡ — e Zd ZdZ	 	 	 dd„Zˆ fd„Zd„ Zd„ Zd„ Zd	„ Z	d
„ Z
ˆ xZS )rD   zÕProvide a binary stream of characters to the HTMLTokenizer.

    This class takes care of character encoding and removing or replacing
    incorrect byte-sequences and also provides column and line tracking.

    Núwindows-1252c                 ó  — |                       |¦  «        | _        d| _        || _        || _        || _        || _        || _        |                      ¦   «         | _	        | j	        d         €J ‚|  
                    ¦   «          d S )Ni   r   )rO   Ú
raw_streamÚnumber_bytes_metaÚoverride_encodingÚtransport_encodingÚsame_origin_parent_encodingÚlikely_encodingÚdefault_encodingÚdetermine_encodingrN   rQ   )rR   rE   r�   rž   rŸ   r    r¡   rF   s           r   rS   zHTMLBinaryInputStream.__init__ë   s†   € ð
 ×*Ò*¨6Ñ2Ô2ˆŒð
 "&ˆÔà!2ˆÔØ"4ˆÔØ+FˆÔ(Ø.ˆÔØ 0ˆÔð ×/Ò/Ñ1Ô1ˆŒØŒ}˜QÔÐ+Ð+Ð+ð 	�
Š
‰Œˆˆˆr   c                 ó¢   •— | j         d         j        j        } || j        d¦  «        | _        t          ¦   «                              ¦   «          d S )Nr   rz   )rN   Ú
codec_infoÚstreamreaderr›   rP   ÚsuperrQ   )rR   r¥   Ú	__class__s     €r   rQ   zHTMLBinaryInputStream.reset  s?   ø€ Ø”} QÔ'Ô2Ô?ˆØ"�l 4¤?°IÑ>Ô>ˆŒÝ‰Œ�Š‰Œˆˆˆr   c                 ó´   — t          |d¦  «        r:t          |d¦  «        r|                     ¦   «         r|S |                     ¦   «         }t          |¦  «        S )Nr<   Úseekable)rC   r©   r<   r   r_   s     r   rO   z!HTMLBinaryInputStream.open_stream	  sU   € Ý�6˜6Ñ"Ô"ð 	#Ý�v˜zÑ*Ô*ð ¨v¯ªÑ/@Ô/@ð Ø�Ø—[’[‘]”]ˆFÝ�v‰ŒÐr   c                 ó$  — |                       ¦   «         df}|d         �|S t          | j        ¦  «        df}|d         �|S t          | j        ¦  «        df}|d         �|S |                      ¦   «         df}|d         �|S t          | j        ¦  «        df}|d         �"|d         j                             d¦  «        s|S t          | j        ¦  «        df}|d         �|S t          | j	        ¦  «        df}|d         �|S t          d¦  «        dfS )NrK   r   Ú	tentativezutf-16r™   )
Ú
detect_bomrM   r�   rž   Údetect_encoding_metarŸ   ÚnameÚ
startswithr    r¡   )rR   rN   s     r   r¢   z(HTMLBinaryInputStream.determine_encoding  s;  € ð —?’?Ñ$Ô$ iÐ/ˆØ�AŒ;Ð"ØˆOõ # 4Ô#9Ñ:Ô:¸IÐEˆØ�AŒ;Ð"ØˆOõ # 4Ô#:Ñ;Ô;¸YÐFˆØ�AŒ;Ð"ØˆOð ×,Ò,Ñ.Ô.°Ð;ˆØ�AŒ;Ð"ØˆOõ # 4Ô#CÑDÔDÀkÐQˆØ�AŒ;Ð"¨8°A¬;Ô+;×+FÒ+FÀxÑ+PÔ+PÐ"ØˆOõ # 4Ô#7Ñ8Ô8¸+ÐEˆØ�AŒ;Ð"ØˆOõ # 4Ô#8Ñ9Ô9¸;ÐFˆØ�AŒ;Ð"ØˆOõ ˜~Ñ.Ô.°Ð;Ð;r   c                 ó†  — | j         d         dk    sJ ‚t          |¦  «        x}€d S |j        dv rt          d¦  «        }|€J ‚d S || j         d         k    r| j         d         df| _         d S | j                             d¦  «         |df| _         |                      ¦   «          t          d| j         d         › d|› �¦  «        ‚)Nr   rK   ©úutf-16beúutf-16lerJ   r   zEncoding changed from z to )rN   rM   r®   r›   ÚseekrQ   r
   )rR   Únew_encodings     r   Úchange_encodingz%HTMLBinaryInputStream.change_encoding8  sç   € ØŒ}˜QÔ 9Ò,Ð,Ð,Ð,Ý+¨LÑ9Ô9Ð9ˆLÐBØˆFØÔÐ 8Ð8Ð8Ý*¨7Ñ3Ô3ˆLØÐ+Ð+Ð+Ð+Ð+Ø˜Tœ]¨1Ô-Ò-Ð-Ø!œ]¨1Ô-¨yÐ9ˆDŒMˆMˆMàŒO× Ò  Ñ#Ô#Ð#Ø)¨9Ð5ˆDŒMØ�JŠJ‰LŒLˆLÝØM¨¬°qÔ)9ÐMÐM¸|ÐMÐMñOô Oð Or   c           
      ó¶  — t           j        dt           j        dt           j        dt           j        dt           j        di}| j                             d¦  «        }t          |t          ¦  «        sJ ‚dD ]L}| 
                    |d|…         ¦  «        x}r+| j                             |¦  «         t          |¦  «        c S ŒM| j                             d	¦  «         dS )
z´Attempt to detect at BOM at the start of the stream.

        If an encoding can be determined from the BOM return the name of the
        encoding otherwise return None.

        rJ   r³   r²   zutf-32lezutf-32beé   )é   r¸   é   Nr   )ÚcodecsÚBOM_UTF8ÚBOM_UTF16_LEÚBOM_UTF16_BEÚBOM_UTF32_LEÚBOM_UTF32_BEr›   r<   r=   ÚbytesÚgetr´   rM   )rR   ÚbomsÚstringr´   rN   s        r   r¬   z HTMLBinaryInputStream.detect_bomH  sÞ   € õ ŒO˜WÝÔ ÝÔ ÝÔ ÝÔ ð
ˆð ”×%Ò% aÑ(Ô(ˆÝ˜&¥%Ñ(Ô(Ð(Ð(Ð(ð ð 	1ð 	1ˆDØŸ8š8 F¨5¨D¨5¤MÑ2Ô2Ð2ˆxð 1à”×$Ò$ TÑ*Ô*Ð*Ý& xÑ0Ô0Ð0Ð0Ð0ð1ð 	Œ×Ò˜QÑÔÐÐÐr   c                 ó   — | j                              | j        ¦  «        }t          |t          ¦  «        sJ ‚t          |¦  «        }| j                              d¦  «         |                     ¦   «         }|�|j        dv rt          d¦  «        }|S )z1Report the encoding declared by the meta element.r   Nr±   rJ   )
r›   r<   rœ   r=   rÁ   ÚEncodingParserr´   Úget_encodingr®   rM   )rR   ÚbufferÚparserrN   s       r   r­   z*HTMLBinaryInputStream.detect_encoding_metae  s‰   € à”×%Ò% dÔ&<Ñ=Ô=ˆÝ˜&¥%Ñ(Ô(Ð(Ð(Ð(Ý Ñ'Ô'ˆØŒ×Ò˜QÑÔÐØ×&Ò&Ñ(Ô(ˆàÐ H¤MÐ5MÐ$MÐ$MÝ& wÑ/Ô/ˆHàˆr   )NNNNr™   )r“   r”   r•   r–   rS   rQ   rO   r¢   r¶   r¬   r­   Ú__classcell__)r§   s   @r   rD   rD   ã   s²   ø€ € € € € ðð ð KOØCGØ"0ðð ð ð ð2ð ð ð ð ð
ð ð ð&<ð &<ð &<ðPOð Oð Oð  ð  ð  ð:ð ð ð ð ð ð r   rD   c                   ó€   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	 e
e	e¦  «        Ze
d„ ¦   «         Zefd	„Zd
„ Zd„ Zd„ ZdS )ÚEncodingBytesz«Bytes-like object with an associated position and various extra methods.

    If the position is ever greater than the string length then an exception is
    raised.

    c                 óŠ   — t          |t          ¦  «        sJ ‚t                               | |                     ¦   «         ¦  «        S r   )r=   rÁ   Ú__new__Úlower)ÚclsÚvalues     r   rÎ   zEncodingBytes.__new__{  s4   € Ý˜%¥Ñ'Ô'Ð'Ð'Ð'Ý�}Š}˜S %§+¢+¡-¤-Ñ0Ô0Ð0r   c                 ó   — d| _         d S )Nrb   ©rj   )rR   rÑ   s     r   rS   zEncodingBytes.__init__  s   € ØˆŒˆˆr   c                 ór   — | j         dz   x}| _         |t          | ¦  «        k    rt          ‚| ||dz   …         S ©Nr   ©rj   r?   ÚStopIteration©rR   rn   s     r   Ú__next__zEncodingBytes.__next__‚  s@   € Ø$(¤N°QÑ$6Ð6ˆ�4”>Ø•s˜4‘y”yÒ Ð ÝÐØ�H˜X¨™\Ð)Ô*Ð*r   c                 ó>   — | j         dz
  x| _         }| ||dz   …         S rÕ   rÓ   rØ   s     r   ÚpreviouszEncodingBytes.previousˆ  s)   € Ø$(¤N°QÑ$6Ð6ˆŒ˜Ø�H˜X¨™\Ð)Ô*Ð*r   c                 ón   — | j         t          | ¦  «        k    rt          ‚t          d|¦  «        | _         d S ©Nr   )rj   r?   r×   ÚmaxrØ   s     r   Úset_positionzEncodingBytes.set_positionŒ  s0   € ØŒ>�S ™YœYÒ&Ð&ÝÐÝ˜Q Ñ)Ô)ˆŒˆˆr   c                 óh   — | j         t          | ¦  «        k    rt          ‚| j         dk    r| j         S d S rÝ   rÖ   r]   s    r   Úget_positionzEncodingBytes.get_position‘  s8   € ØŒ>�S ™YœYÒ&Ð&ÝÐØŒ>˜QÒÐØ”>Ð!ð Ðr   c                 ó0   — | | j         | j         dz   …         S rÕ   )rn   r]   s    r   Úcurrent_bytezEncodingBytes.current_byte™  s   € à�D”M $¤-°!Ñ"3Ð3Ô4Ð4r   c                 ó¬   — | j         }|t          | ¦  «        k     r2| ||dz   …         }||vr	|| _        |S |dz  }|t          | ¦  «        k     °2|| _        dS )zSkip past a list of characters.r   N©rn   r?   rj   ©rR   r‹   rn   rq   s       r   ÚskipzEncodingBytes.skip�  so   € à”=ˆØ�˜T™œÒ"Ð"Ø˜X h°¡lÐ2Ô3ˆIØ 
Ð*Ð*Ø!)�”Ø Ð Ø˜‰MˆHð �˜T™œÒ"Ð"ð "ˆŒØˆtr   c                 ó¬   — | j         }|t          | ¦  «        k     r2| ||dz   …         }||v r	|| _        |S |dz  }|t          | ¦  «        k     °2|| _        d S rÕ   rå   ræ   s       r   Ú
skip_untilzEncodingBytes.skip_until©  so   € Ø”=ˆØ�˜T™œÒ"Ð"Ø˜X h°¡lÐ2Ô3ˆIØ˜JÐ&Ð&Ø!)�”Ø Ð Ø˜‰MˆHð �˜T™œÒ"Ð"ð "ˆŒØˆtr   c                 óz   — |                       || j        ¦  «        x}r| xj        t          |¦  «        z  c_        |S )zßLook for a sequence of bytes at the start of a string.

        If the bytes are found return True and advance the position to the byte
        after the match. Otherwise return False and leave the position alone.

        )r¯   rn   r?   )rR   rÁ   rŽ   s      r   Úmatch_byteszEncodingBytes.match_bytes´  s<   € ð —_’_ U¨D¬MÑ:Ô:Ð:ˆ6ð 	(ØˆMŒM�S ™ZœZÑ'ˆMŒMØˆr   c                 óš   — 	 |                       || j        ¦  «        t          |¦  «        z   dz
  | _        n# t          $ r t
          ‚w xY wdS )z™Look for the next sequence of bytes matching a given sequence.

        If a match is found advance the position to the last byte of the match.

        r   T)Úindexrn   r?   rj   Ú
ValueErrorr×   )rR   rÁ   s     r   Újump_tozEncodingBytes.jump_to¿  sV   € ð	 Ø!ŸZšZ¨¨t¬}Ñ=Ô=ÅÀEÁ
Ä
ÑJÈQÑNˆDŒNˆNøÝð 	 ð 	 ð 	 ÝÐð	 øøøàˆts	   ‚36 ¶AN)r“   r”   r•   r–   rÎ   rS   rÙ   rÛ   rß   rá   Úpropertyrn   rã   Úspace_characters_bytesrç   ré   rë   rï   r—   r   r   rÌ   rÌ   s  sê   € € € € € ðð ð1ð 1ð 1ðð ð ð+ð +ð +ð+ð +ð +ð*ð *ð *ð
"ð "ð "ð ˆx˜ lÑ3Ô3€Hàð5ð 5ñ „Xð5ð 5ð 
ð 
ð 
ð 
ð	ð 	ð 	ð	ð 	ð 	ð
ð 
ð 
ð 
ð 
r   rÌ   c                   óH   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ ZdS )rÆ   z@Mini parser for detecting character encoding from meta elements.c                 ó<   — t          |¦  «        | _        d | _        d S r   )rÌ   r{   rN   ©rR   r{   s     r   rS   zEncodingParser.__init__Ï  s   € Ý! $Ñ'Ô'ˆŒ	ØˆŒˆˆr   c                 ó–  — d| j         vrd S | j        | j        | j        | j        | j        | j        dœ}| j         D ]‰}d}	 | j                              d¦  «         n# t          $ r Y  n]w xY w|                     ¦   «         D ]?\  }}| j          	                    |¦  «        r 	  |¦   «         } n# t          $ r d}Y  nw xY wŒ@|s nŒŠ| j
        S )Nó   <meta)s   <!--rö   s   </s   <!s   <?r   Tr   F)r{   Úhandle_commentÚhandle_metaÚhandle_possible_end_tagÚhandle_otherÚhandle_possible_start_tagrï   r×   Úitemsrë   rN   )rR   Úmethod_dispatchr}   Úkeep_parsingÚkeyÚmethods         r   rÇ   zEncodingParser.get_encodingÓ  s4  € Ø˜4œ9Ð$Ð$Ø�4ð Ô(ØÔ&ØÔ/ØÔ$ØÔ$ØÔ0ð
ð 
ˆð ”ð 	ð 	ˆAØˆLðØ”	×!Ò! $Ñ'Ô'Ð'Ð'øÝ ð ð ð Ø��ðøøøà.×4Ò4Ñ6Ô6ð ð ‘��VØ”9×(Ò(¨Ñ-Ô-ð ðØ'- v¡x¤x˜Ø˜øÝ(ð ð ð Ø',˜Ø˜˜ðøøøð	ð  ð Ø�ðð Œ}Ðs#   ¿AÁ
A(Á'A(Â
B+Â+B;Â:B;c                 ó6   — | j                              d¦  «        S )zSkip over comments.s   -->©r{   rï   r]   s    r   r÷   zEncodingParser.handle_commentò  s   € àŒy× Ò  Ñ(Ô(Ð(r   c                 óÖ  — | j         j        t          vrdS d}d }	 |                      ¦   «         x}€dS |d         dk    r|d         dk    }|r|�	|| _        dS n‘|d         dk    r#|d         }t          |¦  «        }|�	|| _        dS nb|d         dk    rVt          t          |d         ¦  «        ¦  «        }|                     ¦   «         x}�t          |¦  «        }|�|r	|| _        dS |}ŒÐ)	NTFr   s
   http-equivr   s   content-typeó   charsets   content)	r{   rã   rñ   Úget_attributerN   rM   ÚContentAttributeParserrÌ   Úparse)rR   Ú
has_pragmaÚpending_encodingÚ	attributeÚtentative_encodingÚcodecÚcontent_parsers          r   rø   zEncodingParser.handle_metaö  s0  € ØŒ9Ô!Õ)?Ð?Ð?à�4àˆ
ØÐð	1à!×/Ò/Ñ1Ô1Ð1�	Ð:Ø�tà˜Œ|˜}Ò,Ð,Ø& qœ\¨_Ò<�
Øð !Ð"2Ð">Ø$4�D”MØ ˜5øØ˜1” Ò+Ð+Ø%.¨q¤\Ð"Ý'Ð(:Ñ;Ô;�ØÐ$Ø$)�D”MØ ˜5ð %ð ˜1” Ò+Ð+Ý!7½ÀiÐPQÄlÑ8SÔ8SÑ!TÔ!T�Ø*8×*>Ò*>Ñ*@Ô*@Ð@Ð&ÐMÝ+Ð,>Ñ?Ô?�EØÐ(Ø%ð )Ø,1˜DœMØ#( 5Ø+0Ð(ð1	1r   c                 ó.   — |                       d¬¦  «        S )NF©Úend_tag)Úhandle_possible_tagr]   s    r   rû   z(EncodingParser.handle_possible_start_tag  s   € Ø×'Ò'°Ð'Ñ6Ô6Ð6r   c                 óV   — t          | j        ¦  «         |                      d¬¦  «        S )NTr  )Únextr{   r  r]   s    r   rù   z&EncodingParser.handle_possible_end_tag  s&   € ÝˆTŒY‰ŒˆØ×'Ò'°Ð'Ñ5Ô5Ð5r   c                 ó   — | j         }|j        t          vr,|r(|                     ¦   «          |                      ¦   «          dS |                     t          ¦  «        }|dk    r|                     ¦   «          n	 |                      ¦   «         €nŒdS )NTr   )r{   rã   Úascii_letters_bytesrÛ   rú   ré   Úspaces_angle_bracketsr  )rR   r  r{   rq   s       r   r  z"EncodingParser.handle_possible_tag  sš   € ØŒyˆØÔÕ$7Ð7Ð7ð ð $Ø—’‘”�Ø×!Ò!Ñ#Ô#Ð#Ø�4à—O’OÕ$9Ñ:Ô:ˆ	Ø˜ÒÐð �MŠM‰OŒOˆOˆOðØ×%Ò%Ñ'Ô'Ð/Øðð ˆtr   c                 ó6   — | j                              d¦  «        S )Nr   r  r]   s    r   rú   zEncodingParser.handle_other5  s   € ØŒy× Ò  Ñ&Ô&Ð&r   c                 ó¬  — | j         }|                     t          t          dg¦  «        z  ¦  «        }|�t	          |¦  «        dk    sJ ‚|dv rdS g }g }	 |dk    r|rn“|t          v r|                     ¦   «         }nu|dv rd                     |¦  «        dfS |t          v r(|                     |                     ¦   «         ¦  «         n|€dS |                     |¦  «         t          |¦  «        }Œœ|dk    r+| 
                    ¦   «          d                     |¦  «        dfS t          |¦  «         |                     ¦   «         }|x}d	v r–	 t          |¦  «        }||k    r9t          |¦  «         d                     |¦  «        d                     |¦  «        fS |t          v r(|                     |                     ¦   «         ¦  «         n|                     |¦  «         Œ•|d
k    rd                     |¦  «        dfS |t          v r(|                     |                     ¦   «         ¦  «         n|€dS |                     |¦  «         	 t          |¦  «        }|t          v r*d                     |¦  «        d                     |¦  «        fS |t          v r(|                     |                     ¦   «         ¦  «         n|€dS |                     |¦  «         Œ�)z{Return a (name, value) pair for the next attribute in the stream.

        If no attribute is found, return None.

        ó   /Nr   )r   NTó   =)r  r   r   )ó   'ó   "r   )r{   rç   rñ   Ú	frozensetr?   r†   Úascii_uppercase_bytesry   rÏ   r  rÛ   r  )rR   r{   rq   Úattribute_nameÚattribute_valueÚquotes         r   r  zEncodingParser.get_attribute8  sþ  € ð Œyˆà—I’IÕ4µyÀ$ÀÑ7HÔ7HÑHÑIÔIˆ	ØÐ ¥C¨	¡N¤N°aÒ$7Ð$7Ð$7Ð$7à˜Ð$Ð$Ø�4àˆØˆð	#Ø˜DÒ Ð  ^Ð ØØÕ4Ð4Ð4à ŸIšI™KœK�	ØØ˜lÐ*Ð*Ø—x’x Ñ/Ô/°Ð4Ð4ØÕ3Ð3Ð3Ø×%Ò% i§o¢oÑ&7Ô&7Ñ8Ô8Ð8Ð8ØÐ"Ø�tà×%Ò% iÑ0Ô0Ð0å˜T™
œ
ˆIð!	#ð$ ˜ÒÐØ�MŠM‰OŒOˆOØ—8’8˜NÑ+Ô+¨SÐ0Ð0åˆT‰
Œ
ˆ
à—I’I‘K”Kˆ	àÐˆE <Ð/Ð/ð6å  ™JœJ�	à Ò%Ð%Ý˜‘J”J�JØŸ8š8 NÑ3Ô3°S·X²X¸oÑ5NÔ5NÐNÐNàÕ"7Ð7Ð7Ø#×*Ò*¨9¯?ª?Ñ+<Ô+<Ñ=Ô=Ð=Ð=ð $×*Ò*¨9Ñ5Ô5Ð5ð6ð ˜$ÒÐØ—8’8˜NÑ+Ô+¨SÐ0Ð0ØÕ/Ð/Ð/Ø×"Ò" 9§?¢?Ñ#4Ô#4Ñ5Ô5Ð5Ð5ØÐØ�4à×"Ò" 9Ñ-Ô-Ð-ð		2Ý˜T™
œ
ˆIØÕ1Ð1Ð1Ø—x’x Ñ/Ô/°·²¸/Ñ1JÔ1JÐJÐJØÕ3Ð3Ð3Ø×&Ò& y§¢Ñ'8Ô'8Ñ9Ô9Ð9Ð9ØÐ"Ø�tà×&Ò& yÑ1Ô1Ð1ð		2r   N)r“   r”   r•   r–   rS   rÇ   r÷   rø   rû   rù   r  rú   r  r—   r   r   rÆ   rÆ   Ì  s§   € € € € € ØJÐJðð ð ðð ð ð>)ð )ð )ð1ð 1ð 1ðB7ð 7ð 7ð6ð 6ð 6ðð ð ð.'ð 'ð 'ðL2ð L2ð L2ð L2ð L2r   rÆ   c                   ó   — e Zd Zd„ Zd„ ZdS )r  c                 óB   — t          |t          ¦  «        sJ ‚|| _        d S r   )r=   rÁ   r{   rô   s     r   rS   zContentAttributeParser.__init__ˆ  s#   € Ý˜$¥Ñ&Ô&Ð&Ð&Ð&ØˆŒ	ˆ	ˆ	r   c                 óÞ  — 	 | j                              d¦  «         | j         xj        dz  c_        | j                              ¦   «          | j         j        dk    sd S | j         xj        dz  c_        | j                              ¦   «          | j         j        dv rb| j         j        }| j         xj        dz  c_        | j         j        }| j                              |¦  «        r| j         || j         j        …         S d S | j         j        }	 | j                              t          ¦  «         | j         || j         j        …         S # t          $ r | j         |d …         cY S w xY w# t          $ r Y d S w xY w)Nr  r   r  )r  r  )r{   rï   rn   rç   rã   ré   rñ   r×   )rR   r!  Úold_positions      r   r  zContentAttributeParser.parseŒ  s…  € ð	àŒI×Ò˜jÑ)Ô)Ð)ØŒIÐÔ !Ñ#ÐÔØŒI�NŠNÑÔÐØ”9Ô)¨TÒ1Ð1à�tØŒIÐÔ !Ñ#ÐÔØŒI�NŠNÑÔÐàŒyÔ%¨Ð5Ð5Øœ	Ô.�Ø”	Ð"Ô" aÑ'Ð"Ô"Ø#œyÔ1�Ø”9×$Ò$ UÑ+Ô+ð  Øœ9 \°$´)Ô2DÐ%DÔEÐEà˜4ð  $œyÔ1�ð4Ø”I×(Ò(Õ)?Ñ@Ô@Ð@Øœ9 \°$´)Ô2DÐ%DÔEÐEøÝ$ð 4ð 4ð 4àœ9 \ ] ]Ô3Ð3Ð3Ð3ð4øøøøõ ð 	ð 	ð 	Ø�4�4ð	øøøs=   ‚AE ÁBE Ã:E Ä7D? Ä?EÅE ÅEÅE Å
E,Å+E,N)r“   r”   r•   rS   r  r—   r   r   r  r  ‡  s2   € € € € € ðð ð ðð ð ð ð r   r  c                 óÐ   — t          | t          ¦  «        r(	 |                      d¦  «        } n# t          $ r Y dS w xY w| �&	 t	          j        | ¦  «        S # t          $ r Y dS w xY wdS )z‡Return the Python codec name corresponding to an encoding.

    Return None if the string doesn't correspond to a valid encoding.

    ÚasciiN)r=   rÁ   ÚdecodeÚUnicodeDecodeErrorÚwebencodingsÚlookupÚAttributeError)rN   s    r   rM   rM   ­  s˜   € õ �(�EÑ"Ô"ð ð	Ø—’ wÑ/Ô/ˆHˆHøÝ!ð 	ð 	ð 	Ø�4�4ð	øøøð Ðð	ÝÔ& xÑ0Ô0Ð0øÝð 	ð 	ð 	Ø�4�4ð	øøøð Ðs   —- ­
;º;ÁA Á
A#Á"A#)!r»   r‡   Úior   r   Úpathlibr   rÄ   r   r   r*  Ú	constantsr	   r
   r   r  rñ   r  r  r  rˆ   rw   Únon_bmp_invalid_codepointsÚascii_punctuation_rer„   rG   rA   rD   rÁ   rÌ   rÆ   r  rM   r—   r   r   ú<module>r2     sg  ðØ €€€Ø 	€	€	€	Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1à Ð Ð Ð à :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :ð #˜Ð"NÐ"NÐ=MÐ"NÑ"NÔ"NÑNÔNÐ Ø�iÐHÐH¸-ÐHÑHÔHÑHÔHÐ Ø!˜	Ð!LÐ!L¸OÐ!LÑ!LÔ!LÑLÔLÐ Ø.°°¸DÀ$¸<Ñ1HÔ1HÑHÐ à�R”Zð=ñ>ô >Ð ðNð Nð NÐ ð "�r”zØOñQô QÐ ð Ð ð7ð 7ð 7ðo=ð o=ð o=ð o=ð o=ñ o=ô o=ð o=ðdMð Mð Mð Mð MÐ2ñ Mô Mð Mð`Vð Vð Vð Vð V�Eñ Vô Vð Vðrx2ð x2ð x2ð x2ð x2ñ x2ô x2ð x2ðv#ð #ð #ð #ð #ñ #ô #ð #ðLð ð ð ð r   