Ë
    $V.jRN  ã                  óZ  — 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jV                  e,e-e.f   Z/ej`                  e/   Z1ejd                  e/   Z3ejV                  e3e1f   Z4 G d„ de&«      Z5 G d„ de6«      Z7 G d„ de6«      Z8 ejr                  d«      Z: G d„ d e&«      Z;y)!é    )Ú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	 	 	 	 	 d
	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zddd„Zedd„«       Z		 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z
	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd	„Zy)ÚResponseNúutf-8c                ó€   — || _         |�|| _        || _        | j                  |«      | _        | j                  |«       y ©N)Ústatus_codeÚ
media_typeÚ
backgroundÚrenderÚbodyÚinit_headers©ÚselfÚcontentr   Úheadersr   r   s         úUC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\starlette/responses.pyÚ__init__zResponse.__init__   s>   € ð 'ˆÔØÐ!Ø(ˆDŒOØ$ˆŒØ—K‘K Ó(ˆŒ	Ø×Ñ˜'Õ"ó    c                ón   — |€yt        |t        t        f«      r|S |j                  | j                  «      S )Nr%   )Ú
isinstanceÚbytesÚ
memoryviewÚencodeÚcharset©r    r!   s     r#   r   zResponse.render.   s1   € Øˆ?ØÜ�g¤¤zÐ2Ô3ØˆNØ�~‰~˜dŸl™lÓ+Ð+r%   c                ó¤  — |€g }d}d}nj|j                  «       D ��cg c]5  \  }}|j                  «       j                  d«      |j                  d«      f‘Œ7 }}}|D �cg c]  }|d   ‘Œ	 }}d|v}d|v}t        | dd «      }	|	�U|rS| j                  dk  sD| j                  dv s6t        t        |	«      «      }
|j                  d|
j                  d«      f«       | j                  }|�Y|rW|j                  d	«      r$d
|j                  «       vr|d| j                  z   z  }|j                  d|j                  d«      f«       || _        y c c}}w c c}w )NTúlatin-1r   s   content-lengths   content-typer   éÈ   )éÌ   i0  ztext/zcharset=z
; charset=)ÚitemsÚlowerr*   Úgetattrr   ÚstrÚlenÚappendr   Ú
startswithr+   Úraw_headers)r    r"   r8   Úpopulate_content_lengthÚpopulate_content_typeÚkÚvÚhÚkeysr   Úcontent_lengthÚcontent_types               r#   r   zResponse.init_headers5   s[  € Øˆ?Ø57ˆKØ&*Ð#Ø$(Ñ!àZa×ZgÑZgÔZiÔjÑZiÑRVÐRSÐUV˜AŸG™G›I×,Ñ,¨YÓ7¸¿¹À)Ó9LÒMÐZiˆKÑjÙ"-Ó.¡+˜Q�A�a“D +ˆDÐ.Ø&7¸tÐ&CÐ#Ø$3¸4Ð$?Ð!ä�t˜V TÓ*ˆàÐÙ'Ø×%Ñ%¨Ò+¨t×/?Ñ/?À:Ñ/Mä ¤ T£›^ˆNØ×ÑÐ 1°>×3HÑ3HÈÓ3SÐTÔUà—‘ˆØÐ#Ñ(=Ø×&Ñ& wÔ/°JÀl×FXÑFXÓFZÑ4ZØ ¨t¯|©|Ñ ;Ñ;�Ø×Ñ °×1DÑ1DÀYÓ1OÐPÔQà&ˆÕùó) kùÚ.s   �:EÁEc                óh   — t        | d«      st        | j                  ¬«      | _        | j                  S )NÚ_headers)Úraw)Úhasattrr   r8   rB   )r    s    r#   r"   zResponse.headersQ   s(   € ä�t˜ZÔ(Ü*¨t×/?Ñ/?Ô@ˆDŒMØ�}‰}Ðr%   c
                óè  — t         j                  j                  «       }
||
|<   |�||
|   d<   |�,t        |t        «      rt        |d¬«      |
|   d<   n||
|   d<   |�||
|   d<   |�||
|   d<   |rd|
|   d<   |rd|
|   d<   |	�!|	j                  «       d	v sJ d
«       ‚|	|
|   d<   |
j                  d¬«      j                  «       }| j                  j                  d|j                  d«      f«       y )Nzmax-ageT©ÚusegmtÚexpiresÚpathÚdomainÚsecureÚhttponly)ÚstrictÚlaxÚnonez1samesite must be either 'strict', 'lax' or 'none'ÚsamesiteÚ )Úheaders
   set-cookier.   )ÚhttpÚcookiesÚSimpleCookier'   r   r   r2   ÚoutputÚstripr8   r6   r*   )r    ÚkeyÚvalueÚmax_agerH   rI   rJ   rK   rL   rP   ÚcookieÚ
cookie_vals               r#   Ú
set_cookiezResponse.set_cookieW   s.  € ô 04¯|©|×/HÑ/HÓ/JˆØˆˆs‰ØÐØ%,ˆF�3‰K˜	Ñ"ØÐÜ˜'¤8Ô,Ü)8¸ÈÔ)N��s‘˜IÒ&à)0��s‘˜IÑ&ØÐØ"&ˆF�3‰K˜ÑØÐØ$*ˆF�3‰K˜Ñ!ÙØ$(ˆF�3‰K˜Ñ!ÙØ&*ˆF�3‰K˜
Ñ#ØÐØ—>‘>Ó#ð (ñ ð Cð Có	Cð ð
 '/ˆF�3‰K˜
Ñ#Ø—]‘]¨"�]Ó-×3Ñ3Ó5ˆ
Ø×Ñ×Ñ °
×0AÑ0AÀ)Ó0LÐ MÕNr%   c           
     ó6   — | j                  |dd|||||¬«       y )Nr   )rZ   rH   rI   rJ   rK   rL   rP   )r]   )r    rX   rI   rJ   rK   rL   rP   s          r#   Údelete_cookiezResponse.delete_cookie~   s-   € ð 	�‰ØØØØØØØØð 	õ 		
r%   c              ƒ  ó  K  — |d   dk(  rdnd} ||dz   | j                   | j                  dœ«      ƒ d {  –—†   ||dz   | j                  dœ«      ƒ d {  –—†  | j                  �| j                  «       ƒ d {  –—†  y y 7 ŒJ7 Œ,7 Œ
­w)	NÚtypeÚ	websocketz
websocket.rQ   úhttp.response.start©ra   Ústatusr"   úhttp.response.body)ra   r   )r   r8   r   r   )r    ÚscopeÚreceiveÚsendÚprefixs        r#   Ú__call__zResponse.__call__’   sš   è ø€ Ø!& v¡°+Ò!=‘À2ˆÙàÐ!6Ñ6Ø×*Ñ*Ø×+Ñ+ñó
÷ 	
ð 	
ñ ˜FÐ%9Ñ9À4Ç9Á9ÑMÓN×NÐNà�?‰?Ð&Ø—/‘/Ó#×#Ñ#ð 'ð	
øð 	Oøð $ús3   ‚3BµB ¶BÁBÁ#BÁ9BÁ:BÂBÂB)Nr/   NNN©r!   ú
typing.Anyr   Úintr"   útyping.Mapping[str, str] | Noner   ú
str | Noner   úBackgroundTask | NoneÚreturnÚNone)r!   rm   rr   zbytes | memoryviewr   )r"   ro   rr   rs   )rr   r   )rQ   NNÚ/NFFrN   )rX   r4   rY   r4   rZ   z
int | NonerH   zdatetime | str | int | NonerI   rp   rJ   rp   rK   ÚboolrL   ru   rP   ú.typing.Literal['lax', 'strict', 'none'] | Nonerr   rs   )rt   NFFrN   )rX   r4   rI   r4   rJ   rp   rK   ru   rL   ru   rP   rv   rr   rs   ©rg   r   rh   r   ri   r   rr   rs   )Ú__name__Ú
__module__Ú__qualname__r   r+   r$   r   r   Úpropertyr"   r]   r_   rk   © r%   r#   r   r      sh  „ Ø€JØ€Gð #ØØ37Ø!%Ø,0ð#àð#ð ð#ð 1ð	#ð
 ð#ð *ð#ð 
ó#ó,ô'ð8 òó ðð Ø"Ø/3ØØ!ØØØCHð%Oàð%Oð ð%Oð ð	%Oð
 -ð%Oð ð%Oð ð%Oð ð%Oð ð%Oð Að%Oð 
ó%OðT Ø!ØØØCHð
àð
ð ð
ð ð	
ð
 ð
ð ð
ð Að
ð 
ó
ô($r%   r   c                  ó   — e Zd ZdZy)ÚHTMLResponsez	text/htmlN©rx   ry   rz   r   r|   r%   r#   r~   r~   ¡   s   „ Ø�Jr%   r~   c                  ó   — e Zd ZdZy)ÚPlainTextResponseú
text/plainNr   r|   r%   r#   r�   r�   ¥   s   „ Ø�Jr%   r�   c                  óL   ‡ — e Zd ZdZ	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )ÚJSONResponsezapplication/jsonc                ó,   •— t         ‰| �  |||||«       y r   )Úsuperr$   )r    r!   r   r"   r   r   Ú	__class__s         €r#   r$   zJSONResponse.__init__¬   s   ø€ ô 	‰Ñ˜ +¨w¸
ÀJÕOr%   c                óT   — t        j                  |ddd d¬«      j                  d«      S )NF)Ú,Ú:)Úensure_asciiÚ	allow_nanÚindentÚ
separatorsr   )ÚjsonÚdumpsr*   r,   s     r#   r   zJSONResponse.render¶   s-   € Ü�z‰zØØØØØ!ô
÷ ‰&�‹/ð	r%   ©r/   NNNrl   )r!   rm   rr   r(   )rx   ry   rz   r   r$   r   Ú__classcell__©r‡   s   @r#   r„   r„   ©   sa   ø„ Ø#€Jð
 Ø37Ø!%Ø,0ðPàðPð ðPð 1ð	Pð
 ðPð *ðPð 
õP÷r%   r„   c                  ó:   ‡ — e Zd Z	 	 	 d	 	 	 	 	 	 	 	 	 dˆ fd„Zˆ xZS )ÚRedirectResponsec                ór   •— t         ‰| �  d|||¬«       t        t        |«      d¬«      | j                  d<   y )Nr%   )r!   r   r"   r   z:/%#?=@[]!$&'()*+,;)ÚsafeÚlocation)r†   r$   r
   r4   r"   )r    Úurlr   r"   r   r‡   s        €r#   r$   zRedirectResponse.__init__Á   s6   ø€ ô 	‰Ñ °+ÀwÐ[eÐÔfÜ#(¬¨S«Ð8MÔ#Nˆ�‰�ZÒ r%   )i3  NN)
r™   z	str | URLr   rn   r"   ro   r   rq   rr   rs   )rx   ry   rz   r$   r’   r“   s   @r#   r•   r•   À   sO   ø„ ð Ø37Ø,0ðOàðOð ðOð 1ð	Oð
 *ðOð 
÷Oñ Or%   r•   c                  óX   — e Zd ZU ded<   	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 d	d„Zd
d„Zdd„Zdd„Zy)ÚStreamingResponseÚAsyncContentStreamÚbody_iteratorNc                óÐ   — t        |t        j                  «      r|| _        nt	        |«      | _        || _        |€| j                  n|| _        || _        | j                  |«       y r   )	r'   ÚtypingÚAsyncIterabler�   r   r   r   r   r   r   s         r#   r$   zStreamingResponse.__init__Õ   sX   € ô �gœv×3Ñ3Ô4Ø!(ˆDÕä!6°wÓ!?ˆDÔØ&ˆÔØ-7Ð-?˜$Ÿ/š/ÀZˆŒØ$ˆŒØ×Ñ˜'Õ"r%   c              ƒ  óB   K  — 	  |«       ƒ d {  –—† }|d   dk(  ry Œ7 Œ­w)Nra   zhttp.disconnectr|   )r    rh   Úmessages      r#   Úlisten_for_disconnectz'StreamingResponse.listen_for_disconnectæ   s*   è ø€ ØÙ#›I—oˆGØ�v‰Ð"3Ò3Øð Ø%ús   ‚Ž�c              ƒ  óJ  K  —  |d| j                   | j                  dœ«      ƒ d {  –—†  | j                  2 3 d {  –—† }t        |t        t
        f«      s|j                  | j                  «      } |d|ddœ«      ƒ d {  –—†  ŒO7 Œ_7 ŒL7 Œ	6  |ddddœ«      ƒ d {  –—†7   y ­w)Nrc   rd   rf   T©ra   r   Ú	more_bodyr%   F)r   r8   r�   r'   r(   r)   r*   r+   )r    ri   Úchunks      r#   Ústream_responsez!StreamingResponse.stream_responseì   s®   è ø€ Ùà-Ø×*Ñ*Ø×+Ñ+ñó
÷ 	
ð 	
ð  ×-Ò-÷ 	Y�%Ü˜e¤e¬ZÐ%8Ô9ØŸ™ T§\¡\Ó2�ÙÐ 4¸eÐRVÑWÓX×XÑXð	
øð	Yøð Yøð .ñ
 Ð0¸#ÈEÑRÓS×SÒSùsN   ‚$B#¦B§B#·B»B¼B¿AB#Â B
ÂB#ÂBÂ
B#ÂB#ÂBÂB#c              ƒ  óŒ  ‡K  — t        j                  «       4 ƒd {  –—† Šdˆfd„}‰j                  |t        | j                  |«      «        |t        | j
                  |«      «      ƒ d {  –—†  d d d «      ƒd {  –—†  | j                  �| j                  «       ƒ d {  –—†  y y 7 ŒŠ7 Œ<7 Œ.# 1 ƒd {  –—†7  sw Y   Œ>xY w7 Œ!­w)Nc              “  ód   •K  —  | «       ƒ d {  –—†  ‰j                   j                  «        y 7 Œ­wr   )Úcancel_scopeÚcancel)ÚfuncÚ
task_groups    €r#   Úwrapz(StreamingResponse.__call__.<locals>.wrapþ   s'   øè ø€ Ù“f—�Ø×'Ñ'×.Ñ.Õ0ð ús   ƒ0Ž.� 0)r­   z+typing.Callable[[], typing.Awaitable[None]]rr   rs   )ÚanyioÚcreate_task_groupÚ
start_soonr   r¨   r£   r   )r    rg   rh   ri   r¯   r®   s        @r#   rk   zStreamingResponse.__call__û   s¢   øè ø€ Ü×*Ñ*×,Ô,°
õ1ð ×!Ñ! $¬°×0DÑ0DÀdÓ(KÔLÙ”w˜t×9Ñ9¸7ÓCÓD×DÐD÷ -×,ð �?‰?Ð&Ø—/‘/Ó#×#Ñ#ð 'ð -øð Eøð -ø×,×,Ñ,úð $úsc   ƒCœB'�C AB-Á,B)Á-B-Á1CÁ<B+Á=#CÂ CÂ!CÂ)B-Â+CÂ-B?Â3B6Â4B?Â;Cr‘   )r!   ÚContentStreamr   rn   r"   ro   r   rp   r   rq   rr   rs   )rh   r   rr   rs   )ri   r   rr   rs   rw   )rx   ry   rz   Ú__annotations__r$   r£   r¨   rk   r|   r%   r#   r›   r›   Ò   se   … Ø%Ó%ð
 Ø37Ø!%Ø,0ð#àð#ð ð#ð 1ð	#ð
 ð#ð *ð#ð 
ó#ó"óTô$r%   r›   c                  ó   — e Zd Zddd„Zy)ÚMalformedRangeHeaderc                ó   — || _         y r   )r!   r,   s     r#   r$   zMalformedRangeHeader.__init__
  s	   € Øˆ�r%   N)zMalformed range header.)r!   r4   rr   rs   ©rx   ry   rz   r$   r|   r%   r#   r¶   r¶   	  s   „ õr%   r¶   c                  ó   — e Zd Zdd„Zy)ÚRangeNotSatisfiablec                ó   — || _         y r   )Úmax_size)r    r¼   s     r#   r$   zRangeNotSatisfiable.__init__  s	   € Ø ˆ�r%   N)r¼   rn   rr   rs   r¸   r|   r%   r#   rº   rº     s   „ ô!r%   rº   z(\d*)-(\d*)c                  óä   — e Zd ZdZ	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zdd„Z	 	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 dd„Z	e
dd	„«       Zedd
„«       Z	 	 	 	 	 	 	 	 	 	 dd„Zy)ÚFileResponsei   Nc
                ó  — || _         || _        || _        |�t        j                  dt
        «       |€t        |xs |«      d   xs d}|| _        || _        | j                  |«       | j                  j                  dd«       | j                  �Zt        | j                  «      }
|
| j                  k7  r|	› d|
› �}n|	› d| j                  › d�}| j                  j                  d	|«       || _        |�| j                  |«       y y )
Nz;The 'method' parameter is not used, and it will be removed.r   r‚   zaccept-rangesr(   z; filename*=utf-8''z; filename="Ú"zcontent-disposition)rI   r   ÚfilenameÚwarningsÚwarnÚDeprecationWarningr   r   r   r   r"   Ú
setdefaultr
   Ústat_resultÚset_stat_headers)r    rI   r   r"   r   r   rÁ   rÆ   ÚmethodÚcontent_disposition_typeÚcontent_disposition_filenameÚcontent_dispositions               r#   r$   zFileResponse.__init__  s  € ð ˆŒ	Ø&ˆÔØ ˆŒØÐÜ�M‰MØMÜ"ôð ÐÜ# HÒ$4°Ó5°aÑ8ÒH¸LˆJØ$ˆŒØ$ˆŒØ×Ñ˜'Ô"Ø�‰×Ñ °Ô9Ø�=‰=Ð$Ü+0°·±Ó+?Ð(Ø+¨t¯}©}Ò<Ø)AÐ(BÐBUÐVrÐUsÐ&tÑ#à)AÐ(BÀ,ÈtÏ}É}ÈoÐ]^Ð&_Ð#Ø�L‰L×#Ñ#Ð$9Ð;NÔOØ&ˆÔØÐ"Ø×!Ñ! +Õ.ð #r%   c                óž  — t        |j                  «      }t        |j                  d¬«      }t        |j                  «      dz   t        |j                  «      z   }dt	        |j                  «       d¬«      › d�}| j                  j                  d|«       | j                  j                  d|«       | j                  j                  d	|«       y )
NTrF   Ú-rÀ   F©Úusedforsecurityúcontent-lengthzlast-modifiedÚetag)r4   Úst_sizer   Úst_mtimer   r*   r"   rÅ   )r    rÆ   r?   Úlast_modifiedÚ	etag_baserÑ   s         r#   rÇ   zFileResponse.set_stat_headers>  s¥   € Ü˜[×0Ñ0Ó1ˆÜ" ;×#7Ñ#7ÀÔEˆÜ˜×,Ñ,Ó-°Ñ3´c¸+×:MÑ:MÓ6NÑNˆ	Ø”= ×!1Ñ!1Ó!3ÀUÔKÐLÈAÐNˆà�‰×ÑÐ 0°.ÔAØ�‰×Ñ °Ô?Ø�‰×Ñ ¨Õ-r%   c              ƒ  óè  K  — |d   j                  «       dk(  }| j                  €Œ	 t        j                  j	                  t
        j                  | j                  «      ƒ d {  –—† }| j                  |«       |j                  }t        j                  |«      s%t        d| j                  › d�«      ‚| j                  }t        |¬«      }|j                  d«      }|j                  d«      }	|�|	�-| j                  |	|«      s| j!                  ||«      ƒ d {  –—†  n�	 | j#                  ||j$                  «      }
t1        |
«      dk(  r0|
d   \  }}| j3                  ||||j$                  |«      ƒ d {  –—†  n&| j5                  ||
|j$                  |«      ƒ d {  –—†  | j6                  �| j7                  «       ƒ d {  –—†  y y 7 �Œb# t        $ r t        d| j                  › d�«      ‚w xY w7 ŒÕ# t&        $ r2} t)        |j*                  d	¬
«      |||«      ƒ d {  –—†7  cY d }~S d }~wt,        $ r9}t)        ddd|j.                  › �i¬«      } ||||«      ƒ d {  –—†7  cY d }~S d }~ww xY w7 Œú7 ŒÕ7 Œ³­w)NrÈ   ÚHEADzFile at path z is not a file.z does not exist.)rg   Úrangezif-rangei�  )r   i   zContent-Rangez*/)r   r"   é   r   )ÚupperrÆ   r°   Ú	to_threadÚrun_syncÚosÚstatrI   rÇ   Úst_modeÚS_ISREGÚRuntimeErrorÚFileNotFoundErrorr   ÚgetÚ_should_use_rangeÚ_handle_simpleÚ_parse_range_headerrÒ   r¶   r�   r!   rº   r¼   r5   Ú_handle_single_rangeÚ_handle_multiple_rangesr   )r    rg   rh   ri   Úsend_header_onlyrÆ   Úmoder"   Ú
http_rangeÚhttp_if_rangeÚrangesÚexcÚresponseÚstartÚends                  r#   rk   zFileResponse.__call__H  sL  è ø€ Ø!& x¡×!6Ñ!6Ó!8¸FÑ!BÐØ×ÑÐ#ðSÜ$)§O¡O×$<Ñ$<¼R¿W¹WÀdÇiÁiÓ$P×P�Ø×%Ñ% kÔ2ð #×*Ñ*�Ü—|‘| DÔ)Ü&¨°t·y±y°kÀÐ'QÓRÐRà×*Ñ*ˆKä Ô&ˆØ—[‘[ Ó)ˆ
ØŸ™ JÓ/ˆàÐ -Ð";ÀD×DZÑDZÐ[hÐjuÔDvØ×%Ñ% dÐ,<Ó=×=Ñ=ð<Ø×1Ñ1°*¸k×>QÑ>QÓR�ô �6‹{˜aÒØ# A™Y‘
��sØ×/Ñ/°°e¸SÀ+×BUÑBUÐWgÓh×hÑhà×2Ñ2°4¸À×ATÑATÐVfÓg×gÐgà�?‰?Ð&Ø—/‘/Ó#×#Ñ#ð 'ðA Qúä$ò PÜ" ]°4·9±9°+Ð=MÐ#NÓOÐOðPúð >ùô (ò cØLÔ.¨s¯{©{ÈÔLÈUÐT[Ð]aÓb×bÐbÕbûÜ&ò <Ü,¸ÀÐZ\Ð]`×]iÑ]iÐ\jÐXkÐFlÔm�Ù% e¨W°dÓ;×;Ð;Õ;ûð<úð iøàgøð $úsË   ‚#I2¦;G Á!GÁ"G Á7BI2ÄG,ÄI2ÄG. Ä98I2Å1I,Å2&I2ÆI.Æ#I2Æ<I0Æ=I2ÇG Ç#G)Ç)I2Ç.	I)Ç7"H$ÈHÈH$ÈI)ÈI2È$I)È0)I$ÉIÉI$ÉI)ÉI2É$I)É)I2É.I2É0I2c              ƒ  ó   K  —  |d| j                   | j                  dœ«      ƒ d {  –—†  |r |ddddœ«      ƒ d {  –—†  y t        j                  | j                  d¬«      ƒ d {  –—† 4 ƒd {  –—† }d	}|rR|j                  | j                  «      ƒ d {  –—† }t        |«      | j                  k(  } |d||dœ«      ƒ d {  –—†  |rŒRd d d «      ƒd {  –—†  y 7 Œ´7 Œ 7 Œx7 Œq7 ŒL7 Œ"7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)
Nrc   rd   rf   r%   Fr¥   Úrb©rê   T)r   r8   r°   Ú	open_filerI   ÚreadÚ
chunk_sizer5   )r    ri   ré   Úfiler¦   r§   s         r#   rå   zFileResponse._handle_simpleo  sä   è ø€ ÙÐ1¸T×=MÑ=MÐZ^×ZjÑZjÑkÓl×lÐlÙÙÐ 4¸cÐPUÑVÓW×WÑWä"Ÿ_™_¨T¯Y©Y¸TÔB×B×BÐBÀdØ �	ÙØ"&§)¡)¨D¯O©OÓ"<×<�EÜ # E£
¨d¯o©oÑ =�IÙÐ(<ÀeÐZcÑdÓe×eÐeò  ÷ C×BÐBð	 	møàWøàBøÐBøð =øàeøð Cø×B×BÑBüs�   ‚$C>¦C§C>¼C½)C>Á&CÁ'C>Á/C!Á0C>Á3#C)ÂC#Â+C)ÃC%ÃC)Ã
C>ÃC'ÃC>ÃC>ÃC>Ã!C>Ã#C)Ã%C)Ã'C>Ã)C;Ã/C2Ã0C;Ã7C>c              ƒ  óÒ  K  — d|› d|dz
  › d|› �| j                   d<   t        ||z
  «      | j                   d<    |dd| j                  d	œ«      ƒ d {  –—†  |r |d
dddœ«      ƒ d {  –—†  y t        j                  | j
                  d¬«      ƒ d {  –—† 4 ƒd {  –—† }|j                  |«      ƒ d {  –—†  d}|rt|j                  t        | j                  ||z
  «      «      ƒ d {  –—† }|t        |«      z  }t        |«      | j                  k(  xr ||k  } |d
||dœ«      ƒ d {  –—†  |rŒtd d d «      ƒd {  –—†  y 7 Œï7 ŒÛ7 Œ³7 Œ¬7 Œ•7 Œc7 Œ$7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)Nzbytes rÍ   rÙ   rt   úcontent-rangerÐ   rc   éÎ   rd   rf   r%   Fr¥   ró   rô   T)r"   r4   r8   r°   rõ   rI   Úseekrö   Úminr÷   r5   )	r    ri   rð   rñ   Ú	file_sizeré   rø   r¦   r§   s	            r#   rç   z!FileResponse._handle_single_range{  sX  è ø€ ð +1°°°q¸¸q¹¸	ÀÀ9À+Ð(Nˆ�‰�_Ñ%Ü),¨S°5©[Ó)9ˆ�‰Ð%Ñ&ÙÐ1¸SÈT×M]ÑM]Ñ^Ó_×_Ð_ÙÙÐ 4¸cÐPUÑVÓW×WÑWä"Ÿ_™_¨T¯Y©Y¸TÔB×B×BÐBÀdØ—i‘i Ó&×&Ð&Ø �	ÙØ"&§)¡)¬C°·±ÀÀuÁÓ,MÓ"N×N�EØœS ›ZÑ'�EÜ # E£
¨d¯o©oÑ =Ò MÀ%È#Á+�IÙÐ(<ÀeÐZcÑdÓe×eÐeò	  ÷ C×BÐBð	 	`øàWøàBøÐBøØ&øð Oøð føð Cø×B×BÑBüsµ   ‚AE'ÁEÁE'Á(EÁ))E'ÂEÂE'ÂEÂE'ÂEÂ4E
Â53EÃ(EÃ)A EÄ)EÄ*EÄ1E'Ä<EÄ=E'ÅE'ÅE'ÅE'Å
EÅEÅEÅE'ÅE$ÅEÅE$Å E'c           	   ƒ  ó²  K  — t        d«      }| j                  |||| j                  d   «      \  }}d|› �| j                  d<   t        |«      | j                  d<    |dd| j                  dœ«      ƒ d {  –—†  |r |d	d
ddœ«      ƒ d {  –—†  y t        j                  | j                  d¬«      ƒ d {  –—† 4 ƒd {  –—† }|D ]ª  \  }	}
 |d	 ||	|
«      ddœ«      ƒ d {  –—†  |j                  |	«      ƒ d {  –—†  |	|
k  rX|j                  t        | j                  |
|	z
  «      «      ƒ d {  –—† }|	t        |«      z  }	 |d	|ddœ«      ƒ d {  –—†  |	|
k  rŒX |d	dddœ«      ƒ d {  –—†  Œ¬  |d	d|› d�j                  d«      ddœ«      ƒ d {  –—†  d d d «      ƒd {  –—†  y 7 �Œ57 �Œ"7 Œú7 Œó7 ŒÒ7 Œ»7 Œˆ7 Œh7 ŒP7 Œ)7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)Né   zcontent-typezmultipart/byteranges; boundary=rú   rÐ   rc   rû   rd   rf   r%   Fr¥   ró   rô   Tó   
z
--z--
r.   )r	   Úgenerate_multipartr"   r4   r8   r°   rõ   rI   rü   rö   rý   r÷   r5   r*   )r    ri   rí   rþ   ré   Úboundaryr?   Úheader_generatorrø   rð   rñ   r§   s               r#   rè   z$FileResponse._handle_multiple_ranges�  sæ  è ø€ ô ˜R“=ˆØ+/×+BÑ+BØ�H˜i¨¯©°nÑ)Eó,
Ñ(ˆÐ(ð +JÈ(ÈÐ(Tˆ�‰�_Ñ%Ü),¨^Ó)<ˆ�‰Ð%Ñ&ÙÐ1¸SÈT×M]ÑM]Ñ^Ó_×_Ð_ÙÙÐ 4¸cÐPUÑVÓW×WÑWä"Ÿ_™_¨T¯Y©Y¸TÔB×B×BÐBÀdÛ"(‘J�E˜3ÙÐ(<ÑFVÐW\Ð^aÓFbÐquÑvÓw×wÐwØŸ)™) EÓ*×*Ð*Ø #š+Ø&*§i¡i´°D·O±OÀSÈ5Á[Ó0QÓ&R× R˜Ø¤ U£Ñ+˜Ù"Ð,@È%Ð^bÑ#cÓd×dÐdð   #›+ñ Ð(<ÀeÐZ^Ñ_Ó`×`Ñ`ð #)ñ à 4Ø"& x j°Ð 5× <Ñ <¸YÓ GØ%*ñó÷ ð ÷ C×BÐBð	 	`ùàWùàBøÐBøàwøØ*øà RøàdøØ`øðøð Cø×B×BÑBüsð   ‚A3GÁ5F*Á6GÂF-Â)GÂ5F0Â6GÂ>F2Â?GÃGÃ!F4Ã"GÃ:F6Ã;4GÄ/F8Ä0!GÅF:Å	GÅGÅ+F<Å,(GÆF>ÆGÆGÆ$G Æ%GÆ-GÆ0GÆ2GÆ4GÆ6GÆ8GÆ:GÆ<GÆ>GÇ GÇGÇGÇ	GÇGc                óÞ   — t        |j                  «      dz   t        |j                  «      z   }dt        |j	                  «       d¬«      › d�}|t        |j                  d¬«      k(  xs ||k(  S )NrÍ   rÀ   FrÎ   TrF   )r4   rÓ   rÒ   r   r*   r   )Úclsrì   rÆ   rÕ   rÑ   s        r#   rä   zFileResponse._should_use_range°  sj   € ä˜×,Ñ,Ó-°Ñ3´c¸+×:MÑ:MÓ6NÑNˆ	Ø”= ×!1Ñ!1Ó!3ÀUÔKÐLÈAÐNˆØ¤
¨;×+?Ñ+?ÈÔ MÑMÒfÐQ^ÐbfÑQfÐfr%   c                ó~  ‡— g }	 | j                  dd«      \  }}|j                  «       j	                  «       }|dk7  rt        d«      ‚t
        j                  |«      D �cg c]Y  }|dk7  rR|d   rt        |d   «      n‰t        |d   «      z
  |d   r'|d   r"t        |d   «      ‰k  rt        |d   «      dz   n‰f‘Œ[ }}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 ]v  \  }}t        t        |«      «      D ]G  }	||	   \  }
}||kD  rŒ||
k  r|j                  |	||f«        ŒFt        ||
«      t        ||«      f||	<    Œc |j                  ||f«       Œx |S # t        $ r t        «       ‚w xY wc c}w )NÚ=rÙ   r(   zOnly support bytes range)rQ   rQ   r   z%Range header: range must be requestedc              3  óF   •K  — | ]  \  }}d |cxk  xr ‰k  nc  –— Œ y­w)r   Nr|   )Ú.0rð   Ú_rþ   s      €r#   Ú	<genexpr>z3FileResponse._parse_range_header.<locals>.<genexpr>Ï  s#   øè ø€ ÐC¹F±°°q�A˜Ö* Ô*Ô+¹Fùs   ƒ!c              3  ó,   K  — | ]  \  }}||kD  –— Œ y ­wr   r|   )r
  rð   rñ   s      r#   r  z3FileResponse._parse_range_header.<locals>.<genexpr>Ò  s   è ø€ Ð4©V™z˜u cˆu�s�{©Vùs   ‚z)Range header: start must be less than end)ÚsplitÚ
ValueErrorr¶   rW   r2   Ú_RANGE_PATTERNÚfindallrn   r5   Úanyrº   rØ   Úinsertrý   Úmaxr6   )rë   rþ   rí   ÚunitsÚrange_r  Úresultrð   rñ   ÚpÚp_startÚp_ends    `          r#   ræ   z FileResponse._parse_range_header¶  sâ  ø€ à(*ˆð	)Ø&×,Ñ,¨S°!Ó4‰MˆE�6ð —‘“×#Ñ#Ó%ˆà�GÒÜ&Ð'AÓBÐBô $×+Ñ+¨FÔ3ó
ñ
 4�Ø�HŠ}ð	 ˜qšT”�A�a‘D”	 y´3°q¸±t³9Ñ'<Ø!" 1¢¨!¨Aª$´3°q¸±t³9¸yÒ3H”�A�a‘D“	˜A’Èiòð 4ð 	ð 
ô ˆv‹;˜!ÒÜ&Ð'NÓOÐOäÓC¹FÓCÔCÜ% iÓ0Ð0äÑ4©VÓ4Ô4Ü&Ð'RÓSÐSäˆv‹;˜!ÒØˆMð )+ˆÛ ‰JˆE�3Üœ3˜v›;Ö'�Ø!'¨¡‘�˜Ø˜5’=ØØ˜7’]Ø—M‘M ! e¨S \Ô2Ùä!$ U¨GÓ!4´c¸#¸u³oÐ F�F˜1‘IÙð (ð —‘˜u c˜lÕ+ð !ð ˆøô[ ò 	)Ü&Ó(Ð(ð	)üò
s   …F# ÁAF:Æ#F7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  — | ]<  \  }}t        t        |«      «      t        t        |d z
  «      «      z   ‰z   ||z
  z   –— Œ> y­w)rÙ   N)r5   r4   )r
  rð   rñ   Ústatic_header_part_lens      €r#   r  z2FileResponse.generate_multipart.<locals>.<genexpr>  sK   øè ø€ ð 
ñ %‘
��sô ”�U“‹_œs¤3 s¨Q¡w£<Ó0Ñ0Ð3IÑIØ�U‰{õá$ùs   ƒAAé   c                óL   •— d‰› d‰› d| › d|dz
  › d‰› d�j                  d«      S )	Nz--z
Content-Type: z
Content-Range: bytes rÍ   rÙ   rt   z

r.   )r*   )rð   rñ   r  r@   r¼   s     €€€r#   Ú<lambda>z1FileResponse.generate_multipart.<locals>.<lambda>  sJ   ø€ Ø�X�Jð !Ø!- ð /(Ø(- w¨a°°A±¨w°a¸°zð Bð÷ ‰f�YÓð  r%   )r5   r4   Úsum)r    rí   r  r¼   r@   Úboundary_lenr?   r  s     ```  @r#   r  zFileResponse.generate_multipartê  sn   û€ ô0 ˜8“}ˆØ!# lÑ!2´S¸Ó5FÑ!FÌÌSÐQYË]ÓI[Ñ![ÐÜó 
ñ %ó
ó 
ð
 �Ññ
ˆð õ ð
ð 	
r%   )r/   NNNNNNÚ
attachment)rI   zstr | os.PathLike[str]r   rn   r"   ro   r   rp   r   rq   rÁ   rp   rÆ   zos.stat_result | NonerÈ   rp   rÉ   r4   rr   rs   )rÆ   úos.stat_resultrr   rs   rw   )ri   r   ré   ru   rr   rs   )ri   r   rð   rn   rñ   rn   rþ   rn   ré   ru   rr   rs   )
ri   r   rí   úlist[tuple[int, int]]rþ   rn   ré   ru   rr   rs   )rì   r4   rÆ   r%  rr   ru   )rë   r4   rþ   rn   rr   r&  )
rí   z typing.Sequence[tuple[int, int]]r  r4   r¼   rn   r@   r4   rr   z.tuple[int, typing.Callable[[int, int], bytes]])rx   ry   rz   r÷   r$   rÇ   rk   rå   rç   rè   Úclassmethodrä   Ústaticmethodræ   r  r|   r%   r#   r¾   r¾     sl  „ Ø€Jð
 Ø37Ø!%Ø,0Ø#Ø-1Ø!Ø(4ð#/à$ð#/ð ð#/ð 1ð	#/ð
 ð#/ð *ð#/ð ð#/ð +ð#/ð ð#/ð #&ð#/ð 
ó#/óJ.ó%$óN
fðfØðfØ!$ðfØ+.ðfØ;>ðfØRVðfà	ófð$!àð!ð &ð!ð ð	!ð
 ð!ð 
ó!ðF ògó ðgð
 ò1ó ð1ðf)
à0ð)
ð ð)
ð ð	)
ð
 ð)
ð 
8ô)
r%   r¾   )<Ú
__future__r   Úhttp.cookiesrS   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•   ÚUnionr4   r(   r)   ÚContentÚIterableÚSyncContentStreamr    rœ   r³   r›   Ú	Exceptionr¶   rº   Úcompiler  r¾   r|   r%   r#   Ú<module>r=     s  ðÝ "ã Û Û 	Û 	Û Û Û Ý ß 3Ý Ý  Ý Ý ã Û å +Ý /Ý 7ß AÑ Aß 0Ñ 0÷C$ñ C$ôL�8ô ô˜ô ô�8ô ô.	O�xô 	Oð �,‰,�s˜E :Ð-Ñ
.€Ø—O‘O GÑ,Ð Ø×)Ñ)¨'Ñ2Ð Ø—‘Ð/Ð1BÐBÑC€ô4$˜ô 4$ôn˜9ô ô
!˜)ô !ð
 �—‘˜NÓ+€ô}
�8õ }
r%   