§
    „ßjz  ã                  óô   — d dl mZ d dlmZ d dlZd dlmZ ej        rd dl	Z
 ej        d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d	„ d
ej        e         ¦  «        Z G d„ d¦  «        ZddlmZ dS )é    )ÚannotationsN)ÚdatetimeÚTc                  ó4   — e Zd ZdZddd„Zdd
„Zdd„Zdd„ZdS )ÚIfRangez½Very simple object that represents the `If-Range` header in parsed
    form.  It will either have neither a etag or date or one of either but
    never both.

    .. versionadded:: 0.7
    NÚetagú
str | NoneÚdateúdatetime | Nonec                ó"   — || _         || _        d S ©N)r   r
   )Úselfr   r
   s      úP/var/www/html/venv/lib/python3.11/site-packages/werkzeug/datastructures/range.pyÚ__init__zIfRange.__init__   s   € ð ˆŒ	àˆŒ	ˆ	ˆ	ó    ÚreturnÚstrc                ó†   — | j         �t          j        | j         ¦  «        S | j        �t          j        | j        ¦  «        S dS )ú-Converts the object back into an HTTP header.NÚ )r
   ÚhttpÚ	http_dater   Ú
quote_etag©r   s    r   Ú	to_headerzIfRange.to_header   s;   € àŒ9Ð Ý”> $¤)Ñ,Ô,Ð,ØŒ9Ð Ý”? 4¤9Ñ-Ô-Ð-Øˆrr   c                ó*   — |                       ¦   «         S r   ©r   r   s    r   Ú__str__zIfRange.__str__$   ó   € Ø�~Š~ÑÔÐr   c                óR   — dt          | ¦  «        j        › dt          | ¦  «        ›d�S ©Nú<ú ú>©ÚtypeÚ__name__r   r   s    r   Ú__repr__zIfRange.__repr__'   ó*   € Ø7•4˜‘:”:Ô&Ð7Ð7­¨T©¬Ð7Ð7Ð7Ð7r   ©NN)r   r	   r
   r   ©r   r   )r'   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r(   © r   r   r   r      ss   € € € € € ðð ðð ð ð ð ðð ð ð ð ð  ð  ð  ð8ð 8ð 8ð 8ð 8ð 8r   r   c                  óJ   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dS )ÚRangeaX  Represents a ``Range`` header. All methods only support only
    bytes as the unit. Stores a list of ranges if given, but the methods
    only work if only one range is provided.

    :raise ValueError: If the ranges provided are invalid.

    .. versionchanged:: 0.15
        The ranges passed in are validated.

    .. versionadded:: 0.7
    Úunitsr   Úrangesú%cabc.Sequence[tuple[int, int | None]]r   ÚNonec                óz   — || _         || _        |D ])\  }}|�|� |dk     s||k    rt          ||f› d�¦  «        ‚Œ*d S )Nr   z is not a valid range.)r2   r3   Ú
ValueError)r   r2   r3   ÚstartÚends        r   r   zRange.__init__8   sj   € ð ˆŒ
ð ˆŒà ð 	Jð 	J‰JˆE�3Øˆ}  °e¸a²i°iÀ5ÈCÂ<À<Ý  U¨C LÐ!HÐ!HÐ!HÑIÔIÐIøð	Jð 	Jr   Úlengthú
int | Noneútuple[int, int] | Nonec                óâ   — | j         dk    s|�t          | j        ¦  «        dk    rdS | j        d         \  }}|€|}|dk     r||z  }t          j        |||¦  «        r|t          ||¦  «        fS dS )z·If the range is for bytes, the length is not None and there is
        exactly one range and it is satisfiable it returns a ``(start, stop)``
        tuple, otherwise `None`.
        ÚbytesNé   r   )r2   Úlenr3   r   Úis_byte_range_validÚmin)r   r:   r8   r9   s       r   Úrange_for_lengthzRange.range_for_lengthE   sŠ   € ð
 Œ:˜Ò Ð  F Nµc¸$¼+Ñ6FÔ6FÈ!Ò6KÐ6KØ�4Ø”[ ”^‰
ˆˆsØˆ;ØˆCØ�qŠyˆyØ˜‘�ÝÔ# E¨3°Ñ7Ô7ð 	+Ø�#˜c 6Ñ*Ô*Ð*Ð*Øˆtr   úContentRange | Nonec                óz   — |                       |¦  «        }|�#t          | j        |d         |d         |¦  «        S dS )z�Creates a :class:`~werkzeug.datastructures.ContentRange` object
        from the current range and given content length.
        Nr   r?   )rC   ÚContentRanger2   )r   r:   Úrngs      r   Úmake_content_rangezRange.make_content_rangeU   s?   € ð ×#Ò# FÑ+Ô+ˆØˆ?Ý ¤
¨C°¬F°C¸´F¸FÑCÔCÐCØˆtr   c                óø   — g }| j         D ]R\  }}|€.|                     |dk    r|› d�nt          |¦  «        ¦  «         Œ5|                     |› d|dz
  › �¦  «         ŒS| j        › dd                     |¦  «        › �S )r   Nr   ú-r?   ú=ú,)r3   Úappendr   r2   Újoin)r   r3   Úbeginr9   s       r   r   zRange.to_header^   s—   € àˆØœ+ð 	4ð 	4‰JˆE�3Øˆ{Ø—’¨U°aªZ¨Z ˜k˜k˜k˜k½SÀ¹Z¼ZÑHÔHÐHÐHà—’ Ð2Ð2¨¨q©Ð2Ð2Ñ3Ô3Ð3Ð3Ø”*Ð1Ð1˜sŸxšx¨Ñ/Ô/Ð1Ð1Ð1r   r	   c                óv   — |                       |¦  «        }|�!| j        › d|d         › d|d         dz
  › d|› �S dS )z\Converts the object into `Content-Range` HTTP header,
        based on given length
        Nr#   r   rJ   r?   ú/)rC   r2   )r   r:   Úranges      r   Úto_content_range_headerzRange.to_content_range_headerh   sT   € ð ×%Ò% fÑ-Ô-ˆØÐØ”jÐEÐE 5¨¤8ÐEÐE¨e°A¬h¸©lÐEÐE¸VÐEÐEÐEØˆtr   c                ó*   — |                       ¦   «         S r   r   r   s    r   r   zRange.__str__q   r   r   c                óR   — dt          | ¦  «        j        › dt          | ¦  «        ›d�S r!   r%   r   s    r   r(   zRange.__repr__t   r)   r   N)r2   r   r3   r4   r   r5   )r:   r;   r   r<   )r:   r;   r   rD   r+   )r:   r;   r   r	   )r'   r,   r-   r.   r   rC   rH   r   rS   r   r(   r/   r   r   r1   r1   +   s®   € € € € € ð
ð 
ðJð Jð Jð Jðð ð ð ð ð ð ð ð2ð 2ð 2ð 2ðð ð ð ð ð  ð  ð  ð8ð 8ð 8ð 8ð 8ð 8r   r1   c                  ój   — e Zd Zdd„Zej        dd
„¦   «         Zej        dd„¦   «         Zdd„Zdd„ZdS )Ú_CallbackPropertyÚownerútype[ContentRange]Únamer   r   r5   c                ó   — d|› �| _         d S )NÚ_)Úattr)r   rX   rZ   s      r   Ú__set_name__z_CallbackProperty.__set_name__y   s   € Ø˜�J�JˆŒ	ˆ	ˆ	r   Úinstanceúte.Selfc                ó   — d S r   r/   ©r   r_   rX   s      r   Ú__get__z_CallbackProperty.__get__|   s   € Ø?B¸sr   rF   r   c                ó   — d S r   r/   rb   s      r   rc   z_CallbackProperty.__get__~   s   € ØORÈsr   rD   útype[ContentRange] | Noneúte.Self | Tc                ó.   — |€| S |j         | j                 S r   )Ú__dict__r]   rb   s      r   rc   z_CallbackProperty.__get__€   s   € ð ÐØˆKàÔ  ¤Ô+Ð+r   Úvaluec                ó`   — ||j         | j        <   |j        �|                     |¦  «         d S d S r   )rh   r]   Ú	on_update)r   r_   ri   s      r   Ú__set__z_CallbackProperty.__set__ˆ   s<   € Ø',ˆÔ˜$œ)Ñ$àÔÐ)Ø×Ò˜xÑ(Ô(Ð(Ð(Ð(ð *Ð)r   N)rX   rY   rZ   r   r   r5   )r_   r5   rX   r5   r   r`   )r_   rF   rX   rY   r   r   )r_   rD   rX   re   r   rf   )r_   rF   ri   r   r   r5   )r'   r,   r-   r^   ÚtÚoverloadrc   rl   r/   r   r   rW   rW   x   s‚   € € € € € ðð ð ð ð „ZØBÐBÐBñ „ZØBØ„ZØRÐRÐRñ „ZØRð,ð ,ð ,ð ,ð)ð )ð )ð )ð )ð )r   rW   c                  óÐ   — e Zd ZU dZ	 	 ddd„Z e¦   «         Zded<    e¦   «         Zded<    e¦   «         Z	ded<    e¦   «         Z
ded<   	 	 ddd„Zdd„Zdd„Zdd„Zdd„Zdd„ZdS )rF   zDRepresents the content range header.

    .. versionadded:: 0.7
    Nr2   r	   r8   r;   Ústopr:   rk   ú*cabc.Callable[[ContentRange], None] | Noner   r5   c                óD   — || _         |                      ||||¦  «         d S r   )rk   Úset)r   r2   r8   rp   r:   rk   s         r   r   zContentRange.__init__•   s)   € ð #ˆŒØ�Š�˜˜f eÑ,Ô,Ð,Ð,Ð,r   r>   c                óº   — t          j        |||¦  «        s
J d¦   «         ‚|| _        || _        || _        || _        | j        �|                      | ¦  «         dS dS )z#Simple method to update the ranges.zBad range providedN)r   rA   Ú_unitsÚ_startÚ_stopÚ_lengthrk   )r   r8   rp   r:   r2   s        r   rs   zContentRange.setª   sl   € õ Ô'¨¨t°VÑ<Ô<ÐRÐRÐ>RÑRÔRÐRØ"'ˆŒØ"'ˆŒØ!%ˆŒ
Ø#)ˆŒØŒ>Ð%Ø�NŠN˜4Ñ Ô Ð Ð Ð ð &Ð%r   c                ó6   — |                       ddd¬¦  «         dS )zcSets the units to `None` which indicates that the header should
        no longer be used.
        N)r2   )rs   r   s    r   ÚunsetzContentRange.unsetº   s"   € ð 	�Š��t 4ˆÑ(Ô(Ð(Ð(Ð(r   r   c                óš   — | j         €dS | j        €d}n| j        }| j        €| j         › d|› �S | j         › d| j        › d| j        dz
  › d|› �S )Nr   Ú*z */r#   rJ   r?   rQ   )ru   rx   rv   rw   )r   r:   s     r   r   zContentRange.to_headerÀ   sq   € ØŒ;ÐØ�2ØŒ<ÐØ #ˆFˆFà”\ˆFØŒ;ÐØ”kÐ.Ð. fÐ.Ð.Ð.Ø”+ÐGÐG ¤ÐGÐG¨d¬j¸1©nÐGÐG¸vÐGÐGÐGr   Úboolc                ó   — | j         d uS r   )ru   r   s    r   Ú__bool__zContentRange.__bool__Ë   s   € ØŒ{ $Ð&Ð&r   c                ó*   — |                       ¦   «         S r   r   r   s    r   r   zContentRange.__str__Î   r   r   c                óR   — dt          | ¦  «        j        › dt          | ¦  «        ›d�S r!   r%   r   s    r   r(   zContentRange.__repr__Ñ   r)   r   r*   )r2   r	   r8   r;   rp   r;   r:   r;   rk   rq   r   r5   )Nr>   )
r8   r;   rp   r;   r:   r;   r2   r	   r   r5   )r   r5   r+   )r   r}   )r'   r,   r-   r.   r   rW   r2   Ú__annotations__r8   rp   r:   rs   rz   r   r   r   r(   r/   r   r   rF   rF   �   s6  € € € € € € ðð ð "Ø@Dð	-ð 	-ð 	-ð 	-ð 	-ð *Ð)Ñ+Ô+€EÐ+Ð+Ð+Ñ+à)Ð)Ñ+Ô+€EÐ+Ð+Ð+Ñ+ð )Ð(Ñ*Ô*€DÐ*Ð*Ð*Ñ*à*Ð*Ñ,Ô,€FÐ,Ð,Ð,Ñ,ð "Ø#ð!ð !ð !ð !ð !ð )ð )ð )ð )ð	Hð 	Hð 	Hð 	Hð'ð 'ð 'ð 'ð ð  ð  ð  ð8ð 8ð 8ð 8ð 8ð 8r   rF   é   )r   )Ú
__future__r   Úcollections.abcÚabcÚcabcÚtypingrm   r   ÚTYPE_CHECKINGÚtyping_extensionsÚteÚTypeVarr   r   r1   ÚGenericrW   rF   r   r   r/   r   r   ú<module>rŽ      s@  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð à„?ð #Ø"Ð"Ð"Ð"à€A„Iˆc�N„N€ð8ð 8ð 8ð 8ð 8ñ 8ô 8ð 8ð<J8ð J8ð J8ð J8ð J8ñ J8ô J8ð J8ðZ)ð )ð )ð )ð )˜œ	 !œñ )ô )ð )ð.C8ð C8ð C8ð C8ð C8ñ C8ô C8ð C8ðN Ð Ð Ð Ð Ð Ð Ð r   