+
    Viq5                     a  0 t $ ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
Ht ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RIHtHt ^ RIHtHt ^ RIHtHt ^ RIHtH t H!t!H"t"H#t#H$t$H%t%H&t&H't'H(t( ^ R	I)H*t* ^ RI+t+^ RI,t,^ R
I-H.t.H/t/ ^ RI0H1t1H2t2H3t3H4t4H5t5 ^ RI6H7t7 ^ RI8H9t9H:t:H;t;H<t<H=t=H>t> ]$'       d   ^ RI?H@t@ ^ RIAHBtB ]P                  ! ]D4      tE]$'       d   ^ RIFHGtG ]"]H]3,          tI]&R,          tJR]3 R2tKR]2 R2tLR]3 R2tMRtNRtO]P                  P                  RR4      tRRtSR]TR&   RR.tUR]TR&   R]7 R 2tV^tW]P                  P                  R!R"7      tZ] ! R# R$4      4       t[ ! R% R&4      t\ ! R' R(4      t]Rt^Rt_^
t` ! R) R*4      ta ! R+ R,4      tb ! R- R.]c4      td] ! R/ R0]d4      4       te] ! R1 R2]d]f4      4       tgR3 R4 lth] ! R5 R64      4       ti] ! R7 R8]i4      4       tj] ! R9 R:]i4      4       tk] ! R; R<]i4      4       tl]! R=R>7       ! R? R@4      4       tmRARB.tnRC RD lto]! R=R>7       ! RE RF4      4       tp^xtqRGtrRtsRH RI lttRJ RK ltuRLRMRNR/RO RP lltvRLRQ/RR RS lltwRT RU ltx ! RV RW]y4      tzRX RY lt{RZ R[ lt|R\ R] lt}R^ R_ lt~] ! R` Ra4      4       t] ! Rb Rc4      4       t]RRd Re ll4       t]RRf Rg ll4       tRh Ri ltRj Rk lt^
tRlt^t. ROt. ROt],EP                  ! RmRnRo7      tRp Rq lt. 3Rr Rs llt. 3Rt Ru lltRRv Rw lltRx. /Ry Rz lltRx. /R{ R| lltR} R~ ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R lt]! R=R>7       ! R R]m4      4       t]! R=R>7       ! R R]m4      4       t]! R=R>7       ! R R4      4       t]! R=R>7       ! R R4      4       tR R ltR R ltRR R lltR# )    )annotationsN)Path)asynccontextmanagercontextmanager)datetimetimezone)	dataclassfield)cached_propertypartial)
AnyAsyncIterator	AwaitableDictIteratorTYPE_CHECKINGOptionalLiteralCallableUnion)	urlencode)aconnect_sseconnect_sse)AuthCredentialsFAL_QUEUE_RUN_HOSTFAL_RUN_HOSTMissingCredentialsErrorfetch_auth_credentials)__version__)Priorityadd_priority_headeradd_timeout_headeradd_hint_headerREQUEST_TIMEOUT_TYPE_HEADERREQUEST_TIMEOUT_HEADER)WebSocketClientProtocol)
Connection)Imagefal_v3cdnfalzhttps:///zwss://zhttps://rest.fal.aizhttps://v3.fal.mediaFAL_CDN_HOSTzhttps://fal.mediaUploadRepositoryIdDEFAULT_UPLOAD_REPOSITORYlist[UploadRepositoryId]"DEFAULT_UPLOAD_FALLBACK_REPOSITORYzfal-client/z	 (python)FAL_CLIENT_EXECUTOR)thread_name_prefixc                  L    ] tR t^Vt$ R]R&   R]R&   R]R&   R]R&   R R ltR	tR
# )CDNTokenstrtoken
token_typebase_upload_urlr   
expires_atc                   V ^8  d   QhRR/# )   returnbool )formats   "P/home/ubuntu/hermes-agent/venv/lib/python3.14/site-packages/fal_client/client.py__annotate__CDNToken.__annotate__]   s     = =D =    c                	d    \         P                  ! \        P                  4      V P                  8  # N)r   nowr   utcr:   selfs   &rA   
is_expiredCDNToken.is_expired]   s    ||HLL)T__<<rD   r?   N)__name__
__module____qualname____firstlineno____annotations__rK   __static_attributes__r?   rD   rA   r5   r5   V   s"    JO= =rD   r5   c                  :    ] tR t^atR R ltR R ltR R ltRtR# )	CDNTokenManagerc                    V ^8  d   QhRRRR/# r<   authr   r=   Noner?   )r@   s   "rA   rB   CDNTokenManager.__annotate__b        
 
_ 
 
rD   c           	     	$   Wn         \        R R R \        P                  P	                  \
        P                  R7      R7      V n        \        P                  ! 4       V n
        \         R2V n        RV P                   P                  RRRR/V n        R# 	 )tzinfor7   r8   r9   r:   z+/storage/auth/token?storage_type=fal-cdn-v3AuthorizationAcceptapplication/jsonContent-TypeN)_authr5   r   minreplacer   rH   _token	threadingLock_lockREST_URL_urlheader_value_headersrJ   rW   s   &&rA   __init__CDNTokenManager.__init__b   sx    
 (||++8<<+@	!
 &/^^%5
j KL	TZZ44(.
rD   c                   V ^8  d   QhRR/# r<   r=   r5   r?   )r@   s   "rA   rB   rY   r   s     
 
 
rD   c           	     	   \         P                  ! 4       ;_uu_ 4       pVP                  V P                  V P                  / R 7      pVP                  4        VP                  4       pRRR4       \        XR,          VR,          VR,          \        P                  ! VR,          4      R7      #   + '       g   i     LO; i)headersjsonNr7   r8   base_urlr:   r_   )
httpxClientpostrl   rn   raise_for_statusrw   r5   r   fromisoformatrJ   clientresponsedatas   &   rA   _refresh_tokenCDNTokenManager._refresh_tokenr   s    \\^^v{{499dmm"{MH%%'==?D 
 w-L) ,--d<.@A	
 	
 ^s   A	B..B>	c                   V ^8  d   QhRR/# rs   r?   )r@   s   "rA   rB   rY      s      8 rD   c                	    V P                   ;_uu_ 4        V P                  P                  4       '       d   V P                  4       V n        V P                  uuR R R 4       #   + '       g   i     R # ; irF   rj   rg   rK   r   rI   s   &rA   	get_tokenCDNTokenManager.get_token   sA    ZZZ{{%%''"113;; ZZZs   AA!!A2	rd   rn   rj   rg   rl   NrM   rN   rO   rP   rp   r   r   rR   r?   rD   rA   rT   rT   a       
 
 rD   rT   c                  :    ] tR t^tR R ltR R ltR R ltRtR# )	AsyncCDNTokenManagerc                    V ^8  d   QhRRRR/# rV   r?   )r@   s   "rA   rB   !AsyncCDNTokenManager.__annotate__   rZ   rD   c           	     	$   Wn         \        R R R \        P                  P	                  \
        P                  R7      R7      V n        \        P                  ! 4       V n
        \         R2V n        RV P                   P                  RRRR/V n        R# r\   )rd   r5   r   re   rf   r   rH   rg   asynciori   rj   rk   rl   rm   rn   ro   s   &&rA   rp   AsyncCDNTokenManager.__init__   sw    
 (||++8<<+@	!
 $+<<>
j KL	TZZ44(.
rD   c                   V ^8  d   QhRR/# rs   r?   )r@   s   "rA   rB   r      s     
 
h 
rD   c           	     	  "   \         P                  ! 4       ;_uu_4       GR j  xL
 pVP                  V P                  V P                  / R7      G R j  xL
 pVP                  4        VP                  4       pR R R 4      GR j  xL
  \        XR,          VR,          VR,          \        P                  ! VR,          4      R7      #  L Lu LG  + GR j  xL 
 '       g   i     L^; i5i)Nru   r7   r8   rx   r:   r_   )
ry   AsyncClientr{   rl   rn   r|   rw   r5   r   r}   r~   s   &   rA   r   #AsyncCDNTokenManager._refresh_token   s     $$&&&&#[[DMMPR[SSH%%'==?D '&
 w-L) ,--d<.@A	
 	
 'S '&&&s]   "C*CC*,CC
$C9C*CAC*
CC*C'	C
C'	 C'	"C*c                   V ^8  d   QhRR/# rs   r?   )r@   s   "rA   rB   r      s       rD   c                	@  "   V P                   ;_uu_4       GR j  xL
  V P                  P                  4       '       d   V P                  4       G R j  xL
 V n        V P                  uuR R R 4      GR j  xL
  #  L_ L) L	  + GR j  xL 
 '       g   i     R # ; i5irF   r   rI   s   &rA   r   AsyncCDNTokenManager.get_token   sT     ::::{{%%''$($7$7$99;; ::9 :::s\   BA;B4BA=B(B5A?6B=B?BB	B

B	B		Br   Nr   r?   rD   rA   r   r      r   rD   r   c                      ] tR t^tRRRRRR/R R llt]R R l4       t]R	 R
 l4       t]R R l4       tR t	R R lt
R R lt]RRRRRR/R R ll4       t]RRRRRR/R R ll4       tRtR# )MultipartUpload
chunk_sizeNcontent_typemax_concurrencyc               4    V ^8  d   QhRRRRRRRRR	R
RRRR/# )r<   	file_namer6   r   httpx.Clienttoken_managerrT   r   
int | Noner   
str | Noner   r=   rX   r?   )r@   s   "rA   rB   MultipartUpload.__annotate__   sR     % % % 	%
 '% % !% $% 
%rD   c               	    Wn         W n        W0n        T;'       g    \        V n        T;'       g    R V n        T;'       g    \        V n        RV n        RV n	        . V n
        R# application/octet-streamNr   _client_token_managerMULTIPART_CHUNK_SIZEr   r   MULTIPART_MAX_CONCURRENCYr   _access_url
_upload_id_partsrJ   r   r   r   r   r   r   s   &$$$$$$rA   rp   MultipartUpload.__init__   \     #+$<<(<(FF,F.KK2K'+&*"$rD   c                   V ^8  d   QhRR/# r<   r=   r6   r?   )r@   s   "rA   rB   r              C  rD   c                	T    V P                   '       g   \        R 4      hV P                   # zUpload not initiatedr   
ValueErrorrI   s   &rA   
access_urlMultipartUpload.access_url   &    344rD   c                   V ^8  d   QhRR/# r   r?   )r@   s   "rA   rB   r            3 rD   c                	T    V P                   '       g   \        R 4      hV P                   # r   r   r   rI   s   &rA   	upload_idMultipartUpload.upload_id   !    344rD   c                   V ^8  d   QhRR/# r<   r=   dict[str, str]r?   )r@   s   "rA   rB   r      s     
 
n 
rD   c                	t    V P                   P                  4       pR VP                   RVP                   2RR/# )r`    
User-Agent	fal/0.1.0r   r   r8   r7   rJ   r7   s   & rA   auth_headersMultipartUpload.auth_headers   s@    ##--/ 0 015;;-@+
 	
rD   c                	2   V P                   P                  4       pVP                   R 2p\        V P                  RV/ V P
                  CRRRV P                  RV P                  /CR7      pVP                  4       pVR,          V n	        VR,          V n
        R	# )
/files/upload/multipartPOSTra   rb   rc   X-Fal-File-Namerv   r   uploadIdN)r   r   r9   _maybe_retry_requestr   r   r   r   rw   r   r   )rJ   r7   urlr   results   &    rA   createMultipartUpload.create   s    ##--/&&''>?'LL##, 1 1!4>>		

 !,/ ,rD   c               $    V ^8  d   QhRRRRRR/# r<   part_numberintr   bytesr=   rX   r?   )r@   s   "rA   rB   r      s!     
 
s 
% 
D 
rD   c           
     	   V P                    R V P                   RV 2p\        V P                  RV/ V P                  CRV P
                  RR/CVRR7      pVP                  R,          pV P                  P                  R	VRV/4       R# )
/multipart/r,   PUTrc   Accept-EncodingidentityNrv   contenttimeoutetag
partNumber)	r   r   _requestr   r   r   rv   r   append)rJ   r   r   r   r   r   s   &&&   rA   upload_partMultipartUpload.upload_part   s    !T^^,<Ak]KLL## 1 1!:
 
 'k	
rD   c                   V ^8  d   QhRR/# r   r?   )r@   s   "rA   rB   r     s     	 	# 	rD   c                	    V P                    R V P                   R2p\        V P                  RVV P                  RV P
                  /R7       V P                   # )r   	/completer   partsru   )r   r   r   r   r   r   )rJ   r   s   & rA   completeMultipartUpload.complete  sT    !T^^,<IFLL%%4;;'	
 rD   c               4    V ^8  d   QhRRRRRRRRR	R
RRRR/# )r<   r   r   r   rT   r   r6   r   r   r   r   r   r   r   r?   )r@   s   "rA   rB   r     sR     #$ #$ #$ '	#$
 #$ #$ !#$ #$ $#$rD   c          
     	   ^ RI pV ! VVVVVVR7      p	V	P                  4        \        P                  ! \	        V4      V	P
                  ,          4      p
VP                  P                  V	P                  R7      ;_uu_ 4       p. p\        ^V
^,           4       F\  pV^,
          V	P
                  ,          pWNWP
                  ,            pVP                  VP                  V	P                  W4      4       K^  	  VP                  P                  V4       F  pVP                  4        K  	  RRR4       V	P                  4       #   + '       g   i     T	P                  4       # ; i)r   Nr   r   r   r   r   r   max_workers)concurrent.futuresr   mathceillenr   futuresThreadPoolExecutorr   ranger   submitr   as_completedr   r   )clsr   r   r   r   r   r   r   
concurrent	multipartr   executorr   r   startfutures   &$$$$$$$        rA   saveMultipartUpload.save  s2    	"'!%+
	 			#d)i&:&::;22!11 3 
 
G$Q	2$qI,@,@@E,@,@$@AOOI$9$9;M  3 %,,99'B C
 !!##
 
 !!##s   B(EE 	c               4    V ^8  d   QhRRRRRRRRR	R
RRRR/# )r<   r   r   r   rT   	file_path
str | Pathr   r   r   r   r   r=   r6   r?   )r@   s   "rA   rB   r   5  sR     ($ ($ ($ '	($
 ($ ($ !($ $($ 
($rD   c          	     	  aa ^ RI p\        P                  P                  S4      p\        P                  P	                  S4      p	V ! VVVVVVR7      oSP                  4        \        P                  ! V	SP                  ,          4      p
VP                  P                  SP                  R7      ;_uu_ 4       p. p\        ^V
^,           4       F-  pR VV3R llpVP                  VP                  W4      4       K/  	  VP                  P                  V4       F  pVP!                  4        K  	  RRR4       SP#                  4       #   + '       g   i     SP#                  4       # ; i)r   Nr   r   c                    V ^8  d   QhRRRR/# )r<   pnr   r=   rX   r?   )r@   s   "rA   rB   /MultipartUpload.save_file.<locals>.__annotate__S  s     8 8S 8T 8rD   c                  < \        SR 4      ;_uu_ 4       pV ^,
          SP                  ,          pVP                  V4       VP                  SP                  4      pSP	                  W4       RRR4       R#   + '       g   i     R# ; irbNopenr   seekreadr   )r  fr  r   r  r  s   &   rA   _upload_part/MultipartUpload.save_file.<locals>._upload_partS  sb    i..!!#a9+?+? ?u vvi&:&:;!--b7	 /...s   AA88B		)r   ospathbasenamegetsizer   r   r   r   r   r   r   r   r   r   r  r   r   )r  r   r   r  r   r   r   r  r   sizer   r  r   r   r  r  r  s   &$$d$$$         @rA   	save_fileMultipartUpload.save_file4  s/    	"GG$$Y/	wwy)'!%+
	 			$!5!55622!11 3 
 
G$Q	28 8 x|IJ  3 %,,99'B C
  !!##!
 
  !!##s   8A9E		E(		r   r   r   r   r   r   r   r   r   rM   rN   rO   rP   rp   propertyr   r   r   r   r   r   classmethodr  r   rR   r?   rD   rA   r   r      s    % "&% $(% '+%(    
  
 
 
-$
0	 #$ $(#$ "&#$ '+#$ #$J ($ "&($ $(($ '+($ ($rD   r   c                      ] tR tRtRRRRRR/R R llt]R R	 l4       t]R
 R l4       t]R R l4       tR t	R R lt
R R lt]RRRRRR/R R ll4       t]RRRRRR/R R ll4       tRtR# )AsyncMultipartUploadi`  r   Nr   r   c               4    V ^8  d   QhRRRRRRRRR	R
RRRR/# )r<   r   r6   r   httpx.AsyncClientr   r   r   r   r   r   r   r=   rX   r?   )r@   s   "rA   rB   !AsyncMultipartUpload.__annotate__a  sR     % % % "	%
 ,% % !% $% 
%rD   c               	    Wn         W n        W0n        T;'       g    \        V n        T;'       g    R V n        T;'       g    \        V n        RV n        RV n	        . V n
        R# r   r   r   s   &$$$$$$rA   rp   AsyncMultipartUpload.__init__a  r   rD   c                   V ^8  d   QhRR/# r   r?   )r@   s   "rA   rB   r*  v  r   rD   c                	T    V P                   '       g   \        R 4      hV P                   # r   r   rI   s   &rA   r   AsyncMultipartUpload.access_urlu  r   rD   c                   V ^8  d   QhRR/# r   r?   )r@   s   "rA   rB   r*  |  r   rD   c                	T    V P                   '       g   \        R 4      hV P                   # r   r   rI   s   &rA   r   AsyncMultipartUpload.upload_id{  r   rD   c                   V ^8  d   QhRR/# r   r?   )r@   s   "rA   rB   r*    s     
 
N 
rD   c                	   "   V P                   P                  4       G R j  xL
 pRVP                   RVP                   2RR/#  L#5i)Nr`   r   r   r   r   r   s   & rA   r   !AsyncMultipartUpload.auth_headers  sK     ))3355 0 015;;-@+
 	
 6s   AA$Ac                	z  "   V P                   P                  4       G R j  xL
 pVP                   R2pV P                  G R j  xL
 p\	        V P
                  RV/ VCRRRV P                  RV P                  /CR7      G R j  xL
 pVP                  4       pVR,          V n	        VR	,          V n
        R #  L Ls L65i)
Nr   r   ra   rb   rc   r   r   r   r   )r   r   r9   r   _async_maybe_retry_requestr   r   r   rw   r   r   )rJ   r7   r   rv   r   r   s   &     rA   r   AsyncMultipartUpload.create  s     ))3355&&''>?)))3LL, 1 1!4>>		

 

 !,/ ,! 6)

s3   B;B5"B;B7>B;B93B;7B;9B;c               $    V ^8  d   QhRRRRRR/# r   r?   )r@   s   "rA   rB   r*    s!     
 
S 
 
$ 
rD   c           
     	H  "   V P                    R V P                   RV 2pV P                  G Rj  xL
 p\        V P                  RV/ VCRV P
                  RR/CVRR7      G Rj  xL
 pVP                  R,          pV P                  P                  R	VRV/4       R#  Lm L:5i)
r   r,   Nr   rc   r   r   r   r   r   )	r   r   r   _async_requestr   r   rv   r   r   )rJ   r   r   r   rv   r   r   s   &&&    rA   r    AsyncMultipartUpload.upload_part  s     !T^^,<Ak]K)))'LL 1 1!:
 
 
 'k	
! *
s!   .B"B4B"%B &9B" B"c                   V ^8  d   QhRR/# r   r?   )r@   s   "rA   rB   r*    s     
 
 
rD   c                	   "   V P                    R V P                   R2pV P                  G Rj  xL
 p\        V P                  RVVRV P
                  /R7      G Rj  xL
  V P                   #  L> L5i)r   r   Nr   r   ru   )r   r   r   r7  r   r   )rJ   r   rv   s   &  rA   r   AsyncMultipartUpload.complete  ss     !T^^,<IF)))(LL4;;'
 	
 	
  *	
s!   ,A1A--A1A/A1/A1c               8    V ^8  d   QhRRRRRRRRR	R
RRRRRR/# )r<   r   r)  r   r   r   r6   r   r   r   r   r   r   r   r=   r?   )r@   s   "rA   rB   r*    s\     (* (* "(* ,	(*
 (* (* !(* (* $(* 
(*rD   c          	     	F  aaa"   V ! VVVVVVR 7      oSP                  4       G Rj  xL
  \        P                  ! \        S4      SP                  ,          4      pR VV3R llp	\        ^V^,           4       U
u. uF  p
\        P                  ! V	! V
4      4      NK!  	  pp
\        P                  ! SP                  4      oV3R lp\        P                  ! V Uu. uF
  q! V4      NK  	  up!  G Rj  xL
  SP                  4       G Rj  xL
 #  Lu up
i u upi  L( L5i)r   Nc                    V ^8  d   QhRRRR/# r<   r   r   r=   rX   r?   )r@   s   "rA   rB   /AsyncMultipartUpload.save.<locals>.__annotate__  s     	< 	<3 	<4 	<rD   c                   <"   V ^,
          SP                   ,          pSWSP                   ,            pSP                  W4      G Rj  xL
  R#  L5i)   N)r   r   )r   r  chunkr   r  s   &  rA   r   .AsyncMultipartUpload.save.<locals>.upload_part  sC      1_	(<(<<E)=)=!=>E'';;;s   AAAAc                   <"   S;_uu_4       GR j  xL
  V G R j  xL
  R R R 4      GR j  xL
  R #  L  L L
  + GR j  xL 
 '       g   i     R # ; i5irF   r?   tasksems   &rA   bounded_upload1AsyncMultipartUpload.save.<locals>.bounded_upload  +     ss

 ss sssM   A3A959A7A9AA	A 
A	A		A)r   r   r   r   r   r   r   create_task	Semaphorer   gatherr   )r  r   r   r   r   r   r   r   r   r   r   tasksrM  rK  r  rL  s   &$$$d$$$      @@rA   r  AsyncMultipartUpload.save  s	     '!%+
	    		#d)i&:&::;	< 	<  %Q	2
2 K 892 	 
 	 9 9:	 nnF~d3FGGG'')))+ 	!
 GG)sL   "D!DAD!;%D <D!D,D!4D5D!DD!D!D!c               4    V ^8  d   QhRRRRRRRRR	R
RRRR/# )r<   r   r)  r   r   r  r  r   r   r   r   r   r=   r6   r?   )r@   s   "rA   rB   r*    sR     +* +* "+* ,	+*
 +* +* !+* $+* 
+*rD   c          	     	  aaa"   \         P                  P                  S4      p\         P                  P                  S4      pV ! VVVVVVR 7      oSP	                  4       G Rj  xL
  \
        P                  ! VSP                  ,          4      p	R VV3R llp
\        ^V	^,           4       Uu. uF  p\        P                  ! V
! V4      4      NK!  	  pp\        P                  ! SP                  4      oV3R lp\        P                  ! V Uu. uF
  q! V4      NK  	  up!  G Rj  xL
  SP                  4       G Rj  xL
 #  Lu upi u upi  L( L5i)r   Nc                    V ^8  d   QhRRRR/# rC  r?   )r@   s   "rA   rB   4AsyncMultipartUpload.save_file.<locals>.__annotate__  s     	? 	?3 	?4 	?rD   c                4  <"   \        SR 4      ;_uu_ 4       pV ^,
          SP                  ,          pVP                  V4       VP                  SP                  4      pSP	                  W4      G Rj  xL
  RRR4       R#  L  + '       g   i     R# ; i5ir  r  )r   r  r  r   r  r  s   &   rA   r   3AsyncMultipartUpload.save_file.<locals>.upload_part  st     i&&!$qI,@,@@uvvi223++K>>>	 '& ?	 '&&s/   BAB3B4B8
BBB		Bc                   <"   S;_uu_4       GR j  xL
  V G R j  xL
  R R R 4      GR j  xL
  R #  L  L L
  + GR j  xL 
 '       g   i     R # ; i5irF   r?   rJ  s   &rA   rM  6AsyncMultipartUpload.save_file.<locals>.bounded_upload  rO  rP  )r  r  r  r  r   r   r   r   r   r   rQ  rR  r   rS  r   )r  r   r   r  r   r   r   r   r  r   r   r   rT  rM  rK  r  rL  s   &$$d$$$        @@rA   r   AsyncMultipartUpload.save_file  s+     GG$$Y/	wwy)'!%+
	    		$!5!556	? 	?  %Q	2
2 K 892 	 
 	 9 9:	 nnF~d3FGGG'')))/ 	!
 GG)sO   A E%E&A
E0%E<EE!E)E*EEEEEr"  r#  r?   rD   rA   r'  r'  `  s    % "&% $(% '+%(    
  
 
 
-&
2
 (* $((* "&(* '+(* (*T +* "&+* $(+* '++* +*rD   r'  c                      ] tR tRtRtR# )FalClientErrori  r?   NrM   rN   rO   rP   rR   r?   rD   rA   r`  r`    s    rD   r`  c                  Z    ] tR tRt$ R]R&   R]R&   R]R&   R]R	&   R
tR]R&   R R ltRtR
# )FalClientHTTPErrori  r6   messager   status_coder   response_headershttpx.Responser   Nr   
error_typec                   V ^8  d   QhRR/# r   r?   )r@   s   "rA   rB   FalClientHTTPError.__annotate__'  s     ! ! !rD   c                	    V P                    # rF   )rd  rI   s   &rA   __str__FalClientHTTPError.__str__'  s    ,, rD   r?   )rM   rN   rO   rP   rQ   rh  rl  rR   r?   rD   rA   rc  rc    s-    L$$!J
!! !rD   rc  c                  <    ] tR tRt$ R]R&   RtR]R&   R R ltR	tR# )
FalClientTimeoutErrori+  floatr   NOptional[str]
request_idc                   V ^8  d   QhRR/# r   r?   )r@   s   "rA   rB   "FalClientTimeoutError.__annotate__0  s     W W WrD   c                	x    V P                   f   RV P                   R2# RV P                    RV P                   R2# )NzRequest timed out after z secondszRequest z timed out after )rr  r   rI   s   &rA   rl  FalClientTimeoutError.__str__0  s>    ??"-dll^8DDdoo..?~XVVrD   r?   )rM   rN   rO   rP   rQ   rr  rl  rR   r?   rD   rA   ro  ro  +  s    N $J$W WrD   ro  c                    V ^8  d   QhRRRR/# )r<   r   rg  r=   rX   r?   )r@   s   "rA   rB   rB   7  s       4 rD   c           	         V P                  4        R #   \        P                   d   pR pT P                  p T P	                  4       pM  \
         d    R p Mi ; i\        T\        4      '       d.   TP                  RT P                  4      pTP                  R4      pTf   T P                  P                  R4      p\        TT P                  \        T P                  4      T TR7      ThR p?ii ; i)Ndetailrh  zx-fal-error-type)r   rh  )r|   ry   HTTPStatusErrortextrw   r   
isinstancedictgetrv   rc  re  )r   excrh  msgbodys   &    rA   _raise_for_statusr  7  s    !!#   
mm	==?D 	D	 dD!!((8X]]3C,/J!))--.@AJ    !!"!
 	!s8    C1C,A	C,	AC,ABC,,C1c                      ] tR tRtRtR# )StatusiU  r?   Nra  r?   rD   rA   r  r  U  s    rD   r  c                  &    ] tR tRt$ RtR]R&   RtR# )QueuediY  zIndicates the request is enqueued and waiting to be processed. The position
field indicates the relative position in the queue (0-indexed).r   positionr?   N)rM   rN   rO   rP   __doc__rQ   rR   r?   rD   rA   r  r  Y  s    G MrD   r  c                  4    ] tR tRt$ Rt]! 4       tR]R&   RtR# )
InProgressia  zIndicates the request is currently being processed. If the status operation called
with the `with_logs` parameter set to True, the logs field will be a list of
log objects.list[dict[str, Any]] | Nonelogsr?   N)	rM   rN   rO   rP   r  r
   r  rQ   rR   r?   rD   rA   r  r  a  s    
 ).D
%/rD   r  c                      ] tR tRt$ Rt]! 4       tR]R&   ]! 4       tR]R&   ]! RR7      t	R	]R
&   ]! RR7      t
R	]R&   RtR# )	Completedik  a&  Indicates the request has been completed and the result can be gathered. The logs field will
contain the logs if the status operation was called with the `with_logs` parameter set to True. Metrics
might contain the inference time, and other internal metadata (number of tokens
processed, etc.).r  r  dict[str, Any]metricsN)defaultr   errorrh  r?   )rM   rN   rO   rP   r  r
   r  rQ   r  r  rh  rR   r?   rD   rA   r  r  k  s@    
 ).D
%/#gG^%d+E:+"40J
0rD   r  T)frozenc                      ] tR tRt$ R]R&   ]! RR7      tR]R&   ]! RR7      tR]R&   ]! RR7      tR]R&   R	 R
 lt	Rt
R# )_BaseRequestHandleix  r6   rr  Freprresponse_url
status_url
cancel_urlc                    V ^8  d   QhRRRR/# )r<   r   AnyJSONr=   r  r?   )r@   s   "rA   rB   _BaseRequestHandle.__annotate__  s     B B' Bf BrD   c                	X   VR ,          R8X  d   \        VR,          R7      # VR ,          R8X  d   \        VR,          R7      # VR ,          R8X  dG   VP                  R/ 4      p\        VR,          VVP                  R	4      VP                  R
4      R7      # \	        RVR ,           24      h)statusIN_QUEUEqueue_position)r  IN_PROGRESSr  )r  	COMPLETEDr  r  rh  )r  r  r  rh  zUnknown status: )r  r  r~  r  r   )rJ   r   r  s   && rA   _parse_status _BaseRequestHandle._parse_status  s    >Z'4(8#9::(^},4<00(^{*hhy"-G&\hhw'88L1	  /X/?@AArD   r?   N)rM   rN   rO   rP   rQ   r
   r  r  r  r  rR   r?   rD   rA   r  r  x  s@    O5)L#)'J''J'B BrD   r  	workflowscomfyc                    V ^8  d   QhRRRR/# )r<   idr6   r=   r?   )r@   s   "rA   rB   rB     s     X Xc Xc XrD   c                    ^ RI pV P                  R4      p\        V4      ^8  d   V # VP                  RV 4      pV'       d   VP	                  4       w  rEV RV 2# \        RV  R24      h)r   Nr,   z^([0-9]+)-([a-zA-Z0-9-]+)$zInvalid app id: z*. Must be in the format <appOwner>/<appId>)resplitr   matchgroupsr   )r  r  r   r  	app_ownerapp_ids   &     rA   _ensure_app_id_formatr    sk    HHSME
5zA~	HH2B7E!LLN	AfX&&
't+UV
WWrD   c                  V    ] tR tRt$ R]R&   R]R&   R]R&   R]R&   ]R R	 l4       tR
tR# )AppIdi  r6   owneraliasrq  r  	namespacec                    V ^8  d   QhRRRR/# )r<   endpoint_idr6   r=   r  r?   )r@   s   "rA   rB   AppId.__annotate__  s     
 
3 
5 
rD   c                	T   \        V4      pVP                  R 4      pV^ ,          \        9   dB   T ! V^,          V^,          R P                  VR,          4      ;'       g    RV^ ,          R7      # T ! V^ ,          V^,          R P                  VR,          4      ;'       g    RRR7      # )r,   :   NNN)r  r  r  r  :r<   NN)r  r  APP_NAMESPACESjoin)r  r  normalized_idr   s   &&  rA   from_endpoint_idAppId.from_endpoint_id  s    -k:##C(8~%AhAhXXeBi(00D(	  ((%)$,,	
 	
rD   r?   N)rM   rN   rO   rP   rQ   r%  r  rR   r?   rD   rA   r  r    s*    JJ

 
rD   r  g     V@c                    V ^8  d   QhRRRR/# )r<   r  r  r=   r6   r?   )r@   s   "rA   rB   rB     s     < <U <s <rD   c                    V P                   '       d   V P                    R 2MRpV P                  '       d   R V P                   2MRpV V P                   R V P                   V 2# )r,   r]   )r  r  r  r  )r  prefixsuffixs   &  rA   _format_app_pathr    s]    '-'7'7'7  !#RF"(+++q2FXfll^1V\\N6(;;rD   c                    V ^8  d   QhRRRR/# )r<   valuer   r=   r   r?   )r@   s   "rA   rB   rB     s     	 	J 	: 	rD   c                x    V f   R # \         w  rYu;8:  d   V8:  g   M \        RV RV R24      h\        V 4      # )Nzmax_buffering must be between z and z (inclusive))REALTIME_MAX_BUFFERINGr   r6   )r  	min_value	max_values   &  rA   _serialize_max_bufferingr    sH    }1I+)+,YKuYK|T
 	
 u:rD   r  r]   max_bufferingc          
     ,    V ^8  d   QhRRRRRRRRRR/# )	r<   applicationr6   r7   r   r  r  r   r=   r?   )r@   s   "rA   rB   rB     s:       	
  	rD   c                  \         P                  V 4      p\        V4      p\         V 2pV'       d    VR VP	                  R 4      ,           ,          p/ pV'       d   WR&   \        V4      pVe   WR&   V'       d   V R\        V4       2# V# )r,   fal_jwt_tokenr  ?)r  r  r  REALTIME_URL_FORMATlstripr  r   )	r  r7   r  r  r  app_pathr   queryserialized_bufferings	   &&$$     rA   _build_runner_ws_urlr    s     ##K0F'H !(
,CsT[[%%%E!&o3MB'!5oa	%()**JrD   realtimec          
     ,    V ^8  d   QhRRRRRRRRRR/# )	r<   r  r6   r7   r   r  r   r  r=   r?   )r@   s   "rA   rB   rB     s:       
  	rD   c                    \        V VVVR 7      # )r  r  )r  )r  r7   r  r  s   &&&$rA   _build_realtime_urlr    s      #	 rD   c                    V ^8  d   QhRRRR/# )r<   r   r   r=   r6   r?   )r@   s   "rA   rB   rB     s     D D D DrD   c                ,   \        V \        4      '       d   V # \        V \        4      '       d]   \        V P                  R 4      \        4      '       d
   V R ,          # \        V P                  R4      \        4      '       d
   V R,          # \	        R4      h)r7   ry  z)Unexpected realtime token response format)r|  r6   r}  r~  RuntimeError)r   s   &rA   _parse_token_responser    sm    $$dhhw'--= dhhx(#..>!
B
CCrD   c                  6   a  ] tR tRtRtRR V 3R llltRtV ;t# )RealtimeErrori  z9Raised when the realtime endpoint sends an error payload.c               $    V ^8  d   QhRRRRRR/# )r<   r  r6   reasonr   payloadzOptional[dict[str, Any]]r?   )r@   s   "rA   rB   RealtimeError.__annotate__
  s(     
" 
"
" 
" *	
"rD   c                	   < Wn         T;'       g    R V n        T;'       g    / V n        V P                  '       g   TMV RV P                   2p\        SV `  V4       R# )r]   z: N)r  r  r  superrp   )rJ   r  r  r  rd  	__class__s   &&&& rA   rp   RealtimeError.__init__
  sO     
ll}}"#{{{%5'DKK=0I!rD   )r  r  r  )NN)rM   rN   rO   rP   r  rp   rR   __classcell__)r  s   @rA   r  r    s    C
" 
" 
"rD   r  c                    V ^8  d   QhRRRR/# )r<   rd  r   r=   r   r?   )r@   s   "rA   rB   rB     s     / /E /c /rD   c                0    ^ RI pVP                  V RR7      # )r   NF)raw)msgpackunpackbrd  r  s   & rA   msgpack_decode_messager    s    ??7?..rD   c                    V ^8  d   QhRRRR/# )r<   rd  r   r=   r   r?   )r@   s   "rA   rB   rB     s     5 5C 5E 5rD   c                0    ^ RI pVP                  V RR7      # )r   NT)use_bin_type)r  packbr  s   & rA   msgpack_encode_messager    s    ==t=44rD   c               $    V ^8  d   QhRRRRRR/# )r<   rd  r   decode_messageCallable[[bytes], Any] | Noner=   dict[str, Any] | Noner?   )r@   s   "rA   rB   rB   #  s$         "?  rD   c                   \        V \        4      '       d   V P                  4       p \        V \        \        34      '       d   T;'       g    \
        pV! V 4      # \        V \        4      '       dg    \        P                  ! V 4      pTP                  R 4      pTR8X  d-   \        TP                  RR4      TP                  R4      T4      hTR8X  d   R# T# RV /#   \        P                   d
    R RRT /u # i ; i)	typer{  r  zx-fal-errorr  UNKNOWN_ERRORr  zx-fal-messageN)r|  
memoryviewtobytesr   	bytearrayr  r6   rw   loadsJSONDecodeErrorr~  r  )rd  r  decoder  msg_types   &&   rA   _decode_realtime_messager  #  s     ':&&//#'E9-..99#9g'3	8jj)G ;;v&}$G_5H% 
 &w ## 	8FIw77	8s   2C C98C9c               $    V ^8  d   QhRRRRRR/# )r<   rd  r  encode_messageCallable[[Any], bytes] | Noner=   r   r?   )r@   s   "rA   rB   rB   B  s&      1 rD   c                2    T;'       g    \         pV! V 4      # rF   )r  )rd  r	  encodes   && rA   _encode_realtime_messager  B  s     555F'?rD   c                  ~    ] tR tRt$ RtR]R&   RtR]R&   RtR]R	&   R
 R ltR R lt	R R lt
R R ltR R ltRtR# )RealtimeConnectioniJ  z(Synchronous realtime connection wrapper.z'Connection'_wsNr
  _encode_messager  _decode_messagec                    V ^8  d   QhRRRR/# r<   	argumentsr  r=   rX   r?   )r@   s   "rA   rB   RealtimeConnection.__annotate__R  s      n  rD   c                	f    \        WP                  4      pV P                  P                  V4       R # rF   r  r  r  sendrJ   r  r  s   && rA   r  RealtimeConnection.sendR  s"    *96J6JKgrD   c                   V ^8  d   QhRR/# r<   r=   r  r?   )r@   s   "rA   rB   r  V  s      + rD   c                	(     V P                   P                  4       p\        YP                  4      pTf   K7  T#   \         dM   p^ RIHpHp \        Y$4      '       d    Rp?R# \        Y#4      '       d   \        R\        T4      4      Thh Rp?ii ; i)TConnectionClosedConnectionClosedOKNCONNECTION_CLOSEDr  recv	Exceptionwebsockets.exceptionsr   r!  r|  r  r6   r  r  rJ   r   r  r   r!  decodeds   &     rA   r$  RealtimeConnection.recvV  s    88==? /x9M9MNGN  

 c66c44'(;SXFCO
s   : BB$(BBc                   V ^8  d   QhRR/# r<   r=   rX   r?   )r@   s   "rA   rB   r  j  s      t rD   c                	h    \        V P                  R R4      p\        V4      '       d
   V! 4        R# R# closeNgetattrr  callablerJ   r.  s   & rA   r.  RealtimeConnection.closej  s'    '40E??G rD   c                   V ^8  d   QhRR/# )r<   r=   r  r?   )r@   s   "rA   rB   r  o  s      - rD   c                	    V # rF   r?   rI   s   &rA   	__enter__RealtimeConnection.__enter__o  s    rD   c                   V ^8  d   QhRR/# r+  r?   )r@   s   "rA   rB   r  r  s      T rD   c                	&    V P                  4        R # rF   r.  rJ   exc_typer  tbs   &&&&rA   __exit__RealtimeConnection.__exit__r  s    

rD   r?   )rM   rN   rO   rP   r  rQ   r  r  r  r$  r.  r6  r>  rR   r?   rD   rA   r  r  J  s?    2	59O2959O29(
 rD   r  c                  ~    ] tR tRt$ RtR]R&   RtR]R&   RtR]R	&   R
 R ltR R lt	R R lt
R R ltR R ltRtR# )AsyncRealtimeConnectioniv  z)Asynchronous realtime connection wrapper.z'WebSocketClientProtocol'r  Nr
  r  r  r  c                    V ^8  d   QhRRRR/# r  r?   )r@   s   "rA   rB   $AsyncRealtimeConnection.__annotate__~  s     % %N %t %rD   c                	   "   \        WP                  4      pV P                  P                  V4      G R j  xL
  R #  L5irF   r  r  s   && rA   r  AsyncRealtimeConnection.send~  s+     *96J6JKhhmmG$$$s   4?=?c                   V ^8  d   QhRR/# r  r?   )r@   s   "rA   rB   rC    s      1 rD   c                	D  "     V P                   P                  4       G Rj  xL
 p\        YP                  4      pTf   K?  T#  L!  \         dM   p^ RIHpHp \        Y$4      '       d    Rp?R# \        Y#4      '       d   \        R\        T4      4      Thh Rp?ii ; i5i)TNr  r"  r#  r'  s   &     rA   r$  AsyncRealtimeConnection.recv  s     !%0 /x9M9MNGN 1 

 c66c44'(;SXFCO
sC   B A AA B A BB*B 0(BBB c                   V ^8  d   QhRR/# r+  r?   )r@   s   "rA   rB   rC    s      T rD   c                	   "   \        V P                  R R4      p\        V4      '       d   V! 4       G Rj  xL
  R# R#  L5ir-  r/  r2  s   & rA   r.  AsyncRealtimeConnection.close  s1     '40E??'MM s   3A >	A c                   V ^8  d   QhRR/# )r<   r=   rA  r?   )r@   s   "rA   rB   rC    s      "9 rD   c                	   "   V # 5irF   r?   rI   s   &rA   
__aenter__"AsyncRealtimeConnection.__aenter__  s
     s   c                   V ^8  d   QhRR/# r+  r?   )r@   s   "rA   rB   rC    s      D rD   c                	B   "   V P                  4       G R j  xL
  R #  L5irF   r:  r;  s   &&&&rA   	__aexit__!AsyncRealtimeConnection.__aexit__  s     jjls   r?   )rM   rN   rO   rP   r  rQ   r  r  r  r$  r.  rN  rR  rR   r?   rD   rA   rA  rA  v  s?    3	""59O2959O29%(
 rD   rA  c               $    V ^8  d   QhRRRRRR/# )r<   r   r6   rv   dict[str, str] | Noner=   Iterator['Connection']r?   )r@   s   "rA   rB   rB     s$      	,rD   c              #     "   ^ RI Hp VP                  V V\        RR7      ;_uu_ 4       pVx  RRR4       R#   + '       g   i     R# ; i5i)r   )r   Nadditional_headersopen_timeoutmax_size)websockets.syncr   connectREALTIME_OPEN_TIMEOUT)r   rv   r   wss   &&  rA   _connect_sync_wsr`    sJ      '	"*	 
 
 

 

 
 
 
s   (A9
AA
		Ac               $    V ^8  d   QhRRRRRR/# )r<   r   r6   rv   rU  r=   (AsyncIterator['WebSocketClientProtocol']r?   )r@   s   "rA   rB   rB     s$      	,-rD   c                  "   ^ RI pVP                  V V\        RR7      ;_uu_4       GRj  xL
 pV5x  RRR4      GRj  xL
  R#  L L  + GRj  xL 
 '       g   i     R# ; i5i)r   NrX  )
websocketsr]  r^  )r   rv   rd  r_  s   &&  rA   _connect_async_wsre    s[      !!"*	 "   
 
     sI   *A)AA)AA)A
A)
A)A&	A
A&	A&	 	A)c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r<   r   r   methodr6   r   kwargsr   r=   rg  r?   )r@   s   "rA   rB   rB     s4      "%,/;>rD   c                B    V P                   ! W3/ VB p\        V4       V# rF   requestr  r   rg  r   rh  r   s   &&&, rA   r   r     s$     ~~f4V4HhOrD   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r<   r   r)  rg  r6   r   rh  r   r=   rg  r?   )r@   s   "rA   rB   rB     s4      '*14@CrD   c                ^   "   V P                   ! W3/ VB G R j  xL
 p\        V4       V#  L5irF   rj  rl  s   &&&, rA   r;  r;    s/      ^^F:6::HhO ;s   -+-皙?      ^@g      >@)r]  c                    V ^8  d   QhRRRR/# )r<   r   rg  r=   r>   r?   )r@   s   "rA   rB   rB     s       4 rD   c                    V P                   \        9  d   R# RV P                  9   d   R# RV P                  9   d   R# R# )z-Tell apart ingress errors from client errors.Fzx-fal-request-idnginxT)re  INGRESS_ERROR_CODESrv   r{  )r   s   &rA   _is_ingress_errorru    s;     #66X--- (--rD   c               $    V ^8  d   QhRRRRRR/# )r<   r   rg  extra_retry_codes	list[int]r=   r>   r?   )r@   s   "rA   rB   rB     s&        
rD   c                    V P                   R 8X  d(   V P                  P                  \        4      '       d   R# \	        V 4      '       d   R# V P                   \
        9   g   V P                   V9   d   R# R# )  FT)re  rv   r~  r$   ru  RETRY_CODES)r   rw  s   &&rA   _should_retry_responser|    sb    
 s"x'7'7';';#( ( ""{*h.B.BFW.WrD   c               $    V ^8  d   QhRRRRRR/# )r<   r  r%  rw  rx  r=   r>   r?   )r@   s   "rA   rB   rB     s!      y Y  rD   c                   \        V \        P                  4      '       dG    V P                  p\        V\        P                  4      '       d   \
        VP                  9   d   R # R# \        V \        P                  4      '       d   R# \        V \        P                  \        34      '       d   \        V P                  V4      # R #   \         d     R# i ; i)FT)r|  ry   TimeoutExceptionrk  Requestr%   rv   r  TransportErrorrz  rc  r|  r   )r  rw  rk  s   && rA   _should_retryr    s    #u--..	kkG'5==11)W__<  #u++,,#--/ABCC%cll4EFF  		s   AC CCc               0    V ^8  d   QhRRRRRRRRRR	R
R/# )r<   	num_retryr   
base_delayrp  	max_delaybackoff_typezLiteral['exponential', 'fixed']jitterr>   r=   r?   )r@   s   "rA   rB   rB     sD     ! !!! ! 2	!
 ! !rD   c                    VR 8X  d#   \        V^V ^,
          ,          ,          V4      pM\        W4      pV'       d   V\        P                  ! RR4      ,          p\        WR4      # )exponentialg      ?g      ?)re   randomuniform)r  r  r  r  r  delays   &&&&& rA   _get_retry_delayr    sS     }$J!	A"67CJ*S))u  rD   rw  c               0    V ^8  d   QhRRRRRRRRRR	R
R/# )r<   r   r   rg  r6   r   rw  rx  rh  r   r=   rg  r?   )r@   s   "rA   rB   rB   )  sD     4 444 
4
 !4 4 4rD   c                  \        ^\        ^,           4       F  p \        WV3/ VB u # 	  \        R4      h  \        P                  \
        3 d   p\        Yc4      '       di   T\        8  d^   \        T\        \        RR4      p\        P                  RT RT R\        T,
           R24       \        P                  ! T4        Rp?K  h Rp?ii ; i)	rF  r  TRetrying request to  due to  ( attempts left)NFailed to perform request)r   MAX_ATTEMPTSr   ry   	HTTPErrorrc  r  r  
BASE_DELAY	MAX_DELAYloggerdebugtimesleepr  r   rg  r   rw  rh  attemptr  r  s   &&&$,   rA   r   r   )  s     L1,-	FC:6:: . 2
33 !34 
	S44<9O(ZM4 *3%xuB|g?U>VVef 

5!
	s   8CA3CCCc               0    V ^8  d   QhRRRRRRRRRR	R
R/# )r<   r   r)  rg  r6   r   rw  rx  rh  r   r=   rg  r?   )r@   s   "rA   rB   rB   C  sD     4 444 
4
 !4 4 4rD   c                 "   \        ^\        ^,           4       F  p \        WV3/ VB G Rj  xL
 u # 	  \        R	4      h L  \        P                  \
        3 d   p\        Yc4      '       dj   T\        8  d_   \        TR^
RR4      p\        P                  RT RT R\        T,
           R24       \        P                  ! T4      G Rj  xL 
   Rp?K  h Rp?ii ; i5i)
rF  Nro  r  Tr  r  r  r  r  )r   r  r;  ry   r  rc  r  r  r  r  r   r  r  r  s   &&&$,   rA   r7  r7  C  s      L1,-
	'FvFFF . 2
33 G!34 	S44<9O(#r=$O*3%xuB|g?U>VVef mmE***	sP   C"AAAC"ACA.CCCC"CCC"c                    V ^8  d   QhRRRR/# )r<   rW   r   r=   r6   r?   )r@   s   "rA   rB   rB   [  s      ? s rD   c                v    V P                   P                  4       R 8X  d   RV P                   2# V P                  # )keyzBearer )schemelowerr7   rm   rW   s   &rA   _cdn_auth_headerr  [  s4    {{e#%%rD   c               (    V ^8  d   QhRRRRRRRR/# )	r<   rW   r   r   r6   r   r   r=   r   r?   )r@   s   "rA   rB   rB   a  s,      
),9CrD   c                4    R VR\        V 4      /pVe   W#R&   V# )rc   r`   r   )r  )rW   r   r   rv   s   &&& rA   _cdn_upload_headersr  a  s,     |_>Nt>TUG%.!"NrD   c                    V ^8  d   QhRRRR/# )r<   rW   r   r=   r   r?   )r@   s   "rA   rB   rB   j  s      / n rD   c                &    R V P                   RRRR/# )r`   ra   rb   rc   )rm   r  s   &rA   _storage_upload_headersr  j  s#    **$* rD   c               $    V ^8  d   QhRRRRRR/# )r<   
repositoryUploadRepositoryId | Nonefallback_repository4UploadRepositoryId | list[UploadRepositoryId] | Noner=   r0   r?   )r@   s   "rA   rB   rB   r  s&      )M rD   c                    0 RmpV f   \         p Vf   \        pM\        V\        4      '       g   V.pV .VOp. pV F1  pWR9  d   \	        RV R24      hWT9  g   K   VP                  V4       K3  	  V# )r)   zUnsupported upload repository ''>   r*   r+   r)   )r/   r1   r|  listr   r   )r  r  allowedordereddedupedentrys   &&    rA   _normalize_upload_repositoriesr  r  s     'G.
"@+T22230/0G(*G>ugQGHHNN5!	 
 NrD   c               $    V ^8  d   QhRRRRRR/# )r<   r   r   r   r6   r=   r   r?   )r@   s   "rA   rB   rB     s!      z   rD   c                "    R T ;'       g    RRV/# )r   
upload.binr   r?   )r   r   s   &&rA   _storage_upload_payloadr    s    Y.., rD   c               0    V ^8  d   QhRRRRRRRRR	R
RR/# r<   r   r   rW   r   r   r   r   r6   r   r   r=   r?   )r@   s   "rA   rB   rB     sD      
 	
   	rD   c          	         \        V R \         R2\        WC4      \        V4      R7      pVP	                  4       pVR,          pVR,          p\        V RVVRV/RR7       V# )	r   )/storage/upload/initiate?storage_type=gcsrw   rv   
upload_urlfile_urlr   rc   Nr   rv   r   )r   rk   r  r  rw   	r   rW   r   r   r   init_responseinit_resultr  r  s	   &&$$$    rA   _upload_via_storager    sy     )*=>$Y='-M  $$&K\*J:&H. OrD   c               0    V ^8  d   QhRRRRRRRRR	R
RR/# r<   r   r)  rW   r   r   r   r   r6   r   r   r=   r?   )r@   s   "rA   rB   rB     sD      
 	
   	rD   c          	        "   \        V R \         R2\        WC4      \        V4      R7      G Rj  xL
 pVP	                  4       pVR,          pVR,          p\        V RVVRV/RR7      G Rj  xL
  V#  LC L5i)	r   r  r  Nr  r  r   rc   r  )r7  rk   r  r  rw   r  s	   &&$$$    rA   _async_upload_via_storager    s      5*=>$Y='- M  $$&K\*J:&H
$.   O%s!   -A7A3<A7,A5-A75A7c               (    V ^8  d   QhRRRRRRRR/# )	r<   r   r   r   r   rv   r   r=   r6   r?   )r@   s   "rA   rB   rB     s2     ) )) ) 	)
 	)rD   c               f    \        V R \        R,           VVR7      pVP                  4       R,          # r   /files/uploadr   rv   r   )r   CDN_URLrw   r   r   rv   r   s   &$$ rA   
_upload_v3r    s5     $/!H ==?<((rD   c               0    V ^8  d   QhRRRRRRRRR	R
RR/# r  r?   )r@   s   "rA   rB   rB     sD     ) ))
) 	)
 ) ) 	)rD   c               z    \        V R \        R,           V\        WV4      R7      pVP                  4       R,          # r  )r   FAL_CDN_FALLBACK_URLr  rw   r   rW   r   r   r   r   s   &&$$$ rA   _upload_cdnr    s<     $.#D	BH ==?<((rD   c               (    V ^8  d   QhRRRRRRRR/# )	r<   r   r)  r   r   rv   r   r=   r6   r?   )r@   s   "rA   rB   rB     s2     ) )) ) 	)
 	)rD   c                  "   \        V R \        R,           VVR7      G Rj  xL
 pVP                  4       R,          #  L5ir   r  r  Nr   )r7  r  rw   r  s   &$$ rA   _async_upload_v3r    sB      0/! H ==?<((s   ?=?c               0    V ^8  d   QhRRRRRRRRR	R
RR/# r  r?   )r@   s   "rA   rB   rB     sD     ) ))
) 	)
 ) ) 	)rD   c                  "   \        V R \        R,           V\        WV4      R7      G Rj  xL
 pVP                  4       R,          #  L5ir  )r7  r  r  rw   r  s   &&$$$ rA   _async_upload_cdnr    sI      0.#D	B H ==?<((s   )A	AA	c                    V ^8  d   QhRRRR/# )r<   attemptsz#list[tuple[str, Callable[[], str]]]r=   r6   r?   )r@   s   "rA   rB   rB     s     9 9199rD   c           	        \        V 4       F  w  pw  r# V! 4       u # 	  \        R4      h  \         dP   pT\        T 4      ^,
          8  d   h \        P	                  RTY^,           ,          ^ ,          T4        Rp?Kt  Rp?ii ; i)rF  +Upload failed to %s, falling back to %s: %sNUpload attempts were exhausted)	enumerater%  r   r  warningr  )r  idxlabelr  r  s   &    rA   _try_upload_with_fallbackr    s     "+8!4e
	9 "5 7
88  	c(ma''NN=q!!$	 	s   +BAB  Bc                    V ^8  d   QhRRRR/# )r<   r  z#list[tuple[str, Callable[[], Any]]]r=   r6   r?   )r@   s   "rA   rB   rB      s     9 9199rD   c           	     p  "   \        V 4       F:  w  pw  r# V! 4       p\        P                  ! V4      '       d   VG R j  xL
 u # Vu # 	  \        R4      h L  \         dP   pT\	        T 4      ^,
          8  d   h \
        P                  RTY^,           ,          ^ ,          T4        R p?K  R p?ii ; i5i)Nr  r  )r  r   iscoroutiner%  r   r  r  r  )r  r  r  r  r   r  s   &     rA   _async_try_upload_with_fallbackr     s      "+8!4e	YF""6**#|#M "5 7
88 $ 	c(ma''NN=q!!$	 	sL   B6(AA AB6AB6AB3$AB.(B6.B33B6c                    V ^8  d   QhRRRR/# )r<   handleSyncRequestHandler=   rX   r?   )r@   s   "rA   rB   rB   5  s      "3  rD   c                L     V P                  4        R #   \         d     R # i ; irF   cancelr%  r  s   &rA   _maybe_cancel_requestr  5  s"     s    ##c                    V ^8  d   QhRRRR/# )r<   r  AsyncRequestHandler=   rX   r?   )r@   s   "rA   rB   rB   <  s      .@ T rD   c                h   "    V P                  4       G R j  xL
  R #  L  \         d     R # i ; i5irF   r  r  s   &rA   _async_maybe_cancel_requestr  <  s*     mmo s(   2    2  /2/2c                      ] tR tRt$ ]! RR7      tR]R&   ]R R l4       tRR/R	 R
 llt	RRRR/R R llt
R R ltR R ltRtR# )r  iC  Fr  r   r   c               (    V ^8  d   QhRRRRRRRR/# )r<   r   r   r  r6   rr  r=   r  r?   )r@   s   "rA   rB   SyncRequestHandle.__annotate__H  s2     
 

 
 	

 

rD   c                	    \         P                  V4      pVP                  '       d   VP                   R 2MRp\         V VP                   R VP
                   RV 2pV ! VVVR,           VR,           VR7      # r,   r]   z
/requests/z/statusz/cancelrr  r  r  r  r   r  r  r  QUEUE_URL_FORMATr  r  r  r   r  rr  r  r  rx   s   &&&&   rA   from_request_id!SyncRequestHandle.from_request_idG       ''4+1+;+;+;F$$%Q'&'x~Qv||nJWaVbc!!)+)+
 	
rD   	with_logsc                    V ^8  d   QhRRRR/# r<   r
  r>   r=   r  r?   )r@   s   "rA   rB   r   Y  s     3 34 3F 3rD   c                   \        V P                  RV P                  RV/\        R7      p\	        V4       V P                  VP                  4       4      # )Returns the status of the request (which can be one of the following:
Queued, InProgress, Completed). If `with_logs` is True, logs will be included
for InProgress and Completed statuses.GETr  paramsr   )r   r   r  QUEUE_POLL_TIMEOUTr  r  rw   rJ   r
  r   s   &$ rA   r  SyncRequestHandle.statusY  sO    
 (KKOO	 '
 	(#!!(--/22rD   intervalro  c               $    V ^8  d   QhRRRRRR/# )r<   r
  r>   r  rp  r=   zIterator[Status]r?   )r@   s   "rA   rB   r   k  s$     ! ! !49!	!rD   c             #     "    V P                  VR7      pVx  \        V\        4      '       d   R# \        P                  ! V4       KG  5izContinuously poll for the status of the request and yield it at each interval till
the request is completed. If `with_logs` is True, logs will be included in the response.
r
  N)r  r|  r  r  r  rJ   r
  r  r  s   &$$ rA   iter_eventsSyncRequestHandle.iter_eventsk  s;      [[9[5FL&),,JJx s   AA
c                   V ^8  d   QhRR/# r<   r=   r  r?   )r@   s   "rA   rB   r   z  s     	 	W 	rD   c                    V P                  RR7       F  pK  	  \        V P                  RV P                  \        R7      p\        V4       VP                  4       # )zOWait till the request is completed and return the result of the inference call.Fr  r  r   )r  r   r   r  r  r  rw   rJ   _r   s   &  rA   r~  SyncRequestHandle.getz  sS    !!E!2A 3 (KK 1 1;M
 	(#}}rD   c                   V ^8  d   QhRR/# r+  r?   )r@   s   "rA   rB   r     s     $ $ $rD   c                j    \        V P                  RV P                  \        R7      p\	        V4       R# zCancel the request.r   r   N)r   r   r  r  r  rJ   r   s   & rA   r  SyncRequestHandle.cancel  s*    'KKOO&	
 	(#rD   r?   NrM   rN   rO   rP   r
   r   rQ   r%  r  r  r  r~  r  rR   r?   rD   rA   r  r  C  sS     e,FL,
 
"3% 3$!#(!<?!	$ $rD   r  c                      ] tR tRt$ ]! RR7      tR]R&   ]R R l4       tRR/R	 R
 llt	RRRR/R R llt
R R ltR R ltRtR# )r  i  Fr  r)  r   c               (    V ^8  d   QhRRRRRRRR/# )r<   r   r)  r  r6   rr  r=   r  r?   )r@   s   "rA   rB   AsyncRequestHandle.__annotate__  s2     
 
!
 
 	

 

rD   c                	    \         P                  V4      pVP                  '       d   VP                   R 2MRp\         V VP                   R VP
                   RV 2pV ! VVVR,           VR,           VR7      # r  r  r  s   &&&&   rA   r  "AsyncRequestHandle.from_request_id  r	  rD   r
  c                    V ^8  d   QhRRRR/# r  r?   )r@   s   "rA   rB   r,    s     3 3 3& 3rD   c                  "   \        V P                  RV P                  RV/\        R7      G Rj  xL
 p\	        V4       V P                  VP                  4       4      #  L.5i)r  r  r  r  N)r7  r   r  r  r  r  rw   r  s   &$ rA   r  AsyncRequestHandle.status  s\     
 4KKOO	 '
 
 	(#!!(--/22
s   .A!A/A!r  ro  c               $    V ^8  d   QhRRRRRR/# )r<   r
  r>   r  rp  r=   zAsyncIterator[Status]r?   )r@   s   "rA   rB   r,    s$     * * *49*	*rD   c                 "    V P                  VR7      G Rj  xL
 pV5x  \        V\        4      '       d   R# \        P                  ! V4      G Rj  xL
  KX   LA L5ir  )r  r|  r  r   r  r  s   &$$ rA   r  AsyncRequestHandle.iter_events  sN      ;;;;;FL&),,--))) <
 *s!   AA:AAAAc                   V ^8  d   QhRR/# r  r?   )r@   s   "rA   rB   r,    s      7 rD   c                   "   V P                  RR7        Rj  xL
  pK   LD\        T P                  RT P                  \        R7      G Rj  xL 
 p\        T4       TP                  4       # 5i)z9Wait till the request is completed and return the result.Fr  Nr  r   )r  r7  r   r  r  r  rw   r!  s   &  rA   r~  AsyncRequestHandle.get  so     ''%'8 	 	!	8 4KK&	
 
 
 	(#}}s+   A/#!#A/#+A/A A/c                   V ^8  d   QhRR/# r+  r?   )r@   s   "rA   rB   r,    s     $ $d $rD   c                   "   \        V P                  RV P                  \        R7      G Rj  xL
 p\	        V4       R#  L5ir&  )r7  r   r  r  r  r'  s   & rA   r  AsyncRequestHandle.cancel  s7     3KKOO&	
 
 	(#
s   +A?Ar?   Nr)  r?   rD   rA   r  r    sT     %5 1F1
 
"3 3$*#(*<?*$ $rD   r  c                  :   ] tR tRt$ ]! RRR7      tR]R&   RtR]R	&   ]R
 R l4       t	R R lt
R R lt]R R l4       t]R R l4       tR R ltR]/R R lltRRRRRRRRR/ /R R  lltRRRRR!RR"RR/ RR/R# R$ lltRRRRR%RR&RR'RR"RR/ RRR(R/	R) R* lltR+ R, ltR%R/R- R. lltR/ R0 ltR1 R2 ltRR3RR/R4 R5 lltRIR6RR7R/R8 R9 llltR6RR7R/R: R; lltRJR6RR7R/R< R= lllt]R>R?RR@RARR]RBRRCR/RD RE ll4       t]R>R?RRRARR]/RF RG ll4       tRHtR# )Kr   i  NFr  r  r   r  rp  rp  default_timeoutc                   V ^8  d   QhRR/# r<   r=   r   r?   )r@   s   "rA   rB   AsyncClient.__annotate__       0 0 0rD   c                	^    V P                   f   \        4       # \        RV P                   4      # NKeyr  r   r   rI   s   &rA   rd   AsyncClient._auth  &    88)++udhh//rD   c                   V ^8  d   QhRR/# r?  r?   )r@   s   "rA   rB   r@          ? rD   c                	    V P                   # rF   rd   rI   s   &rA   	_get_authAsyncClient._get_auth      zzrD   c                   V ^8  d   QhRR/# r   r?   )r@   s   "rA   rB   r@          # rD   c                	    V P                  4       pVP                  P                  4       R 8w  d   \        R4      hVP                  # r  zZKey credentials are required for this operation. Set FAL_KEY or FAL_KEY_ID/FAL_KEY_SECRET.rL  r  r  r   r7   ro   s   & rA   _get_keyAsyncClient._get_key  ?    ~~;;%')l  zzrD   c                   V ^8  d   QhRR/# )r<   r=   r   r?   )r@   s   "rA   rB   r@    s     6 6 4 6rD   c                	4    \        V P                  4       4      # rF   )r   rL  rI   s   &rA   r   AsyncClient._token_manager  s    #DNN$455rD   c                   V ^8  d   QhRR/# r<   r=   r)  r?   )r@   s   "rA   rB   r@    s     
 
* 
rD   c                	    V P                  4       p\        P                  ! R VP                  R\        /V P
                  R7      # )r`   r   rv   r   )rL  ry   r   rm   
USER_AGENTr=  ro   s   & rA   r   AsyncClient._client  sA    ~~  !2!2j ((
 	
rD   c                   V ^8  d   QhRR/# r[  r?   )r@   s   "rA   rB   r@    s     
 
'8 
rD   c                	   "   V P                   P                  4       G R j  xL
 p\        P                  ! RVP                   RVP
                   2R\        /V P                  R7      #  LG5i)Nr`   r   r   r]  )r   r   ry   r   r8   r7   r^  r=  r   s   & rA   _get_cdn_clientAsyncClient._get_cdn_client  sd     ))3355  E$4$4#5Qu{{m!Dj ((
 	
 6s   A*A(AA*token_expirationc               $    V ^8  d   QhRRRRRR/# r<   r  r6   rd  r   r=   r?   )r@   s   "rA   rB   r@    (     6 66 	6
 
6rD   c               	   "   R \         P                  V4      P                  .RV/p\        V P                  R\
         R2VR7      G Rj  xL
 p\        VP                  4       4      #  L5i)allowed_appsrd  r   /tokens/rw   N)r  r  r  r7  r   rk   r  rw   rJ   r  rd  r  r   s   &&$  rA   _get_realtime_tokenAsyncClient._get_realtime_token  sm      U33K@FFG 0
 4LLj!	
 
 %X]]_55
s   AA*
A(A*r  r]   r   start_timeouthintrv   c               8    V ^8  d   QhRRRRRRRRRRR	R
RRRR/# r<   r  r6   r  r  r  r   Optional[Union[int, float]]ro  rp  r   rv   r   r=   r?   )r@   s   "rA   rB   r@  !  sZ     , ,, ,
 , -, 3, ,  , 
,rD   c          	     6  "   \         V,           pV'       d    VRVP                  R4      ,           ,          p/ VCp	Ve   \        Wi4       Ve   \        WY4       \	        V P
                  RVVVV	R7      G Rj  xL
 p
\        V
4       V
P                  4       #  L5i)a,  Run an application with the given arguments (which will be JSON serialized). The path parameter can be used to
specify a subpath when applicable. This method will return the result of the inference call directly.

Args:
    timeout: Client-side HTTP timeout in seconds. Controls how long the HTTP
        client waits for a response. Defaults to the client's default_timeout.
    start_timeout: Server-side request timeout in seconds. Limits total time spent
        waiting before processing starts. Does not apply once the application begins processing.
r,   Nr   rw   r   rv   )RUN_URL_FORMATr  r#   r"   r7  r   r  rw   rJ   r  r  r  r   ro  rp  rv   r   rn   r   s   &&&$$$$$   rA   runAsyncClient.run!  s     * {*3S)))C#.g; D+$}73LL
 
 	(#}}
s   A5B7B8 Bwebhook_urlpriorityc               <    V ^8  d   QhRRRRRRRRRRR	R
RRRRRR/	# )r<   r  r6   r  r  r  rp  r   rz  r{  Optional[Priority]rv   r   ro  rs  r=   r  r?   )r@   s   "rA   rB   r@  O  sd     :
 :
:
 :

 :
 :
  :
 %:
  :
 3:
 
:
rD   c          	       "   \         V,           p	V'       d    V	RVP                  R4      ,           ,          p	Ve   V	R\        RV/4      ,           ,          p	/ VCp
Ve   \        WJ4       Ve   \	        Wj4       Ve   \        W4       \        V P                  RV	VV P                  V
R7      G Rj  xL
 p\        V4       VP                  4       p\        VR,          VR,          VR	,          VR
,          V P                  R7      #  LU5i)a  Submit an application with the given arguments (which will be JSON serialized). The path parameter can be used to
specify a subpath when applicable. This method will return a handle to the request that can be used to check the status
and retrieve the result of the inference call when it is done.

Args:
    start_timeout: Server-side request timeout in seconds. Limits total time spent
        waiting before processing starts (includes queue wait, retries, and
        routing). Does not apply once the application begins processing.
r,   Nr  fal_webhookr   ru  rr  r  r  r  r  )r  r  r   r#   r!   r"   r7  r   r=  r  rw   r  rJ   r  r  r  rp  rz  r{  rv   ro  r   rn   r   r   s   &&&$$$$$$    rA   r   AsyncClient.submitO  s     , ,3S)))C"3M;#?@@@C#.g; D+3$}73LL((
 
 	(#}}!L)n-L)L)<<
 	

s   B-D/D0ADr
  
on_enqueueon_queue_updateclient_timeoutc               H    V ^8  d   QhRRRRRRRRRR	R
RRRRRRRRRRRRR/# )r<   r  r6   r  r  r  rp  r   r
  r>   r  z1Optional[Callable[[str], None | Awaitable[None]]]r  z4Optional[Callable[[Status], None | Awaitable[None]]]r{  r}  rv   r   ro  rs  r  r=   r?   )r@   s   "rA   rB   r@    s     N NN N
 N N N FN NN %N  N 3N 4N 
NrD   c       	          a aaaaaaaaa	a
a"   Ve3   S
f   Vo
M+S
V8  d%   \         P                  ! RS
 RV R2\        ^R7       R.oR VVVV	VVVVVV V
V3R llpVf   V! 4       G Rj  xL
 #  \        P                  ! V! 4       VR7      G Rj  xL
 #  L* L  \        P
                   dC   pRpS^ ,          pTe!   TP                  p\        T4      G Rj  xL 
  \        TTR	7      ThRp?ii ; i5i)
  Subscribe to an application and wait for the result.

Args:
    start_timeout: Server-side request timeout in seconds. Limits total time spent
        waiting before processing starts (includes queue wait, retries, and
        routing). Does not apply once the application begins processing.
    client_timeout: Client-side total timeout in seconds. Limits the total time
        spent waiting for the entire request to complete (including queue wait
        and processing). If not set, waits indefinitely.
Nstart_timeout ("s) is larger than client_timeout (Ts). The request may timeout on the client before the server-side timeout is reached.
stacklevelc                   V ^8  d   QhRR/# r  r?   )r@   s   "rA   rB   +AsyncClient.subscribe.<locals>.__annotate__  s     	& 	&W 	&rD   c            
       <"   SP                  SSS
SSSSR 7      G Rj  xL
 p V S^ &   Se9   S! V P                  4      p\        P                  ! V4      '       d   VG Rj  xL
  S	eO   V P	                  SR7        Rj  xL
  pS	! V4      p\        P                  ! V4      '       g   K0  VG Rj  xL
  K<  V P                  4       G Rj  xL
 #  L Lp LS L$DVL" L5i)r  rp  r{  rv   ro  Nr  )r   rr  inspectisawaitabler  r~  )r  r   eventr  r  
handle_refrv   rp  r  r  r  r{  rJ   ro  r
  s      rA   _do_subscribe,AsyncClient.subscribe.<locals>._do_subscribe  s     ;;!+ '  F #JqM%#F$5$56&&v.. LL*#)#5#5	#5#J % %%,U3F**622$%%- !% % $K
 &su   CC:CC C!C;C?C C#C+C0C1C
CCCCCCCr   r   rr  )	warningswarnUserWarningr   wait_forTimeoutErrorrr  r  ro  )rJ   r  r  r  rp  r
  r  r  r{  rv   ro  r  r  err  r  r  s   fffdddddddd$    @rA   	subscribeAsyncClient.subscribe  s     2 %$ ./%m_4VWeVf gg g 	 ;?
	& 	& 	&2 !&((	 ))-/>RRR ) S## 
	J]F!#..
1&999'&% 
	sT   AC3*B+C30 B BB C3B C0.)C+CC++C00C3c               $    V ^8  d   QhRRRRRR/# )r<   r  r6   rr  r=   r  r?   )r@   s   "rA   rB   r@    s'     Y Yc Ys Y?Q YrD   c                	B    \         P                  V P                  W4      # rF   )r  r  r   rJ   r  rr  s   &&&rA   
get_handleAsyncClient.get_handle  s    !11$,,XXrD   c               (    V ^8  d   QhRRRRRRRR/# r<   r  r6   rr  r
  r>   r=   r  r?   )r@   s   "rA   rB   r@    s,     8 88,/8?C8	8rD   c               	d   "   V P                  W4      pVP                  VR 7      G Rj  xL
 #  L5i)r  Nr  r  rJ   r  rr  r
  r  s   &&&$ rA   r  AsyncClient.status  s,      9]]Y]7777s   '0.0c               $    V ^8  d   QhRRRRRR/# r<   r  r6   rr  r=   r  r?   )r@   s   "rA   rB   r@    s!     " " " " "rD   c                	`   "   V P                  W4      pVP                  4       G R j  xL
 #  L5irF   r  r~  rJ   r  rr  r  s   &&& rA   r   AsyncClient.result  s%     9ZZ\!!!s   %.,.c               $    V ^8  d   QhRRRRRR/# r<   r  r6   rr  r=   rX   r?   )r@   s   "rA   rB   r@    s!         rD   c                	d   "   V P                  W4      pVP                  4       G R j  xL
  R #  L5irF   r  r  r  s   &&& rA   r  AsyncClient.cancel  s"     9mmos   %0.0/streamc          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r<   r  r6   r  r  r  r   float | Noner=   zAsyncIterator[dict[str, Any]]r?   )r@   s   "rA   rB   r@    s<     # ## #
 # # 
'#rD   c                "   \         V,           pV'       d    VRVP                  R4      ,           ,          p\        V P                  RVVVR7      ;_uu_4       GRj  xL
 pVP	                  4         Rj  xL
  pVP                  4       5x  K   L3 LDRRR4      GRj  xL 
  R#   + GRj  xL 
 '       g   i     R# ; i5iaY  Stream the output of an application with the given arguments (which will be JSON serialized). This is only supported
at a few select applications at the moment, so be sure to first consult with the documentation of individual applications
to see if this is supported.

The function will iterate over each event that is streamed from the server.
r,   r   )rw   r   N)rv  r  r   r   	aiter_sserw   rJ   r  r  r  r   r   eventsr  s   &&&$$   rA   streamAsyncClient.stream  s      {*3S)))CLL
 
 
 %//1 # #ejjl"
#1
 
 
 
 
 
sr   ACBC!B)2B6B
7B:B)CBB)C!B$"C)C	/B20
C	;C	=	Cr  r  c               0    V ^8  d   QhRRRRRRRRR	R
RR/# r<   r   str | bytesr   r6   r   r   r  r  r  r  r=   r?   )r@   s   "rA   rB   r@  	  sN     M? M?M? M? 	M? .M?M? 
M?rD   c               8  "   V P                  4       p\        V\        4      '       d   VP                  R4      p\	        WE4      p\        V4      \        8  dY   V^ ,          R8X  dK   Vf   RpV P                  4       G Rj  xL
 p\        P                  VV P                  VVVR7      G Rj  xL
 # RV/p	Ve   W9R&   . p
V F  pVR8X  d>   V P                  4       G Rj  xL
 pV
P                  R\        \        WV	R7      34       KG  VR	8X  d3   V
P                  R	\        \        V P                  VVVVR
7      34       K  VR8X  g   K  V
P                  R\        \         V P                  VVVVR
7      34       K  	  \#        V
4      G Rj  xL
 #  EL L L L5i)Upload the given data blob to the CDN and return the access URL. The content type should be specified
as the second argument. Use upload_file or upload_image for convenience.utf-8r)   Nr  r   r   r   r   r   rc   r   r   rv   r*   r   r   r   r+   )rL  r|  r6   r  r  r   MULTIPART_THRESHOLDrb  r'  r  r   r   r   r  r  r   r  r  rJ   r   r   r   r  r  rW   repository_chainr   rv   r  repos   &&&&$$      rA   uploadAsyncClient.upload	  s     ~~dC  ;;w'D9
 t9**/?/Bh/N (	//11F-22"11#) 3    "<0 )2%&8:$Dx#3355  0&WU - LL !%)5&/
 5 LL !%)5&/
1 %L 5X>>>i 2 6H ?sP   A>F F+F,F-1FFA&F
AFFFFFFc               (    V ^8  d   QhRRRRRRRR/# 	r<   r  os.PathLiker  r  r  r  r=   r6   r?   )r@   s   "rA   rB   r@  X  2     % %% .	%
% 
%rD   c          
     d  "   \         P                  ! V4      w  rEVf   Rp\        W#4      p\        P                  P                  V4      \        8  d[   V^ ,          R8X  dM   V P                  4       G Rj  xL
 p\        P                  \        V4      VV P                  VR7      G Rj  xL
 # \        VR4      ;_uu_ 4       pV P                  VP                  4       V\        P                  P                  V4      VVR7      G Rj  xL
 uuRRR4       #  L Ln L  + '       g   i     R# ; i5izMUpload a file from the local filesystem to the CDN and return the access URL.Nr   r)   )r  r   r   r   r  )r   r  r  )	mimetypes
guess_typer  r  r  r  r  rb  r'  r   r6   r   r  r  r  r  	rJ   r  r  r  	mime_typer"  r  r   files	   &&$$     rA   upload_fileAsyncClient.upload_fileX  s     !++D1	2I9
 GGOOD!$77 #x///11F-77d)"11&	 8    $		''**40%$7 %    2 sO   A3D05D63D0)D*D0ADDDD0D0DD-	'	D0c          
     ,    V ^8  d   QhRRRRRRRRR	R/# 
r<   imageImage.Imager@   r6   r  r  r  r  r=   r?   )r@   s   "rA   rB   r@    <       
 . 
rD   c          	       "   \         P                  ! 4       ;_uu_ 4       pVP                  WRR7       V P                  VP	                  4       RV 2VVR7      G Rj  xL
 uuRRR4       #  L  + '       g   i     R# ; i5izBUpload a pillow image object to the CDN and return the access URL.r@   image/)r  r  NioBytesIOr  r  getvaluerJ   r  r@   r  r  buffers   &&&$$ rA   upload_imageAsyncClient.upload_image  sg      ZZ\\VJJvJ-!!%$7	 %   \ \\s.   B<A-A+A- B+A--A>	8	Buse_jwtT	/realtimer  r	  r  c               8    V ^8  d   QhRRRRRRRRRR	R
RRRRR/# )r<   r  r6   r  r>   r  r  r   rd  r   r	  r
  r  r  r=   z&AsyncIterator[AsyncRealtimeConnection]r?   )r@   s   "rA   rB   r@    sZ       	
  "  6 6 
0rD   c              	~  "   R pR p	V'       d   V P                  WR7      G R j  xL
 p	M$V P                  4       p
RV
P                  R\        /p\	        WWCR7      p\        WR7      ;_uu_4       GR j  xL
 p\        WVR7      5x  R R R 4      GR j  xL
  R #  Lu L( L
  + GR j  xL 
 '       g   i     R # ; i5iNrd  r`   r   )r  r   )r  r  )rm  rL  rm   r^  r  re  rA  rJ   r  r  r  r  rd  r	  r  rv   r7   rW   r   r_  s   &&$$$$$$     rA   r  AsyncClient.realtime  s      *. 22 3  E >>#D&(9(9<TG!+mO$S:::b)N  ;:: ;:::s^   "B=BAB=3B4B=7B B=BB=B=B= B:	&B)'
B:	2B:	4	B=c               0    V ^8  d   QhRRRRRRRRRR	R
R/# )r<   r  r6   r  r>   r  r  r   rd  r   r=   rb  r?   )r@   s   "rA   rB   r@    sF       	
  "  
2rD   c              	l  "   R pR pV'       d   V P                  WR7      G R j  xL
 pM$V P                  4       pRVP                  R\        /p\	        VVVVR7      p	\        WR7      ;_uu_4       GR j  xL
 p
V
5x  R R R 4      GR j  xL
  R #  Ll L L
  + GR j  xL 
 '       g   i     R # ; i5iNr  r`   r   r  r   )rm  rL  rm   r^  r  re  rJ   r  r  r  r  rd  rv   r7   rW   r   r_  s   &&$$$$     rA   
ws_connectAsyncClient.ws_connect  s      *. 22 3  E >>#D&(9(9<TG"'	
 %S:::bH ;:: ;:::s^   "B4BAB45B6B49B?B4
BB4B4B4B1	B 
B1	)B1	+	B4r?   rF   jpeg) rM   rN   rO   rP   r
   r  rQ   r=  r   rd   rL  rT  r   r   rb  !REALTIME_TOKEN_EXPIRATION_SECONDSrm  rx  r   r  r  r  r   r  r  r  r  r  r   r  r  rR   r?   rD   rA   r   r     s}   Du5C5"OU"0 0
 6 6 
 

6 !B	6$,
 , 04, 6:,  , #%,\:

 :
  :
 #':
 (,:
 #%:
 6::
xN
 N  N  N IMN QUN (,N #%N 6:N 7;N`Y8FK8"#
 # !%#:M? 15M? M? M?^% 15	% %N
 15  *  	
   %) !B 9= 9= 6  	
  %) !B rD   r   c                  P   ] tR tRt$ ]! RRR7      tR]R&   RtR]R	&   ]R
 R l4       t	R R lt
R R lt]R R l4       t]R R l4       t]R R l4       tR R ltR]/R R lltRRRRRRRRR / /R! R" lltRRRRR#RR$RR / RR/R% R& lltRRRRR'RR(RR)RR$RR / RRR*R/	R+ R, lltR- R. ltR'R/R/ R0 lltR1 R2 ltR3 R4 ltRR5RR/R6 R7 lltRKR8RR9R/R: R; llltR8RR9R/R< R= lltRLR8RR9R/R> R? lllt]R@RARRBRCRR]RDRRER/RF RG ll4       t]R@RARRRCRR]/RH RI ll4       t RJt!R# )M
SyncClienti  NFr<  r   r  rp  rp  r=  c                   V ^8  d   QhRR/# r?  r?   )r@   s   "rA   rB   SyncClient.__annotate__  rA  rD   c                	^    V P                   f   \        4       # \        RV P                   4      # rC  rE  rI   s   &rA   rd   SyncClient._auth  rG  rD   c                   V ^8  d   QhRR/# r?  r?   )r@   s   "rA   rB   r    rI  rD   c                	    V P                   # rF   rK  rI   s   &rA   rL  SyncClient._get_auth  rN  rD   c                   V ^8  d   QhRR/# r   r?   )r@   s   "rA   rB   r    rP  rD   c                	    V P                  4       pVP                  P                  4       R 8w  d   \        R4      hVP                  # rR  rS  ro   s   & rA   rT  SyncClient._get_key  rV  rD   c                   V ^8  d   QhRR/# r<   r=   r   r?   )r@   s   "rA   rB   r    s     	
 	
 	
rD   c                	    V P                  4       p\        P                  ! R VP                  R\        /V P
                  RR7      # )r`   r   T)rv   r   follow_redirects)rL  ry   rz   rm   r^  r=  ro   s   & rA   r   SyncClient._client  sB    ~~||!2!2j ((!
 	
rD   c                   V ^8  d   QhRR/# )r<   r=   rT   r?   )r@   s   "rA   rB   r    s     1 1 1rD   c                	4    \        V P                  4       4      # rF   )rT   rL  rI   s   &rA   r   SyncClient._token_manager  s    t~~/00rD   c                   V ^8  d   QhRR/# )r<   r=   z%concurrent.futures.ThreadPoolExecutorr?   )r@   s   "rA   rB   r    s      @ rD   c                	    \         # rF   )EXECUTORrI   s   &rA   	_executorSyncClient._executor  s    rD   c                   V ^8  d   QhRR/# r  r?   )r@   s   "rA   rB   r    s     
 
 
rD   c                	    V P                   P                  4       p\        P                  ! R VP                   RVP
                   2R\        /V P                  R7      # )r`   r   r   r]  )r   r   ry   rz   r8   r7   r^  r=  r   s   & rA   rb  SyncClient._get_cdn_client  sW    ##--/||E$4$4#5Qu{{m!Dj ((
 	
rD   rd  c               $    V ^8  d   QhRRRRRR/# rf  r?   )r@   s   "rA   rB   r    rg  rD   c               	    R \         P                  V4      P                  .RV/p\        V P                  R\
         R2VR7      p\        VP                  4       4      # )ri  rd  r   rj  rk  )r  r  r  r   r   rk   r  rw   rl  s   &&$  rA   rm  SyncClient._get_realtime_token  s`     U33K@FFG 0
 (LLj!	
 %X]]_55rD   r  r]   r   ro  rp  rv   c               8    V ^8  d   QhRRRRRRRRRRR	R
RRRR/# rr  r?   )r@   s   "rA   rB   r    sZ     ( (( (
 ( -( 3( (  ( 
(rD   c          	        \         V,           pV'       d    VRVP                  R4      ,           ,          p/ VCp	Ve   \        Wi4       Ve   \        WY4       \	        V P
                  RVVVV	R7      p
\        V
4       V
P                  4       # )a  Run an application with the given arguments (which will be JSON serialized).

Args:
    timeout: Client-side HTTP timeout in seconds. Controls how long the HTTP
        client waits for a response. Defaults to the client's default_timeout.
    start_timeout: Server-side request timeout in seconds. Limits total time spent
        waiting before processing starts. Does not apply once the application begins processing.
r,   r   ru  )rv  r  r#   r"   r   r   r  rw   rw  s   &&&$$$$$   rA   rx  SyncClient.run  s    ( {*3S)))C#.g;D+$}7'LL
 	(#}}rD   rz  r{  c               <    V ^8  d   QhRRRRRRRRRRR	R
RRRRRR/	# )r<   r  r6   r  r  r  rp  r   rz  r{  r}  rv   r   ro  rs  r=   r  r?   )r@   s   "rA   rB   r  >  sd     7
 7
7
 7

 7
 7
  7
 %7
  7
 37
 
7
rD   c          	        \         V,           p	V'       d    V	RVP                  R4      ,           ,          p	Ve   V	R\        RV/4      ,           ,          p	/ VCp
Ve   \        WJ4       Ve   \	        Wj4       Ve   \        W4       \        V P                  RV	VV P                  V
R7      p\        V4       VP                  4       p\        VR,          VR,          VR,          VR	,          V P                  R
7      # )a?  Submit an application with the given arguments (which will be JSON serialized).

Args:
    start_timeout: Server-side request timeout in seconds. Limits total time spent
        waiting before processing starts (includes queue wait, retries, and
        routing). Does not apply once the application begins processing.
r,   r  r  r   ru  rr  r  r  r  r  )r  r  r   r#   r!   r"   r   r   r=  r  rw   r  r  s   &&&$$$$$$    rA   r   SyncClient.submit>  s    ( ,3S)))C"3M;#?@@@C#.g;D+3$}7'LL((
 	(#}} L)n-L)L)<<
 	
rD   r
  r  r  r  c               H    V ^8  d   QhRRRRRRRRRR	R
RRRRRRRRRRRRR/# )r<   r  r6   r  r  r  rp  r   r
  r>   r  zOptional[Callable[[str], None]]r  z"Optional[Callable[[Status], None]]r{  r}  rv   r   ro  rs  r  r=   r?   )r@   s   "rA   rB   r  w  s     K KK K
 K K K 4K <K %K  K 3K 4K 
KrD   c       	          a aaaaaaaaa	a
a Ve3   S
f   Vo
M+S
V8  d%   \         P                  ! RS
 RV R2\        ^R7       R.oR VVVV	VVVVVV V
V3R llpVf   V! 4       # S P                  P	                  V4      p VP                  VR7      #   \        P                  P                   d:   pRpS^ ,          pTe   TP                  p\        T4       \        TTR	7      ThRp?ii ; i)
r  Nr  r  r  r  c                   V ^8  d   QhRR/# r  r?   )r@   s   "rA   rB   *SyncClient.subscribe.<locals>.__annotate__  s     	  	 w 	 rD   c            
        < SP                  SSS	SS
SSR 7      p V S^ &   Se   S! V P                  4       Se"   V P                  SR7       F  pS! V4       K  	  V P                  4       # )r  r  )r   rr  r  r~  )r  r  r  r  r  rv   rp  r  r  r  r{  rJ   ro  r
  s     rA   r  +SyncClient.subscribe.<locals>._do_subscribe  s    [[!+ ! F #JqM%6,,-*#//)/DE#E* E ::<rD   r   r  )r  r  r  r  r   r   r  r   r  rr  r  ro  )rJ   r  r  r  rp  r
  r  r  r{  rv   ro  r  r  r  r  rr  r  r  s   fffdddddddd$     @rA   r  SyncClient.subscribew  s    2 %$ ./%m_4VWeVf gg g 	 :>
	  	  	 * ! ?"&&}5	===88!!.. 
	J]F!#..
%f-'&% 
	s   B C+24C&&C+c               $    V ^8  d   QhRRRRRR/# )r<   r  r6   rr  r=   r  r?   )r@   s   "rA   rB   r    s'     X Xc Xs X?P XrD   c                	B    \         P                  V P                  W4      # rF   )r  r  r   r  s   &&&rA   r  SyncClient.get_handle  s     00{WWrD   c               (    V ^8  d   QhRRRRRRRR/# r  r?   )r@   s   "rA   rB   r    s,     2 22,/2?C2	2rD   c               	H    V P                  W4      pVP                  VR 7      # )r  r  r  s   &&&$ rA   r  SyncClient.status  s#     9}}y}11rD   c               $    V ^8  d   QhRRRRRR/# r  r?   )r@   s   "rA   rB   r    s!      # 3 7 rD   c                	D    V P                  W4      pVP                  4       # rF   r  r  s   &&& rA   r   SyncClient.result  s    9zz|rD   c               $    V ^8  d   QhRRRRRR/# r  r?   )r@   s   "rA   rB   r    s!      # 3 4 rD   c                	H    V P                  W4      pVP                  4        R # rF   r  r  s   &&& rA   r  SyncClient.cancel  s    9rD   r  c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r<   r  r6   r  r  r  r   r  r=   zIterator[dict[str, Any]]r?   )r@   s   "rA   rB   r    s<     # ## #
 # # 
"#rD   c             #  D  "   \         V,           pV'       d    VRVP                  R4      ,           ,          p\        V P                  RWRVR7      ;_uu_ 4       pVP	                  4        F  pVP                  4       x  K  	  RRR4       R#   + '       g   i     R# ; i5ir  )rv  r  r   r   iter_sserw   r  s   &&&$$   rA   r  SyncClient.stream  sz      {*3S)))CLL&#w
 
*jjl" +
 
 
 
s   AB *B
B B		B r  r  c               0    V ^8  d   QhRRRRRRRRR	R
RR/# r  r?   )r@   s   "rA   rB   r    sN     M3 M3M3 M3 	M3 .M3M3 
M3rD   c                  V P                  4       p\        V\        4      '       d   VP                  R4      p\	        WE4      p\        V4      \        8  dI   V^ ,          R8X  d;   Vf   RpV P                  4       p\        P                  VV P                  VVVR7      # RV/p	Ve   W9R&   . p
V F  pVR8X  d6   V P                  4       pV
P                  R\        \        WV	R7      34       K?  VR8X  d3   V
P                  R\        \        V P                  VVVVR	7      34       Kx  VR
8X  g   K  V
P                  R
\        \         V P                  VVVVR	7      34       K  	  \#        V
4      # )r  r  r)   r  r  rc   r   r  r*   r  r+   )rL  r|  r6   r  r  r   r  rb  r   r  r   r   r   r  r  r   r  r  r  s   &&&&$$      rA   r  SyncClient.upload  s    ~~dC  ;;w'D9
 t9**/?/Bh/N (	))+F"''"11#) (   "<0 )2%&8:$Dx--/ 
FwO ' LL !%)5&/
 / LL !%)5&/
1 %L )22rD   c               (    V ^8  d   QhRRRRRRRR/# r  r?   )r@   s   "rA   rB   r  =	  r  rD   c          
         \         P                  ! V4      w  rEVf   Rp\        W#4      p\        P                  P                  V4      \        8  dK   V^ ,          R8X  d=   V P                  4       p\        P                  \        V4      VV P                  VR7      # \        VR4      ;_uu_ 4       pV P                  VP                  4       V\        P                  P                  V4      VVR7      uuRRR4       #   + '       g   i     R# ; ir  )r  r  r  r  r  r  r  rb  r   r   r6   r   r  r  r  r  r  s	   &&$$     rA   r  SyncClient.upload_file=	  s     !++D1	2I9
 GGOOD!$77 #x/))+F",,d)"11&	 -   $;;		''**40%$7   s   0AC<<D	c          
     ,    V ^8  d   QhRRRRRRRRR	R/# r  r?   )r@   s   "rA   rB   r  d	  r  rD   c          	         \         P                  ! 4       ;_uu_ 4       pVP                  WRR7       V P                  VP	                  4       RV 2VVR7      uuRRR4       #   + '       g   i     R# ; ir  r  r  s   &&&$$ rA   r  SyncClient.upload_imaged	  sV     ZZ\\VJJvJ-;;!!%$7	   \\\s   8A!!A2	r  Tr  r  r	  r  c               8    V ^8  d   QhRRRRRRRRRR	R
RRRRR/# )r<   r  r6   r  r>   r  r  r   rd  r   r	  r
  r  r  r=   zIterator[RealtimeConnection]r?   )r@   s   "rA   rB   r  z	  sZ       	
  "  6 6 
&rD   c             #  	.  "   R pR p	V'       d   V P                  WR7      p	M$V P                  4       p
RV
P                  R\        /p\	        WWCR7      p\        WR7      ;_uu_ 4       p\        WVR7      x  R R R 4       R #   + '       g   i     R # ; i5ir  )rm  rL  rm   r^  r  r`  r  r  s   &&$$$$$$     rA   r  SyncClient.realtimey	  s      *. ,, - E >>#D&(9(9<TG!+mOc33r$N  4333s   A%B'B7
BB		Bc               0    V ^8  d   QhRRRRRRRRRR	R
R/# )r<   r  r6   r  r>   r  r  r   rd  r   r=   rV  r?   )r@   s   "rA   rB   r  	  sF       	
  "  
 rD   c             #  	  "   R pR pV'       d   V P                  WR7      pM$V P                  4       pRVP                  R\        /p\	        VVVVR7      p	\        WR7      ;_uu_ 4       p
V
x  R R R 4       R #   + '       g   i     R # ; i5ir  )rm  rL  rm   r^  r  r`  r  s   &&$$$$     rA   r  SyncClient.ws_connect	  s      *. ,, - E >>#D&(9(9<TG"'	
 c33rH 4333s   A'B)A8.
B8B			Br?   rF   r  )"rM   rN   rO   rP   r
   r  rQ   r=  r   rd   rL  rT  r   r   r$  r  rb  r  rm  rx  r   r  r  r  r   r  r  r  r  r  r   r  r  rR   r?   rD   rA   r  r    s   Du5C5"OU"0 0
 	
 	
 1 1  
6 !B	6$(
 ( 04( 6:(  ( #%(T7

 7
  7
 #'7
 (,7
 #%7
 6:7
rK
 K  K  K 7;K ?CK (,K #%K 6:K 7;KZX2FK2#
 # !%#2M3 15M3 M3 M3^% 15	% %N
 15  *  	
   %) !B 9= 9= 6  	
  %) !B rD   r  c               $    V ^8  d   QhRRRRRR/# )r<   r   r  r   r6   r=   r?   )r@   s   "rA   rB   rB   	  s&     K K KC KC KrD   c                    \        V \        4      '       d   V P                  R4      p RV R\        P                  ! V 4      P                  4        2# )zIEncode the given data blob to a data URL with the specified content type.r  zdata:z;base64,)r|  r6   r  base64	b64encoder  )r   r   s   &&rA   r  r  	  sE    ${{7#<.)9)9$)?)F)F)H(IJJrD   c                    V ^8  d   QhRRRR/# )r<   r  r  r=   r6   r?   )r@   s   "rA   rB   rB   	  s     . .k .c .rD   c                    \         P                  ! V 4      w  rVf   Rp\        V R4      ;_uu_ 4       p\        VP	                  4       V4      uuRRR4       #   + '       g   i     R# ; i)zUEncode a file from the local filesystem to a data URL with the inferred content type.Nr   r  )r  r  r  r  r  )r  r  r"  r  s   &   rA   encode_filerO  	  sM    ''-LI.		dD		Tdiik9- 
			s   AA)	c               $    V ^8  d   QhRRRRRR/# )r<   r  r  r@   r6   r=   r?   )r@   s   "rA   rB   rB   	  s!     < < <S <c <rD   c                    \         P                  ! 4       ;_uu_ 4       pV P                  W!R7       \        VP	                  4       RV 24      uuRRR4       #   + '       g   i     R# ; i)zEEncode a pillow image object to a data URL with the specified format.r  r  N)r  r  r  r  r  )r  r@   r  s   && rA   encode_imagerR  	  sA    	

6
)foo'6&):; 
s   /AA)	)r)   r*   r+   i  @i   )rF  <   rF   )i  i  i  )i  i  rz  )r  Fr  )__conditional_annotations__
__future__r   r  r  rw   r   r  r  r   pathlibr   r  r  rK  rh   loggingr   r  
contextlibr   r   r   r   dataclassesr	   r
   	functoolsr   r   typingr   r   r   r   r   r   r   r   r   r   urllib.parser   r  ry   	httpx_sser   r   fal_client.authr   r   r   r   r   fal_client._versionr   fal_client._headersr    r!   r"   r#   r$   r%   websockets.clientr&   websockets.sync.connectionr'   	getLoggerrM   r  PILr(   r6   r  r.   rv  r  r  rk   r  environr~  r  r/   rQ   r1   r^  MIN_REQUEST_TIMEOUT_SECONDSr   r   r  r5   rT   r   r  r   r   r   r'  r%  r`  rc  r  ro  r  r  r  r  r  r  r  r  r  r  r^  r  r  r  r  r  r  r  r  r  r  r  r  r  rA  r`  re  r   r;  r  r  r  r{  rt  Timeoutr  ru  r|  r  r  r   r7  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  rO  rR  )rT  s   @rA   <module>rh     s   " "  	   	          : ' ( .   #   /  ,  95			8	$
sCx.34 L>+013 |nA.  
 zz~~n6IJ 08 - 8@Eu~ "$< M;-y1
  00, 1 
 = = =" "J" "J ( '  m$ m$`x* x*v	Y 	 ! ! ! WNL W W<      V   0 0 0 	1 	1 	1 $B B B0 w'X $
 
 
6 %( !   <	 	
 !%.
 D"L " /5 > ( ( (V ( ( (V     
	%  ]]5$7 & $&& BD ,!$4
 $&444
 $&40.::) )$) )$9$9* $I$* I$ I$X $L$+ L$ L$^ $j j jZ $a a aHK.< <rD   