§
    YøÁiRN  ã                  ó~  — d dl mZ d dlZd dl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 d dlZd dl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! d dl"m#Z#m$Z$m%Z%  G d„ d¦  «        Z& G d„ de&¦  «        Z' G d„ de&¦  «        Z( G d„ de&¦  «        Z) G d„ de&¦  «        Z*ej+        e,e-e.f         Z/ej0        e/         Z1ej2        e/         Z3ej+        e3e1f         Z4 G d„ de&¦  «        Z5 G d„ de6¦  «        Z7 G d„ de6¦  «        Z8 ej9        d¦  «        Z: G d„ d e&¦  «        Z;dS )!é    )ÚannotationsN)Údatetime)Úformat_datetimeÚ
formatdate)Úpartial)Ú
guess_type)Ú	token_hex)Úquote)Úmd5_hexdigest)ÚBackgroundTask)Úiterate_in_threadpool)ÚURLÚHeadersÚMutableHeaders)ÚReceiveÚScopeÚSendc                  óŠ   — e Zd ZdZdZ	 	 	 	 	 d1d2d„Zd3d„Zd4d5d„Zed6d„¦   «         Z		 	 	 	 	 	 	 	 d7d8d(„Z
	 	 	 	 	 d9d:d)„Zd;d0„ZdS )<ÚResponseNúutf-8éÈ   Úcontentú
typing.AnyÚstatus_codeÚintÚheadersútyping.Mapping[str, str] | NoneÚ
media_typeú
str | NoneÚ
backgroundúBackgroundTask | NoneÚreturnÚNonec                ó’   — || _         |�|| _        || _        |                      |¦  «        | _        |                      |¦  «         d S ©N)r   r   r    ÚrenderÚbodyÚinit_headers©Úselfr   r   r   r   r    s         ú]/var/www/html/jarvis.com/web/backend/venv/lib/python3.11/site-packages/starlette/responses.pyÚ__init__zResponse.__init__   sM   € ð 'ˆÔØÐ!Ø(ˆDŒOØ$ˆŒØ—K’K Ñ(Ô(ˆŒ	Ø×Ò˜'Ñ"Ô"Ð"Ð"Ð"ó    úbytes | memoryviewc                óz   — |€dS t          |t          t          f¦  «        r|S |                     | j        ¦  «        S )Nr-   )Ú
isinstanceÚbytesÚ
memoryviewÚencodeÚcharset©r*   r   s     r+   r&   zResponse.render.   s<   € Øˆ?Ø�3Ý�g¥¥zÐ2Ñ3Ô3ð 	ØˆNØ�~Š~˜dœlÑ+Ô+Ð+r-   c                óB  — |€g }d}d}n2d„ |                      ¦   «         D ¦   «         }d„ |D ¦   «         }d|v}d|v}t          | dd ¦  «        }|�\|rZ| j        dk     sO| j        dv sFt          t	          |¦  «        ¦  «        }|                     d|                     d	¦  «        f¦  «         | j        }|�d|rb|                     d
¦  «        r#d| 	                    ¦   «         vr|d| j
        z   z  }|                     d|                     d	¦  «        f¦  «         || _        d S )NTc                óŒ   — g | ]A\  }}|                      ¦   «                              d ¦  «        |                     d ¦  «        f‘ŒBS )úlatin-1)Úlowerr3   )Ú.0ÚkÚvs      r+   ú
<listcomp>z)Response.init_headers.<locals>.<listcomp>;   sF   € ÐjÐjÐjÑRVÐRSÐUV˜AŸGšG™IœI×,Ò,¨YÑ7Ô7¸¿ºÀ)Ñ9LÔ9LÐMÐjÐjÐjr-   c                ó   — g | ]
}|d          ‘ŒS )r   © )r:   Úhs     r+   r=   z)Response.init_headers.<locals>.<listcomp><   s   € Ð.Ð.Ð.˜Q�A�a”DÐ.Ð.Ð.r-   s   content-lengths   content-typer'   r   )éÌ   i0  r8   ztext/zcharset=z
; charset=)ÚitemsÚgetattrr   ÚstrÚlenÚappendr3   r   Ú
startswithr9   r4   Úraw_headers)	r*   r   rH   Úpopulate_content_lengthÚpopulate_content_typeÚkeysr'   Úcontent_lengthÚcontent_types	            r+   r(   zResponse.init_headers5   s\  € Øˆ?Ø57ˆKØ&*Ð#Ø$(Ð!Ð!àjÐjÐZa×ZgÒZgÑZiÔZiÐjÑjÔjˆKØ.Ð. +Ð.Ñ.Ô.ˆDØ&7¸tÐ&CÐ#Ø$3¸4Ð$?Ð!å�t˜V TÑ*Ô*ˆàÐØ'ð àÔ%¨Ò+Ð+¨tÔ/?À:Ð/MÐ/Må ¥ T¡¤™^œ^ˆNØ×ÒÐ 1°>×3HÒ3HÈÑ3SÔ3SÐTÑUÔUÐUà”ˆØÐ#Ð(=Ð#Ø×&Ò& wÑ/Ô/ð <°JÀl×FXÒFXÑFZÔFZÐ4ZÐ4ZØ ¨t¬|Ñ ;Ñ;�Ø×Ò °×1DÒ1DÀYÑ1OÔ1OÐPÑQÔQÐQà&ˆÔÐÐr-   r   c                ód   — t          | d¦  «        st          | j        ¬¦  «        | _        | j        S )NÚ_headers)Úraw)Úhasattrr   rH   rO   )r*   s    r+   r   zResponse.headersQ   s2   € å�t˜ZÑ(Ô(ð 	AÝ*¨tÔ/?Ð@Ñ@Ô@ˆDŒMØŒ}Ðr-   Ú ú/FÚlaxÚkeyrD   ÚvalueÚmax_ageú
int | NoneÚexpiresúdatetime | str | int | NoneÚpathÚdomainÚsecureÚboolÚhttponlyÚsamesiteú.typing.Literal['lax', 'strict', 'none'] | Nonec
                óP  — t           j                             ¦   «         }
||
|<   |�||
|         d<   |�;t          |t          ¦  «        rt          |d¬¦  «        |
|         d<   n||
|         d<   |�||
|         d<   |�||
|         d<   |rd|
|         d<   |rd|
|         d<   |	�+|	                     ¦   «         d	v s
J d
¦   «         ‚|	|
|         d<   |
                     d¬¦  «                             ¦   «         }| j	         
                    d|                     d¦  «        f¦  «         d S )Nzmax-ageT©ÚusegmtrY   r[   r\   r]   r_   )ÚstrictrT   Únonez1samesite must be either 'strict', 'lax' or 'none'r`   rR   )Úheaders
   set-cookier8   )ÚhttpÚcookiesÚSimpleCookier0   r   r   r9   ÚoutputÚstriprH   rF   r3   )r*   rU   rV   rW   rY   r[   r\   r]   r_   r`   ÚcookieÚ
cookie_vals               r+   Ú
set_cookiezResponse.set_cookieW   sg  € õ 04¬|×/HÒ/HÑ/JÔ/JˆØˆˆs‰ØÐØ%,ˆF�3ŒK˜	Ñ"ØÐÝ˜'¥8Ñ,Ô,ð 1Ý)8¸ÈÐ)NÑ)NÔ)N��s”˜IÑ&Ð&à)0��s”˜IÑ&ØÐØ"&ˆF�3ŒK˜ÑØÐØ$*ˆF�3ŒK˜Ñ!Øð 	)Ø$(ˆF�3ŒK˜Ñ!Øð 	+Ø&*ˆF�3ŒK˜
Ñ#ØÐØ—>’>Ñ#Ô#ð (ð ð ð ð Cñ	ô ð ð
 '/ˆF�3ŒK˜
Ñ#Ø—]’]¨"�]Ñ-Ô-×3Ò3Ñ5Ô5ˆ
ØÔ×Ò °
×0AÒ0AÀ)Ñ0LÔ0LÐ MÑNÔNÐNÐNÐNr-   c           
     ó@   — |                       |dd|||||¬¦  «         d S )Nr   )rW   rY   r[   r\   r]   r_   r`   )ro   )r*   rU   r[   r\   r]   r_   r`   s          r+   Údelete_cookiezResponse.delete_cookie~   sA   € ð 	�ŠØØØØØØØØð 	ñ 		
ô 		
ð 		
ð 		
ð 		
r-   Úscoper   Úreceiver   Úsendr   c              ƒ  óì   K  — |d         dk    rdnd} ||dz   | j         | j        dœ¦  «        ƒ d {V —†  ||dz   | j        dœ¦  «        ƒ d {V —† | j        �|                      ¦   «         ƒ d {V —† d S d S )	NÚtypeÚ	websocketz
websocket.rR   úhttp.response.start©rv   Ústatusr   úhttp.response.body)rv   r'   )r   rH   r'   r    )r*   rr   rs   rt   Úprefixs        r+   Ú__call__zResponse.__call__’   sÚ   è è € Ø!& v¤°+Ò!=Ð!=��À2ˆØˆdàÐ!6Ñ6ØÔ*ØÔ+ðð ñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð ˆd˜FÐ%9Ñ9À4Ä9ÐMÐMÑNÔNÐNÐNÐNÐNÐNÐNÐNàŒ?Ð&Ø—/’/Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ð 'Ð&r-   )Nr   NNN©r   r   r   r   r   r   r   r   r    r!   r"   r#   )r   r   r"   r.   r%   )r   r   r"   r#   )r"   r   )rR   NNrS   NFFrT   )rU   rD   rV   rD   rW   rX   rY   rZ   r[   r   r\   r   r]   r^   r_   r^   r`   ra   r"   r#   )rS   NFFrT   )rU   rD   r[   rD   r\   r   r]   r^   r_   r^   r`   ra   r"   r#   ©rr   r   rs   r   rt   r   r"   r#   )Ú__name__Ú
__module__Ú__qualname__r   r4   r,   r&   r(   Úpropertyr   ro   rq   r}   r?   r-   r+   r   r      s  € € € € € Ø€JØ€Gð #ØØ37Ø!%Ø,0ð#ð #ð #ð #ð #ð,ð ,ð ,ð ,ð'ð 'ð 'ð 'ð 'ð8 ðð ð ñ „Xðð Ø"Ø/3ØØ!ØØØCHð%Oð %Oð %Oð %Oð %OðT Ø!ØØØCHð
ð 
ð 
ð 
ð 
ð($ð $ð $ð $ð $ð $r-   r   c                  ó   — e Zd ZdZdS )ÚHTMLResponsez	text/htmlN©r€   r�   r‚   r   r?   r-   r+   r…   r…   ¡   s   € € € € € Ø€J€J€Jr-   r…   c                  ó   — e Zd ZdZdS )ÚPlainTextResponseú
text/plainNr†   r?   r-   r+   rˆ   rˆ   ¥   s   € € € € € Ø€J€J€Jr-   rˆ   c                  ó6   ‡ — e Zd ZdZ	 	 	 	 ddˆ fd„Zdd„Zˆ xZS )ÚJSONResponsezapplication/jsonr   Nr   r   r   r   r   r   r   r   r    r!   r"   r#   c                óR   •— t          ¦   «                              |||||¦  «         d S r%   )Úsuperr,   )r*   r   r   r   r   r    Ú	__class__s         €r+   r,   zJSONResponse.__init__¬   s+   ø€ õ 	‰Œ×Ò˜ +¨w¸
ÀJÑOÔOÐOÐOÐOr-   r1   c                óZ   — t          j        |ddd d¬¦  «                             d¦  «        S )NF)ú,ú:)Úensure_asciiÚ	allow_nanÚindentÚ
separatorsr   )ÚjsonÚdumpsr3   r5   s     r+   r&   zJSONResponse.render¶   s7   € ÝŒzØØØØØ!ð
ñ 
ô 
÷ Š&�‰/Œ/ð	r-   ©r   NNNr~   )r   r   r"   r1   )r€   r�   r‚   r   r,   r&   Ú__classcell__©rŽ   s   @r+   r‹   r‹   ©   sp   ø€ € € € € Ø#€Jð
 Ø37Ø!%Ø,0ðPð Pð Pð Pð Pð Pð Pðð ð ð ð ð ð ð r-   r‹   c                  ó(   ‡ — e Zd Z	 	 	 ddˆ fd„Zˆ xZS )ÚRedirectResponseé3  NÚurlú	str | URLr   r   r   r   r    r!   r"   r#   c                óž   •— t          ¦   «                              d|||¬¦  «         t          t          |¦  «        d¬¦  «        | j        d<   d S )Nr-   )r   r   r   r    z:/%#?=@[]!$&'()*+,;)ÚsafeÚlocation)r�   r,   r
   rD   r   )r*   rž   r   r   r    rŽ   s        €r+   r,   zRedirectResponse.__init__Á   sM   ø€ õ 	‰Œ×Ò °+ÀwÐ[eÐÑfÔfÐfÝ#(­¨S©¬Ð8MÐ#NÑ#NÔ#NˆŒ�ZÑ Ð Ð r-   )r�   NN)
rž   rŸ   r   r   r   r   r    r!   r"   r#   )r€   r�   r‚   r,   r™   rš   s   @r+   rœ   rœ   À   sX   ø€ € € € € ð Ø37Ø,0ðOð Oð Oð Oð Oð Oð Oð Oð Oð Oð Or-   rœ   c                  óD   — e Zd ZU ded<   	 	 	 	 ddd„Zdd„Zdd„Zdd„ZdS ) ÚStreamingResponseÚAsyncContentStreamÚbody_iteratorr   Nr   ÚContentStreamr   r   r   r   r   r   r    r!   r"   r#   c                óØ   — t          |t          j        ¦  «        r|| _        nt	          |¦  «        | _        || _        |€| j        n|| _        || _        |                      |¦  «         d S r%   )	r0   ÚtypingÚAsyncIterabler¦   r   r   r   r    r(   r)   s         r+   r,   zStreamingResponse.__init__Õ   sp   € õ �g�vÔ3Ñ4Ô4ð 	@Ø!(ˆDÔÐå!6°wÑ!?Ô!?ˆDÔØ&ˆÔØ-7Ð-?˜$œ/˜/ÀZˆŒØ$ˆŒØ×Ò˜'Ñ"Ô"Ð"Ð"Ð"r-   rs   r   c              ƒ  óF   K  — 	  |¦   «         ƒ d {V —†}|d         dk    rd S Œ)NTrv   zhttp.disconnectr?   )r*   rs   Úmessages      r+   Úlisten_for_disconnectz'StreamingResponse.listen_for_disconnectæ   s<   è è € ð	Ø#˜G™IœI�o�o�o�o�o�oˆGØ�vŒÐ"3Ò3Ð3Ø�ð	r-   rt   r   c              ƒ  ó(  K  —  |d| j         | j        dœ¦  «        ƒ d {V —† | j        2 3 d {V —†}t          |t          t
          f¦  «        s|                     | j        ¦  «        } |d|ddœ¦  «        ƒ d {V —† ŒS6  |ddddœ¦  «        ƒ d {V —† d S )Nrx   ry   r{   T©rv   r'   Ú	more_bodyr-   F)r   rH   r¦   r0   r1   r2   r3   r4   )r*   rt   Úchunks      r+   Ústream_responsez!StreamingResponse.stream_responseì   s  è è € Øˆdà-ØÔ*ØÔ+ðð ñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð  Ô-ð 	Yð 	Yð 	Yð 	Yð 	Yð 	Yð 	Y�%Ý˜e¥e­ZÐ%8Ñ9Ô9ð 3ØŸš T¤\Ñ2Ô2�Ø�$Ð 4¸eÐRVÐWÐWÑXÔXÐXÐXÐXÐXÐXÐXÐXÐXð .ð
 ˆdÐ0¸#ÈEÐRÐRÑSÔSÐSÐSÐSÐSÐSÐSÐSÐSÐSs   ©A<rr   r   c              ƒ  ór  ‡K  — t          j        ¦   «         4 ƒd {V —†Šdˆfd„}‰                     |t          | j        |¦  «        ¦  «          |t          | j        |¦  «        ¦  «        ƒ d {V —† d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   | j        �|                      ¦   «         ƒ d {V —† d S d S )NÚfuncú+typing.Callable[[], typing.Awaitable[None]]r"   r#   c              “  ó^   •K  —  | ¦   «         ƒ d {V —† ‰j                              ¦   «          d S r%   )Úcancel_scopeÚcancel)r´   Ú
task_groups    €r+   Úwrapz(StreamingResponse.__call__.<locals>.wrapþ   s9   øè è € Ø�d‘f”f�������ØÔ'×.Ò.Ñ0Ô0Ð0Ð0Ð0r-   )r´   rµ   r"   r#   )ÚanyioÚcreate_task_groupÚ
start_soonr   r²   r­   r    )r*   rr   rs   rt   rº   r¹   s        @r+   r}   zStreamingResponse.__call__û   s�  øè è € ÝÔ*Ñ,Ô,ð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	E°
ð1ð 1ð 1ð 1ð 1ð 1ð ×!Ò! $­°Ô0DÀdÑ(KÔ(KÑLÔLÐLØ�$•w˜tÔ9¸7ÑCÔCÑDÔDÐDÐDÐDÐDÐDÐDÐDð	Eð 	Eð 	Eñ 	Eô 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eøøøð 	Eð 	Eð 	Eð 	Eð Œ?Ð&Ø—/’/Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ð 'Ð&s   �ABÂ
BÂBr˜   )r   r§   r   r   r   r   r   r   r    r!   r"   r#   )rs   r   r"   r#   )rt   r   r"   r#   r   )r€   r�   r‚   Ú__annotations__r,   r­   r²   r}   r?   r-   r+   r¤   r¤   Ò   s‰   € € € € € € Ø%Ð%Ð%Ñ%ð
 Ø37Ø!%Ø,0ð#ð #ð #ð #ð #ð"ð ð ð ðTð Tð Tð Tð$ð $ð $ð $ð $ð $r-   r¤   c                  ó   — e Zd Zdd	d„ZdS )
ÚMalformedRangeHeaderúMalformed range header.r   rD   r"   r#   c                ó   — || _         d S r%   )r   r5   s     r+   r,   zMalformedRangeHeader.__init__
  s   € ØˆŒˆˆr-   N)rÁ   )r   rD   r"   r#   ©r€   r�   r‚   r,   r?   r-   r+   rÀ   rÀ   	  s-   € € € € € ðð ð ð ð ð ð r-   rÀ   c                  ó   — e Zd Zdd„ZdS )ÚRangeNotSatisfiableÚmax_sizer   r"   r#   c                ó   — || _         d S r%   )rÆ   )r*   rÆ   s     r+   r,   zRangeNotSatisfiable.__init__  s   € Ø ˆŒˆˆr-   N)rÆ   r   r"   r#   rÃ   r?   r-   r+   rÅ   rÅ     s(   € € € € € ð!ð !ð !ð !ð !ð !r-   rÅ   z(\d*)-(\d*)c                  óŒ   — e Zd ZdZ	 	 	 	 	 	 	 	 d5d6d„Zd7d„Zd8d „Zd9d#„Zd:d'„Zd;d*„Z	e
d<d,„¦   «         Zed=d.„¦   «         Zd>d4„ZdS )?ÚFileResponsei   r   NÚ
attachmentr[   ústr | os.PathLike[str]r   r   r   r   r   r   r    r!   ÚfilenameÚstat_resultúos.stat_result | NoneÚmethodÚcontent_disposition_typerD   r"   r#   c
                ó  — || _         || _        || _        |�t          j        dt
          ¦  «         |€t          |p|¦  «        d         pd}|| _        || _        |  	                    |¦  «         | j
                             dd¦  «         | j        �Ot          | j        ¦  «        }
|
| j        k    r|	› d|
› �}n|	› d| j        › d�}| j
                             d	|¦  «         || _        |�|                      |¦  «         d S d S )
Nz;The 'method' parameter is not used, and it will be removed.r   r‰   zaccept-rangesr1   z; filename*=utf-8''z; filename="ú"zcontent-disposition)r[   r   rÌ   ÚwarningsÚwarnÚDeprecationWarningr   r   r    r(   r   Ú
setdefaultr
   rÍ   Úset_stat_headers)r*   r[   r   r   r   r    rÌ   rÍ   rÏ   rÐ   Úcontent_disposition_filenameÚcontent_dispositions               r+   r,   zFileResponse.__init__  s8  € ð ˆŒ	Ø&ˆÔØ ˆŒØÐÝŒMØMÝ"ñô ð ð ÐÝ# HÐ$4°Ñ5Ô5°aÔ8ÐH¸LˆJØ$ˆŒØ$ˆŒØ×Ò˜'Ñ"Ô"Ð"ØŒ×Ò °Ñ9Ô9Ð9ØŒ=Ð$Ý+0°´Ñ+?Ô+?Ð(Ø+¨t¬}Ò<Ð<Ø)AÐ&tÐ&tÐVrÐ&tÐ&tÐ#Ð#à)AÐ&_Ð&_ÈtÌ}Ð&_Ð&_Ð&_Ð#ØŒL×#Ò#Ð$9Ð;NÑOÔOÐOØ&ˆÔØÐ"Ø×!Ò! +Ñ.Ô.Ð.Ð.Ð.ð #Ð"r-   úos.stat_resultc                ó¢  — t          |j        ¦  «        }t          |j        d¬¦  «        }t          |j        ¦  «        dz   t          |j        ¦  «        z   }dt	          |                     ¦   «         d¬¦  «        › d�}| j                             d|¦  «         | j                             d|¦  «         | j                             d	|¦  «         d S )
NTrc   ú-rÒ   F©Úusedforsecurityúcontent-lengthzlast-modifiedÚetag)rD   Úst_sizer   Úst_mtimer   r3   r   rÖ   )r*   rÍ   rL   Úlast_modifiedÚ	etag_baserà   s         r+   r×   zFileResponse.set_stat_headers>  sÄ   € Ý˜[Ô0Ñ1Ô1ˆÝ" ;Ô#7ÀÐEÑEÔEˆÝ˜Ô,Ñ-Ô-°Ñ3µc¸+Ô:MÑ6NÔ6NÑNˆ	ØN•= ×!1Ò!1Ñ!3Ô!3ÀUÐKÑKÔKÐNÐNÐNˆàŒ×ÒÐ 0°.ÑAÔAÐAØŒ×Ò °Ñ?Ô?Ð?ØŒ×Ò ¨Ñ-Ô-Ð-Ð-Ð-r-   rr   r   rs   r   rt   r   c              ƒ  óØ  K  — |d                               ¦   «         dk    }| j        €¥	 t          j                             t
          j        | j        ¦  «        ƒ d {V —†}|                      |¦  «         |j	        }t          j
        |¦  «        st          d| j        › d�¦  «        ‚n-# t          $ r t          d| j        › d�¦  «        ‚w xY w| j        }t          |¬¦  «        }|                     d¦  «        }|                     d¦  «        }	|�|	�4|                      |	|¦  «        s|                      ||¦  «        ƒ d {V —† �n	 |                      ||j        ¦  «        }
n~# t&          $ r1} t)          |j        d	¬
¦  «        |||¦  «        ƒ d {V —†cY d }~S d }~wt,          $ r8}t)          ddd|j        › �i¬¦  «        } ||||¦  «        ƒ d {V —†cY d }~S d }~ww xY wt1          |
¦  «        dk    r0|
d         \  }}|                      ||||j        |¦  «        ƒ d {V —† n#|                      ||
|j        |¦  «        ƒ d {V —† | j        �|                      ¦   «         ƒ d {V —† d S d S )NrÏ   ÚHEADzFile at path z is not a file.z does not exist.)rr   Úrangezif-rangei�  )r   i   zContent-Rangez*/)r   r   é   r   )ÚupperrÍ   r»   Ú	to_threadÚrun_syncÚosÚstatr[   r×   Úst_modeÚS_ISREGÚRuntimeErrorÚFileNotFoundErrorr   ÚgetÚ_should_use_rangeÚ_handle_simpleÚ_parse_range_headerrá   rÀ   rˆ   r   rÅ   rÆ   rE   Ú_handle_single_rangeÚ_handle_multiple_rangesr    )r*   rr   rs   rt   Úsend_header_onlyrÍ   Úmoder   Ú
http_rangeÚhttp_if_rangeÚrangesÚexcÚresponseÚstartÚends                  r+   r}   zFileResponse.__call__H  s+  è è € Ø!& x¤×!6Ò!6Ñ!8Ô!8¸FÒ!BÐØÔÐ#ðSÝ$)¤O×$<Ò$<½R¼WÀdÄiÑ$PÔ$PÐPÐPÐPÐPÐPÐP�Ø×%Ò% kÑ2Ô2Ð2ð #Ô*�Ý”| DÑ)Ô)ð SÝ&Ð'Q°t´yÐ'QÐ'QÐ'QÑRÔRÐRðSøõ	 %ð Pð Pð PÝ"Ð#N°4´9Ð#NÐ#NÐ#NÑOÔOÐOðPøøøð Ô*ˆKå Ð&Ñ&Ô&ˆØ—[’[ Ñ)Ô)ˆ
ØŸš JÑ/Ô/ˆàÐ -Ð";ÀD×DZÒDZÐ[hÐjuÑDvÔDvÐ";Ø×%Ò% dÐ,<Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ñ=ð<Ø×1Ò1°*¸kÔ>QÑRÔR��øÝ'ð cð cð cØLÕ.¨s¬{ÈÐLÑLÔLÈUÐT[Ð]aÑbÔbÐbÐbÐbÐbÐbÐbÐbÐbÐbÐbÐbÐbøøøøÝ&ð <ð <ð <Ý,¸ÀÐXkÐ]`Ô]iÐXkÐXkÐFlÐmÑmÔm�Ø%˜X e¨W°dÑ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;øøøøð<øøøõ �6‰{Œ{˜aÒÐØ# AœY‘
��sØ×/Ò/°°e¸SÀ+ÔBUÐWgÑhÔhÐhÐhÐhÐhÐhÐhÐhÐhà×2Ò2°4¸ÀÔATÐVfÑgÔgÐgÐgÐgÐgÐgÐgÐgàŒ?Ð&Ø—/’/Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ð 'Ð&s<   ©A
B' Â'#C
ÅE# Å#
GÅ-&FÆGÆGÆ&-GÇGÇGrø   r^   c              ƒ  óº  K  —  |d| j         | j        dœ¦  «        ƒ d {V —† |r |ddddœ¦  «        ƒ d {V —† d S t          j        | j        d¬¦  «        ƒ d {V —†4 ƒd {V —†}d	}|rO|                     | j        ¦  «        ƒ d {V —†}t          |¦  «        | j        k    } |d||dœ¦  «        ƒ d {V —† |°O	 d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S )
Nrx   ry   r{   r-   Fr¯   Úrb©rù   T)r   rH   r»   Ú	open_filer[   ÚreadÚ
chunk_sizerE   )r*   rt   rø   Úfiler°   r±   s         r+   rô   zFileResponse._handle_simpleo  s  è è € ØˆdÐ1¸TÔ=MÐZ^ÔZjÐkÐkÑlÔlÐlÐlÐlÐlÐlÐlÐlØð 	fØ�$Ð 4¸cÐPUÐVÐVÑWÔWÐWÐWÐWÐWÐWÐWÐWÐWÐWå"œ_¨T¬Y¸TÐBÑBÔBÐBÐBÐBÐBÐBÐBð fð fð fð fð fð fð fÀdØ �	Øð fØ"&§)¢)¨D¬OÑ"<Ô"<Ð<Ð<Ð<Ð<Ð<Ð<�EÝ # E¡
¤
¨d¬oÒ =�IØ˜$Ð(<ÀeÐZcÐdÐdÑeÔeÐeÐeÐeÐeÐeÐeÐeð  ð fð fðfð fð fñ fô fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð føøøð fð fð fð fð fð fs   Á"AC
Ã

CÃCrÿ   r   Ú	file_sizec              ƒ  ó˜  K  — d|› d|dz
  › d|› �| j         d<   t          ||z
  ¦  «        | j         d<    |dd| j        d	œ¦  «        ƒ d {V —† |r |d
dddœ¦  «        ƒ d {V —† d S t          j        | j        d¬¦  «        ƒ d {V —†4 ƒd {V —†}|                     |¦  «        ƒ d {V —† d}|rx|                     t          | j	        ||z
  ¦  «        ¦  «        ƒ d {V —†}|t          |¦  «        z  }t          |¦  «        | j	        k    o||k     } |d
||dœ¦  «        ƒ d {V —† |°x	 d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S )Nzbytes rÜ   rè   rS   úcontent-rangerß   rx   éÎ   ry   r{   r-   Fr¯   r  r  T)r   rD   rH   r»   r  r[   Úseekr  Úminr  rE   )	r*   rt   rÿ   r   r  rø   r  r°   r±   s	            r+   rö   z!FileResponse._handle_single_range{  s�  è è € ð )O°Ð(NÐ(N¸¸q¹Ð(NÐ(NÀ9Ð(NÐ(NˆŒ�_Ñ%Ý),¨S°5©[Ñ)9Ô)9ˆŒÐ%Ñ&ØˆdÐ1¸SÈTÔM]Ð^Ð^Ñ_Ô_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Øð 
	fØ�$Ð 4¸cÐPUÐVÐVÑWÔWÐWÐWÐWÐWÐWÐWÐWÐWÐWå"œ_¨T¬Y¸TÐBÑBÔBÐBÐBÐBÐBÐBÐBð fð fð fð fð fð fð fÀdØ—i’i Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø �	Øð fØ"&§)¢)­C°´ÀÀuÁÑ,MÔ,MÑ"NÔ"NÐNÐNÐNÐNÐNÐN�EØ�S ™ZœZÑ'�EÝ # E¡
¤
¨d¬oÒ =Ð MÀ%È#Â+�IØ˜$Ð(<ÀeÐZcÐdÐdÑeÔeÐeÐeÐeÐeÐeÐeÐeð	  ð fð fðfð fð fñ fô fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð føøøð fð fð fð fð fð fs   ÂBD9Ä9
EÅErü   úlist[tuple[int, int]]c           	   ƒ  óˆ  K  — t          d¦  «        }|                      |||| j        d         ¦  «        \  }}d|› �| j        d<   t          |¦  «        | j        d<    |dd| j        dœ¦  «        ƒ d {V —† |r |d	d
ddœ¦  «        ƒ d {V —† d S t          j        | j        d¬¦  «        ƒ d {V —†4 ƒd {V —†}|D ]¸\  }	}
 |d	 ||	|
¦  «        ddœ¦  «        ƒ d {V —† |                     |	¦  «        ƒ d {V —† |	|
k     r^| 	                    t          | j        |
|	z
  ¦  «        ¦  «        ƒ d {V —†}|	t          |¦  «        z  }	 |d	|ddœ¦  «        ƒ d {V —† |	|
k     °^ |d	dddœ¦  «        ƒ d {V —† Œ¹ |d	d|› d�                     d¦  «        ddœ¦  «        ƒ d {V —† d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S )Né   zcontent-typezmultipart/byteranges; boundary=r
  rß   rx   r  ry   r{   r-   Fr¯   r  r  Tó   
z
--z--
r8   )r	   Úgenerate_multipartr   rD   rH   r»   r  r[   r  r  r  r  rE   r3   )r*   rt   rü   r  rø   ÚboundaryrL   Úheader_generatorr  rÿ   r   r±   s               r+   r÷   z$FileResponse._handle_multiple_ranges�  sG  è è € õ ˜R‘=”=ˆØ+/×+BÒ+BØ�H˜i¨¬°nÔ)Eñ,
ô ,
Ñ(ˆÐ(ð )UÈ(Ð(TÐ(TˆŒ�_Ñ%Ý),¨^Ñ)<Ô)<ˆŒÐ%Ñ&ØˆdÐ1¸SÈTÔM]Ð^Ð^Ñ_Ô_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Øð 	Ø�$Ð 4¸cÐPUÐVÐVÑWÔWÐWÐWÐWÐWÐWÐWÐWÐWÐWå"œ_¨T¬Y¸TÐBÑBÔBÐBÐBÐBÐBÐBÐBð ð ð ð ð ð ð ÀdØ"(ð að a‘J�E˜3Ø˜$Ð(<ÐFVÐFVÐW\Ð^aÑFbÔFbÐquÐvÐvÑwÔwÐwÐwÐwÐwÐwÐwÐwØŸ)š) EÑ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø #š+˜+Ø&*§i¢iµ°D´OÀSÈ5Á[Ñ0QÔ0QÑ&RÔ&RÐ RÐ RÐ RÐ RÐ RÐ R˜Ø¥ U¡¤Ñ+˜Ø"˜dÐ,@È%Ð^bÐ#cÐ#cÑdÔdÐdÐdÐdÐdÐdÐdÐdð   #š+˜+ð ˜$Ð(<ÀeÐZ^Ð_Ð_Ñ`Ô`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ø�dà 4Ø 5 xÐ 5Ð 5Ð 5× <Ò <¸YÑ GÔ GØ%*ðð ñô ð ð ð ð ð ð ð ðð ð ñ ô ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   Â6C(F1Æ1
F;Æ>F;rû   c                óè   — t          |j        ¦  «        dz   t          |j        ¦  «        z   }dt          |                     ¦   «         d¬¦  «        › d�}|t          |j        d¬¦  «        k    p||k    S )NrÜ   rÒ   FrÝ   Trc   )rD   râ   rá   r   r3   r   )Úclsrû   rÍ   rä   rà   s        r+   ró   zFileResponse._should_use_range°  sw   € å˜Ô,Ñ-Ô-°Ñ3µc¸+Ô:MÑ6NÔ6NÑNˆ	ØN•= ×!1Ò!1Ñ!3Ô!3ÀUÐKÑKÔKÐNÐNÐNˆØ¥
¨;Ô+?ÈÐ MÑ MÔ MÒMÐfÐQ^ÐbfÒQfÐfr-   rú   c                óz  ‡— g }	 |                       dd¦  «        \  }}n# t          $ r t          ¦   «         ‚w xY w|                     ¦   «                              ¦   «         }|dk    rt          d¦  «        ‚ˆfd„t
                               |¦  «        D ¦   «         }t          |¦  «        dk    rt          d¦  «        ‚t          ˆfd„|D ¦   «         ¦  «        rt          ‰¦  «        ‚t          d	„ |D ¦   «         ¦  «        rt          d
¦  «        ‚t          |¦  «        dk    r|S g }|D ]‘\  }}t          t          |¦  «        ¦  «        D ]X}||         \  }	}
||
k    rŒ||	k     r|                     |||f¦  «          n<t          ||	¦  «        t          ||
¦  «        f||<    n|                     ||f¦  «         Œ’|S )Nú=rè   r1   zOnly support bytes rangec                ó  •— g | ]€}|d k    ¯|d         rt          |d         ¦  «        n‰t          |d         ¦  «        z
  |d         r9|d         r1t          |d         ¦  «        ‰k     rt          |d         ¦  «        dz   n‰f‘Œ�S ))rR   rR   r   rè   )r   )r:   Ú_r  s     €r+   r=   z4FileResponse._parse_range_header.<locals>.<listcomp>Ã  s”   ø€ ð 
ð 
ð 
ð
 Ø�HŠ}ˆ}ð	 ˜qœTÐ<•�A�a”D‘	”	�	 yµ3°q¸´t±9´9Ñ'<Ø!" 1¤ÐW¨!¨A¬$ÐWµ3°q¸´t±9´9¸yÒ3HÐ3H•�A�a”D‘	”	˜A‘�Èiðð
 ˆ}ˆ}r-   r   z%Range header: range must be requestedc              3  ó@   •K  — | ]\  }}d |cxk    o‰k     nc  V — ŒdS )r   Nr?   )r:   rÿ   r  r  s      €r+   ú	<genexpr>z3FileResponse._parse_range_header.<locals>.<genexpr>Ï  sF   øè è € ÐCÐC±°°q�A˜Ð*Ð*Ò*Ð* Ò*Ð*Ð*Ð*Ð+ÐCÐCÐCÐCÐCÐCr-   c              3  ó(   K  — | ]\  }}||k    V — Œd S r%   r?   )r:   rÿ   r   s      r+   r  z3FileResponse._parse_range_header.<locals>.<genexpr>Ò  s*   è è € Ð4Ð4™z˜u cˆu�sŠ{Ð4Ð4Ð4Ð4Ð4Ð4r-   z)Range header: start must be less than end)ÚsplitÚ
ValueErrorrÀ   rl   r9   Ú_RANGE_PATTERNÚfindallrE   ÚanyrÅ   rç   Úinsertr  ÚmaxrF   )rú   r  rü   ÚunitsÚrange_Úresultrÿ   r   ÚpÚp_startÚp_ends    `         r+   rõ   z FileResponse._parse_range_header¶  s  ø€ à(*ˆð	)Ø&×,Ò,¨S°!Ñ4Ô4‰MˆE�6�6øÝð 	)ð 	)ð 	)Ý&Ñ(Ô(Ð(ð	)øøøð —’‘”×#Ò#Ñ%Ô%ˆà�GÒÐÝ&Ð'AÑBÔBÐBð
ð 
ð 
ð 
õ
 $×+Ò+¨FÑ3Ô3ð
ñ 
ô 
ˆõ ˆv‰;Œ;˜!ÒÐÝ&Ð'NÑOÔOÐOåÐCÐCÐCÐC¸FÐCÑCÔCÑCÔCð 	1Ý% iÑ0Ô0Ð0åÐ4Ð4¨VÐ4Ñ4Ô4Ñ4Ô4ð 	TÝ&Ð'RÑSÔSÐSåˆv‰;Œ;˜!ÒÐØˆMð )+ˆØ ð 	,ð 	,‰JˆE�3Ý�3˜v™;œ;Ñ'Ô'ð ,ð ,�Ø!'¨¤‘�˜Ø˜5’=�=ØØ˜7’]�]Ø—M’M ! e¨S \Ñ2Ô2Ð2Ø�Eå!$ U¨GÑ!4Ô!4µc¸#¸u±o´oÐ F�F˜1‘IØ�Eà—’˜u c˜lÑ+Ô+Ð+øàˆs   … Ÿ8ú typing.Sequence[tuple[int, int]]r  rÆ   rM   ú.tuple[int, typing.Callable[[int, int], bytes]]c                óà   ‡‡‡‡— t          ‰¦  «        }d|z   t          ‰¦  «        z   t          t          ‰¦  «        ¦  «        z   Št          ˆfd„|D ¦   «         ¦  «        d|z   z   }|ˆˆˆfd„fS )a½  
        Multipart response headers generator.

        ```
        --{boundary}\n
        Content-Type: {content_type}\n
        Content-Range: bytes {start}-{end-1}/{max_size}\n
        \n
        ..........content...........\n
        --{boundary}\n
        Content-Type: {content_type}\n
        Content-Range: bytes {start}-{end-1}/{max_size}\n
        \n
        ..........content...........\n
        --{boundary}--\n
        ```
        é,   c              3  ó¨   •K  — | ]L\  }}t          t          |¦  «        ¦  «        t          t          |d z
  ¦  «        ¦  «        z   ‰z   ||z
  z   V — ŒMdS )rè   N)rE   rD   )r:   rÿ   r   Ústatic_header_part_lens      €r+   r  z2FileResponse.generate_multipart.<locals>.<genexpr>  sr   øè è € ð 
ð 
ñ ��sõ •�U‘”‰_Œ_�s¥3 s¨Q¡w¡<¤<Ñ0Ô0Ñ0Ð3IÑIØ�U‰{ñð
ð 
ð 
ð 
ð 
ð 
r-   é   c                óT   •— d‰› d‰› d| › d|dz
  › d‰› d�                      d¦  «        S )	Nz--z
Content-Type: z
Content-Range: bytes rÜ   rè   rS   z

r8   )r3   )rÿ   r   r  rM   rÆ   s     €€€r+   ú<lambda>z1FileResponse.generate_multipart.<locals>.<lambda>  se   ø€ ð�Xð ð Ø!-ðð à(-ðð à03°A±ðð à8@ðð ð ÷ Šf�YÑÔð r-   )rE   rD   Úsum)r*   rü   r  rÆ   rM   Úboundary_lenrL   r0  s     ```  @r+   r  zFileResponse.generate_multipartê  s²   øøøø€ õ0 ˜8‘}”}ˆØ!# lÑ!2µS¸Ñ5FÔ5FÑ!FÍÍSÐQYÉ]Ì]ÑI[ÔI[Ñ![ÐÝð 
ð 
ð 
ð 
ð %ð
ñ 
ô 
ñ 
ô 
ð
 �Ññ
ˆð ð ð  ð  ð  ð  ð  ð
ð 	
r-   )r   NNNNNNrÊ   )r[   rË   r   r   r   r   r   r   r    r!   rÌ   r   rÍ   rÎ   rÏ   r   rÐ   rD   r"   r#   )rÍ   rÚ   r"   r#   r   )rt   r   rø   r^   r"   r#   )rt   r   rÿ   r   r   r   r  r   rø   r^   r"   r#   )
rt   r   rü   r  r  r   rø   r^   r"   r#   )rû   rD   rÍ   rÚ   r"   r^   )rú   rD   r  r   r"   r  )
rü   r+  r  rD   rÆ   r   rM   rD   r"   r,  )r€   r�   r‚   r  r,   r×   r}   rô   rö   r÷   Úclassmethodró   Ústaticmethodrõ   r  r?   r-   r+   rÉ   rÉ     s  € € € € € Ø€Jð
 Ø37Ø!%Ø,0Ø#Ø-1Ø!Ø(4ð#/ð #/ð #/ð #/ð #/ðJ.ð .ð .ð .ð%$ð %$ð %$ð %$ðN
fð 
fð 
fð 
fðfð fð fð fð$!ð !ð !ð !ðF ðgð gð gñ „[ðgð
 ð1ð 1ð 1ñ „\ð1ðf)
ð )
ð )
ð )
ð )
ð )
r-   rÉ   )<Ú
__future__r   Úhttp.cookiesrh   r–   rì   Úrerí   r©   rÓ   r   Úemail.utilsr   r   Ú	functoolsr   Ú	mimetypesr   Úsecretsr	   Úurllib.parser
   r»   Úanyio.to_threadÚstarlette._compatr   Ústarlette.backgroundr   Ústarlette.concurrencyr   Ústarlette.datastructuresr   r   r   Ústarlette.typesr   r   r   r   r…   rˆ   r‹   rœ   ÚUnionrD   r1   r2   ÚContentÚIterableÚSyncContentStreamrª   r¥   r§   r¤   Ú	ExceptionrÀ   rÅ   Úcompiler   rÉ   r?   r-   r+   ú<module>rL     sF  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð à +Ð +Ð +Ð +Ð +Ð +Ø /Ð /Ð /Ð /Ð /Ð /Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0ðC$ð C$ð C$ð C$ð C$ñ C$ô C$ð C$ðLð ð ð ð �8ñ ô ð ðð ð ð ð ˜ñ ô ð ðð ð ð ð �8ñ ô ð ð.	Oð 	Oð 	Oð 	Oð 	O�xñ 	Oô 	Oð 	Oð Œ,�s˜E :Ð-Ô
.€Ø”O GÔ,Ð ØÔ)¨'Ô2Ð Ø”Ð/Ð1BÐBÔC€ð4$ð 4$ð 4$ð 4$ð 4$˜ñ 4$ô 4$ð 4$ðnð ð ð ð ˜9ñ ô ð ð
!ð !ð !ð !ð !˜)ñ !ô !ð !ð
 �”˜NÑ+Ô+€ð}
ð }
ð }
ð }
ð }
�8ñ }
ô }
ð }
ð }
ð }
r-   