
    6iT                       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	m
Z
mZmZmZmZm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 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, d dl-m.Z.m/Z/m0Z0m1Z1  G d d      Z2 G d de2      Z3 G d de2      Z4 G d de2      Z5 G d de2      Z6e7e8z  e9z  Z:ee:   Z;e
e:   Z<e<e;z  Z= G d de2      Z> G d de?      Z@ G d d e?      ZA G d! d"e2      ZBy)#    )annotationsN)AsyncIterable	AwaitableCallableIterableMappingSequence)datetime)format_datetime
formatdate)partial)
guess_type)	token_hex)AnyLiteral)quote)collapse_excgroups)BackgroundTask)iterate_in_threadpool)URLHeadersMutableHeaders)ClientDisconnect)Message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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         F/var/www/files/kim/lib/python3.12/site-packages/starlette/responses.py__init__zResponse.__init__!   s>     '!(DO$KK(	'"    c                p    |yt        |t        t        z        r|S |j                  | j                        S )Nr/   )
isinstancebytes
memoryviewencodecharsetr*   r+   s     r-   r&   zResponse.render0   s1    ?guz12N~~dll++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lowerr4   getattrr#   strlenappendr$   
startswithr5   raw_headers)r*   r,   rB   populate_content_lengthpopulate_content_typekvhkeysr'   content_lengthcontent_types               r-   r(   zResponse.init_headers7   sW   ?57K&*#$(!ZaZgZgZijRVRSUVAGGI,,Y7)9LMjKj"-.QAaD.D.&7t&C#$34$?!tVT*'%%+t/?/?:/M T^N 1>3H3H3STU#(=&&w/JlFXFXFZ4Zt|| ;;1D1DY1OPQ&) k.s   :EEc                h    t        | d      st        | j                        | _        | j                  S )N_headersraw)hasattrr   rB   rL   )r*   s    r-   r,   zResponse.headersS   s(    tZ(*t/?/?@DM}}r/   c                8   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<   |
r&t        j                  dk  rt        d      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)      z@Partitioned cookies are only supported in Python 3.14 and above.partitioned )headers
   set-cookier8   )httpcookiesSimpleCookier1   r
   r   r<   sysversion_info
ValueErroroutputstriprB   r@   r4   )r*   keyvaluemax_agerS   rT   rU   rV   rW   r[   r^   cookie
cookie_vals                r-   
set_cookiezResponse.set_cookieY   sY    04||/H/H/Js%,F3K	"'8,)8)NsI&)0sI&"&F3K$*F3K!$(F3K!&*F3K
#>># (  C C	C 
 '/F3K
#') !cdd)-F3K&]]"]-335

0A0A)0L MNr/   c           
     6    | j                  |dd|||||       y )Nr   )rk   rS   rT   rU   rV   rW   r[   )rn   )r*   ri   rT   rU   rV   rW   r[   s          r-   delete_cookiezResponse.delete_cookie   s-     	 	 		
r/   c                    dfd}|S )Nc                Z   K   | d   }|dv ri | dd|z   i}  |        d {    y 7 w)Ntype>   http.response.bodyhttp.response.startz
websocket. )messagemessage_typesends     r-   wrappedz5Response._wrap_websocket_denial_send.<locals>.wrapped   s<     "6?LLLJWJfl\.IJw-s    +)+)rw   r   returnNonerv   )r*   ry   rz   s    ` r-   _wrap_websocket_denial_sendz$Response._wrap_websocket_denial_send   s    	  r/   c                  K   |d   dk(  r| j                  |      } |d| j                  | j                  d       d {     |d| j                  d       d {    | j                  | j	                          d {    y y 7 G7 ,7 
w)Nrs   	websocketru   rs   statusr,   rt   )rs   r'   )r}   r#   rB   r'   r%   )r*   scopereceivery   s       r-   __call__zResponse.__call__   s     =K'33D9D1T=M=MZ^ZjZjklll0$))DEEE??&//### ' 	mE $s4   =BB BB	#B BB	BB)Nr9   NNNr+   r   r#   intr,   Mapping[str, str] | Noner$   
str | Noner%   BackgroundTask | Noner{   r|   )r+   r   r{   zbytes | memoryviewr"   )r,   r   r{   r|   )r{   r   )	r_   NN/NFFrY   F)ri   r>   rj   r>   rk   z
int | NonerS   zdatetime | str | int | NonerT   r   rU   r   rV   boolrW   r   r[   'Literal['lax', 'strict', 'none'] | Noner^   r   r{   r|   )r   NFFrY   )ri   r>   rT   r>   rU   r   rV   r   rW   r   r[   r   r{   r|   )ry   r   r{   r   r   r   r   r   ry   r   r{   r|   )__name__
__module____qualname__r$   r5   r.   r&   r(   propertyr,   rn   rp   r}   r   rv   r/   r-   r   r      sy   JG ,0!%,0## # *	#
 # *# 
#,'8   "/3!<A!+O+O +O 	+O
 -+O +O +O +O +O :+O +O 
+O` !<A

 
 	

 
 
 :
 

($r/   r   c                      e Zd ZdZy)HTMLResponsez	text/htmlNr   r   r   r$   rv   r/   r-   r   r      s    Jr/   r   c                      e Zd ZdZy)PlainTextResponse
text/plainNr   rv   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dumpsr4   r6   s     r-   r&   zJSONResponse.render   s-    zz!
 &/	r/   r9   NNNr   )r+   r   r{   r2   )r   r   r   r$   r.   r&   __classcell__r   s   @r-   r   r      sa    #J
 ,0!%,0PP P *	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   r>   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#   r   r,   r   r%   r   r{   r|   )r   r   r   r.   r   r   s   @r-   r   r      sO     ,0,0OO O *	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              r|| _        nt        |      | _        || _        || j
                  n|| _        || _        | j                  |       y r"   )r1   r   r   r   r#   r$   r%   r(   r)   s         r-   r.   zStreamingResponse.__init__   sR     g}-!(D!6w!?D&-7-?$//Z$'"r/   c                B   K   	  |        d {   }|d   dk(  ry 7 w)Nrs   zhttp.disconnectrv   )r*   r   rw   s      r-   listen_for_disconnectz'StreamingResponse.listen_for_disconnect   s*     #IoGv"33 %s   c                L  K    |d| j                   | j                  d       d {    | j                  2 3 d {   }t        |t        t
        z        s|j                  | j                        } |d|dd       d {    P7 `7 M7 	6  |dddd       d {  7   y w)Nru   r   rt   Trs   r'   	more_bodyr/   F)r#   rB   r   r1   r2   r3   r4   r5   )r*   ry   chunks      r-   stream_responsez!StreamingResponse.stream_response   s     1T=M=MZ^ZjZjklll-- 	Y 	Y%eUZ%78T\\2 4eRVWXXX	 	m	Y Y .
 0#ERSSSsN   $B$BB$BB	BAB$BB$	BB$B$B B$c           	       K   |d   dk(  rO| j                  |      }| j                  |       d {    | j                  | j                          d {    y t        t	        t
        |j                  di       j                  dd      j                  d                  }|dk\  r	 | j                  |       d {    nt               5  t        j                         4 d {   d	fd}j                  |t        | j                  |              |t        | j                  |             d {    d d d       d {    d d d        | j                  | j                          d {    y y 7 H7 '7 # t        $ r t               w xY w7 7 c7 U# 1 d {  7  sw Y   exY w# 1 sw Y   ixY w7 Lw)
Nrs   r   asgispec_versionz2.0.)      c                d   K    |         d {    j                   j                          y 7 wr"   )cancel_scopecancel)func
task_groups    r-   wrapz(StreamingResponse.__call__.<locals>.wrap  s'     "f"//668 %s   0. 0)r   zCallable[[], Awaitable[None]]r{   r|   )r}   r   r%   tuplemapr   getsplitOSErrorr   r   anyiocreate_task_group
start_soonr   r   )r*   r   r   ry   r   r   r   s         @r-   r   zStreamingResponse.__call__  s    =K'33D9D&&t,,,*oo'''Seii&;&?&?PU&V&\&\]`&abc6!)**4000 $% M 224 M M
9 ))$8L8Ld0STwt'A'A7KLLLM MM ??&//### '/ -' 1 )&(()M MM M M MM M $s   .GE9#GE<AG)F =E?>F GF3&F'F3*AF6F7F;F3FF3'G2F?3G<G?F FGF3FF3F0	$F'%F0	,F33F<8Gr   )r+   ContentStreamr#   r   r,   r   r$   r   r%   r   r{   r|   )r   r   r{   r|   )ry   r   r{   r|   r   )r   r   r   __annotations__r.   r   r   r   rv   r/   r-   r   r      se    %%
 ,0!%,0## # *	#
 # *# 
#"T$r/   r   c                      e Zd ZdddZy)MalformedRangeHeaderc                    || _         y r"   )r+   r6   s     r-   r.   zMalformedRangeHeader.__init__   s	    r/   N)zMalformed range header.)r+   r>   r{   r|   r   r   r   r.   rv   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   r   r{   r|   r   rv   r/   r-   r   r   $  s    !r/   r   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	dd	Z
edd
       Zedd       Z	 	 	 	 	 	 	 	 	 	 ddZy)FileResponsei   Nc	                   || _         || _        || _        |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 )	Nr   r   zaccept-rangesr2   z; filename*=utf-8''z; filename=""zcontent-disposition)rT   r#   filenamer   r$   r%   r(   r,   
setdefaultr   stat_resultset_stat_headers)r*   rT   r#   r,   r$   r%   r   r   content_disposition_typecontent_disposition_filenamecontent_dispositions              r-   r.   zFileResponse.__init__,  s     	& #H$45a8HLJ$$'"9==$+0+?(+t}}<)A(BBUVrUs&t#)A(B,t}}o]^&_#LL##$9;NO&"!!+. #r/   c                   t        |j                        }t        |j                  d      }t        |j                        dz   t        |j                        z   }dt	        j
                  |j                         d      j                          d}| j                  j                  d|       | j                  j                  d|       | j                  j                  d	|       y )
NTrQ   -r   F)usedforsecuritycontent-lengthlast-modifiedetag)
r>   st_sizer   st_mtimehashlibmd5r4   	hexdigestr,   r   )r*   r   rI   last_modified	etag_baser   s         r-   r   zFileResponse.set_stat_headersK  s    [001";#7#7E,,-3c+:M:M6NN	7;;y//15ISSUVVWX 0.A?-r/   c                b  K   |d   }|dk(  xr |d   j                         dk(  }|dk(  xr d|j                  di       v }|dk(  r| j                  |      }| 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&                        }t3        |      dk(  r0|d   \  }}| j5                  ||||j&                  |       d {    n&| j7                  |||j&                  |       d {    | j8                  | j9                          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|j0                   i      } ||||       d {  7  cY d }~S d }~ww xY w7 7 7 w)Nrs   ra   methodHEADhttp.response.pathsend
extensionsr   zFile at path z is not a file.z does not exist.)r   rangezif-rangei  )r#   i  zContent-Rangezbytes */)r#   r,      r   )upperr   r}   r   r   	to_threadrun_syncosstatrT   r   st_modeS_ISREGRuntimeErrorFileNotFoundErrorr   _should_use_range_handle_simple_parse_range_headerr   r   r   r+   r   r   r?   _handle_single_range_handle_multiple_rangesr%   )r*   r   r   ry   
scope_typesend_header_onlysend_pathsendr   moder,   
http_rangehttp_if_rangerangesexcresponsestartends                    r-   r   zFileResponse.__call__U  s    6]
%/UE(O4I4I4Kv4U"f,h1IUYYWcegMh1h$33D9D#S$)OO$<$<RWWdii$PP%%k2 #**||D)&tyyk'QRR**K&[[)
J/-";DDZDZ[hDi%%d,<mLLL<11*k>Q>QR 6{a#AY
s//eS+BUBUWghhh224ATATVfggg??&//### 'A Q$ P"]499+=M#NOOP M ( cL.s{{LUT[]abbbb& <,ZbcfcocobpXqFrs%eWd;;;;< ig $s   A J/#;H H H 4BJ/H)J/H+ 68J/.J)/&J/J+#J/9J-:J/ H #H&&J/+	J&4"I!II!J&J/!J&-)J!JJ!J&J/!J&&J/+J/-J/c                V  K    |d| j                   | j                  d       d {    |r |dddd       d {    y |r' |dt        | j                        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 7 z7 s7 N7 $7 # 1 d {  7  sw Y   y xY ww)Nru   r   rt   r/   Fr   r   )rs   rT   rbr	  T)	r#   rB   r>   rT   r   	open_fileread
chunk_sizer?   )r*   ry   r  r  filer   r   s          r-   r  zFileResponse._handle_simple  s    1T=M=MZ^ZjZjklll 4cPUVWWW 8#dii.QRRR"__TYYTBB f fd 	"&))DOO"<<E #E
doo =I(<eZcdeee  f f f 	mWRB f =ef f f fs   $D)DD)D(D)%D&)D)D
D)DD)#D?D +D+D,D3D)>D?D)D)D)
D)D)DDD)D&DD&"D)c                  K   t        t        | j                              }d| d|dz
   d| |d<   t        ||z
        |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)NrM   zbytes r   r   r   zcontent-ranger   ru      r   rt   r/   Fr   r  r  T)r   listrB   r>   rN   r   r  rT   seekr  minr  r?   )
r*   ry   r  r  	file_sizer  r,   r  r   r   s
             r-   r  z!FileResponse._handle_single_range  s{     !T$*:*:%;<%+E7!C!G9Ai[#I $'e$4 !1SW[[YZZZ 4cPUVWWW"__TYYTBB f fdii&&& 	"&))Cu,M"NNESZ'E #E
doo = M%#+I(<eZcdeee	  f f f	 	[WB f& O ff f f fs   AE2EE23E4)E2EE2&E'E2*E?E 3E3E4A E4E5E<E2EE2E2E2E2EEEE2E/#E&$E/+E2c           	       K   t        d      }| j                  |||| j                  d         \  }}t        t	        | j
                              }d| |d<   t        |      |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-typerM   zmultipart/byteranges; boundary=r   ru   r  r   rt   r/   Fr   r  r  Ts   
--r8   )r   generate_multipartr,   r   r  rB   r>   rN   r   r  rT   r  r  r  r  r?   r4   )r*   ry   r  r  r  boundaryrI   header_generatorr,   r  r  r  r   s                r-   r  z$FileResponse._handle_multiple_ranges  s     R=+/+B+BHin)E,
(( !T$*:*:%;<$CH:"N$'$7 !1SW[[YZZZ 4cPUVWWW"__TYYTBB  d"( cJE3(<FVW\^aFbquvwww))E***#+&*iiDOOS5[0Q&R RU+",@%^b#cddd  #+ (<g\`abbbc  4"$XJb 1 8 8 C%*    	 	[WB w* Rdb   s   A>G" F5G"F8)G" F;G"	F=
G"G,F?-GG4G:G;!GG	G'G6G7(GG	 G$G"/G0G"8G";G"=G"?GGGGG	GG"GGGG"c                N    || j                   d   k(  xs || j                   d   k(  S )Nr   r   )r,   )r*   r  s     r-   r  zFileResponse._should_use_range  s-    _ ==fRVR^R^_eRfAffr/   c                Z   g }	 |j                  dd      \  }}|j                         j	                         }|dk7  rt        d      | j                  |      }t        |      dk(  rt        d      t        fd|D              rt              t        d |D              rt        d	      t        |      dk(  r|S |j                          |d   g}|dd  D ]7  \  }}|d
   \  }	}
||
k  r|	t        |
|      f|d
<   %|j                  ||f       9 |S # t        $ r t               w xY w)N=r   r2   zOnly support bytes ranger   z%Range header: range must be requestedc              3  F   K   | ]  \  }}d |cxk  xr k  nc    yw)r   Nrv   ).0r  _r  s      r-   	<genexpr>z3FileResponse._parse_range_header.<locals>.<genexpr>  s"     CqA**+Cs   !c              3  ,   K   | ]  \  }}||kD    y wr"   rv   )r(  r  r  s      r-   r*  z3FileResponse._parse_range_header.<locals>.<genexpr>  s     4zucus{4s   z)Range header: start must be less than end)r   rf   r   rh   r<   _parse_rangesr?   anyr   sortmaxr@   )clsr
  r  r  unitsrange_resultr  r  
last_startlast_ends     `        r-   r  z FileResponse._parse_range_header  sG   (*	)&,,S!4ME6 ##%G&'ABB""695v;!&'NOOCFCC%i004V44&'RSSv;!M 	)/ * 	,JE3#)": J (#h*<=r
ucl+	, A  	)&((	)s   D D*c                   g }|j                  d      D ]  }|j                         }|r|dk(  rd|vr |j                  dd      \  }}|j                         }|j                         }	 |rt        |      n|t        |      z
  }|r|rt        |      |k  rt        |      dz   n|}|j                  ||f        |S # t        $ r Y w xY w)Nr   r   r   )r   rh   r   r@   rf   )	r1  r3  r  r  part	start_strend_strr  r  s	            r-   r-  zFileResponse._parse_ranges  s    (*LL% 	D::<D 43; $!%C!3Iw!)ImmoG*3IS\9Q*3CLS\D\c'lQ&bkucl+%	. 	  s   *AB>>	C
	C
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}\r\n
        Content-Type: {content_type}\r\n
        Content-Range: bytes {start}-{end-1}/{max_size}\r\n
        \r\n
        ..........content...........\r\n
        --{boundary}\r\n
        Content-Type: {content_type}\r\n
        Content-Range: bytes {start}-{end-1}/{max_size}\r\n
        \r\n
        ..........content...........\r\n
        --{boundary}--
        ```
        1   c              3     K   | ]<  \  }}t        t        |            t        t        |d z
              z   z   ||z
  z    > yw)r   N)r?   r>   )r(  r  r  static_header_part_lens      r-   r*  z2FileResponse.generate_multipart.<locals>.<genexpr>'  sK      
 s U_s3sQw<003IIU{
s   AAr   c                L    d d d|  d|dz
   d dj                  d      S )	Nr   z
Content-Type: z
Content-Range: bytes r   r   r   z

r8   )r4   )r  r  r"  rJ   r   s     r-   <lambda>z1FileResponse.generate_multipart.<locals>.<lambda>0  sL    * n WAcAgYaz 2 fY r/   )r?   r>   sum)r*   r  r"  r   rJ   boundary_lenrI   r>  s     ```  @r-   r!  zFileResponse.generate_multipart  sn    0 8}!#l!2S5F!FSQY]I[![ 
 %
 

 
  

 
	
r/   )r9   NNNNN
attachment)rT   zstr | os.PathLike[str]r#   r   r,   r   r$   r   r%   r   r   r   r   zos.stat_result | Noner   r>   r{   r|   )r   zos.stat_resultr{   r|   r   )ry   r   r  r   r  r   r{   r|   )ry   r   r  r   r  r   r  r   r  r   r{   r|   )
ry   r   r  list[tuple[int, int]]r  r   r  r   r{   r|   )r  r>   r{   r   )r
  r>   r  r   r{   rD  )r3  r>   r  r   r{   rD  )
r  zSequence[tuple[int, int]]r"  r>   r   r   rJ   r>   r{   z'tuple[int, Callable[[int, int], bytes]])r   r   r   r  r.   r   r   r  r  r  r  classmethodr  r-  r!  rv   r/   r-   r   r   )  sb   J
 ,0!%,0#-1(4/$/ / *	/
 / */ / +/ #&/ 
/>.*$Xfff!$f+.f;>fRVf	f&"" &" 	"
 " 
"Hg $ $L  8+
)+
 +
 	+

 +
 
1+
r/   r   )C
__future__r   r   http.cookiesra   r   r   r   rd   collections.abcr   r   r   r   r   r	   r
   email.utilsr   r   	functoolsr   	mimetypesr   secretsr   typingr   r   urllib.parser   r   anyio.to_threadstarlette._utilsr   starlette.backgroundr   starlette.concurrencyr   starlette.datastructuresr   r   r   starlette.requestsr   starlette.typesr   r   r   r   r   r   r   r   r   r>   r2   r3   ContentSyncContentStreamr   r   r   	Exceptionr   r   r   rv   r/   r-   <module>rY     s    "    	  
 [ [  3         / / 7 A A / 9 9M$ M$`8  8 .	Ox 	O +

"W% "7+ "%66>$ >$B9 
!) !
O
8 O
r/   