
    hjQ0                     L   % S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJrJ	r	J
r
JrJrJrJrJr  S SKJrJrJr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJrJ r   S SK!J"r"J#r#J$r$  S SK%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-  \R\                  " S5      r/\R`                  \1S'   \\&\'\+\*\,4   r2 " S S5      r3 " S S5      r4 " S S5      r5\" S 5      r6\\7\ Rp                  4   \1S'   S$S\
4S jjr9S\S\
S\:S\;S\\-\74   4
S jr< S%S\S\2S \
S\;S\
4
S! jjr= S%S\S"\
S\:S\;S\-4
S# jjr>g)&    N)defaultdict)AsyncGenerator	AwaitableBinaryIODefaultDictListOptionalTupleUnion)TelegramClienthelpersutils)AuthKey)_maybe_await)MTProtoSender)LAYER)InvokeWithLayerRequest)ExportAuthorizationRequestImportAuthorizationRequest)GetFileRequestSaveBigFilePartRequestSaveFilePartRequest)DocumentInputDocumentFileLocation	InputFileInputFileBigInputFileLocationInputPeerPhotoFileLocationInputPhotoFileLocationTypeInputFile_FastTelethonlogc                       \ rS rSr% \\S'   \\S'   \\S'   \\S'   \\S'   S\S\S\	S\S	\S\S
\SS4S jr
S\\   4S jrS\S   4S jrSrg)DownloadSender:   clientsenderrequest	remainingstridefileoffsetlimitcountreturnNc                 R    X l         Xl        [        X4US9U l        X`l        Xpl        g )N)r,   r-   )r'   r&   r   r(   r*   r)   )selfr&   r'   r+   r,   r-   r*   r.   s           //root/TeamUltroid/pyUltroid/fns/FastTelethon.py__init__DownloadSender.__init__A   s&     %dG    c                 6  #    U R                   (       d  g U R                  R                  U R                  U R                  5      I S h  vN nU =R                   S-  sl         U R                  =R
                  U R                  -  sl        UR                  $  NN7fN   )r)   r&   _callr'   r(   r,   r*   bytes)r1   results     r2   nextDownloadSender.nextQ   sg     ~~{{((dllCC!t{{*|| Ds   ABB	ABc                 6    U R                   R                  5       $ N)r'   
disconnectr1   s    r2   r@   DownloadSender.disconnectY   s    {{%%''r5   )r&   r)   r(   r'   r*   )__name__
__module____qualname____firstlineno__r   __annotations__r   r   intTypeLocationr3   r	   r:   r<   r   r@   __static_attributes__ r5   r2   r$   r$   :   s    NK  	
     
 HUO (IdO (r5   r$   c                      \ rS rSr% \\S'   \\S'   \\\	4   \S'   \
\S'   \
\S'   \\R                     \S'   \R                  \S'   S\S\S	\
S\
S
\S\
S\
S\R                  SS4S jrS\SS4S jrS\SS4S jrSS jrSrg)UploadSender]   r&   r'   r(   
part_countr*   previousloopfile_idbigindexr/   Nc	                     Xl         X l        X@l        U(       a  [        X6US5      U l        O[        X6S5      U l        Xpl        S U l        Xl        g )Nr5   )	r&   r'   rO   r   r(   r   r*   rP   rQ   )	r1   r&   r'   rR   rO   rS   rT   r*   rQ   s	            r2   r3   UploadSender.__init__f   sE     $1'*cRDL.wsCDL	r5   datac                    #    U R                   (       a  U R                   I S h  vN   U R                  R                  U R                  U5      5      U l         g  N47fr?   )rP   rQ   create_task_nextr1   rW   s     r2   r<   UploadSender.next|   s=     ==--		--djj.>?  s   !AA5Ac                    #    XR                   l        U R                  R                  U R                  U R                   5      I S h  vN   U R                   =R
                  U R                  -  sl        g  N.7fr?   )r(   r:   r&   r9   r'   	file_partr*   r[   s     r2   rZ   UploadSender._next   sO     !kkT\\:::$++- 	;s   AA7A5/A7c                    #    U R                   (       a  U R                   I S h  vN   U R                  R                  5       I S h  vN $  N& N7fr?   )rP   r'   r@   rA   s    r2   r@   UploadSender.disconnect   s7     ==--[[++---  -s!   !AA
!AAAA)r&   rQ   rO   rP   r(   r'   r*   r/   N)rC   rD   rE   rF   r   rG   r   r   r   r   rH   r	   asyncioTaskAbstractEventLoopboolr3   r:   r<   rZ   r@   rJ   rK   r5   r2   rM   rM   ]   s    &(>>??OKw||$$

#
##  	
     '' 
,@u @ @
. .$ .
.r5   rM   c                      \ rS rSr% \\S'   \R                  \S'   \\S'   \	\
\\\4         \S'   \\S'   \\S'   S#S\S\	\   S	S4S
 jjrS$S jr\S\S	\4S j5       rS\S\S\S\S	S4
S jrS\S\S\S\S\S	\4S jrS\S\S\S\S	S4
S jrS\S\S\S\S\S	\4S jrS	\4S jr  S%S\S\S\	\   S\	\   S	\\\\4   4
S jjrS\S	S4S jrS$S  jr   S%S\S\S\	\   S\	\   S	\!\S4   4
S! jjr"S"r#g)&ParallelTransferrer   r&   rQ   dc_idsendersauth_keyupload_tickerNr/   c                 &   Xl          U R                   R                  U5        U R                   R                  U l        U=(       d     U R                   R                  R
                  U l        U(       a&  U R                   R                  R
                  U:w  a  S OU R                   R                  R                  U l        S U l        SU l         U R                   R                  U R                   5        g ! [         a     Nf = f! [         a     g f = fNr   )
r&   refresh_authAttributeErrorrQ   sessionrj   rl   rk   rm   
clear_auth)r1   r&   rj   s      r2   r3   ParallelTransferrer.__init__   s    	KK$$V, KK$$	7dkk1177
 ,,22e; $$-- 	
 	KK""4;;/  		  		s#   C3 %D 3
D ?D 
DDc                    #    [         R                  " U R                  Vs/ s H  oR                  5       PM     sn6 I S h  vN   S U l        g s  snf  N7fr?   )rc   gatherrk   r@   )r1   r'   s     r2   _cleanupParallelTransferrer._cleanup   sA     nnNv002NOOO OOs   AAA AA	file_sizec                 H    SnX:  a  g[         R                  " X-  S-  5      $ )Ni  @   )mathceil)ry   	full_sizes     r2   _get_connection_count)ParallelTransferrer._get_connection_count   s)     &	 yy)/2566r5   connectionsr+   rO   	part_sizec                 L  ^^#    [        X15      u  mmS[        4UU4S jjnU R                  USXAU-  U" 5       5      I S h  vN /[        R                  " [        SU5      Vs/ s H  nU R                  X&XAU-  U" 5       5      PM      sn6 I S h  vN QU l        g  NYs  snf  N7f)Nr/   c                  (   > TS:  a
  TS-  mT S-   $ T $ Nr   r8   rK   )minimum	remainders   r2   get_part_count:ParallelTransferrer._init_download.<locals>.get_part_count   s"    1}Q	{"Nr5   r   r8   )divmodrH   _create_download_senderrc   rv   rangerk   )	r1   r   r+   rO   r   r   ir   r   s	          @@r2   _init_download"ParallelTransferrer._init_download   s      $J<	 	 	 ..a)$;^=M 
 >>
 #1k2	 3 00),C^EU 3	 	
s/   =B$B!B$#%B
B$B"B$B$rT   r*   c           	      t   #    [        U R                  U R                  5       I S h  vN UX#-  UUU5      $  N7fr?   )r$   r&   _create_sender)r1   r+   rT   r   r*   rO   s         r2   r   +ParallelTransferrer._create_download_sender   s?      KK%%''
 	
's   $86
8rR   rS   c                    #    U R                  X#USU5      I S h  vN /[        R                  " [        SU5      Vs/ s H  nU R                  X#XEU5      PM     sn6 I S h  vN QU l        g  NQs  snf  N7fr   )_create_upload_senderrc   rv   r   rk   )r1   r   rR   rO   rS   r   s         r2   _init_upload ParallelTransferrer._init_upload   s}      ,,W#q+VV
>> #1k22 ..wCKX2 
Vs,   A5A,!A5A.
A5 A3!A5.A5c                    #    [        U R                  U R                  5       I S h  vN UUUUUU R                  S9$  N7f)N)rQ   )rM   r&   r   rQ   )r1   rR   rO   rS   rT   r*   s         r2   r   )ParallelTransferrer._create_upload_sender   sC      KK%%''	
 		
's   $?=
?c           
      B  #    U R                   R                  U R                  5      I S h  vN n[        U R                  U R                   R
                  S9nUR                  U R                   R                  UR                  UR                  UR                  U R                   R
                  U R                   R                  S95      I S h  vN   U R                  (       d  U R                  [        U R                  5      5      I S h  vN n[        UR                  UR                  S9U R                   R                  l        [#        [$        U R                   R                  5      nUR'                  U5      I S h  vN   UR                  U l        U$  GNk N N N7f)N)loggers)r   proxy)idr:   )r&   _get_dcrj   r   rl   _logconnect_connection
ip_addressportr   _proxyr   r   r:   _init_requestqueryr   r   send)r1   dcr'   authreqs        r2   r   "ParallelTransferrer._create_sender   s-    ;;&&tzz22t}}dkk6F6FGnnKK##((kk(( $ 
 	
 	
 }}%?

%KLLD.H77$**/DKK%%+ )0I0IJC++c""""OODM' 3	
 M
 #sG   )FFB!FF<F
FA3F>F?FFFFpart_size_kbconnection_countc                    #    U=(       d    U R                  U5      nU=(       d    [        R                  " U5      S-  nX%-   S-
  U-  nUS:  nU R                  XAXg5      I S h  vN   XVU4$  N7f)N   r8   i   )r   r   get_appropriated_part_sizer   )r1   rR   ry   r   r   r   rO   is_larges           r2   init_uploadParallelTransferrer.init_upload  s}      ,Tt/I/I)/T!PU%E%Ei%PTXX	+a/I=
// 0:PPPh.. 	Qs   A!A.#A,$	A.partc                    #    U R                   U R                     R                  U5      I S h  vN   U R                  S-   [        U R                   5      -  U l        g  N/7fr7   )rk   rm   r<   len)r1   r   s     r2   uploadParallelTransferrer.upload"  sN     ll4--.33D999"0014DLL8II 	:s   ,A A0A c                 @   #    U R                  5       I S h  vN   g  N7fr?   )rw   rA   s    r2   finish_upload!ParallelTransferrer.finish_upload&  s     mmos   c                  #    U=(       d    U R                  U5      nU=(       d    [        R                  " U5      S-  n[        R                  " X%-  5      nU R                  XAXe5      I S h  vN   SnXv:  an  U R                  Vs/ s H+  oR                  R                  UR                  5       5      PM-     n	nU	 H   n
U
I S h  vN nU(       d    OU7v   US-  nM"     Xv:  a  Mn  U R                  5       I S h  vN   g  Ns  snf  NB N7f)Nr   r   r8   )r   r   r   r|   r}   r   rk   rQ   rY   r<   rw   )r1   r+   ry   r   r   r   rO   r   r'   taskstaskrW   s               r2   downloadParallelTransferrer.download)  s      ,Tt/I/I)/T!PU%E%Ei%PTXX	YYy45
!!"2*PPPHLUfYY**6;;=9EU!z
	   mmo 	Q V!
 	sH   A*D
,C?-D
2D7D
D D
&D
9D:D
D
D
)rl   r&   rj   rQ   rk   rm   r?   rb   )NN)$rC   rD   rE   rF   r   rG   rc   re   rH   r	   r   r   r$   rM   r   r3   rw   staticmethodr   rI   r   r   rf   r   r   r   r   floatr
   r   r:   r   r   r   r   rJ   rK   r5   r2   rh   rh      s   

#
##Jd5!=>?@@~ hsm t ( 77	7 7

&2
@C
PS
	
8

 
 	

 
 
 

$

),
:=
DH
	


(+
26
?B
LO
	
m 4 )-*.// / uo	/
 #3-/ 
sC~	/J J4 J )-*.  uo	
 #3- 
t	$ r5   rh   c                  ,    [         R                  " 5       $ r?   )rc   LockrK   r5   r2   <lambda>r   B  s
    GLLNr5   parallel_transfer_locksfile_to_streamc              #   J   #     U R                  U5      nU(       d  g Uv   M  7fr?   )read)r   
chunk_size	data_reads      r2   stream_filer   F  s(     
"''
3		 s   !#r&   responsefilenameprogress_callbackr/   c                   #    [         R                  " 5       n[        R                  R	                  UR
                  5      n[        R                  " 5       n[        U 5      nUR                  XE5      I S h  vN u  pn
[        5       n[        U5       GH  nU(       a)   [        U" UR                  5       U5      5      I S h  vN   U
(       d  UR                  U5        [!        U5      S:X  a*  [!        U5      U:X  a  UR#                  U5      I S h  vN   M  [!        U5      [!        U5      -   nX:  aj  U[!        U5      -
  nUR%                  US U 5        UR#                  ['        U5      5      I S h  vN   UR)                  5         UR%                  XS  5        GM  UR%                  U5        GM     [!        U5      S:  a"  UR#                  ['        U5      5      I S h  vN   UR+                  5       I S h  vN   U
(       a  [-        XIU5      U4$ [/        XIX&R1                  5       5      U4$  GN GNo! [         a     GNzf = f GN4 N Ni NS7fro   )r   generate_random_longospathgetsizenamehashlibmd5rh   r   	bytearrayr   r   tellBaseExceptionupdater   r   extendr:   clearr   r   r   	hexdigest)r&   r   r   r   rR   ry   hash_md5uploaderr   rO   r   bufferrW   new_lencutoffs                  r2   _internal_transfer_to_telegramr   N  s     **,G.I{{}H"6*H,4,@,@,T&T#I8[FH%"#4X]]_i#PQQQ OOD!v;!D	Y 6//$'''f+D	)V,FMM$w-(//%-000LLNMM$w-(MM$' &( 6{QooeFm,,,

 
 
"""G:IEEW(4F4F4HI9TT7 'U
 R  
 ( 1 	-"s   A3I5H-6'I#H3H0H3A
IIA!I2I3A,II	 I7I86I0H33
I=I III	IIlocationoutc                 Z  #    UR                   n[        R                  " U5      u  pQ[        X5      nUR	                  X5      nU  S h  vN nUR                  U5        U(       d  M#   [        U" UR                  5       U5      5      I S h  vN   MN   NI N! [         a     M_  f = f
 U$ 7fr?   )	sizer   get_input_locationrh   r   writer   r   r   )	r&   r   r   r   r   rj   
downloader
downloadedxs	            r2   download_filer   w  s      ==D..x8OE$V3J$$X4J a		!"#4SXXZ#FGGG	 H    JsZ   AB+B(	B
B(B+)#BBBB+B(B
B%!B+$B%%B+r+   c                 <   #    [        XX#5      I S h  vN S   $  N7fro   )r   )r&   r+   r   r   s       r2   upload_filer     s$      -V8WW	 	Ws   )r   r?   )?rc   r   loggingr|   r   collectionsr   typingr   r   r   r   r   r	   r
   r   telethonr   r   r   telethon.cryptor   telethon.helpersr   telethon.networkr   telethon.tl.alltlobjectsr   telethon.tl.functionsr   telethon.tl.functions.authr   r   telethon.tl.functions.uploadr   r   r   telethon.tl.typesr   r   r   r   r   r   r   r    	getLoggerr"   LoggerrG   rI   r$   rM   rh   r   rH   r   r   strcallabler   r   r   rK   r5   r2   <module>r      s       	 #	 	 	 4 3 # ) * * 8 
	 	 	 ''8W^^ 8	 (  (F,. ,.^r rj ;F; S',,%67 
 &U&U&U &U  	&U
 =#&UZ #'	 
  	
 2 #'			
	 	  		
 	r5   