§
    µBÄj	‰  ã            *       óÎ  — U d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ	 d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lm Z  d d
l!m"Z" d dl!m#Z# d dl!m$Z$ d dl%Z%d dl&Z&d dl'Z'ddl(m)Z) ddl(m*Z* ddl(m+Z+ ddl,m-Z- ddl.m/Z/ ddl.m0Z0 ddl1m1Z1 dZ2e#e3d<    e	j4        d¦  «        Z5 e	j6        e5d¦  «        Z7e#e3d<    e j8        dd¦  «        Z9de:de:fd„Z;de:de:fd „Z<d!e&j=        de:dz  fd"„Z>d!e&j=        de?dz  fd#„Z@d!e&j=        d$e:deAfd%„ZBd!e&j=        deAfd&„ZCd!e&j=        dej        dz  fd'„ZDd(e:de fd)„ZEd*ee         d(e:ddfd+„ZF G d,„ d-e-¦  «        ZGd.e:d(e:de?fd/„ZHd0e:dz  d1eAd2e:d(e:dz  deIe&jJ        e:f         f
d3„ZKd4e?ddfd5„ZL ed6¬7¦  «         G d8„ d9¦  «        ¦   «         ZMd:eNd4e?de$fd;„ZOd<eMd:eNddfd=„ZPd>e&jJ        d?e:d@eAe:z  dAeQeIeQeQf         z  dz  d<eMdBeRe:e:f         dz  de&j=        fdC„ZSd!e&j=        dDe?dEe?dz  de?fdF„ZTd>e&jJ        dGejU        d?e:dHe:dz  dIe:dz  d@eAe:z  dAeQeIeQeQf         z  dz  d<eMd1eAd(e:deIe&j=        e:f         fdJ„ZVdKe:dLeAdeIe:eAf         fdM„ZWd>e&jJ        dNe&j=        d@eAe:z  dAeQeIeQeQf         z  dz  d<eMdGejU        d?e:dOe:dz  dPe?dQeg df         dRe'j'        dz  deeIeXe?dz  f                  fdS„ZYd>e&jJ        dNe&j=        d@eAe:z  dAeQeIeQeQf         z  dz  d<eMdGejU        d?e:dTe"dOe:dz  dPe?dUeAdVeQdz  dWee?e?dz  gdf         dz  dXdYdZejU        ddf d[„ZZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dbd?e:dz  dKe:e"z  dz  dUeAd0e:dz  dVeQdz  d1eAd@eAe:z  d]e:dz  dLeAdIe:dz  d2e:dz  d^eRe:e:f         dz  dWee?e?dz  gdf         dz  d_eAd(e:dz  dXdYdAeQeIeQeQf         z  dz  d4e?d`ej[        dz  de:e"z  e9z  f(da„Z\dS )cé    N)ÚCallable)ÚIterable)ÚIterator)Ú	dataclass)Úfield)Ú
HTTPStatus)ÚCookie)ÚMozillaCookieJar)ÚBinaryIO)ÚFinal)ÚNoReturné   )Ú_check_cancelled)Ú_configure_cancellation)Ú_wait_or_cancel)Ú
_YDLLogger)ÚDownloadError)ÚFileURLRetrievalError)Ú	parse_urli   Ú
CHUNK_SIZEú~z.cache/gdown/cookies.txtÚDEFAULT_COOKIES_FILEÚGoogleDriveFileToDownload©ÚidÚpathÚ
local_pathÚcontentsÚreturnc                 óî  — d}|                       ¦   «         D �]K}t          j        d|¦  «        }|r6d|                     ¦   «         d         z   }|                     dd¦  «        } �nýt          j        |d¬¦  «        }|                     d	¦  «        }|��.|d
         }t          |t          ¦  «        sJ ‚|                     dd¦  «        }t          j                             |¦  «        }t          j                             |j        ¦  «        }|                     dddi¬¦  «        D ]F}	|	d         }
|	d         }t          |
t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|g||
<   ŒGt          j                             |d¬¦  «        }t          j                             |                     |¬¦  «        ¦  «        } n¡t          j        d|¦  «        }|rH|                     ¦   «         d         }|                     dd¦  «        }|                     dd¦  «        } nBt          j        d|¦  «        }|r)|                     ¦   «         d         }t'          |¦  «        ‚�ŒM|st'          d¦  «        ‚|S )NÚ z"href="(\/uc\?export=download[^"]+)zhttps://docs.google.comr   z&amp;ú&zhtml.parser)Úfeaturesz#download-formÚactionÚinputÚtypeÚhidden)ÚattrsÚnameÚvalueT)Údoseq)Úqueryz"downloadUrl":"([^"]+)z\u003dú=z\u0026z'<p class="uc-error-subcaption">(.*)</p>zÏCannot retrieve the public link of the file. You may need to change the permission to 'Anyone with the link', or have had many accesses. Check FAQ in https://github.com/wkentaro/gdown?tab=readme-ov-file#faq.)Ú
splitlinesÚreÚsearchÚgroupsÚreplaceÚbs4ÚBeautifulSoupÚ
select_oneÚ
isinstanceÚstrÚurllibÚparseÚurlsplitÚparse_qsr,   Úfind_allÚ	urlencodeÚ
urlunsplitÚ_replacer   )r   ÚurlÚlineÚmÚsoupÚformr$   Úurl_componentsÚquery_paramsÚparamÚ
param_nameÚparam_valuer,   Úerrors                 ú?C:\Projects\Historical\venv\Lib\site-packages\gdown/download.pyÚ get_url_from_gdrive_confirmationrL   3   si  € Ø
€CØ×#Ò#Ñ%Ô%ð  /ñ  /ˆÝŒIÐ;¸TÑBÔBˆØð 	Ø+¨a¯hªh©j¬j¸¬mÑ;ˆCØ—+’+˜g sÑ+Ô+ˆCØ‰EÝÔ  °Ð>Ñ>Ô>ˆØ�ŠÐ/Ñ0Ô0ˆØÑØ˜(”^ˆFÝ˜f¥cÑ*Ô*Ð*Ð*Ð*Ø—.’. ¨#Ñ.Ô.ˆCÝ#œ\×2Ò2°3Ñ7Ô7ˆNÝ!œ<×0Ò0°Ô1EÑFÔFˆLØŸš w°v¸xÐ6H˜ÑIÔIð 9ð 9�Ø" 6œ]�
Ø# Gœn�Ý! *­cÑ2Ô2Ð2Ð2Ð2Ý! +­sÑ3Ô3Ð3Ð3Ð3Ø,7¨=�˜ZÑ(Ð(Ý”L×*Ò*¨<¸tÐ*ÑDÔDˆEÝ”,×)Ò)¨.×*AÒ*AÈÐ*AÑ*NÔ*NÑOÔOˆCØˆEÝŒIÐ.°Ñ5Ô5ˆØð 	Ø—(’(‘*”*˜Q”-ˆCØ—+’+˜i¨Ñ-Ô-ˆCØ—+’+˜i¨Ñ-Ô-ˆCØˆEÝŒIÐ?ÀÑFÔFˆØð 	/Ø—H’H‘J”J˜q”MˆEÝ'¨Ñ.Ô.Ð.ñ	/ð ð 
Ý#ðUñ
ô 
ð 	
ð €Jó    Úfilenamec                 ó¶   — |                       dd¦  «        } |                       dd¦  «                              dd¦  «                             ¦   «         } | dv rdS | S )Nú r!   ú/Ú_ú\)r!   ú.z..)r2   Ústrip©rN   s    rK   Ú_sanitize_filenamerW   `   s]   € Ø×Ò ¨Ñ+Ô+€HØ×Ò  SÑ)Ô)×1Ò1°$¸Ñ<Ô<×BÒBÑDÔD€HØ�?Ð"Ð"ØˆsØ€OrM   Úresponsec                 óV  — t           j                             | j        d         ¦  «        }t	          j        d|¦  «        }|r(t          |                     ¦   «         d         ¬¦  «        S t	          j        d|¦  «        }|r(t          |                     ¦   «         d         ¬¦  «        S d S )NúContent-Dispositionzfilename\*=UTF-8''(.*)r   rV   zattachment; filename="(.*?)")r8   r9   ÚunquoteÚheadersr/   r0   rW   r1   )rX   Úcontent_dispositionrB   s      rK   Ú_get_filename_from_responser^   h   s–   € Ý œ,×.Ò.¨xÔ/?Ð@UÔ/VÑWÔWÐå
Œ	Ð+Ð-@ÑAÔA€AØð :Ý!¨1¯8ª8©:¬:°a¬=Ð9Ñ9Ô9Ð9å
Œ	Ð0Ð2EÑFÔF€AØð :Ý!¨1¯8ª8©:¬:°a¬=Ð9Ñ9Ô9Ð9àˆ4rM   c                 ó–   — | j                              d¦  «        }|€d S 	 t          |¦  «        }n# t          $ r Y d S w xY w|dk    r|nd S )NzContent-Lengthr   )r\   ÚgetÚintÚ
ValueError)rX   Úcontent_lengthÚsizes      rK   Ú!_get_content_length_from_responsere   v   sl   € ØÔ%×)Ò)Ð*:Ñ;Ô;€NØÐØˆtðÝ�>Ñ"Ô"ˆˆøÝð ð ð Øˆtˆtðøøøà˜1’9�9ˆ4ˆ4 $Ð&s    0 °
>½>Úheaderc                 ó�   — | j                              |d¦  «                             d¦  «        }t          d„ |D ¦   «         ¦  «        S )Nr!   ú,c              3   óf   K  — | ],}|                      ¦   «                              ¦   «         d v V — Œ-dS ))r!   ÚidentityN)rU   Úlower)Ú.0Úencodings     rK   ú	<genexpr>z._has_only_identity_encoding.<locals>.<genexpr>ƒ   s>   è è € ÐVÐVÀˆx�~Š~ÑÔ×%Ò%Ñ'Ô'Ð+;Ð;ÐVÐVÐVÐVÐVÐVrM   )r\   r`   ÚsplitÚall)rX   rf   Ú	encodingss      rK   Ú_has_only_identity_encodingrr   �   sE   € ØÔ ×$Ò$ V¨RÑ0Ô0×6Ò6°sÑ;Ô;€IÝÐVÐVÈIÐVÑVÔVÑVÔVÐVrM   c                 óF   — t          | d¬¦  «        ot          | d¬¦  «        S )NúContent-Encoding©rX   rf   zTransfer-Encoding)rr   ©rX   s    rK   Ú_is_content_length_comparablerw   †   s9   € õ 'ØÐ"4ðñ ô ð Uå
%¨xÐ@SÐ
TÑ
TÔ
TðUrM   c                 óx   — d| j         vrd S | j         d         }|€d S t          j                             |¦  «        S )NúLast-Modified)r\   ÚemailÚutilsÚparsedate_to_datetime)rX   Úraws     rK   Ú _get_modified_time_from_responser~   �   sD   € ð ˜hÔ.Ð.Ð.Øˆtà
Ô
˜?Ô
+€CØ
€{ØˆtåŒ;×,Ò,¨SÑ1Ô1Ð1rM   Úcookies_filec                 ó   — t          j        | ¦  «        } t          | ¦  «        }t          j        | ¦  «        s|S 	 |                     dd¬¦  «         nI# t
          t          f$ r5}t          j        d| › d|› �d¬¦  «         t          | ¦  «        cY d }~S d }~ww xY w|D ]}|j	        dk    rd |_	        d|_
        Œ|                     ¦   «          |S )NT)Úignore_discardÚignore_expiresz"Replacing unreadable cookies file ú: é   ©Ú
stacklevelr   )ÚospÚ
expanduserr
   ÚexistsÚloadÚOSErrorÚUnicodeDecodeErrorÚwarningsÚwarnÚexpiresÚdiscardÚclear_expired_cookies)r   Ú
cookie_jarÚeÚcookies       rK   Ú_load_cookiesr•   �   s  € Ý”> ,Ñ/Ô/€LÝ! ,Ñ/Ô/€JÝŒ:�lÑ#Ô#ð ØÐð.ð 	�Š t¸DˆÑAÔAÐAÐAøÝÕ'Ð(ð .ð .ð .ÝŒØD°ÐDÐDÀÐDÐDÐQRð	
ñ 	
ô 	
ð 	
õ   Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-øøøøð	.øøøð
 ð "ð "ˆð Œ>˜QÒÐØ!ˆFŒNØ!ˆFŒNøØ×$Ò$Ñ&Ô&Ð&ØÐs   »A ÁBÁ$*BÂBÂBÚcookiesc                 óª  — t          j        |¦  «        }t          |¦  «        }| D ]}|                     |¦  «         Œt	          j        t          j        |¦  «        pdd¬¦  «         t	          j        t	          j        |t          j	        t          j
        z  d¬¦  «        ¦  «         t	          j        |d¦  «         |                     d¬¦  «         d S )NrT   T)Úexist_oki€  )ÚflagsÚmode)r�   )r‡   rˆ   r
   Ú
set_cookieÚosÚmakedirsÚdirnameÚcloseÚopenÚO_WRONLYÚO_CREATÚchmodÚsave)r–   r   r’   r”   s       rK   Ú_save_cookiesr¥   µ   sÀ   € Ý”> ,Ñ/Ô/€LÝ! ,Ñ/Ô/€JØð &ð &ˆØ×Ò˜fÑ%Ô%Ð%Ð%Ý„K•”˜LÑ)Ô)Ð0¨S¸4Ð@Ñ@Ô@Ð@õ „H�RŒW�\­¬µr´zÑ)AÈÐNÑNÔNÑOÔOÐOÝ„Hˆ\˜5Ñ!Ô!Ð!Ø‡O‚O 4€OÑ(Ô(Ð(Ð(Ð(rM   c            	       ó|   ‡ — e Zd Zdˆ fd„Zededz  fd„¦   «         Zdddœdeded	eddfd
„Zddœdededdfd„Z	ˆ xZ
S )Ú_CookieExtractionLoggerr   Nc                 ó|   •— t          ¦   «                              ¦   «          t          ¦   «         | _        d | _        d S ©N)ÚsuperÚ__init__ÚsetÚ_seenÚ_error_message)ÚselfÚ	__class__s    €rK   r«   z _CookieExtractionLogger.__init__Ç   s2   ø€ Ý‰Œ×ÒÑÔÐÝ"™uœuˆŒ
Ø*.ˆÔÐÐrM   c                 ó   — | j         S r©   )r®   )r¯   s    rK   Úerror_messagez%_CookieExtractionLogger.error_messageÌ   s   € àÔ"Ð"rM   F)ÚonceÚ	only_onceÚmessager³   r´   c               ó”   — |s|r|| j         v rd S | j                              |¦  «         t          d|› �t          j        ¬¦  «         d S )Nz	warning: ©Úfile)r­   ÚaddÚprintÚsysÚstderr)r¯   rµ   r³   r´   s       rK   Úwarningz_CookieExtractionLogger.warningÐ   s\   € ð ð 	�Ið 	 7¨d¬jÐ#8Ð#8ØˆFØŒ
�Š�wÑÔÐÝÐ#˜'Ð#Ð#­#¬*Ð5Ñ5Ô5Ð5Ð5Ð5rM   T)Úis_errorr¾   c               óT   — |r|| _         t          d|› �t          j        ¬¦  «         d S )Nzerror: r·   )r®   rº   r»   r¼   )r¯   rµ   r¾   s      rK   rJ   z_CookieExtractionLogger.errorØ   s6   € Øð 	*Ø")ˆDÔÝÐ!˜Ð!Ð!­¬
Ð3Ñ3Ô3Ð3Ð3Ð3rM   )r   N)Ú__name__Ú
__module__Ú__qualname__r«   Úpropertyr7   r²   Úboolr½   rJ   Ú__classcell__)r°   s   @rK   r§   r§   Ã   så   ø€ € € € € ð/ð /ð /ð /ð /ð /ð
 ð#˜s T™zð #ð #ð #ñ „Xð#ð 05Èð6ð 6ð 6Øð6Ø(,ð6ØAEð6à	ð6ð 6ð 6ð 6ð :>ð 4ð 4ð 4˜Sð 4°$ð 4À$ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4rM   r§   Úbrowserc                 óz  — ddl m} ddl m} t          ¦   «         }d„  || |¬¦  «        D ¦   «         }|j        �t          |j        ¦  «        ‚| |v r|D ]}|j        r|j        dz  dz
  |_        Œ|sdS t          |¬	¦  «        }|D ]}|                     |¦  «         Œt          ||¬
¦  «         t          |¦  «        S )Nr   )ÚCHROMIUM_BASED_BROWSERS)Úextract_cookies_from_browserc                 ó\   — g | ])}|j         d k    s|j                              d¦  «        ¯'|‘Œ*S )z
google.comz.google.com)ÚdomainÚendswith)rl   r”   s     rK   ú
<listcomp>z0_import_cookies_from_browser.<locals>.<listcomp>ä   sD   € ð ð ð àØŒ=˜LÒ(Ð(¨F¬M×,BÒ,BÀ=Ñ,QÔ,QÐ(ð 	à(Ð(Ð(rM   )Úloggeri@B l    !l
 r   ©r   ©r–   r   )Ú_vendor._ytdlp_cookiesrÈ   rÉ   r§   r²   r   r�   r•   r›   r¥   Úlen)rÆ   r   rÈ   rÉ   rÎ   Úbrowser_cookiesr”   r’   s           rK   Ú_import_cookies_from_browserrÔ   Þ   s  € à?Ð?Ð?Ð?Ð?Ð?ØDÐDÐDÐDÐDÐDå$Ñ&Ô&€Fðð à2Ð2°7À6ÐJÑJÔJðñ ô €Oð ÔÐ'Ý˜FÔ0Ñ1Ô1Ð1ØÐ)Ð)Ð)Ø%ð 	Nð 	NˆFð Œ~ð NØ!'¤°9Ñ!<¸~Ñ!M�”øØð àˆqÝ¨LÐ9Ñ9Ô9€JØ!ð &ð &ˆØ×Ò˜fÑ%Ô%Ð%Ð%Ý˜*°<Ð@Ñ@Ô@Ð@ÝˆÑÔÐrM   ÚproxyÚuse_cookiesÚ
user_agentc                 óB  — t          j        ¦   «         }|j                             d|i¦  «         | �&| | dœ|_        t          d| t          j        ¬¦  «         t          j	        |pt          ¦  «        }|r(|j                             t          |¬¦  «        ¦  «         ||fS )Nz
User-Agent)ÚhttpÚhttpszUsing proxy:r·   rÏ   )ÚrequestsÚsessionr\   ÚupdateÚproxiesrº   r»   r¼   r‡   rˆ   r   r–   r•   )rÕ   rÖ   r×   r   Úsesss        rK   Ú_get_sessionrà   þ   s£   € õ ÔÑÔ€Dà„L×Ò˜ zÐ2Ñ3Ô3Ð3àÐØ %°Ð6Ð6ˆŒÝˆn˜e­#¬*Ð5Ñ5Ô5Ð5å”> ,Ð"FÕ2FÑGÔG€LØð FØŒ×Ò�M°|ÐDÑDÔDÑEÔEÐEà�ÐÐrM   Úretriesc                 ó\   — t          | ¦  «        t          us| dk     rt          d¦  «        ‚d S )Nr   z%retries must be a nonnegative integer)r&   ra   rb   ©rá   s    rK   Ú_validate_retriesrä     s1   € ÝˆG�}„}�CÐÐ 7¨Q¢; ;ÝÐ@ÑAÔAÐAð $/ ;rM   T)Úkw_onlyc                   óf   — e Zd ZU eed<   eed<   dZej        dz  ed<    e	dd¬¦  «        Z
eed<   dS )	Ú_RetryStaterá   ÚquietNÚcancelr   F)ÚdefaultÚinitÚattempt)rÀ   rÁ   rÂ   ra   Ú__annotations__rÄ   ré   Ú	threadingÚEventr   rì   © rM   rK   rç   rç     sZ   € € € € € € à€L€L�LØ€K€K�KØ%)€FˆIŒO˜dÑ"Ð)Ð)Ñ)Ø�5 ¨Ð/Ñ/Ô/€GˆSÐ/Ð/Ñ/Ð/Ð/rM   rç   rJ   c                 ót   — |r5t          | t          j        j        ¦  «        rt	          d|› d| › �¦  «        | ‚| ‚)NzDownload failed after z
 retries: )r6   rÛ   Ú
exceptionsÚRequestExceptionr   ©rJ   rá   s     rK   Ú_raise_retries_exhaustedrõ   !  sP   € Øð •:˜e¥XÔ%8Ô%IÑJÔJð ÝØ? WÐ?Ð?¸Ð?Ð?ñ
ô 
àð	ð €KrM   Úretryc           
      ó  — t          | j        ¬¦  «         t          |t          j        j        t          j        j        f¦  «        r|‚| j        | j        k    rt          || j        ¬¦  «         t          j        dt          dt          | j        d¦  «        z  d¦  «        ¦  «        }| xj        dz  c_        | j        s2t          d| j        › d	| j        › d
|d›d|› �t          j        ¬¦  «         t#          || j        ¬¦  «         d S )N©ré   rô   r   r„   é   é   r   z
Retrying (rQ   z) in z.1fzs: r·   ©Úsecondsré   )r   ré   r6   rÛ   rò   ÚSSLErrorÚ
ProxyErrorrì   rá   rõ   ÚrandomÚuniformÚminrè   rº   r»   r¼   r   )rö   rJ   Údelays      rK   Ú_wait_for_retryr  )  s  € Ý˜EœLÐ)Ñ)Ô)Ð)ÝØ•Ô#Ô,­hÔ.AÔ.LÐMñô ð ð ˆØ„}˜œÒ%Ð%Ý  u°e´mÐDÑDÔDÐDÝŒN˜1�c !¥s¨5¬=¸!Ñ'<Ô'<Ñ"<¸bÑAÔAÑBÔB€EØ	€M„M�QÑ€M„MØŒ;ð 
ÝØR˜œÐRÐR¨¬ÐRÐR¸UÐRÐRÐRÈ5ÐRÐRÝ”ð	
ñ 	
ô 	
ð 	
õ ˜E¨%¬,Ð7Ñ7Ô7Ð7Ð7Ð7rM   rß   r@   ÚverifyÚtimeoutr\   c                 óô  — d }t          |j        |j        z
  dz   ¦  «        D ]»}t          |j        ¬¦  «         |�t          ||¬¦  «         	 |                      ||d||¬¦  «        c S # t          j        j	        t          j        j
        t          j        j        f$ r=}t          |t          j        j        t          j        j        f¦  «        r‚ |}Y d }~Œ´d }~ww xY w|€J ‚t          ||j        ¬¦  «         d S )Nr   rø   ©rö   rJ   T)r\   Ústreamr  r  rô   )Úrangerá   rì   r   ré   r  r`   rÛ   rò   ÚConnectionErrorÚTimeoutÚChunkedEncodingErrorr6   rý   rþ   rõ   )	rß   r@   r  r  rö   r\   Ú
last_errorrR   rJ   s	            rK   Ú_get_response_with_retriesr  ;  s8  € ð €JÝ�5”= 5¤=Ñ0°1Ñ4Ñ5Ô5ð ð ˆÝ ¤Ð-Ñ-Ô-Ð-ØÐ!Ý %¨zÐ:Ñ:Ô:Ð:ð	Ø—8’8ØØØØØð ñ ô ð ð ð øõ ÔÔ/ÝÔÔ'ÝÔÔ4ð
ð 		ð 		ð 		õ
 Ø�Ô+Ô4µhÔ6IÔ6TÐUñô ð ð ØˆJˆJˆJˆJˆJˆJøøøøð		øøøð Ð!Ð!Ð!Ý :°u´}ÐEÑEÔEÐEÐEÐEs   ÁA)Á)5CÂ3CÃCÚoffsetÚexpected_totalc                 óä  — t          j        d| j                             dd¦  «        ¦  «        }| j        t
          j        k    sà|�Þt          |d         ¦  «        |k    sÅt          |d         ¦  «        |k     s¬|d         dk    r/t          |d         ¦  «        t          |d         ¦  «        dz
  k    sq|�t          |d         ¦  «        |dz
  k    sSt          | d¬	¦  «        rBt          | ¬
¦  «        rAt          | ¬
¦  «        x}	 �.|t          |d         ¦  «        |z
  dz   k    rt          d¦  «        ‚|d         dk    rt          |d         ¦  «        |z
  nt          |d         ¦  «        |z
  dz   S )Nzbytes (\d+)-(\d+)/(\d+|\*)zContent-Ranger!   r   r„   é   Ú*rt   ru   rv   zMServer did not honor the requested byte range; the partial file is preserved.)r/   Ú	fullmatchr\   r`   Ústatus_coder   ÚPARTIAL_CONTENTra   rr   rw   re   r   )rX   r  r  ÚmatchÚlengths        rK   Ú_validate_resumed_responser  _  s}  € õ ŒLØ% xÔ'7×';Ò';¸OÈRÑ'PÔ'Pñô €Eð
 	Ô¥
Ô :Ò:Ð:Øˆ=Ýˆu�QŒx‰=Œ=˜FÒ"Ð"Ýˆu�QŒx‰=Œ=˜6Ò!Ð!Ø�!ŒH˜ŠOˆO¥ E¨!¤H¡¤µ°U¸1´X±´ÀÑ1BÒ BÐ BØÐ&­3¨u°Q¬x©=¬=¸NÈQÑ<NÒ+NÐ+NÝ*°HÐEWÐXÑXÔXð ,Oõ *°8Ð<Ñ<Ô<ð ,Oõ =ÀhÐOÑOÔOÐO�Øðà�#˜e Aœh™-œ-¨&Ñ0°1Ñ4Ò4Ð4õ ð-ñ
ô 
ð 	
ð &+¨1¤X°¢_ _�3ˆu�QŒx‰=Œ=˜6Ñ!Ð!½#¸eÀA¼h¹-¼-È&Ñ:PÐSTÑ:TÐTrM   Ú	responsesÚgdrive_file_idÚformatc        
         ó�  — |}
	 |                      ¦   «          t          | ||||d ¬¦  «        }|                     |j         ¦  «         |s||fS ||
k    r|j        t          j        k    rd|› �}Œk|j        d                              d¦  «        r•|j        €J ‚d|j        v r%d|j        vrd 	                    ||€d	n|¬
¦  «        }ŒÂd|j        v r%d|j        vrd 	                    ||€dn|¬
¦  «        }Œðd|j        v r&d|j        vrd 	                    ||€dn|¬
¦  «        }�ŒnJd|j        v rA|j        d          
                    d¦  «        r!|dvrd 	                    ||€dn|¬
¦  «        }�Œj|rK	 t          | j        |	¬¦  «         n3# t          $ r&}t          j        d|	› d|› �d¬¦  «         Y d }~nd }~ww xY wd|j        v r||fS 	 |j        }nh# t"          j        j        t"          j        j        t"          j        j        f$ r0}|                      ¦   «          t-          ||¬¦  «         Y d }~�Œ-d }~ww xY w	 t/          |¦  «        }n}# t0          $ rp}d 	                    t3          j        d                     t3          j        t;          |¦  «        ¦  «        ¦  «        d¬¦  «        |
¦  «        }t1          |¦  «        ‚d }~ww xY w�ŒÄ)NT©rß   r@   r  r  rö   r\   z!https://drive.google.com/open?id=zContent-Typez	text/htmlz
/document/z/exportz>https://docs.google.com/document/d/{id}/export?format={format}Údocx)r   r  z/spreadsheets/zBhttps://docs.google.com/spreadsheets/d/{id}/export?format={format}Úxlsxz/presentation/zBhttps://docs.google.com/presentation/d/{id}/export?format={format}ÚpptxrZ   >   Nr!  rÐ   zFailed to save cookies to rƒ   r  r…   r  z�Failed to retrieve file url:

{}

You may still be able to access the file from the browser:

	{}

but Gdown can't. Please check connections and permissions.ú
ú	)Úprefix)rŸ   r  Úcallbackr  r   ÚINTERNAL_SERVER_ERRORr\   Ú
startswithr@   r  rÌ   r¥   r–   r‹   r�   rŽ   ÚtextrÛ   rò   r
  r  r  r  rL   r   ÚtextwrapÚindentÚjoinÚwrapr7   )rß   r  r@   r  r  r  r  rö   rÖ   r   Ú
url_originÚresr“   r   rJ   rµ   s                   rK   Ú_get_download_responser/  |  s¾  € ð €Jða1Ø�ŠÑÔÐÝ(ØØØØØØð
ñ 
ô 
ˆð 	×Ò˜3œ9Ñ%Ô%Ð%àð 	Ø˜�8ˆOà�*ÒÐ ¤µJÔ4TÒ!TÐ!TàF°nÐFÐFˆCØàŒ;�~Ô&×1Ò1°+Ñ>Ô>ð )	Ø”7Ð&Ð&Ð&Ø˜sœwÐ&Ð&¨9¸C¼GÐ+CÐ+Cð'ß'-¢vØ)Ø)/¨˜v˜v¸Vð (.ñ (ô (ð ð Ø! S¤WÐ,Ð,°À#Ä'Ð1IÐ1Ið'ß'-¢vØ)Ø)/¨˜v˜v¸Vð (.ñ (ô (ð ð Ø! S¤WÐ,Ð,°À#Ä'Ð1IÐ1Ið'ß'-¢vØ)Ø)/¨˜v˜v¸Vð (.ñ (ô (ð ñ øà! S¤[Ð0Ð0Ø”Ð1Ô2×;Ò;¸FÑCÔCð 1à˜nÐ,Ð,ð#ß#)¢6Ø%Ø%+ ^˜6˜6¸ð $*ñ $ô $ð ñ àð 	ðÝ d¤lÀÐNÑNÔNÐNÐNøÝð ð ð å”ØD°ÐDÐDÀÐDÐDÐQRðñ ô ð ð ð ð ð ð øøøøðøøøð ! C¤KÐ/Ð/Ø˜�8ˆOð		Ø”xˆHˆHøåÔÔ/ÝÔÔ'ÝÔÔ4ð
ð 	ð 	ð 	ð
 �OŠOÑÔÐÝ %¨uÐ5Ñ5Ô5Ð5ØˆHˆHˆH‰Høøøøð	øøøð	1Ý2°8Ñ<Ô<ˆCˆCøÝ$ð 
	1ð 
	1ð 
	1ðM÷ ŠfÝ” §	¢	­(¬-½¸A¹¼Ñ*?Ô*?Ñ @Ô @ÈÐNÑNÔNØñô ð õ (¨Ñ0Ô0Ð0øøøøð
	1øøøñoa1sI   Å0F Æ
F7ÆF2Æ2F7ÇG Ç5H5È%H0È0H5È9I	 É	
KÉA+J>Ê>KÚoutputÚresumec                 ó  — g }t          j        t          j        | ¦  «        pd¦  «        D ]x}|                     t          j        | ¦  «        ¦  «        rO|                     d¦  «        r:|                     t          j        t          j        | ¦  «        |¦  «        ¦  «         Œy|rŒ|rŠt          |¦  «        dk    rmddg}|D ]}|                     d|› �¦  «         Œ|                     d¦  «         |                     d¦  «         t          d                     |¦  «        ¦  «        ‚|d	         d
fS t          j        dt          j        | ¦  «        t          j        | ¦  «        d¬¦  «        }|j        }|                     ¦   «          |dfS )NrT   z.partr   z-There are multiple temporary files to resume:r!   r#  z4Please remove them except one to resume downloading.r"  r   TF)Úsuffixr$  ÚdirÚdelete)rœ   Úlistdirr‡   rž   r'  ÚbasenamerÌ   Úappendr+  rÒ   r   ÚtempfileÚNamedTemporaryFiler)   rŸ   )r0  r1  Úexisting_tmp_filesr¸   ÚlinesÚtmp_file_objÚtmp_files          rK   Ú_prepare_partial_filer?  î  s”  € ØÐÝ”
�3œ; vÑ.Ô.Ð5°#Ñ6Ô6ð Kð KˆØ�?Š?�3œ<¨Ñ/Ô/Ñ0Ô0ð 	K°T·]²]À7Ñ5KÔ5Kð 	KØ×%Ò%¥c¤h­s¬{¸6Ñ/BÔ/BÀDÑ&IÔ&IÑJÔJÐJøØð +Ð$ð +ÝÐ!Ñ"Ô" aÒ'Ð'ØDÀbÐIˆEØ*ð *ð *�Ø—’˜[ $˜[˜[Ñ)Ô)Ð)Ð)Ø�LŠL˜ÑÔÐØ�LŠLÐOÑPÔPÐPÝ §	¢	¨%Ñ 0Ô 0Ñ1Ô1Ð1Ø! !Ô$ dÐ*Ð*åÔ.ØÝŒ|˜FÑ#Ô#ÝŒK˜ÑÔØð	ñ ô €Lð Ô €HØ×ÒÑÔÐØ�Uˆ?ÐrM   r.  r>  Ú
start_sizeÚflushÚpbarc           	   #   ót  K  — d}|dk    }t          |¬¦  «        rt          |¬¦  «        nd }|j                             d¦  «        }|�|                     d¦  «        r|j                             d¦  «        }t          |j        |j        z
  dz   ¦  «        D �]}||z   }d }|r�|rdd|› d	�ind }|�|r||d
<   |                     ¦   «          t          | |||||¬¦  «        }| 
                    |j        ¦  «         |rt          |||¬¦  «        }n|                     ¦   «          |�|nt          |¬¦  «        }|€d n||z   }|€t          |¬¦  «        r|nd }|�|}|
�||
_        d}d }	 |                     t          ¬¦  «        D ]S}|�%|t!          |¦  «        z   |k    rt#          d¦  «        ‚|t!          |¦  «        z  }|t!          |¦  «        z  }||fV — ŒTnD# t$          j        j        t$          j        j        t$          j        j        f$ r}|}Y d }~nd }~ww xY wt/          |t$          j        j        ¦  «        s
|€B|�@||k     r:d||z   › d�}|�	|d|› d�z  }|�	|d|› d�z  }t#          |dz   ¦  «        }||_        |}|€ d S |                     ¦   «           |	¦   «          t3          ||¬¦  «         d}�Œ!d S )Nr   rv   ÚETagzW/ry   r   ÚRangezbytes=ú-zIf-Ranger  )rX   r  r  )Ú
chunk_sizez)Response exceeds the announced byte rangez!Download is incomplete: received z bytesz but the server announced z!.
The received bytes are kept in z8, which resume (--continue on the command line) picks uprT   r  T)rw   re   r\   r`   r'  r	  rá   rì   rŸ   r  r%  r  Úraise_for_statusÚtotalÚiter_contentr   rÒ   r   rÛ   rò   r
  r  r  r6   Ú	__cause__r  )rß   r.  r  r  rö   r  r@   r>  r@  rA  rB  Ú
downloadedÚ	reconnectr  Ú	validatorrR   r  Ú
range_sizer\   rc   rI  Úexpected_sizeÚreceivedÚtransfer_errorÚchunkrJ   rµ   Ú
incompletes                               rK   Ú_iter_response_chunksrU    sÜ  è è € ð €JØ˜a’€Iõ )°#Ð6Ñ6Ô6ð	Õ)°3Ð7Ñ7Ô7Ð7àð ð
 ”—’ Ñ'Ô'€IØÐ˜I×0Ò0°Ñ6Ô6ÐØ”K—O’O OÑ4Ô4ˆ	Ý�5”= 5¤=Ñ0°1Ñ4Ñ5Ô5ð Qñ QˆØ˜jÑ(ˆØˆ
Øð 	'Ø7=ÐG�wÐ 2¨Ð 2Ð 2Ð 2Ð3Ð3À4ˆGØÐ" yÐ"à&/�˜
Ñ#Ø�OŠOÑÔÐÝ,ØØØØØØðñ ô ˆCð ×Ò˜sœyÑ)Ô)Ð)Øð 'Ý7Ø ¨Àðñ ô �
�
ð ×$Ò$Ñ&Ô&Ð&ð Ð%ð ˆJå2¸CÐ@Ñ@Ô@ð 	ð
 'Ð.��°NÀVÑ4Kˆð Ð%Õ)FÐPSÐ)TÑ)TÔ)TÐ%ð ˆNàð 	ð
 Ð$Ø"ˆNØÐØˆDŒJØˆØ+/ˆð	#Ø×)Ò)µZÐ)Ñ@Ô@ð #ð #�Ø Ð,°½CÀ¹J¼JÑ1FÈÒ1VÐ1VÝ'Ð(SÑTÔTÐTØ�C ™JœJÑ&�Ø�c %™jœjÑ(�
Ø˜U�lÐ"Ð"Ð"Ð"ð#øõ ÔÔ/ÝÔÔ'ÝÔÔ4ð
ð 	#ð 	#ð 	#ð
 #ˆNˆNˆNˆNˆNˆNøøøøð	#øøøõ �n¥hÔ&9Ô&NÑOÔOð 	(ØÐ"ØÐ)Ø˜=Ò(Ð(ð T°JÀÑ4KÐSÐSÐSð ð Ð(ØÐE¸ÐEÐEÐEÑE�ØÐ#Øð@¸ð @ð @ð @ñ�õ ' w°¡}Ñ5Ô5ˆJØ#1ˆJÔ Ø'ˆNØÐ!ØˆFˆFØ�ŠÑÔÐØˆ‰ŒˆÝ˜e¨>Ð:Ñ:Ô:Ð:Øˆ	‰	ðcQð Qs   Å)A/GÇ5HÈHÈHÚfrè   ÚspeedÚprogressÚhasherzhashlib._Hash | NoneÚstackc                 óŒ  — d }|
s@t          j         t          |¬¦  «        d|	d¬¦  «        }|                     |j        ¦  «         t	          j        ¦   «         }d}t          | ||||||||	|j        |¬¦  «        D ]Ê\  }}t          |j        ¬¦  «         | 	                    |¦  «         |�| 
                    |¦  «         |t          |¦  «        z  }|�"| 
                    t          |¦  «        ¦  «         |� |||	z   |¦  «         |€Œ�||z  }t	          j        ¦   «         |z
  }||k     rt          ||z
  |j        ¬¦  «         ŒËd S )	Nrv   ÚBT)rI  ÚunitÚinitialÚ
unit_scaler   )rß   r.  r  r  rö   r  r@   r>  r@  rA  rB  rø   rû   )Útqdmre   r%  rŸ   ÚtimerU  rA  r   ré   ÚwriterÝ   rÒ   r   )rß   r.  r  r  rö   r  r@   rV  r>  r@  rè   rW  rX  rY  rZ  rB  Út_startrL  rS  rI  Úelapsed_time_expectedÚelapsed_times                         rK   Ú_write_responserf  t  s�  € ð$ €DØð #ÝŒyÝ3¸SÐAÑAÔAØØØð	
ñ 
ô 
ˆð 	�Š�t”zÑ"Ô"Ð"ÝŒi‰kŒk€GØ€JÝ-ØØØØØØØØØØŒgØðñ ô ð ð ‰ˆˆuõ 	 ¤Ð-Ñ-Ô-Ð-Ø	�Š�‰ŒˆØÐØ�MŠM˜%Ñ Ô Ð Ø•c˜%‘j”jÑ ˆ
ØÐØ�KŠK�˜E™
œ
Ñ#Ô#Ð#ØÐØˆH�Z *Ñ,¨eÑ4Ô4Ð4Øˆ=ØØ *¨UÑ 2ÐÝ”y‘{”{ WÑ,ˆØÐ/Ò/Ð/ÝØ-°Ñ<ÀUÄ\ðñ ô ð øð7ð rM   Fr   Úlog_messagesÚskip_downloadré   c                 óŽ
  ‡"— t          |¬¦  «         t          |¬¦  «         |s(|r&|�$t          |t          ¦  «        st	          d¦  «        ‚|du | du z  st	          d¦  «        ‚|�d|› �} | €J ‚|
€d}
|€i }| }t          j        ¦   «         5 }t          |||
|¬¦  «        \  }}|                     |j	        ¦  «         t          ||¬	¦  «         t          |rd
n|||¬¦  «        }|s|s|r
d|j        d<   |                     t          j        ¦   «         ¦  «        }t          | ¬¦  «        \  }}|r	d|› �} | }d}t          ||| ||	|||||¬¦
  «
        \  }} d}d}|r"|r t!          |¬¦  «        }t#          |¬¦  «        }|r3|€t%          d|› d�¦  «        ‚t'          |||¬¦  «        cddd¦  «         S |                     ¦   «          |€"t+          t-          j        | ¦  «        ¬¦  «        }|€|}t          |t          ¦  «        rf|                     d¦  «        st-          j        |¦  «        r=t-          j        |¦  «        st7          j        |¦  «         t-          j        ||¦  «        }t          |t          ¦  «        rŽ|rMt6          j                             |¦  «        r.|stA          d|› �tB          j"        ¬¦  «         |cddd¦  «         S tG          ||¬¦  «        \  }}tI          |d¦  «        }|                     |j	        ¦  «         nd}|}|�stA          | %                    dd¦  «        tB          j"        d¬¦  «         |rtA          d|tB          j"        ¬¦  «         || k    rtA          d | tB          j"        ¬¦  «         n8tA          d!|tB          j"        ¬¦  «         tA          d"| tB          j"        ¬¦  «         tA          | %                    d#d$t          |t          ¦  «        rt-          j&        |¦  «        n|› d%�¦  «        tB          j"        d¬¦  «         |�| '                    ¦   «         nd
}|�^|d
k    rX|€J ‚tI          |d&¦  «        5 Š"tQ          ˆ"fd'„d(¦  «        D ]} | )                    | ¦  «         Œ	 ddd¦  «         n# 1 swxY w Y   tU          ||||||| ||||||||¬)¦  «         ddd¦  «         n# 1 swxY w Y   t          |¬¦  «         |�,t          |t          ¦  «        sJ ‚tW          j,        ||¦  «         t          |t          ¦  «        r-|r+| -                    ¦   «         }!t7          j.        ||!|!f¦  «         |S )*a¢  Download file from URL.

    Parameters
    ----------
    url:
        URL. Google Drive URL is also supported.
    output:
        Output filename/directory. Default is basename of URL.
        If output is an existing directory or ends with a path separator,
        the basename will be appended automatically.
    quiet:
        Suppress terminal output. Default is False.
    proxy:
        Proxy.
    speed:
        Download byte size per second (e.g., 256KB/s = 256 * 1024).
    use_cookies:
        Flag to use cookies. Default is True.
    verify:
        Either a bool, in which case it controls whether the server's TLS
        certificate is verified, or a string, in which case it must be a path
        to a CA bundle to use. Default is True.
    id:
        Google Drive's file ID.
    resume:
        Resume interrupted downloads while skipping completed ones.
        Default is False.
    format:
        Format of Google Docs, Spreadsheets and Slides. Default is:
            - Google Docs: 'docx'
            - Google Spreadsheet: 'xlsx'
            - Google Slides: 'pptx'
    user_agent:
        User-agent to use in the HTTP request.
    log_messages:
        Log messages to customize. Currently it supports:
        - 'start': the message to show the start of the download
        - 'output': the message to show the output filename
    progress:
        Callback called after each chunk: ``progress(bytes_so_far, bytes_total)``.
        *bytes_total* is None when Content-Length is unavailable.
        Raise any exception from the callback to abort the download.
    skip_download:
        Resolve the Google Drive filename without downloading the file body.
        Default is False.
    cookies_file:
        Netscape cookies file to load before the request and save after
        every Google Drive response. Default is ~/.cache/gdown/cookies.txt.
        Ignored when use_cookies is False.
    hasher:
        A hashlib object fed every downloaded byte, so a caller verifying the
        file does not have to read it back afterwards. Bytes already on disk
        from a resumed download are fed to it before the transfer starts.
    timeout:
        Seconds to wait for the server between bytes, either as a single
        value or as a (connect, read) pair, as in requests. Default is None,
        which waits forever.

    retries:
        Additional attempts for transient network failures, per file. Default
        is zero. Retries resume the current transfer; use resume=True to reuse
        earlier partial downloads and skip completed files. Requires a filesystem
        destination. Ignored when skip_download is True.

    cancel:
        Optional threading.Event set by the caller to stop the operation before
        its network timeout. Interrupts response-header and body reads, retry
        backoff, and speed-limit waits. Does not interrupt DNS, connection/TLS
        setup, proxy negotiation, filesystem operations, or caller callbacks.
        An event already set cancels before work. The event is never cleared.
        Partial files remain available for resume; caller-owned streams stay open.
        Once final-file publication starts, a late event does not cancel success.

    Returns
    -------
    output:
        Output filename when downloading. When skip_download is True, a
        GoogleDriveFileToDownload whose path is the resolved Google Drive
        filename.

    Raises
    ------
    ValueError
        If neither url nor id is specified, or both are specified.
    FileURLRetrievalError
        If the file URL cannot be retrieved from Google Drive, or if
        skip_download is True and no Google Drive filename can be resolved.
    DownloadError
        If the download fails (e.g., the response body ends before the
        announced number of bytes, or multiple temporary files exist during
        resume).
    DownloadCancelled
        If cancellation is requested before final-file publication. Not retried.
    rø   rã   Nz7retries requires a filesystem destination, not a streamz$Either url or id has to be specifiedzhttps://drive.google.com/uc?id=zxMozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36)rÕ   rÖ   r×   r   )rÜ   ré   r   )rá   rè   ré   rj   zAccept-Encoding)r@   T)
rß   r  r@   r  r  r  r  rö   rÖ   r   rv   zdCould not determine the Google Drive filename; --json requires a resolvable Google Drive file (got: ú)r   rV   )rQ   rS   z!Skipping already downloaded file r·   )r0  r1  ÚabÚstartzDownloading...
r!   )r¸   ÚendzResume:zFrom:zFrom (original):zFrom (redirected):r0  zTo: r"  Úrbc                  ó8   •— ‰                       t          ¦  «        S r©   )Úreadr   )Úresumeds   €rK   ú<lambda>zdownload.<locals>.<lambda>§  s   ø€ ¨'¯,ª,µzÑ*BÔ*B€ rM   rM   )rß   r.  r  r  rö   r  r@   rV  r>  r@  rè   rW  rX  rY  rZ  )/r   rä   r6   r7   rb   Ú
contextlibÚ	ExitStackrà   r%  rŸ   r   rç   r\   Úenter_contextr   r/  r^   r~   r   r   rH  rW   r‡   r7  rÌ   Úisdirr‰   rœ   r�   r+  r   Úisfilerº   r»   r¼   r?  r    r`   ÚabspathÚtellÚiterrÝ   rf  ÚshutilÚmoveÚ	timestampÚutime)#r@   r0  rè   rÕ   rW  rÖ   r  r   r1  r  r×   rg  rX  rh  r   rY  r  rá   ré   r-  rZ  rß   rö   r  r  Úis_gdrive_download_linkr.  Úfilename_from_urlÚlast_modified_timer>  rV  r@  ÚblockÚmtimerq  s#                                     @rK   Údownloadr„  ²  sb  ø€ õf ˜FÐ#Ñ#Ô#Ð#Ý˜gÐ&Ñ&Ô&Ð&àðTàðTð ÐÝ˜6¥3Ñ'Ô'ð õ ÐRÑSÔSÐSØ�$ˆJ˜3 $˜;Ñ'ð AÝÐ?Ñ@Ô@Ð@Ø	€~Ø4°Ð4Ð4ˆØˆ?ˆ?ˆ?ØÐð Pˆ
ØÐØˆà€Jå	Ô	Ñ	Ô	ð ~
 5Ý)ØØ#Ø!Ø%ð	
ñ 
ô 
Ñˆˆlð 	�Š�t”zÑ"Ô"Ð"Ý¨°VÐ<Ñ<Ô<Ð<ÝØ&Ð3�A�A¨GØØð
ñ 
ô 
ˆð
 ð 	9 'ð 	9¨Vð 	9à.8ˆDŒLÐ*Ñ+Ø×'Ò'­
Ô(<Ñ(>Ô(>Ñ?Ô?ˆ	å2;ÀÐ2DÑ2DÔ2DÑ/ˆÐ/àð 	+ØD°NÐDÐDˆCØˆJØ&*Ð#å)ØØØØ)ØØØØØ#Ø%ð
ñ 
ô 
‰ˆˆSð !ÐØ!ÐØð 	PÐ5ð 	PÝ ;ÀSÐ IÑ IÔ IÐÝ!AÈ3Ð!OÑ!OÔ!OÐàð 	Ø Ð(Ý+ðJØ<FðJð Jð Jñô ð õ -Ø!Ð(9ÐFWðñ ô ði~
ð ~
ð ~
ð ~
ñ ~
ô ~
ð ~
ð ~
ðp 	×ÒÑÔÐØÐ$Ý 2½C¼LÈÑ<MÔ<MÐ NÑ NÔ NÐàˆ>Ø&ˆFå�f�cÑ"Ô"ð 	9Ø�OŠO˜KÑ(Ô(ð	9Ý,/¬I°fÑ,=Ô,=ð	9õ ”:˜fÑ%Ô%ð $Ý”˜FÑ#Ô#Ð#Ý”X˜fÐ&7Ñ8Ô8ˆFå�f�cÑ"Ô"ð 	Øð �"œ'Ÿ.š.¨Ñ0Ô0ð Øð YÝÐF¸fÐFÐFÍSÌZÐXÑXÔXÐXØðU~
ð ~
ð ~
ð ~
ñ ~
ô ~
ð ~
ð ~
õX  5¸FÈ6ÐRÑRÔRÑˆH�fÝ�X˜tÑ$Ô$ˆAØ�NŠN˜1œ7Ñ#Ô#Ð#Ð#àˆHØˆAàñ 	ÝØ× Ò  Ð*<Ñ=Ô=ÅCÄJÐTVðñ ô ð ð ð <Ý�i µ´
Ð;Ñ;Ô;Ð;Ø˜SÒ Ð Ý�g˜s­¬Ð4Ñ4Ô4Ð4Ð4åÐ(¨*½3¼:ÐFÑFÔFÐFÝÐ*¨Cµc´jÐAÑAÔAÐAÝØ× Ò ØðVÝ.8¸ÅÑ.EÔ.EÐQ•s”{ 6Ñ*Ô*Ð*È6ðVð Vð Vñô õ
 ”ZØðñ ô ð ð "*Ð!5�Q—V’V‘X”X�X¸1ˆ
ØÐ *°¢/ /ØÐ'Ð'Ð'Ý�h Ñ%Ô%ð )¨Ý!Ð"BÐ"BÐ"BÐ"BÀCÑHÔHð )ð )�EØ—M’M %Ñ(Ô(Ð(Ð(ð)ð)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )õ 	ØØØØØØØØØØ!ØØØØØð	
ñ 	
ô 	
ð 	
ð]~
ð ~
ð ~
ñ ~
ô ~
ð ~
ð ~
ð ~
ð ~
ð ~
ð ~
øøøð ~
ð ~
ð ~
ð ~
õ@ ˜FÐ#Ñ#Ô#Ð#ØÐÝ˜&¥#Ñ&Ô&Ð&Ð&Ð&ÝŒ�H˜fÑ%Ô%Ð%Ý�&�#ÑÔð )Ð#5ð )Ø"×,Ò,Ñ.Ô.ˆÝ
Œ�˜% ˜Ñ(Ô(Ð(à€MsE   ÂDR:Æ1DR:ËF R:Ñ,RÑ9R:ÒR		Ò	R:ÒR		Ò!R:Ò:R>ÓR>)NNFNNTTNFNNNNFNNNr   N)]Úcollectionsrs  ÚdatetimeÚemail.utilsrz   Úhashlibrœ   Úos.pathr   r‡   rÿ   r/   r{  r»   r9  r)  rî   ra  Úurllib.parser8   r�   Úcollections.abcr   r   r   Údataclassesr   r   rÙ   r   Úhttp.cookiejarr	   r
   Útypingr   r   r   r3   rÛ   r`  Ú_cancellationr   r   r   Ú_vendor._ytdlp_shimr   rò   r   r   r   r   rí   rˆ   Úhomer+  r   Ú
namedtupler   r7   rL   rW   ÚResponser^   ra   re   rÄ   rr   rw   r~   r•   r¥   r§   rÔ   ÚtupleÚSessionrà   rä   rç   Ú	Exceptionrõ   r  ÚfloatÚdictr  r  rt  r/  r?  ÚbytesrU  rf  rï   r„  rð   rM   rK   ú<module>rš     s¡
  ðØ Ð Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø $Ð $Ð $Ð $Ð $Ð $Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø +Ð +Ð +Ð +Ð +Ð +Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à 
€
€
€
Ø €€€Ø €€€à +Ð +Ð +Ð +Ð +Ð +Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø *Ð *Ð *Ð *Ð *Ð *Ø +Ð +Ð +Ð +Ð +Ð +Ø %Ð %Ð %Ð %Ð %Ð %Ø -Ð -Ð -Ð -Ð -Ð -Ø  Ð  Ð  Ð  Ð  Ð  à€
ˆEÐ Ð Ñ Ø€s„~�cÑÔ€Ø&˜cœh tÐ-GÑHÔHÐ �eÐ HÐ HÑ Hà2˜KÔ2ØÐ!=ñô Ð ð
*¨sð *°sð *ð *ð *ð *ðZ Cð ¨Cð ð ð ð ð¨XÔ->ð À3ÈÁ:ð ð ð ð ð'°8Ô3Dð 'ÈÈtÉð 'ð 'ð 'ð 'ðW¨XÔ->ð WÈð WÐPTð Wð Wð Wð Wð
U¨xÔ/@ð UÀTð Uð Uð Uð Uð2àÔð2ð Ô˜Ñð2ð 2ð 2ð 2ð 3ð Ð+;ð ð ð ð ð0)˜h vÔ.ð )¸cð )Àdð )ð )ð )ð )ð4ð 4ð 4ð 4ð 4˜jñ 4ô 4ð 4ð6 ¨Sð  Àð  Èð  ð  ð  ð  ð@à�‰:ðð ðð ð	ð
 ˜‘*ðð ˆ8Ô˜SÐ Ô!ðð ð ð ð,B #ð B¨$ð Bð Bð Bð Bð
 €�4ÐÑÔð0ð 0ð 0ð 0ð 0ñ 0ô 0ñ Ôð0ð yð ¸3ð À8ð ð ð ð ð8˜kð 8°)ð 8Àð 8ð 8ð 8ð 8ð$!Fà
Ô
ð!Fð 
ð!Fð �3‰Jð	!Fð
 �U˜5 %˜<Ô(Ñ(¨4Ñ/ð!Fð ð!Fð �#�s�(Œ^˜dÑ"ð!Fð Ôð!Fð !Fð !Fð !FðHUØÔ"ðUØ,/ðUØADÀtÁðUàðUð Uð Uð Uð:o1à
Ô
ðo1ð Ô#ðo1ð 
ð	o1ð
 ˜$‘Jðo1ð �$‰Jðo1ð �3‰Jðo1ð �U˜5 %˜<Ô(Ñ(¨4Ñ/ðo1ð ðo1ð ðo1ð ðo1ð ˆ8Ô˜cÐ!Ô"ðo1ð o1ð o1ð o1ðd Sð °$ð ¸5ÀÀdÀÔ;Kð ð ð ð ð4ià
Ô
ðið 
Ô	ðið �3‰Jð	ið
 �U˜5 %˜<Ô(Ñ(¨4Ñ/ðið ðið Ô#ðið 
ðið �D‰jðið ðið �B˜�HÔðið Œ)�dÑ
ðið ˆe�E˜3 ™:Ð%Ô&Ô'ðið ið ið iðX:à
Ô
ð:ð 
Ô	ð:ð �3‰Jð	:ð
 �U˜5 %˜<Ô(Ñ(¨4Ñ/ð:ð ð:ð Ô#ð:ð 
ð:ð ð:ð �D‰jð:ð ð:ð ð:ð �4‰<ð:ð ˜˜S 4™ZÐ(¨$Ð.Ô/°$Ñ6ð:ð #ð:ð  Ôð!:ð" 
ð#:ð :ð :ð :ð~ Ø$(ØØØØØØØØØ!Ø*.Ø9=ØØ#Ø%)Ø26ØØ%)ð'Qð QØ	ˆt‰ðQà�(‰N˜TÑ!ðQð ðQð �‰:ð	Qð
 �4‰<ðQð ðQð �3‰JðQð 	ˆd‰
ðQð ðQð �$‰JðQð �d‘
ðQð �s˜C�x”. 4Ñ'ðQð ˜˜S 4™ZÐ(¨$Ð.Ô/°$Ñ6ðQð ðQð ˜‘*ðQð  #ð!Qð" �U˜5 %˜<Ô(Ñ(¨4Ñ/ð#Qð$ ð%Qð& ŒO˜dÑ"ð'Qð( 	ˆ8�^Ð/Ñ/ð)Qð Qð Qð Qð Qð QrM   