o
    i                     @   sb  d dl Z e jdk redd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mZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ ddlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( ddl)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE ddlFmGZG ddlHmIZJmKZLmMZNmOZP ddlQmQZQ d1ddZRdd ZSdd ZTdd ZUdd ZVdd ZWeXd d!ZYd2d"d#ZZd2d$d%Z[d2d&d'Z\dd(lm]Z]m^Z^ dd)lm_Z_m`Z` eLe_jad*< eNe_jad+< eJe_jad,< ePe_jad-< e`jabd. e`jabd/ g d0ZcdS )3    N)   
   zkYou are using an unsupported version of Python. Only Python versions 3.10 and above are supported by yt-dlpzThe Unlicense   )SUPPORTED_BROWSERSSUPPORTED_KEYRINGSCookieLoadError)get_external_downloader)list_extractor_classes)MSO_INFO)ImpersonateTarget)IN_CLIplugin_dirs)	parseOpts)load_all_plugins)	FFmpegExtractAudioPPFFmpegMergerPPFFmpegPostProcessorFFmpegSubtitlesConvertorPPFFmpegThumbnailsConvertorPPFFmpegVideoConvertorPPFFmpegVideoRemuxerPPMetadataFromFieldPPMetadataParserPP)Updater)
NO_DEFAULTPOSTPROCESS_WHEN	DateRangeDownloadCancelledDownloadErrorFormatSorterGeoUtilsPlaylistEntriesSameFileErrordownload_range_funcexpand_pathfloat_or_noneformat_fieldint_or_nonejoin_nonemptymatch_filter_funcparse_bytesparse_durationpreferredencodingread_batch_urls
read_stdinrender_tablesetproctitleshell_quotevariadicwrite_string)_UnsafeExtensionError)BunJsRuntimeDenoJsRuntimeNodeJsRuntimeQuickJsRuntime)	YoutubeDLc                 G   s   |D ]}t j| qt| N)sysstderrwrite
SystemExit)statusargsmsg rB   C/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/__init__.py_exitL   s   rD   c                    s   g }|durAz)t |dkrt|dkrdndntt|ddd}|dkr.td	t| d
  W n ty@   td| d Y nw t   fdd||  D S )z>
    @param verbose      -1: quiet, 0: normal, 1: verbose
    N-URLszutf-8ignore)encodingerrorsr   z[debug] Batch file urls: 
zERROR: batch file z could not be readc                    s.   g | ]}t |tr|  d n| qS rH   )
isinstancebytesstripdecode.0url_encrB   rC   
<listcomp>a   s     zget_urls.<locals>.<listcomp>)	r-   r.   openr$   r3   reprOSErrorrD   r,   )urls	batchfileverbose
batch_urlsrB   rT   rC   get_urlsR   s"   
r^   c                    s  d}| j rVddlm} t|d}t| jD ]>}||j| s!dnd d 7 }||kr5dd |	 D }nt
t|j| }|t|d	 |dd
d |D 7 }qn,| jrkd d fddt| jD }n| jrdtddgdd t	 D }ndS t|tjd d	S )N r   )	GenericIEFz (CURRENTLY BROKEN)rK   c                 S   s   g | ]\}}|s|qS rB   rB   )rR   rS   matchedrB   rB   rC   rV   p       z/print_extractor_information.<locals>.<listcomp>Tc                 s   s    | ]	}d | dV  qdS )z  rK   NrB   rQ   rB   rB   rC   	<genexpr>t   s    z.print_extractor_information.<locals>.<genexpr>)zcute kittenszslithering pythonszfalling catzangry poodlezpurple fishzrunning tortoisezsleeping bunnyzburping cowc                 3   s0    | ]}|  r|jd ur|jd  dV  qdS )F)markdownsearch_examplesN)workingIE_DESCdescription)rR   ie	_SEARCHESrB   rC   rc   w   s    
zSupported TV Providers:
{}
msozmso namec                 S   s   g | ]
\}}||d  gqS namerB   )rR   mso_idmso_inforB   rB   rC   rV   }   s    )out)list_extractorsextractor.genericr`   dictfromkeysr	   	age_limitIE_NAMErf   itemstuplefiltersuitablekeysupdatejoinlist_extractor_descriptionsap_list_msoformatr/   r
   r3   r;   stdout)optsrZ   rq   r`   ri   matched_urlsrB   rj   rC   print_extractor_informationf   s2   
r   c                    s"  fdd d fdd	}|ddd |d	d
 |dd dj v r.jr+ d nd_dj v r;jtj n	dj v rDtjt_dj v rVjd u rRd_n d |ddddd}|ddddd}|du rr|du rr d dj v rj	
dd u rj	ddi d S  d d S d S )Nc                    s2   |  j vrdS  j |   j d|  g dS )NF*T)compat_optsdiscardr}   rm   r   rB   rC   _unused_compat_opt   s
   
z+set_compat_opts.<locals>._unused_compat_optTc                    sV   t |}| jv r|d u rt||  dS |r |  dS |d u r)t|| d S )NTF)getattrr   setattr)compat_nameopt_namedefaultremove_compatattrr   r   rB   rC   set_default_compat   s   

z+set_compat_opts.<locals>.set_default_compatzabort-on-errorignoreerrorsonly_downloadzno-playlist-metafilesallow_playlist_fileszno-clean-infojsonclean_infojsonzno-attach-info-jsonFzformat-sortzprefer-vp9-sortzmtime-by-defaultmultistreamsallow_multiple_video_streams)r   allow_multiple_audio_streamsfilenamer   z%(title)s-%(id)s.%(ext)s)TT)r   embed_infojsonformat_sortextendr   ytdl_default_prefer_vp9_sortr   
updatetimeouttmplgetr}   )r   r   _video_multistreams_set_audio_multistreams_setrB   r   rC   set_compat_opts   s4   








r   c           #   
      s  djdddÇfdd	}fdd}dćfdd		dd
d}t ttjjjfdkddd jd u p<jd uddd jd u pKjd uddd |dj	t
d dj djd djd djd jdkr|jjdd dj dj dj dj jd u rjd u d d!d njd u rj_n|jjd jd urttg jd"dd ^}}}|d uo|d u od"jv  d#j |||d# ||f_jD ]	}|d$|tj qjd%krd _jd%krd _|d&jd'd(ttj t!j" |d)j#t$j% |d*jt&j" |d+jt'j% |d,j(t)j% |d-j*t+j% j,rbj,-d.-d/_,d0t.t/j,d1d2 fd3d4}|d5j0_0|d6j1_1|d7j2_2|d8j3_3d9d: }	j45 D ])\}
}|sj4|
= qz
|	|j4|
< W q t6y   t7d;|
 d<|w dćfd=d>	}|d?j8d_8|d@j9_9|dAj:_:|dBj;_;|dCj<d_<|dDj=_=dEdF }j>5 D ]\}}||| dG qj?5 D ]\}}|D ]}||| dH qqj@5 D ]\}}|D ]\}}||| dI ||| dJ q'q!|jAdK jB5 D ] \}}dL|v r\|d dM  dNn| dO}||| dP qJj>CdQ}|dRkr}d _Dj>dQ= ddSdT}|dUjE\_E_F}tG|dVjHd _HjIrd }tJdWjI}|d u rt7dXjI |KdYdZd[d\\}}}}|L }|tMvrt7d]| d^d_tNtM |d ur|O }|tPvrt7d`| dad_tNtP ||||f_IjQd urtRSjQL _Qdbdc  jTd ur jUVddg WdejT   fdfdgjU5 D _UjX_XjXd u r;dQg_XjYd urdz
tZt[\jY W n t]yc } zt7dhjYdi| d }~ww dj\_^__j`L dkvrztabj` W n t]y   t7dlj` dmw tcj`dnkrj`_^nj`__j`L dok_`tdjejf_ejgd urthjg_gjid urthji_ijjd urӈjkVdpjj jld urjkVdqjl jmrtn  _o_pd }jq5 D ]2\}}|drkrqtr|}|d u rt7dsts|d dtdQdu dv| dm|r$|dQkr$|t }qjuv D ]}|dwvr:t7dm| dxq+g g } jdykrOWdzd{ jd|kr]Wdzd} djfd~d	}!|!djwdQ|dr||r|jwV|jwxdQ |!djyddQrjyxdjydQ< ddtztzdffdd	}"|"dddd |"dddd |"dddd |"ddddd d2 |"ddddd d2 |"ddddj{Cdd |"ddddj>CdQd |"dddd |"dd |"dd |"dd |"dd |"dd |"dd |"ddj|dvdod |"dd |"dUdg d2 |"dd |"ddtn d2 |"dd t}dr?| Wdd_j~ d `~jrItjntjj_jr[jj{d< jrddj>dQ< jrkd_jssjor|jd u r|d_jrjsjd u rd_jrjd u rjsjrjsjrd_jrjsjsd_jrƈjd u rd_jd ur؈jd u rtd_jd urjd u rtd_djv rWd dddt_| fS )Nc                 S   s   | rdS t |pdj||d)NTzinvalid {name} "{value}" given)rn   value)
ValueErrorr   )cndnrn   r   rA   rB   rB   rC   validate   s   z"validate_options.<locals>.validatec                    s    |d u p||v | ||S r:   rB   )rn   r   rx   rA   r   rB   rC   validate_in   s   z%validate_options.<locals>.validate_inc                    s    |d u p
t ||| |S r:   )rematch)rn   r   regexr   rB   rC   validate_regex   s   z(validate_options.<locals>.validate_regexFc                    s8    |d u p|dkp| o|dk| |d|rd S d S )Nr   z!{name} "{value}" must be positiver_   z or 0rB   )rn   r   strictr   rB   rC   validate_positive   s
   z+validate_options.<locals>.validate_positivec              	   S   sV   |d u s| d u s|| krd S |sd| d| }}t | d| d| d|  d)Nzmin zmax  "z+" must be must be greater than or equal to ")r   )min_valmax_valmin_namemax_namerB   rB   rC   validate_minmax   s
    z)validate_options.<locals>.validate_minmaxr   z.netrczJ{name}, netrc command and username/password are mutually exclusive options)rA   zaccount usernamez{name} missingzTV Provider account usernamezTV ProviderzWUnsupported {name} "{value}", use --ap-list-mso to get a list of supported TV Providerszautonumber startzautonumber sizeTzconcurrent fragmentszplaylist startrF   zplaylist endzsubtitles sleep intervalzrequests sleep intervalzsleep intervalzmax sleep intervalzmin sleep intervalz2{name} must be specified; use --min-sleep-intervalrE   ztime range to wait for videozformat sortingnonezmerge output formatz({0})(/({0}))*|zaudio formatzsubtitle formatzthumbnail formatzrecode video formatzremux video formatkKzaudio qualityr   )r   c              	      sf   |d u rd S |dv rt dS zt|}W n ttfy(    d|  d| Y nw |  d| |S )Ninfinfiniter   Fz retry count)floatint	TypeErrorr   )rn   r   	int_valuer   r   rB   rC   parse_retries  s   z'validate_options.<locals>.parse_retriesdownloadfragment	extractorzfile accessc                    s   d}g t td| d| d| d|   d d R ^}}|dkr0fddS |s4r6nd	  fd
dS )Nz\d+(?:\.\d+)?z(?:(linear|exp)=)?(z)(?::(z	)?)?(?::(z))?expc                    s&   t ttpd|   t pdS )N   r   minr   n)limitstartsteprB   rC   <lambda>%     & z<validate_options.<locals>.parse_sleep_func.<locals>.<lambda>r   c                    s&   t ttp |   tpdS )Nr   r   r   default_stepr   r   r   rB   rC   r   (  r   )ry   r   	fullmatchrO   groups)expr	NUMBER_REop_rB   r   rC   parse_sleep_func  s   z*validate_options.<locals>.parse_sleep_funcinvalid z retry sleep expression c                    s8   |d u rd S t |} |d u| | |r| |d |S )NT)r*   )rn   r   strict_positivenumeric_limitr   rB   rC   validate_bytes4  s   z(validate_options.<locals>.validate_bytesz
rate limitzthrottled rate limitzmin filesizezmax filesizezbuffer sizezhttp chunk sizec                 S   s,   t | }|rtd| d|  d| d S )Nr   r   z": )r9   validate_outtmplr   )tmplrA   errrB   rB   rC   r   E  s   
z*validate_options.<locals>.validate_outtmplz output templatez print templatez print to file templatez print to file filenamezSponsorBlock chapter titlez-titleiz console titlez	 progressz	 templater   r_   c                 S   s  dd }d}g g d}}}|pg D ]}|r|dkrd}q| dsHz
|t| W n tjyF }	 ztd|  d	| d
|	 d }	~	ww qttj|dd  	dD ]{}
|
dko`t
||
}|ot||dpjd||dprdg}|o|d|df}d }	d |pd gv rd}	n/|st|rd}	n&|d  |d rdnd9  < |d  |d rdnd9  < |d tdkrd}	|	rtd|  d| d|	 || qUq|||fS )Nc                 S   s   | dv rt dS t| S )Nr   r   )r   r+   )xrB   rB   rC   r   ^  rb   z:validate_options.<locals>.parse_chapters.<locals>.<lambda>z(?x)(?:
            (?P<start_sign>-?)(?P<start>[^-]+)
        )?\s*-\s*(?:
            (?P<end_sign>-?)(?P<end>[^-]+)
        )?Fz	*from-urlTr   r   z regex "z" - r   ,rE   r   0endr   
start_signend_signz Must be of the form "*start-end"z#Negative timestamps are not allowedr   rF   z-infz"-inf" is not a valid endz time range "z". )
startswithappendr   compileerrorr   mapstrrO   splitr   groupanyr   )rn   r   advancedparse_timestampTIMESTAMP_REchaptersrangesfrom_urlr   r   range_mobjdursignsrB   rB   rC   parse_chapters]  sB   
(
z(validate_options.<locals>.parse_chaptersz--remove-chaptersz--download-sectionsz(?x)
            (?P<name>[^+:]+)
            (?:\s*\+\s*(?P<keyring>[^:]+))?
            (?:\s*:\s*(?!:)(?P<profile>.+?))?
            (?:\s*::\s*(?P<container>.+))?
        z(invalid cookies from browser arguments: rn   keyringprofile	containerz,unsupported browser specified for cookies: "z". Supported browsers are: z, z,unsupported keyring specified for cookies: "z". Supported keyrings are: c                 3   s    t  tr+dt  }zt g}W n* ty* } z	t| d| d }~ww dt  } fdd d dD }|D ]"}ztj	|  W n ty` } z	t| d| d }~ww |V  qBd S )Nz--parse-metadata z is invalid; z--replace-in-metadata c                 3   s*    | ]}t jj|g d d R V  qdS )r   N)r   ActionsREPLACE)rR   r   frB   rC   rc     s   ( zCvalidate_options.<locals>.metadataparser_actions.<locals>.<genexpr>r   r   )
rM   r   r1   r   	to_action	Exceptionr   r   r   validate_action)r  cmdactionsr   actionrB   r  rC   metadataparser_actions  s(   
z0validate_options.<locals>.metadataparser_actionspre_processztitle:c                    s&   i | ]\}}|t tjt | qS rB   )list	itertoolschainr   )rR   r   v)r  rB   rC   
<dictcomp>  s    z$validate_options.<locals>.<dictcomp>zInvalid playlist-items z: )NN)r   neverzUnsupported --xff "r   r   r  z
User-AgentReferernativezNo such z%s rL   zexternal downloader ")alwaysautozauto-ttyno_colorzno_color-ttyr  z" is not a valid color policybestz.
         )zO"-f best" selects the best pre-merged format which is often not the best optionzdTo let yt-dlp download and merge the best available formats, simply do not pass any format selectionztIf you know what you are doing and want only the best pre-merged format, use "-f b" instead to suppress this warningmp4)zR"-f mp4" selects the best pre-merged mp4 format which is often not what's intendedzbPre-merged mp4 formats are not available from all sites, or may only be available in lower qualityzYTo prioritize the best h264 video and aac audio in an mp4 container, use "-t mp4" insteadzuIf you know what you are doing and want a pre-merged mp4 format, use "-f b[ext=mp4]" instead to suppress this warningc                    s<   ||v r||vr  |   d|pd|  d  dS dS )NzI arguments given without specifying name. The arguments will be given to zall sTF)r   title)rn   r   key1key2where)warningsrB   rC   report_args_compat  s   z,validate_options.<locals>.report_args_compatzexternal downloader)r  zpost-processorzdefault-compatz--allow-unplayable-formatsallow_unplayable_formatsc                    sV   |t u r	t |}|sd S |t u rt |}|r#|  d| d t || d S )Nz is ignored since z
 was given)r   r   r   r   )arg1opt1arg2opt2val1val2r   )r   r   rB   rC   report_conflict  s   

z)validate_options.<locals>.report_conflictz--playlist-reverseplaylist_reversez--playlist-randomplaylist_randomz--lazy-playlistlazy_playlistz--dateafter	dateafterz--datedatez--datebefore
datebeforez--exec-before-downloadexec_before_dl_cmdz"--exec before_dl:"exec_cmd	before_dl)r(  z--iduseidz--outputr   z--remux-video
remuxvideoz--recode-videorecodevideoz--embed-metadataaddmetadataz--embed-chaptersaddchaptersz--embed-info-jsonr   z--embed-subsembedsubtitlesz--embed-thumbnailembedthumbnailz--extract-audioextractaudioz--fixupfixup)Nr  rH   )r'  r   remove_chaptersz--sponsorblock-removesponsorblock_removez--xattrsxattrs_deprecated_optionsz,The following options have been deprecated: z
Please remove them from your command/configuration to avoid future errors.
See  https://github.com/yt-dlp/yt-dlp/issues/14198  for more detailsz%(id)s.%(ext)szbestaudio/best	if_existsz*Type account password and press [Return]: z6Type TV provider account password and press [Return]: zallow-unsafe-extzNUsing allow-unsafe-ext opens you up to potential attacks. Use with great care!c                 S   s   | S r:   rB   )r   prependrB   rB   rC   r   m  s    z"validate_options.<locals>.<lambda>r:   )F)sumr   boolusenetrc	netrc_cmdusernamepasswordap_passwordap_usernameap_msor
   autonumber_startautonumber_sizeconcurrent_fragment_downloadsplayliststartplaylistendsleep_interval_subtitlessleep_interval_requestssleep_intervalmax_sleep_intervalwait_for_videor+   r   r   r   r   convertsubtitlesconvertthumbnailsmerge_output_formatr   r~   r   escaper   SUPPORTED_EXTSaudioformatr   	FORMAT_REr   r   r5  r   r4  r   audioqualityrO   r'   r%   retriesfragment_retriesextractor_retriesfile_access_retriesretry_sleeprx   AttributeErrorr   	ratelimitthrottledratelimitmin_filesizemax_filesize
buffersizehttp_chunk_sizer   
forceprintprint_to_filesponsorblock_chapter_titleprogress_templater   skip_downloadr<  remove_rangesr#   download_rangescookiesfrombrowserr   r   lowerr   sortedupperr   impersonater   from_strmetafromtitleparse_metadata
setdefaultr   r   playlist_itemsry   r!   parse_playlist_itemsr  geo_bypass_countrygeo_bypass_ip_block
geo_bypassr    random_ipv4lenr)   match_filterbreaking_match_filterdownload_archiver$   ffmpeg_location
user_agentheadersrefererno_sponsorblocksetsponsorblock_markr=  external_downloaderr   r&   get_basenamecolorvaluesexternal_downloader_argspoppostprocessor_argsr   r1  r;  hasattrr?  r.  r   dayr-  r/  r0  r3  
overwritescontinue_dlr6  r7  r:  	keepvideogetcommentswriteinfojsonr   dumpjson
print_jsondump_single_jsonallsubtitlesr8  writeautomaticsubwritesubtitlesgetpassr   r4   sanitize_extension)#r   r   r   r   min_waitmax_waitr   r  r   r   keyr   r   r   r   r   type_	tmpl_listfileouttmpl_defaultr   r  r   browser_namer   r   r   default_downloaderprotopathedpolicydeprecation_warningsr!  r)  rB   )r  r   r   r   r   rC   validate_options   s  

 






"

	&

)




















$
r  c                 c   s   | j E d H  | j D ]\}}d||dV  q| j| jB }|r)d|| jddV  | jr4d| jddV  | jr?d	| jddV  | jrMd
| j	| j
| jdV  | jrWd| jdV  | jrad| jdV  | jrzd| jv}d| jon|dV  | jsz|rzd| _| js|rd| j| j| j| j| jdV  | js| js| jrd| j| j| jdV  | jrd| jdV  | jsd| _d| jd< | jrd| jdV  | jrddiV  | jdkrd | jd!kd"d#V  | j D ]\}}d$||d%V  qd S )&NMetadataParser)r  r
  whenSponsorBlockafter_filter)r  
categoriesapir  FFmpegSubtitlesConvertorr2  )r  r   r  FFmpegThumbnailsConvertorFFmpegExtractAudio)r  preferredcodecpreferredqualitynopostoverwritesFFmpegVideoRemuxer)r  preferedformatFFmpegVideoConvertorzno-keep-subsFFmpegEmbedSubtitle)r  already_have_subtitleTModifyChapters)r  remove_chapters_patternsremove_sponsor_segmentsrn  rk  force_keyframesFFmpegMetadata)r  add_chaptersadd_metadataadd_infojsonEmbedThumbnail)r  already_have_thumbnailr_   pl_thumbnailFFmpegSplitChapters)r  r  r  XAttrMetadatar  FFmpegConcatr  playlistr  only_multi_videor  Exec)r  r1  r  ) add_postprocessorsrw  rx   r  r=  sponsorblock_apirU  rV  r:  rZ  r\  r  r4  r5  r8  r   r  r  r<  rn  rk  force_keyframes_at_cutsr6  r7  r   r9  writethumbnailr   split_chaptersr>  concat_playlistr1  )r   r  r
  sponsorblock_query	keep_subsr1  rB   rB   rC   get_postprocessorsr  s   







r  ParsedOptions)parseroptionsrZ   ydl_optsc              
      s  t | \} }t| j jr jsdn j}t  zt \}}W n ty= } z|| d W Y d}~nd}~ww t	t
 }t joWt fddtdd D }t fdddD } jdu rs|pq jpqt j _d	d
 |D }	 jo j o jo jddk}
t j j jd jd|
fs|	sd _n|	ddddgkrd _ jtjv r jn jtjv rÈ jn jrψ jt jv rψ jnd}dd dd  j!D D }t"| |i d j#d j$d j%d j&d j'd j(d j)d j*d j+d j,d  j-d! j.d" j/d# jd$ j0d% j1d& j2i d' j3d( j4d) j5d* j6d+ j7d, j8d- jd. jd/ j9pO jd0 jd1 j:d2 j;du rg|pf|pfdn j;d3 j<d4 j=d5 j>d6 j?d7 j@i d8 jAd9 jBd: jCd; jDd< jEd= jFd> jd? jGd@ jHdA jIdB jJdC jKdD jLdE jMdF jNdG jOpdHgdI jPi dJ jQdK jRdL jSdM jTdN jUdO jVdP jWdQ jXdR jYdS jZdT j[dU j\dV j]dW j^dX j_du r jn j_dY j`dZ jai d[ jbd\ jcd] jdd^ jed_ jfd` jgda jhdb jdHdckdd jide jjdf jkdg jldh jdi jdj jdk jmdl jndu i dm jndnkdo jodp jpdq jqdr jrds jsdt jtdu judv jvdw jwdx jxdy jydz jzd{ j{d| j|d} j}d~ ji d j~d jd jd jd jd jd jd jd jd jd jd jd jd jd jd jd ji d jd jd jd jd jd jd jd jd jd jd jd jd jd jd jd jd ji d jd jd jd|d|d jd jd jd jd jd jd jd jd jd jd jd ji d jd jd jd jd jd jd jd jd jd jd jd jd jpdd|d jd jdu d|| jdÜS )z4@returns ParsedOptions(parser, opts, urls, ydl_opts)rF   rK   Nc                 3   s    | ]}| j vV  qd S r:   )ri  rR   r   r   rB   rC   rc         z parse_options.<locals>.<genexpr>r   c                 3   s    | ]}t  |V  qd S r:   )r   r  r   rB   rC   rc     r  )
r  r  getdescriptiongetdurationgetfilename	getformatgetidgetthumbnailgettitlegeturlc                 S   s   g | ]}| d dkr|qS )r  r  )r   )rR   pprB   rB   rC   rV     s    z!parse_options.<locals>.<listcomp>pl_infojsonr_   r  r   r  Tr  discard_in_playlistc                 S   s   i | ]\}}|  d |iqS )r  )rq  )rR   runtimer  rB   rB   rC   r    s    z!parse_options.<locals>.<dictcomp>c                 s   s,    | ]}g | d dddd V  qdS ):r   Nr   )r   )rR   argrB   rB   rC   rc     s    
rD  netrc_locationrE  rF  rG  	twofactorvideopasswordrJ  rI  rH  client_certificateclient_certificate_keyclient_certificate_passwordquietno_warningsforceurl
forcetitleforceidforcethumbnailforcedescriptionforcedurationforcefilenameforceformatri  rj  	forcejsonr  force_write_download_archivesimulaterm  r   r"  ignore_no_formats_errorr   format_sort_forcer   r   check_formatslistformatslistformats_tabler   outtmpl_na_placeholderpathsrL  rK  restrictfilenameswindowsfilenamesr   force_generic_extractorallowed_extractorsr   rc  rd  r  r]  r`  r^  r_  retry_sleep_functionsskip_unavailable_fragmentskeep_fragmentsrM  rg  noresizebufferrh  
continuedl
noprogressprogress_with_newlinerl  progress_deltarN  rO  playlistreverseplaylistrandomr,  
noplaylistlogtostderrrE   consoletitlenopartr   writedescriptionr  r   r   r  r  write_all_thumbnailsall	writelinkwriteurllinkwritewebloclinkwritedesktoplinkr  r  r  listsubtitlessubtitlesformatsubtitleslangs
matchtitlerejecttitlemax_downloadsprefer_free_formatstrim_file_namer\   dump_intermediate_pageswrite_pages
load_pagestestr  re  rf  	min_views	max_views	daterangecachedirrv   r  break_on_existingbreak_on_rejectbreak_per_urlskip_playlist_after_errors
cookiefilerp  legacyserverconnectnocheckcertificateprefer_insecureenable_file_urlshttp_headersproxysocket_timeoutbidi_workarounddebug_printtrafficdefault_searchdynamic_mpdextractor_argsrI   extract_flatlive_from_startrT  mark_watchedrW  	final_extpostprocessorsr;  source_addressrt  rQ  rR  rS  rP  r  ro  r  list_thumbnailsry  r  r  r  hls_prefer_nativehls_use_mpegtshls_split_discontinuityr  r  geo_verification_proxyr}  r{  r|  r3  js_runtimesremote_componentswarn_when_outdated	_warnings)_deprecation_warningsr   )r   r^   r[   r  r\   r   r  r   r   r  r  rC  ri  r  r   r   r  r  r   r   r   r   rC  r  rj  r5  r   rY  r4  r   r:  rZ  r   rN  r  rD  r  rE  rF  rG  r  r  rJ  rI  rH  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  rm  r   r"  r  r   r  r   r   r  r  r  r  r  rL  rK  r	  r
  r   r  r  rc  rd  r  r]  r`  r^  r_  ra  r  r  rM  rg  r  rh  r  r  r  rl  r  rN  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(  r)  r*  r+  r,  r-  r  re  rf  r.  r/  r.  r1  rv   r  r2  r3  r4  r5  r6  rp  legacy_server_connectno_check_certificater9  r:  r  r<  r=  r>  r?  r@  rA  rB  rI   rD  rT  rE  rW  r;  rH  rt  rQ  rR  rS  rP  r  ro  r  rI  ry  r  r  r  rJ  rK  rL  r  r  rM  r}  r{  r|  r3  rO  update_selfr   )argvr  rZ   r   r  r   rG  
print_onlyany_gettingplaylist_ppswrite_playlist_infojsonrF  rN  rB   r   rC   parse_options  s   (



	
  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST
U
VWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                 	  
                                               !  "  #  $  %  &  '  (  )  
*  +  , 
r[  c              
      s\  t d t| \}}}}t||rd S |jrtj|j |jt_tjr't	  t
|w|jp2|j}|p7|j}|jr@j  z t|j}|jr_| r_|r_|jr_| W W  d    S W n typ   t  d_Y nw |jrtddftddftddftddftd	d
fg} }	dd fdd|	D }
|D ]#\ t fdd|	D s|
dfdd  dD  qd tg d|
ddd 	 W d    d S |s]|rjW  d    S | d u rt j!dd  n| }"| |sXt#j$dkrXt%t ddrXdd l&}dd l'}|(d}d|j)j*  }|+|d}t,t do;t#j-.t j/0d}|dksI|rX|dkrXt1|2d  |3  t4d |5d! |6  z+|jd ur|rp7d" 8t9|jW W  d    S :|W W  d    S  t;y   d# Y W d    d$S w 1 sw   Y  d S )%Nzyt-dlpd   chrome	curl_cffisafarifirefoxzcurl_cffi>=0.10edgetorzcurl_cffi>=0.11c                 S   s:   t | j | jddpdt | jpd | jddpd|gS )NrE   )delimr_   )r(   clientr  versionos
os_version)targethandlerrB   rB   rC   make_row  s   z_real_main.<locals>.make_rowc                    s   g | ]	\}} ||qS rB   rB   rR   rh  ri  )rj  rB   rC   rV     s    z_real_main.<locals>.<listcomp>c                 3   s&    | ]\}}|v o  |V  qd S r:   )r   rk  )known_handlerknown_targetrB   rC   rc     s
    
z_real_main.<locals>.<genexpr>r   c                    s   g | ]
}  | jjqS rB   )_format_outStylesSUPPRESS)rR   text)ydlrB   rC   rV      s    z (unavailable)z$[info] Available impersonate targets)ClientOSSourcer   rE   )	extra_gaprc  r   ntfrozenFKernel32_MEIPASS_MEIzDo not double-click the executable, instead call it from a command line.
Please read the README for further information on how to use yt-dlp: https://github.com/yt-dlp/yt-dlp#readmezSYou must provide at least one URL.
Type yt-dlp --help to see a list of all options.z(URLs are ignored due to --load-info-jsonzAborting remaining downloadse   )<r0   r[  r   r  r   _ffmpeg_locationr  r   r   _load_all_pluginsr9   rU  rm_cachedirload_info_filenamecacheremover   r}   r	  restartr  	traceback	print_exc_download_retcodelist_impersonate_targetsr   "_get_available_impersonate_targetsr   insert	to_screen	to_stdoutr/   r;   rV  warn_if_short_idrf  rn   r   ctypes.wintypesmsvcrtWinDLLwintypesDWORDGetConsoleProcessListr  r  basenamerz  r   print_generate_error_messagegetchrD   r   destroyreport_warningdownload_with_info_filer$   r   r   )rV  r  r   all_urlsr  r  
actual_useupdaterknown_targetsavailable_targetsrowsr@   ctypesr  kernel32bufferattached_processes
is_onefilerB   )rl  rm  rj  rr  rC   
_real_main  s   










48
 
 

YZ
Zr  c              
   C   s  dt _zttt|   W d S  ttfy   td Y d S  ty7 } ztd|  W Y d }~d S d }~w tyD   td Y d S  t	yn } zt
t
jt
j}t
|tj  td|  W Y d }~d S d }~w tjy } ztdd|  W Y d }~d S d }~ww )NTr   zERROR: z
ERROR: Interrupted by userz
ERROR: r   rK   )r   r   rD   r2   r  r   r   r"   KeyboardInterruptBrokenPipeErrorrf  rW   devnullO_WRONLYdup2r;   r   filenooptparseOptParseError)rV  er  rB   rB   rC   main4  s&   r  )gen_extractorsrr   )supported_js_runtimessupported_remote_componentsdenonodebunquickjsz
ejs:githubzejs:npm)r9   r  rr   r  r[  )r   r:   )dr;   version_infoImportError__license__collectionsr  r  r  rf  r   r  cookiesr   r   r   downloader.externalr   r   r	   extractor.adobepassr
   networking.impersonater   globalsr   r   r  r   pluginsr   r~  postprocessorr   r   r   r   r   r   r   r   r   r}   r   utilsr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   utils._utilsr4   utils._jsruntimer5   _BunJsRuntimer6   _DenoJsRuntimer7   _NodeJsRuntimer8   _QuickJsRuntimer9   rD   r^   r   r   r  r  
namedtupler  r[  r  r  r  rr   r  r  r   r   __all__rB   rB   rB   rC   <module>   sd    
,p
4   =p
 
_
q



