§
    �’jS\  ã                   ó  — U d Z dZdZddlZddlZddlZddlZddl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 dd
lmZmZmZmZmZ ej        dd…         dk    rddlmZ nddlmZ ej        dk    rddlmZ nddlmZ ddlmZmZmZmZ e e e!e!e!f         e e!e!e!f         e e!e!e!f         f         Z"ee#d<   e e!e!e!e!e!e!f         Z$ee#d<   ee         Z%ee&         Z'ee(e%f         Z)dee(         dee
         fd„Z*de
de(fd„Z+de(de(de(fd„Z,dZ-d .                    e-¦  «        Z/de/z   dz   Z0d^d e%d!ee1         de&fd"„Z2d e'de&fd#„Z3d e%de4fd$„Z5d%e&de4fd&„Z6d'Z7d_d)e(d*e(de4fd+„Z8d,Z9d`d)e(d-e(d.e(de4fd/„Z:d e%ddfd0„Z;ej<        d1œd e%d2ee&         d3e1de&fd4„Z=d e'd5e1de&fd6„Z>d e%de&fd7„Z?d8e"d9e"de"fd:„Z@d e%ddfd;„ZAdad=e(d>e1ddfd?„ZBd=e(defd@„ZCdAe(dBe(dCe(ddfdD„ZDdAe(dBe(dCe(defdE„ZEdFe(dCe(ddfdG„ZFdFe(dCe(defdH„ZGdIe(dJe(dKeddfdL„ZHdIe(dJe(dKeddfdM„ZI	 dbdOe(dPeJe(ef         dQeJe(e(f         dRe4ddf
dS„ZKdTe1de(fdU„ZL G dV„ dW¦  «        ZMe	 G dX„ dY¦  «        ¦   «         ZNejO         G dZ„ d[¦  «        ¦   «         ZPe	 G d\„ d]¦  «        ¦   «         ZQdS )cz"Utility functions for PDF library.zMathieu Fenniakzbiziqe@mathieu.fenniak.neté    N)Ú	dataclass)ÚdatetimeÚtimezone)ÚDEFAULT_BUFFER_SIZE)ÚSEEK_CUR)ÚPattern)ÚIOÚAnyÚNoReturnÚOptionalÚUnioné   )é   é
   )Ú	TypeAlias)r   é   )ÚSelfé   )ÚSTREAM_TRUNCATED_PREMATURELYÚDeprecationErrorÚLimitReachedErrorÚPdfStreamErrorÚTransformationMatrixTypeÚCompressedTransformationMatrixÚtextÚreturnc                 ó”  — | }| sd S | d                               ¦   «         rd| z   } |                      d¦  «        r| dz  } |                      dd¦  «                             dd¦  «                             dd	¦  «        } t          |                      d¦  «        |                      d
¦  «        ¦  «        }|dk    r|t          | ¦  «        dz
  k    r| dz  } dD ]`}	 t          j        | |¦  «        }|                      d¦  «        r |                     t          j	        ¬¦  «        }|c S # t          $ r Y Œ]w xY wt          d|› �¦  «        ‚)Nr   zD:)ÚZÚzÚ0000r   ú+r   ú'Ú ú-é   Ú00)zD:%YzD:%Y%mzD:%Y%m%dz
D:%Y%m%d%HzD:%Y%m%d%H%MúD:%Y%m%d%H%M%SzD:%Y%m%d%H%M%S%zz+0000)ÚtzinfozCan not convert date: )ÚisdigitÚendswithÚreplaceÚmaxÚfindÚlenr   Ústrptimer   ÚutcÚ
ValueError)r   ÚorgtextÚiÚfÚds        ú:C:\Projects\DSCons\.venv\Lib\site-packages\pypdf\_utils.pyÚparse_iso8824_dater7   P   sc  € Ø€GØð ØˆtØˆA„w‡‚ÑÔð Ø�d‰{ˆØ‡}‚}�ZÑ Ô ð Ø�‰ˆØ�<Š<˜˜SÑ!Ô!×)Ò)¨#¨sÑ3Ô3×;Ò;¸CÀÑDÔD€DÝˆD�IŠI�c‰NŒN˜DŸIšI c™NœNÑ+Ô+€AØˆ1‚u€u�•c˜$‘i”i !‘mÒ#Ð#Ø�‰ˆðð ð ˆð	ÝÔ! $¨Ñ*Ô*ˆAð �}Š}˜WÑ%Ô%ð 3Ø—I’I¥X¤\�IÑ2Ô2�ØˆHˆHˆHøõ ð 	ð 	ð 	ØˆHð	øøøõ Ð7¨gÐ7Ð7Ñ
8Ô
8Ð8s   ÃD(Ä(
D5Ä4D5Údtc                 ó,  — |                       d¦  «        }| j        �w|                      ¦   «         }|€J ‚t          |                     ¦   «         ¦  «        }t          t          |¦  «        d¦  «        \  }}|dz  }|dk    rdnd}||› |d›d	|d›d	�z  }|S )
a  
    Convert a datetime object to PDF date string format.

    Converts datetime to the PDF date format D:YYYYMMDDHHmmSSOHH'mm
    as specified in the PDF Reference.

    Args:
        dt: A datetime object to convert.

    Returns:
        A date string in PDF format.
    r'   Ni  é<   r   r!   r$   Ú02dr"   )Ústrftimer(   Ú	utcoffsetÚintÚtotal_secondsÚdivmodÚabs)r8   Údate_strÚoffsetr?   ÚhoursÚ	remainderÚminutesÚsigns           r6   Úformat_iso8824_daterH   p   s³   € ð �{Š{Ð+Ñ,Ô,€HØ	„yÐØ—’‘”ˆØÐ!Ð!Ð!Ý˜F×0Ò0Ñ2Ô2Ñ3Ô3ˆÝ!¥# mÑ"4Ô"4°dÑ;Ô;ÑˆˆyØ˜r‘/ˆØ# qÒ(Ð(ˆsˆs¨cˆØ�tÐ7˜UÐ7Ð7Ð7¨Ð7Ð7Ð7Ð7Ñ7ˆØ€Oó    Úheader1Úheader2c                 ó6  — d}g }| |v r(|                      |                     | ¦  «        ¦  «         ||v r(|                      |                     |¦  «        ¦  «         t          |¦  «        dk    rt          d| ›d|›d�¦  «        ‚|t	          |¦  «                 S )N)z%PDF-1.3z%PDF-1.4z%PDF-1.5z%PDF-1.6z%PDF-1.7z%PDF-2.0r   zNeither z nor z are proper headers)ÚappendÚindexr.   r1   r,   )rJ   rK   ÚversionsÚpdf_header_indicess       r6   Ú_get_max_pdf_version_headerrQ   ‰   s±   € ð€Hð ÐØ�(ÐÐØ×!Ò! (§.¢.°Ñ"9Ô"9Ñ:Ô:Ð:Ø�(ÐÐØ×!Ò! (§.¢.°Ñ"9Ô"9Ñ:Ô:Ð:Ý
ÐÑÔ !Ò#Ð#ÝÐR GÐRÐR°GÐRÐRÐRÑSÔSÐSØ•CÐ*Ñ+Ô+Ô,Ð,rI   )ó    ó   	ó   
ó   ó   ó    rI   ó   [ó   ]ÚstreamÚ	max_bytesc                 óÊ   — t          ¦   «         }	 |                      d¦  «        }|                     ¦   «         s|sn||z  }t          |¦  «        |k    rnŒFt	          |¦  «        S )a>  
    Read non-whitespace characters and return them.

    Stops upon encountering whitespace or when max_bytes is reached.

    Args:
        stream: The data stream from which was read.
        max_bytes: The maximum number of bytes returned; by default unlimited.

    Returns:
        The data which was read.

    Tr   )Ú	bytearrayÚreadÚisspacer.   Úbytes)rZ   r[   ÚtxtÚtoks       r6   Úread_until_whitespacerc   ¡   sk   € õ ‰+Œ+€CðØ�kŠk˜!‰nŒnˆØ�;Š;‰=Œ=ð 	 ð 	ØØˆs‰
ˆÝˆs‰8Œ8�yÒ Ð Øðõ �‰:Œ:ÐrI   c                 ó~   — |                       d¦  «        }|t          v r|                       d¦  «        }|t          v °|S )z¿
    Find and read the next non-whitespace character (ignores whitespace).

    Args:
        stream: The data stream from which was read.

    Returns:
        The data which was read.

    r   ©r^   ÚWHITESPACES©rZ   rb   s     r6   Úread_non_whitespacerh   º   s?   € ð �+Š+�a‰.Œ.€CØ
•Ð
Ð
Ø�kŠk˜!‰nŒnˆð •Ð
Ð
à€JrI   c                 ó”   — |                       d¦  «        }d}|t          v r#|dz  }|                       d¦  «        }|t          v °#|dk    S )a  
    Similar to read_non_whitespace, but return a boolean if at least one
    whitespace character was read.

    Args:
        stream: The data stream from which was read.

    Returns:
        True if one or more whitespace was skipped, otherwise return False.

    r   r   re   )rZ   rb   Úcnts      r6   Úskip_over_whitespacerk   Ë   sS   € ð �+Š+�a‰.Œ.€CØ
€CØ
•Ð
Ð
Øˆq‰ˆØ�kŠk˜!‰nŒnˆð •Ð
Ð
ð �Š7€NrI   Úvaluec                 ó4   — t          d„ | D ¦   «         ¦  «        S )zÙ
    Check if the given value consists of whitespace characters only.

    Args:
        value: The bytes to check.

    Returns:
        True if the value only has whitespace characters, otherwise return False.

    c              3   ó(   K  — | ]}|t           v V — Œd S ©N)ÚWHITESPACES_AS_BYTES)Ú.0Úbs     r6   ú	<genexpr>z+check_if_whitespace_only.<locals>.<genexpr>ê   s(   è è € Ð8Ð8¨QˆqÕ(Ð(Ð8Ð8Ð8Ð8Ð8Ð8rI   )Úall)rl   s    r6   Úcheck_if_whitespace_onlyru   ß   s!   € õ Ð8Ð8°%Ð8Ñ8Ô8Ñ8Ô8Ð8rI   ))ú ú/)ú:ú@)u   â€€u   â�¯)u   â‚ u   â‡¿r#   ÚcharÚcustom_special_charactersc                 ón   ‡ — t          ˆ fd„t          D ¦   «         ¦  «        rdS t          |o‰ |v ¦  «        S )z8Check if a character is part of neutral character rangesc              3   ó>   •K  — | ]\  }}|‰cxk    o|k    nc V — Œd S ro   © ©rq   ÚstartÚendrz   s      €r6   rs   z"is_char_neutral.<locals>.<genexpr>÷   sC   øè è € Ð
KÐ
K¡J E¨3ˆ5�DÐÐÒÐ˜CÒÐÐÐÐ
KÐ
KÐ
KÐ
KÐ
KÐ
KrI   T)ÚanyÚNEUTRAL_CHARACTER_RANGESÚbool)rz   r{   s   ` r6   Úis_char_neutralr…   õ   sH   ø€ å
Ð
KÐ
KÐ
KÐ
KÕ2JÐ
KÑ
KÔ
KÑKÔKð ØˆtåÐ)ÐO¨dÐ6OÐ.OÑPÔPÐPrI   ))u   Ö�u   à£¿)u   ï¬�u   ï·¿)u   ï¹°u   ï»¿Úcustom_rtl_minÚcustom_rtl_maxc                 óŠ   ‡ — t          ˆ fd„t          D ¦   «         ¦  «        rdS t          |o|o|‰ cxk    o|k    nc ¦  «        S )z4Check if a character is part of RTL character rangesc              3   ó>   •K  — | ]\  }}|‰cxk    o|k    nc V — Œd S ro   r~   r   s      €r6   rs   zis_char_rtl.<locals>.<genexpr>  sC   øè è € Ð
GÐ
G¡J E¨3ˆ5�DÐÐÒÐ˜CÒÐÐÐÐ
GÐ
GÐ
GÐ
GÐ
GÐ
GrI   T)r‚   ÚRTL_CHARACTER_RANGESr„   )rz   r†   r‡   s   `  r6   Úis_char_rtlr‹     sc   ø€ å
Ð
GÐ
GÐ
GÐ
GÕ2FÐ
GÑ
GÔ
GÑGÔGð Øˆtå�Ð` >Ð`°~ÈÐ7_Ð7_Ò7_Ð7_ÐQ_Ò7_Ð7_Ð7_Ð7_ÑaÔaÐarI   c                 óÔ   — |                       d¦  «        }|                      dd¦  «         |dk    r4|dvr2|                       d¦  «        }|dk    rt          d¦  «        ‚|dv°.d S d S d S )Nr   éÿÿÿÿó   %)rT   rV   rI   zFile ended unexpectedly.)r^   Úseekr   rg   s     r6   Úskip_over_commentr�     s€   € Ø
�+Š+�a‰.Œ.€CØ
‡K‚K��AÑÔÐØ
ˆd‚{€{Ø˜Ð'Ð'Ø—+’+˜a‘.”.ˆCØ�cŠzˆzÝ$Ð%?Ñ@Ô@Ð@ð ˜Ð'Ð'Ð'Ð'ð €{Ø'Ð'rI   )ÚlengthÚregexr‘   c                 ó*  — g }d}d}d}	 |                       |¦  «        }|sd                     |¦  «        S t          |¦  «        }||z   x}	|k    rt          d|	› d|› d�¦  «        ‚||z   }
|                     |
¦  «        }|                     |¦  «         |�bt          |¦  «        }||z
  |                     ¦   «         z   }|                      ||z
  |z
  d	¦  «         d                     |¦  «        d|…         S ||z  }|d
d…         }|dk     r|d	z  }�Œ)aƒ  
    Read until the regular expression pattern matched (ignore the match).
    Treats EOF on the underlying stream as the end of the token to be matched.

    Args:
        stream: The stream to read from.
        regex: The pattern to search for.
        length: The (approximated) maximum number of bytes to read before raising an exception.

    Returns:
        The read bytes.

    r   rI   é   TzRead stream length of z# exceeds maximum allowed length of ú.Nr   iðÿÿÿi    )r^   Újoinr.   r   ÚsearchrM   r€   r�   )rZ   r’   r‘   ÚpartsÚtotal_lengthÚtailÚ
chunk_sizeÚtokenÚtoken_lengthÚcurrent_lengthÚcurrent_bufferÚsearch_matchÚoverlapÚactual_starts                 r6   Úread_until_regexr£     sS  € ð €EØ€LØ€DØ€JðØ—’˜JÑ'Ô'ˆØð 	#Ø—8’8˜E‘?”?Ð"Ý˜5‘z”zˆØ*¨\Ñ9Ð9ˆN¸fÒDÐDÝ#Øe¨ÐeÐeÐ\bÐeÐeÐeñô ð ð  ™ˆØ—|’| NÑ3Ô3ˆØ�Š�UÑÔÐØÐ#Ý˜$‘i”iˆGØ'¨'Ñ1°L×4FÒ4FÑ4HÔ4HÑHˆLØ�KŠK˜ |Ñ3°lÑBÀAÑFÔFÐFØ—8’8˜E‘?”? = L =Ô1Ð1Ø˜Ñ$ˆð �S�T�TŒ{ˆØ˜ÒÐØ˜1ÑˆJñ5rI   Úto_readc                 óî   — |                       ¦   «         |k     rt          d¦  «        ‚|                      | t          ¦  «         |                      |¦  «        }|                      | t          ¦  «         |S )a  
    Given a stream at position X, read a block of size to_read ending at position X.

    This changes the stream's position to the beginning of where the block was
    read.

    Args:
        stream:
        to_read:

    Returns:
        The data which was read.

    z!Could not read malformed PDF file)Útellr   r�   r   r^   )rZ   r¤   r^   s      r6   Úread_block_backwardsr§   E  sh   € ð ‡{‚{�}„}�wÒÐÝÐ@ÑAÔAÐAà
‡K‚K���(Ñ#Ô#Ð#Ø�;Š;�wÑÔ€Dà
‡K‚K���(Ñ#Ô#Ð#Ø€KrI   c                 ó¦  — g }d}|                       ¦   «         dk    rt          t          ¦  «        ‚	 t          t          |                       ¦   «         ¦  «        }|dk    rnÕt          | |¦  «        }t          |¦  «        dz
  }|s-|dk    r||         dvr|dz  }|dk    r
||         dv°|dk    rd}|rF|                     ||dz   d…         ¦  «         |dk    r||         dv r|dz  }|dk    r
||         dv °n|                     |¦  «         |dk    r|                      |dz   t          ¦  «         n�Œd 
                    |ddd…         ¦  «        S )	a  
    Given a byte stream with current position X, return the previous line.

    All characters between the first CR/LF byte found before X
    (or, the start of the file, if no such byte is found) and position X
    After this call, the stream will be positioned one byte after the
    first non-CRLF character found beyond the first CR/LF byte before X,
    or, if no such byte is found, at the beginning of the stream.

    Args:
        stream: StreamType:

    Returns:
        The data which was read.

    Fr   Tr   s   
NrI   r�   )r¦   r   r   Úminr   r§   r.   rM   r�   r   r–   )rZ   Úline_contentÚ
found_crlfr¤   ÚblockÚidxs         r6   Úread_previous_liner®   ^  s‘  € ð" €LØ€JØ‡{‚{�}„}˜ÒÐÝÕ9Ñ:Ô:Ð:ð ÝÕ)¨6¯;ª;©=¬=Ñ9Ô9ˆØ�aŠ<ˆ<Øõ % V¨WÑ5Ô5ˆÝ�%‰jŒj˜1‰nˆØð 	"ð ˜’(�(˜u Sœz°Ð8Ð8Ø�q‘�ð ˜’(�(˜u Sœz°Ð8Ð8à�aŠxˆxØ!�
Øð 	'ð
 ×Ò  c¨A¡g i iÔ 0Ñ1Ô1Ð1à˜’(�(˜u Sœz¨WÐ4Ð4Ø�q‘�ð ˜’(�(˜u Sœz¨WÐ4Ð4øð
 ×Ò Ñ&Ô&Ð&Ø�!Š8ˆ8ð �KŠK˜˜a™¥Ñ*Ô*Ð*ØñA ðD �8Š8�L   2 Ô&Ñ'Ô'Ð'rI   Úarr   c                 ó:   ‡— t          ˆfd„| D ¦   «         ¦  «        S )Nc              3   ó^   •‡K  — | ]&Št          ˆfd „t          ‰Ž D ¦   «         ¦  «        V — Œ'dS )c              3   óf   •K  — | ]+}t          d „ t          ‰|¦  «        D ¦   «         ¦  «        V — Œ,dS )c              3   óZ   K  — | ]&\  }}t          |¦  «        t          |¦  «        z  V — Œ'd S ro   )Úfloat)rq   r3   Újs      r6   rs   z6matrix_multiply.<locals>.<genexpr>.<genexpr>.<genexpr>œ  s7   è è € Ð@Ð@©$¨!¨Q•%˜‘(”(�U 1™XœXÑ%Ð@Ð@Ð@Ð@Ð@Ð@rI   N)ÚsumÚzip)rq   ÚcolÚrows     €r6   rs   z,matrix_multiply.<locals>.<genexpr>.<genexpr>œ  sB   øè è € ÐTÐTÀS�cÐ@Ð@µ#°c¸3±-´-Ð@Ñ@Ô@Ñ@Ô@ÐTÐTÐTÐTÐTÐTrI   N)Útupler·   )rq   r¹   rr   s    @€r6   rs   z"matrix_multiply.<locals>.<genexpr>›  sZ   øøè è € ð ð àõ 	ÐTÐTÐTÐTÍCÐQRÈGÐTÑTÔTÑTÔTðð ð ð ð ð rI   )rº   )r¯   rr   s    `r6   Úmatrix_multiplyr»   ˜  s=   ø€ õ ð ð ð ð àðñ ô ñ ô ð rI   c                 ó€  — d}|                       | d¦  «         t          dd¦  «        5 }|                     |                      |¦  «        ¦  «         |                     d¦  «         |                     |                      |¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   |                       | d¦  «         dS )z5Create text file showing current location in context.iˆ  r   zpypdf_pdfLocation.txtÚwbs   HEREN)r�   ÚopenÚwriter^   )rZ   ÚradiusÚ	output_fhs      r6   Úmark_locationrÂ   ¡  sî   € ð €FØ
‡K‚K��˜ÑÔÐÝ	Ð% tÑ	,Ô	,ð -°	Ø�Š˜Ÿš FÑ+Ô+Ñ,Ô,Ð,Ø�Š˜Ñ Ô Ð Ø�Š˜Ÿš FÑ+Ô+Ñ,Ô,Ð,ð-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð ‡K‚K��˜ÑÔÐÐÐs   ªA&BÂB Â#B r   ÚmsgÚ
stacklevelc                 ó>   — t          j        | t          |¬¦  «         d S )N)rÄ   )ÚwarningsÚwarnÚDeprecationWarning)rÃ   rÄ   s     r6   Ú	deprecaterÉ   ­  s    € Ý„M�#Õ)°jÐAÑAÔAÐAÐAÐArI   c                 ó    — t          | ¦  «        ‚ro   )r   )rÃ   s    r6   ÚdeprecationrË   ±  s   € Ý
˜3Ñ
Ô
ÐrI   Úold_nameÚnew_nameÚ
removed_inc                 ó8   — t          | › d|› d|› d�d¦  «         dS )zFIssue a warning that a feature will be removed, but has a replacement.ú, is deprecated and will be removed in pypdf ú. Use ú	 instead.é   N©rÉ   ©rÌ   rÍ   rÎ   s      r6   Údeprecate_with_replacementrÖ   µ  s>   € åØÐfÐfÀÐfÐfÐS[ÐfÐfÐfØ	ñô ð ð ð rI   c                 ó6   — t          | › d|› d|› d�¦  «         dS )zMRaise an exception that a feature was already removed, but has a replacement.ú( is deprecated and was removed in pypdf rÑ   rÒ   N©rË   rÕ   s      r6   Údeprecation_with_replacementrÚ   ½  s:   € åØÐbÐb¸ZÐbÐbÈxÐbÐbÐbñô ð ð ð rI   Únamec                 ó2   — t          | › d|› d�d¦  «         dS )zCIssue a warning that a feature will be removed without replacement.rÐ   r•   rÓ   NrÔ   ©rÛ   rÎ   s     r6   Údeprecate_no_replacementrÞ   Ä  s*   € å�ÐPÐPÀ:ÐPÐPÐPÐRSÑTÔTÐTÐTÐTrI   c                 ó0   — t          | › d|› d�¦  «         dS )zJRaise an exception that a feature was already removed without replacement.rØ   r•   NrÙ   rÝ   s     r6   Údeprecation_no_replacementrà   É  s'   € å�4ÐNÐNÀÐNÐNÐNÑOÔOÐOÐOÐOrI   ÚmessageÚsourceÚvaluesc                ó¬   — |r*t          j        |¦  «                             | |¦  «         dS t          j        |¦  «                             | ¦  «         dS )zØ
    Use this instead of logger.error directly.

    That allows people to overwrite it more easily.

    See the docs on when to use which:
    https://pypdf.readthedocs.io/en/latest/user/suppress-warnings.html
    N)ÚloggingÚ	getLoggerÚerror©rá   râ   rã   s      r6   Úlogger_errorré   Î  sX   € ð ð 1ÝÔ˜&Ñ!Ô!×'Ò'¨°Ñ8Ô8Ð8Ð8Ð8åÔ˜&Ñ!Ô!×'Ò'¨Ñ0Ô0Ð0Ð0Ð0rI   c                ó¬   — |r*t          j        |¦  «                             | |¦  «         dS t          j        |¦  «                             | ¦  «         dS )a‘  
    Use this instead of logger.warning directly.

    That allows people to overwrite it more easily.

    ## Exception, warnings.warn, logger_warning
    - Exceptions should be used if the user should write code that deals with
      an error case, e.g. the PDF being completely broken.
    - warnings.warn should be used if the user needs to fix their code, e.g.
      DeprecationWarnings
    - logger_warning should be used if the user needs to know that an issue was
      handled by pypdf, e.g. a non-compliant PDF being read in a way that
      pypdf could apply a robustness fix to still read it. This applies mainly
      to strict=False mode.
    N)rå   ræ   Úwarningrè   s      r6   Úlogger_warningrì   Ý  sZ   € ð  ð 3ÝÔ˜&Ñ!Ô!×)Ò)¨'°6Ñ:Ô:Ð:Ð:Ð:õ
 	Ô˜&Ñ!Ô!×)Ò)¨'Ñ2Ô2Ð2Ð2Ð2rI   FÚ	func_nameÚkwargsÚaliasesÚfailc                 ó(  — |                      ¦   «         D ]|\  }}||v rs|rt          |› d|› d�¦  «        ‚||v rt          | › d|› d|› d|› d|› d�
¦  «        ‚|                     |¦  «        ||<   t	          j        |› d|› d�t          d¬	¦  «         Œ}d
S )z¥
    Helper function to deprecate arguments.

    Args:
        func_name: Name of the function to be deprecated
        kwargs:
        aliases:
        fail:

    z# is deprecated as an argument. Use z insteadz received both z and z as an argument. z is deprecated. Use rÒ   r   )rá   ÚcategoryrÄ   N)Úitemsr   Ú	TypeErrorÚpoprÆ   rÇ   rÈ   )rí   rî   rï   rð   Úold_termÚnew_terms         r6   Úrename_kwargsrø   ö  s  € ð &Ÿmšm™oœoð ð Ñˆ�(Ø�vÐÐØð Ý&ØÐVÐVÀHÐVÐVÐVñô ð ð ˜6Ð!Ð!ÝØ ð /ð /°ð /ð /Àð /ð /Ø$,ð/ð /à#ð/ð /ð /ñô ð ð
  &Ÿzšz¨(Ñ3Ô3ˆF�8ÑÝŒMàÐVÐVÀHÐVÐVÐVå+Øðñ ô ð øðð rI   r`   c                 óf   — | dk     r| › d�S | dk     r	| dz  d›d�S | dk     r	| dz  d›d�S | dz  d›d�S )	Niè  z Bytei@B z.1fz kBi Êš;z MBz GBr~   )r`   s    r6   Ú_human_readable_bytesrú     sk   € Øˆu‚}€}ØˆˆˆÐØˆu‚}€}Ø˜%‘-Ð(Ð(Ð(Ð(Ð(Øˆu‚}€}Ø˜%‘-Ð(Ð(Ð(Ð(Ð(Ø�e‰mÐ$Ð$Ð$Ð$Ð$rI   c                   ó6   — e Zd ZdZddd„Zddefd„Zdefd„ZdS )	Úclasspropertyz‡
    Decorator that converts a method with a single cls argument into a property
    that can be accessed directly from the class.
    Nr   c                 ó   — || _         d S ro   ©Úfget©ÚselfÚmethods     r6   Ú__init__zclassproperty.__init__L  s   € ØˆŒ	ˆ	ˆ	rI   c                 ó,   — |                       |¦  «        S ro   rþ   )r  ÚinstanceÚclss      r6   Ú__get__zclassproperty.__get__O  s   € Ø�yŠy˜‰~Œ~ÐrI   c                 ó   — || _         | S ro   rþ   r   s     r6   Úgetterzclassproperty.getterR  s   € ØˆŒ	ØˆrI   ro   )r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r  r
   r  r   r	  r~   rI   r6   rü   rü   F  sr   € € € € € ðð ð
ð ð ð ð ðð ¨Sð ð ð ð ð ð ð ð ð ð ð rI   rü   c                   óp   — e Zd ZU ddlmZ dZeed<   	 dZe	ed<   	 dZ
ee         ed<   	 d	efd
„Zd	efd„ZdS )ÚFiler   )ÚIndirectObjectr#   rÛ   rI   ÚdataNÚindirect_referencer   c           	      ót   — | j         j        › d| j        › dt          t	          | j        ¦  «        ¦  «        › d�S )Nz(name=z, data: ú))Ú	__class__r
  rÛ   rú   r.   r  ©r  s    r6   Ú__str__zFile.__str__h  s>   € Ø”.Ô)ÐlÐl°´ÐlÐlÕDYÕZ]Ð^bÔ^gÑZhÔZhÑDiÔDiÐlÐlÐlÐlrI   c                 ól   — |                       ¦   «         d d…         dt          | j        ¦  «        › d�z   S )Nr�   z, hash: r  )r  Úhashr  r  s    r6   Ú__repr__zFile.__repr__k  s2   € Ø�|Š|‰~Œ~˜c˜r˜cÔ"Ð%Bµ°T´Y±´Ð%BÐ%BÐ%BÑBÐBrI   )r
  r  r  Úgenericr  rÛ   ÚstrÚ__annotations__r  r`   r  r   r  r  r~   rI   r6   r  r  W  s°   € € € € € € à'Ð'Ð'Ð'Ð'Ð'à€Dˆ#€N€N�Nðð €Dˆ%ÐÐÑðð 48Ð˜ Ô0Ð7Ð7Ñ7ððm˜ð mð mð mð mðC˜#ð Cð Cð Cð Cð Cð CrI   r  c                   ó–   — e Zd Z ej        d¦  «        Zdeddfd„Zdedee	e
ef                  fd„Zdedefd„Zde
fd	„Zdedefd
„ZdS )ÚVersionz^(\d+)(.*)$Úversion_strr   Nc                 óH   — || _         |                      |¦  «        | _        d S ro   )r   Ú_parse_versionÚ
components)r  r   s     r6   r  zVersion.__init__s  s#   € Ø&ˆÔØ×-Ò-¨kÑ:Ô:ˆŒˆˆrI   c                 óT  — |                      d¦  «        }g }|D ]�}t          j                             |¦  «        }|s|                     d|f¦  «         Œ;|                     d¦  «        }|                     d¦  «        }|€d}|                     t          |¦  «        |f¦  «         ŒŽ|S )Nr•   r   r   r   )Úsplitr  ÚCOMPONENT_PATTERNÚmatchrM   Úgroupr>   )r  r   r#  Úparsed_componentsÚ	componentr'  Úinteger_prefixÚsuffixs           r6   r"  zVersion._parse_versionw  s¸   € Ø ×&Ò& sÑ+Ô+ˆ
ØÐØ#ð 		Dð 		DˆIÝÔ-×3Ò3°IÑ>Ô>ˆEØð Ø!×(Ò(¨!¨Y¨Ñ8Ô8Ð8ØØ"Ÿ[š[¨™^œ^ˆNØ—[’[ ‘^”^ˆFØÐ%Ø!"�Ø×$Ò$¥c¨.Ñ&9Ô&9¸6Ð%BÑCÔCÐCÐCØ Ð rI   Úotherc                 óP   — t          |t          ¦  «        sdS | j        |j        k    S )NF)Ú
isinstancer  r#  )r  r-  s     r6   Ú__eq__zVersion.__eq__†  s)   € Ý˜%¥Ñ)Ô)ð 	Ø�5ØŒ %Ô"2Ò2Ð2rI   c                 óR   — t          | j        t          | j        ¦  «        f¦  «        S ro   )r  r  rº   r#  r  s    r6   Ú__hash__zVersion.__hash__‹  s!   € å�T”^¥U¨4¬?Ñ%;Ô%;Ð<Ñ=Ô=Ð=rI   c                 óZ  — t          |t          ¦  «        st          dt          |¦  «        › �¦  «        ‚t	          | j        |j        ¦  «        D ]3\  }}|\  }}|\  }}||k     r dS ||k    r dS ||k     r dS ||k    r dS Œ4t          | j        ¦  «        t          |j        ¦  «        k     S )Nz#Version cannot be compared against TF)r/  r  r1   Útyper·   r#  r.   )r  r-  Úself_componentÚother_componentÚ
self_valueÚself_suffixÚother_valueÚother_suffixs           r6   Ú__lt__zVersion.__lt__�  sØ   € Ý˜%¥Ñ)Ô)ð 	RÝÐPÅ4ÈÁ;Ä;ÐPÐPÑQÔQÐQå/2°4´?ÀEÔDTÑ/UÔ/Uð 	ð 	Ñ+ˆN˜OØ&4Ñ#ˆJ˜Ø(7Ñ%ˆK˜à˜KÒ'Ð'Ø�t�tØ˜KÒ'Ð'Ø�u�uà˜\Ò)Ð)Ø�t�tØ˜\Ò)Ð)Ø�u�uð *õ �4”?Ñ#Ô#¥c¨%Ô*:Ñ&;Ô&;Ò;Ð;rI   )r
  r  r  ÚreÚcompiler&  r  r  Úlistrº   r>   r"  Úobjectr„   r0  r2  r
   r;  r~   rI   r6   r  r  o  sÖ   € € € € € à"˜œ
 >Ñ2Ô2Ðð; Cð ;¨Dð ;ð ;ð ;ð ;ð!¨#ð !°$°u¸SÀ#¸X´Ô2Gð !ð !ð !ð !ð3˜Fð 3 tð 3ð 3ð 3ð 3ð
>˜#ð >ð >ð >ð >ð<˜Cð < Dð <ð <ð <ð <ð <ð <rI   r  c                   ó0   — e Zd ZU dZdZeed<   dZeed<   dS )Ú_TraversalStatez=Sometimes we need mutable objects which just count something.r   Úentry_countFÚ
has_loggedN)	r
  r  r  r  rB  r>   r  rC  r„   r~   rI   r6   rA  rA  ¤  s8   € € € € € € àGÐGØ€K�ÐÐÑØ€J�ÐÐÑÐÐrI   rA  ro   )r#   )r#   r#   )r   )F)Rr  Ú
__author__Ú__author_email__Ú	functoolsrå   r<  ÚsysrÆ   Údataclassesr   r   r   Úior   Úosr   r   Útypingr	   r
   r   r   r   Úversion_infor   Útyping_extensionsr   Úerrorsr   r   r   r   rº   r´   r   r  r   Ú
StreamTyper`   ÚBinaryStreamTyper  ÚStrByteTyper7   rH   rQ   rf   r–   rp   ÚWHITESPACES_AS_REGEXPr>   rc   rh   r„   rk   ru   rƒ   r…   rŠ   r‹   r�   Úmaxsizer£   r§   r®   r»   rÂ   rÉ   rË   rÖ   rÚ   rÞ   rà   ré   rì   Údictrø   rú   rü   r  Útotal_orderingr  rA  r~   rI   r6   ú<module>rV     sÞ  ðð8 )Ð (Ð (Ø€
Ø/Ð à Ð Ð Ð Ø €€€Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð Ô�B�Q�BÔ˜7Ò"Ð"à Ð Ð Ð Ð Ð Ð à+Ð+Ð+Ð+Ð+Ð+àÔ�wÒÐØÐÐÐÐÐÐà&Ð&Ð&Ð&Ð&Ð&ðð ð ð ð ð ð ð ð ð ð ð ð ',Ø	ˆ%�˜Ð
Ô  e¨U°EÐ&9Ô :¸EÀ%ÈÐPUÐBUÔ<VÐVô'Ð ˜)ð ð ñ ð -2Ø	ˆ5�%˜  uÐ,ô-Ð  	ð ð ñ ð �ŒW€
Ø�e”9Ð Ø�C˜�OÔ$€ð9˜X cœ]ð 9¨x¸Ô/Að 9ð 9ð 9ð 9ð@˜Hð ¨ð ð ð ð ð2-¨ð -°sð -¸sð -ð -ð -ð -ð& :€Ø—x’x Ñ,Ô,Ð ØÐ3Ñ3°dÑ:Ð ðð  *ð ¸À#¼ð ÐRWð ð ð ð ð2Ð 0ð °Uð ð ð ð ð" ð °ð ð ð ð ð(9 Eð 9¨dð 9ð 9ð 9ð 9ðÐ ðQð Q˜#ð Q¸#ð QÀtð Qð Qð Qð QðÐ ðbð b�cð b¨3ð bÀSð bÐRVð bð bð bð bðA˜jð A¨Tð Að Að Að Að RUÔQ\ð ,ð ,ð , 
ð ,°7¸5´>ð ,È3ð ,Ðafð ,ð ,ð ,ð ,ð^Ð!1ð ¸Cð ÀEð ð ð ð ð27(˜zð 7(¨eð 7(ð 7(ð 7(ð 7(ðtØðØ$<ðàðð ð ð ð	˜*ð 	¨ð 	ð 	ð 	ð 	ðBð B�3ð B Cð B°ð Bð Bð Bð Bð �Sð  ˜Xð  ð  ð  ð  ð¨ð ¸ð Èð ÐQUð ð ð ð ð¨3ð ¸#ð È3ð ÐS[ð ð ð ð ðU 3ð U°Cð U¸Dð Uð Uð Uð Uð
P Sð P°cð P¸hð Pð Pð Pð Pð
1˜#ð 1¨#ð 1¸ð 1Àð 1ð 1ð 1ð 1ð3˜Cð 3¨Cð 3¸3ð 3À4ð 3ð 3ð 3ð 3ð4 SXð ð  Øð Ø   c œNð Ø59¸#¸s¸(´^ð ØKOð à	ð ð  ð  ð  ðF% ð %¨ð %ð %ð %ð %ðZð ð ð ð ñ ô ð ð" ðCð Cð Cð Cð Cñ Cô Cñ „ðCð. Ôð1<ð 1<ð 1<ð 1<ð 1<ñ 1<ô 1<ñ Ôð1<ðh ðð ð ð ð ñ ô ñ „ðð ð rI   