
    Şi:                       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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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#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/Z-d dl0Z1ddl2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z: ddl;m<Z<m=Z= e>?                    dd          d          Z> G d	 d
          Z@d ZAg dZBeBg dg ddZCd d d d dddddddddddZD eE eFd ejG        ddgddgdddgdd gd!d"gd#d$gd%          d&'                    ZHd(ZI eJeI          ZKeKL                    g d)            eJeI          ZMeML                    g d*           d+ZNd,ZOd-ZPejQ        d.             ZRd/ ZSd0 ZTdd1ZUd2 ZVdd3e@fd4ZWdd3e@fd5ZXdd3e@fd6ZYd7 ZZd8 Z[d9 Z\d: Z]d; Z^d< Z_d= Z`d> Zad? Zbd@ ZcdAd&dBdCZd G dD dEeje        jf                  ZgdF Zh G dG dHeje        jf                  Zi G dI dJeje        jf                  ZjdK ZkdL ZldM Zm G dN dOejn                  ZodP ZpdQ Zqd3e@fdRZrdS ZsddTZtdUdVdWZudX ZvdY Zwd3dZd[Zxd\ Zyd] Zzd^ Z{ G d_ d`ej                  Z| G da dbe%j}                  Z}dc Z~ ej        ddde          Zdf ZddhZddjZ G dk dle          Z G dm dne          Z G do dpe          Z G dq dre          Z G ds dte          Z G du dve          Z G dw dxe          Z G dy dze          Z G d{ d|e          Z G d} d~e          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Zd ZddZeTdd            ZddZddZeTdd            ZeTdd            ZddZddZddZd ZddZd Z G d d          ZejQ        d             ZejQ        d             ZddZdd ddZ e            e_         G d de          Ze&j        dk    rd dlZd dlZd dlZ G d dej                  Z ej        d          Zej        Zej        j        ej        j        ej        j        ej        j        ej        j         ej        e          ge_        ej        j        e_        ej        Zej        j        ej        j        ej        j        ej        j         ej        e          ge_        ej        j        e_        dZdZd Zd Zn	 d dlZd Zd Zn# e$ r	 d Zd ZY nw xY w G d d          ZejQ        d             ZeǠ                    ddi          ZeǠ                    ddddd          Zd3dÜdĄZdń Z̐ddƄZ͐dddɜdʄZd˄ Zϐdd̄Zd̈́ Zd΄ Zdτ Zd3dМdфZd҄ ZՐddԄZdՄ Zdք Zdׄ Zd؄ Zdل Zdڄ Zdۄ Zd܄ Zd݄ ZeTdބ             ZeTdd߄            ZddZd ZeTdd            ZddZddZd ZddZd ZddZ ej        ed&          Z ej        ed3          Zg fdZddZddZdgddfdZddZ G d dej        j                  Z G d d          Z G d de          Z G d de          Z G d d          Zd Zd Zd Zd Zd ZeTdd d            ZeTd             Z d ZddZej        j        e@fdZe@fdZdg i ddZdd	Zd
 fdZd Z	 eR            dfdZ
d dddddZd dd d dddZd Zd Zi fd3d'dZd ZdZdddZdddd d!d"dddd d"d#Zd$Zd%Zd& Zd3dМd'Zdd(Zd) Zd* Zd+ ZeTe@fd,            Zd- Zd. Zdd/d0Ze@fd1Z d2 Z!d3 Z"g d4Z#d5 Z$d6 Z%dd7Z&d8 Z'dd9Z(dd:Z) G d; d<          Z*d= Z+d> Z,d? Z-d@ Z.ddAZ/ddDZ0ddEZ1g d&fdFZ2dg d&fdGZ3 G dH dI          Z4 G dJ dK          Z5 G dL dM          Z6ddNZ7dO Z8dP Z9dQ Z:dR Z;ddSZ<ddTZ=dU Z>dV Z?dW Z@dX ZAdY ZBdZ ZCd[ ZDdd]ZEd^ZFd_ZGd`ZHeFeHeGdaZIdb ZJdc ZKeTddde@d\eAfde            ZLdf ZMdgZNdh ZOddiZPdj ZQdk ZRdl ZSdm ZTdnddodpZUdq ZVejQ        dr             ZWds ZX e jY        dt          ZZdu Z[dv Z\dwddxdyZ]dz Z^d{ Z_d| Z`d} Za G d~ d          Zbd Zcd Zd G d d          Ze G d d          Zf G d de*jg                  Zh ehdddddddd          Zieixjj        eijk        z  c_j        eixjl        eijm        z  c_l        g eijj        eijl        eijn        R Zo G d de          Zp G d d          ZqeTd             ZreTdd            Zsd3dddZt G d d          Zud ZvddZw G d d          Zx G d dejy                  ZzdS (      N   )	traversal   )compat_datetime_from_timestampcompat_etree_fromstringcompat_expandusercompat_HTMLParseError)xattr)IN_CLIWINDOWS_VT_MODE.c                       e Zd ZdS )
NO_DEFAULTN__name__
__module____qualname__     XC:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/utils/_utils.pyr   r   =           Dr   r   c                     | S Nr   xs    r   IDENTITYr   A   s    Hr   )JanuaryFebruaryMarchAprilMayJuneJulyAugust	SeptemberOctoberNovemberDecember)janvieru   févriermarsavrilmaijuinjuilletu   août	septembreoctobrenovembreu	   décembre)stycznialutegomarcakwietniamajaczerwcalipcasierpniau	   wrześniau   października	listopadagrudnia)enfrpliii)UTUTCGMTZASTADTESTEDTCSTCDTMSTMDTPSTPDTu   ÂÃÄÀÁÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖŐØŒÙÚÛÜŰÝÞßàáâãäåæçèéêëìíîïðñòóôõöőøœùúûüűýþÿAAAAAAAECEEEEIIIIDNOOOOOOOOEUUUUUYTHssaaaaaaaeceeeeiiiionooooooooeuuuuuythyTstrict)*z%d %B %Yz%d %b %Yz%B %d %Yz
%B %dst %Yz
%B %dnd %Yz
%B %drd %Yz
%B %dth %Yz%b %d %Yz
%b %dst %Yz
%b %dnd %Yz
%b %drd %Yz
%b %dth %Yz%b %dst %Y %I:%Mz%b %dnd %Y %I:%Mz%b %drd %Y %I:%Mz%b %dth %Y %I:%Mz%Y %m %d%Y-%m-%dz	%Y.%m.%d.z%Y/%m/%dz%Y/%m/%d %H:%Mz%Y/%m/%d %H:%M:%Sz
%Y%m%d%H%Mz%Y%m%d%H%M%S%Y%m%dz%Y-%m-%d %H:%Mz%Y-%m-%d %H:%M:%Sz%Y-%m-%d %H:%M:%S.%fz%Y-%m-%d %H:%M:%S:%fz%d.%m.%Y %H:%Mz%d.%m.%Y %H.%Mz%Y-%m-%dT%H:%M:%SZz%Y-%m-%dT%H:%M:%S.%fZz%Y-%m-%dT%H:%M:%S.%f0Zz%Y-%m-%dT%H:%M:%Sz%Y-%m-%dT%H:%M:%S.%fz%Y-%m-%dT%H:%Mz%b %d %Y at %H:%Mz%b %d %Y at %H:%M:%Sz%B %d %Y at %H:%Mz%B %d %Y at %H:%M:%Sz%H:%M %d-%b-%Y)z%d-%m-%Yz%d.%m.%Yz%d.%m.%yz%d/%m/%Yz%d/%m/%yz%d/%m/%Y %H:%M:%Sz%d-%m-%Y %H:%Mz%H:%M %d/%m/%Y)z%m-%d-%Yz%m.%d.%Yz%m/%d/%Yz%m/%d/%yz%m/%d/%Y %H:%M:%Sz.}\('(.+)',(\d+),(\d+),'([^']+)'\.split\('\|'\)zc(?is)<script[^>]+type=(["\']?)application/ld\+json\1[^>]*>\s*(?P<json_ld>{.+?}|\[.+?\])\s*</script>z\d+(?:\.\d+)?c                  ~    	 t          j                    } d                    |            n# t          $ r d} Y nw xY w| S )zGet preferred encoding.

    Returns the best encoding scheme for the system, based on
    locale.getpreferredencoding() and some further tweaks.
    TESTzUTF-8)localegetpreferredencodingencode	Exception)prefs    r   preferredencodingri      sU    *,,d    Ks   (+ ::c                    t          j        t          j                            |           dt          j                            |          dddd          }	 |5  t          j        | |d           ddd           n# 1 swxY w Y   t          j	        d	k    rEt          j        t                    5  t          j        |           ddd           n# 1 swxY w Y   t          j        t                    5  t          j        d
          }t          j        |           t          j        |j        d| z             ddd           n# 1 swxY w Y   t          j        |j        |           dS # t$          $ rL t          j        t                    5  t          j        |j                   ddd           n# 1 swxY w Y    w xY w)z? Encode obj as JSON and write it to fn, atomically if possible r   z.tmpFwutf-8)prefixdirsuffixdeletemodeencoding)ensure_asciiNwin32r     )tempfileNamedTemporaryFileospathbasenamedirnamejsondumpsysplatform
contextlibsuppressOSErrorunlinkumaskchmodnamerenamerg   remove)objfntfmasks       r   write_json_filer      s    
	$'""2&&)))rwr/B/Be#
A 
A 
AB 	3 	3Ic2E2222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3<7"" $W--  	"               )) 	- 	-8A;;DHTNNNHRWetem,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 		"'2    )) 	 	Ibg	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   E2 A?3E2 ?BE2 B,E2 3CE2 CE2 CE2 8AE?E2 EE2 EE2 2#GF;/G;F?	?GF?	Gc                      t          j                   }d |j                                        D             t	          j                    fd            }|S )Nc                     g | ]J}|j         t          j        j        t          j        j        fv r|j        t          j        j        u C|j        KS r   )kindinspect	ParameterPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORDdefaultemptyr   ).0params     r   
<listcomp>z'partial_application.<locals>.<listcomp>   sU       :'+;W=N=deee=G-333 	
333r   c                      t          t          |           d                                        |          rt          j        g| R i |S  | i |S r   )setlen
difference	functoolspartial)argskwargsfuncrequired_argss     r   wrappedz$partial_application.<locals>.wrapped   sf    }SYYZZ())44V<< 	<$T;D;;;F;;;tT$V$$$r   )r   	signature
parametersvaluesr   wraps)r   sigr   r   s   `  @r   partial_applicationr      s|    

D
!
!C  # 5 5 7 7  M _T% % % % % %
 Nr   c                     t          j        d|          sJ ||d| dnd| d| dz   }|                     |          S )z  Find the xpath xpath[@key=val] z^[a-zA-Z_-]+$N[@]z='z'])rematchfind)nodexpathkeyvalexprs        r   find_xpath_attrr      sY    8$c*****3;KKKKK4G4G4G4G4G4GHD99T??r   c                 "   d |                      d          D             }g }|D ]W}t          |          dk    r|                    |d                    1|\  }}|                    d||          d|            Xd                    |          S )Nc                 8    g | ]}|                     d           S ):)splitr   cs     r   r   z!xpath_with_ns.<locals>.<listcomp>   s"    8881!''#,,888r   /r   r   {})r   r   appendjoin)ry   ns_map
componentsreplacedr   nstags          r   xpath_with_nsr      s    88

3888JH 6 6q66Q;;OOAaD!!!!GBOO444s44555588Hr   Fc                       fd}t          |t                    r ||          }n|D ]} ||          }| n|'|t          ur|S |r||n|}t          d|           d S |S )Nc                 .                         |           S r   )r   )r   r   s    r   _find_xpathz"xpath_element.<locals>._find_xpath   s    yyr   zCould not find XML element )
isinstancestrr   ExtractorError)r   r   r   fatalr   r   nxps   `       r   xpath_elementr      s              % K 	 	BBA}  	y*$$N 	 L55dD !Et!E!EFFF4Hr   c                     t          | ||||          }|||k    r|S |j        '|t          ur|S |r||n|}t          d|           d S |j        S )N)r   r   z"Could not find XML element's text )r   textr   r   )r   r   r   r   r   r   s         r   
xpath_textr     s{    dE4ugFFFAyALLv~*$$N 	 L55dD !Mt!M!MNNN46Mr   c                     t          | ||          }|-|t          ur|S |r|| d| dn|}t          d|           d S |j        |         S )Nr   r   zCould not find XML attribute )r   r   r   attrib)r   r   r   r   r   r   r   s          r   
xpath_attrr   #  sw    eS))Ay*$$N 	)-e%%s%%%%4D !G!G!GHHH48C=r   c                      t          d| |fi |S )zOReturn the content of the tag with the specified ID in the passed HTML documentid)get_element_by_attributer   htmlr   s      r   get_element_by_idr   0  s    #D"d==f===r   c                      t          d| |fi |S )zLReturn the html of the tag with the specified ID in the passed HTML documentr   )get_element_html_by_attributer   s      r   get_element_html_by_idr   5  s    (r4BB6BBBr   c                 :    t          | |          }|r|d         ndS )zXReturn the content of the first tag with the specified class in the passed HTML documentr   N)get_elements_by_class
class_namer   retvals      r   get_element_by_classr   :  s$    ":t44F(6!99D(r   c                 :    t          | |          }|r|d         ndS )zUReturn the html of the first tag with the specified class in the passed HTML documentr   N)get_elements_html_by_classr   s      r   get_element_html_by_classr   @  s$    '
D99F(6!99D(r   c                 8    t          | ||fi |}|r|d         nd S Nr   )get_elements_by_attribute)	attributevaluer   r   r   s        r   r   r   F  s.    &y%HHHHF(6!99D(r   c                 8    t          | ||fi |}|r|d         nd S r   )get_elements_html_by_attribute)r   r   r   kargsr   s        r   r   r   K  s.    +IudLLeLLF(6!99D(r   c                 T    t          ddt          j        |            d|d          S )z]Return the content of all tags with the specified class in the passed HTML document as a listclass[^\'"]*(?<=[\'"\s])(?=[\'"\s])[^\'"]*Fescape_value)r   r   escape)r   r   r   s      r   r   r   P  s9    $Q	*(=(=QQQ5" " " "r   c                 T    t          ddt          j        |            d|d          S )zZReturn the html of all tags with the specified class in the passed HTML document as a listr   r   r   Fr   )r   r   r   )r   r   s     r   r   r   W  s9    )Q	*(=(=QQQ5" " " "r   c                  .    d t          | i |D             S )zVReturn the content of the tag with the specified attribute in the passed HTML documentc                     g | ]\  }}|S r   r   )r   content_s      r   r   z-get_elements_by_attribute.<locals>.<listcomp>`  s    ___
G___r   'get_elements_text_and_html_by_attributer   r   s     r   r   r   ^  s%    __&Mt&^W]&^&^____r   c                  .    d t          | i |D             S )zSReturn the html of the tag with the specified attribute in the passed HTML documentc                     g | ]\  }}|S r   r   )r   r   wholes      r   r   z2get_elements_html_by_attribute.<locals>.<listcomp>e  s    [[[haE[[[r   r   r   s     r   r   r   c  s%    [["I4"ZSY"Z"Z[[[[r   z[\w:.-]+)r   r   c          	   #     K   |sdS t          j        d|          rdnd}|rt          j        |          n|}d| dt          j        |            d| d| d		}t          j        ||          D ]u}t	          |                    d
          ||                                d                   \  }}	t          t          j        dd|t           j	                            |	fV  vdS )z
    Return the text (content) and the html (whole) of the tag with the specified
    attribute in the passed HTML document
    Nz
[\s"'`=<>] ?z(?x)
        <(?P<tag>z9)
         (?:\s(?:[^>"']|"[^"]*"|'[^']*')*)?
         \sz\s*=\s*(?P<_q>['"]z)(?-x:z)(?P=_q)
        r   z#^(?P<q>["\'])(?P<content>.*)(?P=q)$z\g<content>)flags)
r   r   r   finditer get_element_text_and_html_by_taggroupstartunescapeHTMLsubDOTALL)
r   r   r   r   r   quotepartial_element_remr   r  s
             r   r   r   h  s4     
  (,e44=BB#E ,7BIe%E  Ii    5:  BG   [+T22 
 
9!''%..$qwwyyzzJZ[[  FX_gigpqqqrr
 	
 	
 	
 	

 
r   c                   R    e Zd ZdZ G d de          Zd Zd Zd Zd Z	d Z
d	 Zd
S )HTMLBreakOnClosingTagParserz
    HTML parser which raises HTMLBreakOnClosingTagException upon reaching the
    closing tag for the first opening tag it has encountered, and can be used
    as a context manager
    c                       e Zd ZdS ):HTMLBreakOnClosingTagParser.HTMLBreakOnClosingTagExceptionNr   r   r   r   HTMLBreakOnClosingTagExceptionr            r   r  c                 ~    t          j                    | _        t          j        j                            |            d S r   )collectionsdequetagstackr   parser
HTMLParser__init__selfs    r   r  z$HTMLBreakOnClosingTagParser.__init__  s1    #)++''-----r   c                     | S r   r   r  s    r   	__enter__z%HTMLBreakOnClosingTagParser.__enter__  s    r   c                 .    |                                   d S r   )closer   r   s     r   __exit__z$HTMLBreakOnClosingTagParser.__exit__  s    

r   c                     d S r   r   r  s    r   r$  z!HTMLBreakOnClosingTagParser.close  s	     	r   c                 :    | j                             |           d S r   )r  r   )r   r   r   s      r   handle_starttagz+HTMLBreakOnClosingTagParser.handle_starttag  s    S!!!!!r   c                     | j         st          d          | j         r'| j                                         }||k    rn| j         't          d| d          | j         s| j        d S )Nzno tags in the stackz!matching opening tag for closing  tag not found)r  r	   popr  )r   r   	inner_tags      r   handle_endtagz)HTMLBreakOnClosingTagParser.handle_endtag  s    } 	@'(>???m 	a))++IC m 	a
 ((_C(_(_(_```} 	655	6 	6r   N)r   r   r   __doc__rg   r  r  r"  r&  r$  r)  r.  r   r   r   r  r    s                . . .      " " "
6 
6 
6 
6 
6r   r  c           
         d }d|  d} ||d|  t          d|  d                    } |||d         dt          d|  d	                    }||d
z   z  }t                      5 }|                    |||                    |j        r|j        d         | k    rt          d|  d	          |}|t	          |          k     r |||d         |t          d|  d                    }|t	          |          z   }		 |                    ||||	z                       ||	z  }n;# t          j        $ r) ||||z            ||||	z            fcY cddd           S w xY w|t	          |          k     t          d          # 1 swxY w Y   dS )z
    For the first element with the specified tag in the passed HTML document
    return its' content (text) and the whole element (html)
    c                 N    	 |                      |          S # t          $ r |w xY wr   index
ValueError)haystackneedleexcs      r   find_or_raisez7get_element_text_and_html_by_tag.<locals>.find_or_raise  s9    	>>&))) 	 	 	I	s    $</><zopening r+  Nzmalformed opening z tagr   r   zparser did not match opening zclosing zunexpected end of html)r	   r  feedr  r   r  )
r   r   r8  closing_tagwhole_startcontent_startr  offsetnext_closing_tag_startnext_closing_tag_ends
             r   r	  r	    sp   
  
 s+++K-i#ii./M#/M/M/MNNP PK!M[\\C!67UC7U7U7U!V!VX XM[1_$M	$	&	& >&D]23444 	S&/!"4";";'(Q(Q(Q(QRRRs4yy  %2]VWW{%&D&D&D&DEE&G &G" $:C<L<L#L DD1E(E!EFGGG...M D D DM&3I*IIJV.B%BBCD D D> > > > > > > >D s4yy   $$<===!> > > > > > > > > >s7   'BF>%D$#F$)EFE%FFFc                       e Zd ZdZd Zd ZdS )HTMLAttributeParserzATrivial HTML parser to gather the attributes for a single elementc                 \    i | _         t          j        j                            |            d S r   )attrsr   r  r  r  r  s    r   r  zHTMLAttributeParser.__init__  s(    
''-----r   c                 H    t          |          | _        t          d          )Ndone)dictrF  r	   r   r   rF  s      r   r)  z#HTMLAttributeParser.handle_starttag  s    %[[
#F+++r   N)r   r   r   r/  r  r)  r   r   r   rD  rD    s8        KK. . ., , , , ,r   rD  c                   $    e Zd ZdZd Zd Zd ZdS )HTMLListAttrsParserz?HTML parser to gather the attributes for the elements of a listc                 j    t           j        j                            |            g | _        d| _        d S r   )r   r  r  r  items_levelr  s    r   r  zHTMLListAttrsParser.__init__  s-    ''---
r   c                     |dk    r2| j         dk    r'| j                            t          |                     | xj         dz  c_         d S )Nlir   r   )rO  rN  r   rI  rJ  s      r   r)  z#HTMLListAttrsParser.handle_starttag  sG    $;;4;!++Jd5kk***qr   c                 &    | xj         dz  c_         d S Nr   )rO  )r   r   s     r   r.  z!HTMLListAttrsParser.handle_endtag  s    qr   N)r   r   r   r/  r  r)  r.  r   r   r   rL  rL    sG        II  
  
    r   rL  c                     t                      }t          j        t                    5  |                    |            |                                 ddd           n# 1 swxY w Y   |j        S )af  Given a string for an HTML element such as
    <el
         a="foo" B="bar" c="&98;az" d=boz
         empty= noval entity="&amp;"
         sq='"' dq="'"
    >
    Decode and return a dictionary of attributes.
    {
        'a': 'foo', 'b': 'bar', c: 'baz', d: 'boz',
        'empty': '', 'noval': None, 'entity': '&',
        'sq': '"', 'dq': '''
    }.
    N)rD  r   r   r	   r<  r$  rF  )html_elementr  s     r   extract_attributesrV    s     !""F		2	3	3  L!!!               <s   *AA"%A"c                 ~    t                      }|                    |            |                                 |j        S )z_Given a string for an series of HTML <li> elements,
    return a dictionary of their attributes)rL  r<  r$  rN  )webpager  s     r   
parse_listrY    s6     !""F
KK
LLNNN<r   c                     | | S t          j        dd|           } t          j        dd|           } t          j        dd|           } t          j        dd|           } t          |           }  | j                    S )	z,Clean an HTML snippet into a readable stringN\s+ z(?u)\s?<\s?br\s?/?\s?>\s?
z(?u)<\s?/\s?p\s?>\s?<\s?p[^>]*>z<.*?>r  )r   r  r  strip)r   s    r   
clean_htmlr_    sw     |6&#t$$D6.d;;D64dDAAD6'2t$$DD4:<<r   c                   H     e Zd Zdddd fd
Zed             Z fdZ xZS )LenientJSONDecoderNFr   )transform_sourceignore_extraclose_objectsc                l    ||c| _         | _        d|z  | _         t                      j        |i | d S Nr   )rb  rc  _close_attemptssuperr  )r   rb  rc  rd  r   r   	__class__s         r   r  zLenientJSONDecoder.__init__  sD    3C\0t0 =0$)&)))))r   c                 6   | j         d | j                 }| j                            d          r|dz   S |                    d          sd S | j                            d          r|d d         dz   S | j                            d          r|d d         dz   S d S )NzExpecting ',',zExpecting property namer   zExpecting valuer   )docposmsg
startswithendswith)errrm  s     r   _close_objectz LenientJSONDecoder._close_object#  s    ghswh7/00 	9c"" 	F7788 	"ss8c>!W 122 	"ss8c>!	" 	"r   c           
      D   | j         r|                      |          }t          | j        dz             D ]}	 | j        r/|                     |                                          d         c S t                                          |          c S # t          j	        $ ru}|j
         || j        k     r|                     |          }|Y d }~ t          |          |j         d||j
        dz
  |j
        dz            ||j
                  d }~ww xY wJ d            )Nr   r   z in 
   Fz Too many attempts to decode JSON)rb  rangerg  rc  
raw_decodelstriprh  decoder|   JSONDecodeErrorrn  rs  typero  )r   sattempteri  s       r   ry  zLenientJSONDecoder.decode1  sH     	)%%a((AT1A566 	T 	TGT$ :??188::66q9999ww~~a(((((' T T T5=t333**1--A} d1ggHHAaebj.C,DHH!QUSSST 	98888s$   3B. BD *DADD)r   r   r   r  staticmethodrs  ry  __classcell__ri  s   @r   ra  ra    s~        /3%WX * * * * * * *
 " " \"9 9 9 9 9 9 9 9 9r   ra  c                    | dk    rt           j        dk    rqddl}t          j        t
          j                  5   |j        t           j        	                                t          j                   ddd           n# 1 swxY w Y   t          t           j        d          rt           j        j        nt           j        | fS t          d          D ]}	 	 t           j        dk    rt          t!          | |d                                          }n # t$          $ r t'          | |          }Y nw xY w|| fc S # t$          $ r9}|s|j        t(          j        fv r | t-          |           } }|| k    r Y d}~d}~ww xY wdS )	ao  Try to open the given filename, and slightly tweak it if this fails.

    Attempts to open the given filename. If this fails, it tries to change
    the filename slightly, step by step, until it's either able to open it
    or it fails and raises a final exception, like the standard open()
    function.

    It returns the tuple (stream, definitive_file_name).
    -rt   r   Nbufferr   F)block)r~   r   msvcrtr   r   ioUnsupportedOperationsetmodestdoutfilenorx   O_BINARYhasattrr  rv  LockingUnsupportedErrorlocked_filer"  r   openerrnoEACCESsanitize_path)filename	open_moder  r}  streamrr  old_filenames          r   sanitize_openr  D  s    3<7""MMM $R%<== A Asz0022BK@@@A A A A A A A A A A A A A A A%,SZ%B%BR
!!
T\]]88  	3<7** 21$XyFFFPPRR 3 3 3h	2238#### 	 	 	 #)66%-}X/F/F(Lx'' (''''		 sG   8A==BB;DD6D-*D6,D--D66
E9 /E44E9c                     d}t           j                            |           }|t           j                            |          }|S )z:Convert RFC 2822 defined time string into system timestampN)emailutilsparsedate_tz	mktime_tz)timestr	timestamp	timetuples      r   timeconvertr  k  s=    I((11IK)))44	r   c                    | dk    rdS fd}r t           u sst          j        d|           } t          j        dd |           } d                    t          ||                     }t           u r5t          j        dd|          }d}t          j        d	| d
| dd|          }|                    dd          pd}sd|v r|                    dd          }d|v |                    d          }r|	                    d          r
|dd         }|	                    d          rd|t          d          d         z   }|                    d          }|sd}|S )a/  Sanitizes a string so it could be used as part of a filename.
    @param restricted   Use a stricter subset of allowed characters
    @param is_id        Whether this is an ID that should be kept unchanged if possible.
                        If unset, yt-dlp's new sanitization rules are in effect
    r  c                    r| t           v rt           |          S s| dk    rdS t          u r<s:| dv r6ddd                    | t          t	          |           dz                       S | dk    s&t	          |           d	k     st	          |           d
k    rdS | dk    rrdndS | dk    rrdndS | dv rdS rK| dv s'|                                 st	          |           d
k    r t          j        |           d         dv rdndS | S )Nr]  z  z	"*:<>?|/\u   ⧸u   ⧹)r   \i  r         r  "'r   z _ -z   -z\/|*<>z _z!&'()[]{}$;`^,#r   CM)ACCENT_CHARSr   getchrordisspaceunicodedatacategory)charis_id
restricteds    r   replace_insanez)sanitize_filename.<locals>.replace_insane}  sE    	$,..%% 	5j   8L8L!2266tSTVAS=T=TUUUS[[CIINNc$ii3.>.>2S[[#-22-S[[)788x7Y5 	J4#55553t99WZ??$-d33A6$>>22EIr   NFKCz[0-9]+(?::[0-9]+)+c                 T    |                      d                              dd          S )Nr   r   r   )r
  replacer  s    r   <lambda>z#sanitize_filename.<locals>.<lambda>  s     

0B0B30L0L r   z(\0.)(?:(?=\1)..)+\1z(?:\0.|[ _-])*z^ .|z .$ r   __z-_r   Nr  r   )r   r  	normalizer   r  r   mapr  r^  rp  r   rx  )r|  r  r  r  resultSTRIP_REs    ``   r   sanitize_filenamer  t  s    	Bwwr     *  -u
**%*!&!,,
$&L&LaPPAWWS++,,F
-uf==$8x88(888"fEE^^D"%%,F fnn^^D#..F fnnc"" 	 &++D11 	 ABBZFS!! 	-6#c(()),,Fs## 	FMr   c                     g }| D ]u}|r|dk    r|dk    r9|r!|d         dk    r|                                  n|                    d           Jt          j        dd|          }|                    |           v|S )Nr   z..rl  z[/<>:"\|\\?\*]|[\s.]$#)r,  r   r   r  )partssanitized_partspartsanitized_parts       r   _sanitize_path_partsr    s    O / / 	ts{{T\\ -?2#6$#>#>##%%%%&&t,,,  8#tDD~....r   c                    t           j        dk    r]|s| S |                     d          rdnd}d                    t	          |                     d                              }|s|r||z   ndS |                     dd          }|                    d          r@|                    d          }d                    |dd                   dz   }|dd         }no|d	d
         dk    r:|d
d         dk    rdnd
}|d|         }||d                             d          }n'|dd	         dk    rdnd}|                    d          }d                    t	          |                    }|s|r||z   ndS )z(Sanitizes and normalizes path on Windowsrt   r   r  r   r  z\\N   r   r   r      )r~   r   rp  r   r  r   r  )r|  forcerootry   normedr  r@  s          r   r  r    s   
|w 	Hll3''/ssRxx,QWWS\\::;;"3d3td{{3YYsD!!F   #T""yyrr##d*abb		!		QqSkT))qgvgvww%%d++ bqbzT))ttrT""99)%0011D/$/4$;;C/r   http)schemec                    | d S |                      d          r| d|  S d}|D ]2\  }}t          j        ||           rt          j        |||           c S 3| S )N//r   ))z
^httpss://zhttps://)z^rmtp([es]?)://z	rtmp\1://)rp  r   r   r  )urlr  COMMON_TYPOSmistakefixups        r   sanitize_urlr    s     {			 !  3   L ' / /8GS!! 	/6'5#.....	/Jr   c                    t           j                            |           }|j        | d fS t           j                            |                    |j        |j        n|j         d|j                             } t          j	        d
                    |j        |j        pd                                                    }| d|                                 fS )Nr   )netlocz{}:{}r  zBasic )urllibparseurlsplitusername
urlunsplit_replaceporthostnamebase64	b64encodeformatpasswordrf   ry  )r  r  auth_payloads      r   extract_basic_authr    s    L!!#&&E~Dy
,
!
!%..*,---- #1 #0 #0 1 1C #	(<"	=	=EEGGI IL0,,..0000r   c                 Z    t           j                            t          |                     S )zExpand shell variables and ~)rx   ry   
expandvarsr   r|  s    r   expand_pathr    s!    7/22333r   )lazyc                T      fd}|r
 |            nt           |                      S )z-Remove all duplicates from the input iterablec               3   T   K   g } D ]}|| vr|                      |           |V   d S r   )r   )seenr   iterables     r   _iterzorderedSet.<locals>._iter  sG       	 	A}}A	 	r   )list)r  r  r  s   `  r   
orderedSetr    s?         -55777UUWW-r   c                    | dd         }|t           j        j        v r$t          t           j        j        |                   S | t           j        j        v rt           j        j        |          S t          j        d|          }||                    d          }|                    d          rd}d| }nd}t          j
        t                    5  t          t          ||                    cddd           S # 1 swxY w Y   d	| d
S )z)Transforms an HTML entity to a character.Nrl  z#(x[0-9a-fA-F]+|[0-9]+)r   r      0ru  &;)r   entitiesname2codepointr  html5r   r   r
  rp  r   r   r4  int)entity_with_semicolonentitymobjnumstrbases        r   _htmlentity_transformr    sA   "3B3'F ---4=/7888  333}"#8998.77DAS!! 	D!\\FFD ,, 	* 	*s64(())	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* v===s   C::C>C>c                 f    | d S t          | t                    sJ t          j        dd |           S )Nz
&([^&;]+;)c                 F    t          |                     d                    S rS  )r  r
  r  s    r   r  zunescapeHTML.<locals>.<lambda>1  s    !6qwwqzz!B!B r   )r   r   r   r  r  s    r   r  r  +  sD    yta6BBAG G Gr   c                     |                      dd                               dd                               dd                               dd                               d	d
          S )Nr  &amp;r;  z&lt;r:  z&gt;r  z&quot;r  z&#39;r  )r   s    r   
escapeHTMLr	  4  sU    	g			f			f			h			g		r   c                       e Zd Zd ZdS )netrc_from_contentc                     i i c| _         | _        t          j        |          5 }|                     d|d           d d d            d S # 1 swxY w Y   d S )Nr  F)hostsmacrosr  StringIO_parse)r   r   r  s      r   r  znetrc_from_content.__init__@  s    "$b
DK[!! 	,VKKVU+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   A		AAN)r   r   r   r  r   r   r   r  r  ?  s#        , , , , ,r   r  c                        e Zd Zej        dk    r% ej                    Zexj        ej	        z  c_        ndZe
d             Zdddd fd
Zd Zd Zd	d
 fd
Zedd
d            Z xZS )Popenrt   Nc                 v     t          t          d          sd S d d<    fd} |d            |d           d S )N_MEIPASS1PYINSTALLER_RESET_ENVIRONMENTc                 v                         |  d          }|                    | d            d S || <   d S )N_ORIG)r  r,  )r   origenvs     r   _fixz+Popen._fix_pyinstaller_issues.<locals>._fixZ  sF    77c===))D|T"""""Cr   LD_LIBRARY_PATHDYLD_LIBRARY_PATH)r  r~   )r  r  s   ` r   _fix_pyinstaller_issueszPopen._fix_pyinstaller_issuesM  sj    sJ'' 	F
 03+,
	  	  	  	  	  	 !!!!!r   F)r  r   shellc                &   |t           j                                        }|                     |           |                    d          p+|                    d          p|p|                    d          | _        |du r1d|d<   |                    dd           |                    dd           t           j        dk    r|                    d          |sFt          |t                    r1|r/|d	         
                                                    d
          rd}|rGt          |t                    st          |d          }d}d|d<   |                                  d| d} t                      j        |g|R ||d|d| j        i d S )Nrr   errorsuniversal_newlinesTrl   r  nt
executabler   )z.batz.cmdr  Fz"^

"=z /Q /S /D /V:OFF /E:ON /C "r  )r  r  startupinfo)rx   environcopyr  r  _Popen__text_mode
setdefaultr   r   r  lowerrq  r   shell_quote_Popen__comspecrh  r  _startupinfo)r   r   r  r   r  	remainingr   ri  s          r   r  zPopen.__init__d  s   ;*//##C$$S)))!::j11uVZZ5I5IuTuU[U_U_`tUuUu4<<+/F'(j'222h	2227d??vzz,77?  Zd33  aAYAYZjAkAk  O!$,, 9&t4888D$C..**NNtNNNi	iis%ii6iiW[Whiiiiiir   c                    t           j                            d          p>t           j                            t           j                            dd          dd          }t           j                            |          r|S t          d          )NComSpec
SystemRootr  System32zcmd.exez:shell not found: neither %ComSpec% nor %SystemRoot% is set)rx   r(  r  ry   r   isabsFileNotFoundError)r   comspecs     r   	__comspeczPopen.__comspec  sp    *..++ Erw||JNN<,,j)0E 0E7==!! 	N \]]]r   c                 h    	  | j         |i |S # t          $ r |                     d             w xY w)Ntimeout)communicateBaseExceptionkillr   r   r   s      r   communicate_or_killzPopen.communicate_or_kill  sQ    	#4#T4V444 	 	 	IIdI###	s    "1r   r:  c                    t                                                       |dk    r|                     |           d S d S )Nr   r:  )rh  r>  wait)r   r;  ri  s     r   r>  z
Popen.kill  s>    a<<IIgI&&&&& <r   c                     | |i |5 }|j         rdnd}|                    |          \  }}|p||p||j        fcd d d            S # 1 swxY w Y   d S )Nr  r   r:  )r*  r@  
returncode)clsr;  r   r   procr   r  stderrs           r   runz	Popen.run  s    S$!&!! 	IT ,5bb#G!55g5FFNFF$Wf&7H	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is   2AAA)r   r   r   r~   r   
subprocessSTARTUPINFOr/  dwFlagsSTARTF_USESHOWWINDOWr  r  r  r.  r@  r>  classmethodrH  r  r  s   @r   r  r  F  s!       
|w-z-//
 ??" " \", .2U j j j j j j j6^ ^ ^     ' ' ' ' ' ' '
  $ I I I I [I I I I Ir   r  c                 Z    t          | t                    r| n|                     d          S Nascii)r   r   ry  r  s    r   encodeArgumentrQ    s)     1c""911(9(99r   Time)hoursminutessecondsmillisecondsc                     t          | d          \  }} t          |d          \  }}t          |d          \  }}t          ||||           S )N  <   )divmod
_timetuple)msecsecsminshrss       r   timetuple_from_msecr`    sO    d##JD$b!!JD$tR  ICc4t,,,r   r   c                     t          | dz            }|j        rd|j        ||j        ||j        fz  }n$|j        rd|j        ||j        fz  }n
d|j        z  }|rd||j        fz  n|S )NrX  z%d%s%02d%s%02dz%d%s%02d%dz%s.%03d)r`  rS  rT  rU  rV  )r]  delimr\  timerets        r   formatSecondsrf    s    td{++Dz "$*eT\5$,!WW	 "DL%>>T\!37@9T.///S@r   r  c                     ddl m} d| d}|                                 } | r|                     d          r%|d                                         |dd          z   }| r| dz   nd	|z   S )
Nr   )
REPOSITORYz0please report this issue on  https://github.com/zo/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U)r   !r  r   r   r\  r  )updaterh  rstriprq  title)beforerh  ro  s      r   bug_reports_messagern    s    ######pj p p pC ]]__F 'V___55 '!fllnns122w&"*FSLLc11r   c                   (     e Zd ZdZdZd fd	Z xZS )YoutubeDLErrorz$Base exception for YoutubeDL errors.Nc                     ||| _         n | j         t          |           j        | _         t                                          | j                    d S r   )ro  r{  r   rh  r  )r   ro  ri  s     r   r  zYoutubeDLError.__init__  sI    ?DHHXDzz*DH"""""r   r   r   r   r   r/  ro  r  r  r  s   @r   rp  rp    sH        ..
C# # # # # # # # # #r   rp  c                   J     e Zd ZdZd fd	Zed             Zd Z fdZ xZ	S )	r   zError during info extraction.NFc                    ddl m} t          j                    d         |v rd}t	          |          | _        || _        || _        || _        || _	        || _
        t          j                    | _        t          | j        d         t                    r| j        d         j        | _        t                                          | j                   dS )z tb, if given, is the original traceback (so that it can be printed out).
        If expected is set, this is a normal error message and most likely not a bug in yt-dlp.
        r   )network_exceptionsr   Tr   N)networking.exceptionsru  r~   exc_infor   orig_msg	tracebackexpectedcausevideo_idier   r   rh  r  _ExtractorError__msg)	r   ro  tbrz  r{  r|  r}  ru  ri  s	           r   r  zExtractorError.__init__  s     	?>>>>><>>! 222HC 
 dmA&77 	6 M!,5DM$$$$$r   c           
          d                     t          | j        d d          t          | j        d d          | j        t          | j        d d          | j        rdnt                      f          S )Nr  z[%s] z%s: z (caused by %r))r   format_fieldr}  r|  rx  r{  rz  rn  r  s    r   __msgzExtractorError.__msg  sk    ww$00f55MT+<==-:BB%8%:%:< = = 	=r   c           
         t          | j        o+d                    t          j        | j                            | j        o?d                    t          j        d | j        | j        j                  dd                    d          pd S )Nr  r   r]  rc  )join_nonemptyry  r   	format_tbr{  format_exception__traceback__r  s    r   format_tracebackzExtractorError.format_traceback  s    NKrwwy':4>'J'JKKJn2779#=dDJPTPZPh#i#ijkjljl#mnn      	 r   c                     t                                          ||           t          | dd           r3|dvr1| j        pt	          |           j        | _        | j        f| _        d S d S d S )Nro  )ro  r   )rh  __setattr__getattrr~  r{  r   ro  r   )r   r   r   ri  s      r   r  zExtractorError.__setattr__  sq    D%(((4%% 	%$o*E*Ez8T$ZZ%8DHDIII	% 	%*E*Er   )NFNNN)
r   r   r   r/  r  propertyr~  r  r  r  r  s   @r   r   r     s        ''% % % % % %& = = X=     % % % % % % % % %r   r   c                        e Zd Z fdZ xZS )UnsupportedErrorc                 b    t                                          d| d           || _        d S )NzUnsupported URL: Trz  )rh  r  r  )r   r  ri  s     r   r  zUnsupportedError.__init__  s<    %%% 	 	6 	6 	6r   r   r   r   r  r  r  s   @r   r  r    s8                r   r  c                       e Zd ZdZdS )RegexNotFoundErrorzError when a regex didn't matchNr   r   r   r/  r   r   r   r  r    s        ))Dr   r  c                   $     e Zd ZdZd fd	Z xZS )GeoRestrictedErrorzGeographic restriction Error exception.

    This exception may be thrown when a video is not available from your
    geographic location due to geographic restrictions imposed by a website.
    Nc                 T    d|d<    t                      j        |fi | || _        d S )NTrz  )rh  r  	countries)r   ro  r  r   ri  s       r   r  zGeoRestrictedError.__init__  s7    !z'''''"r   r   r   r   r   r/  r  r  r  s   @r   r  r    sG         # # # # # # # # # #r   r  c                   $     e Zd ZdZd fd	Z xZS )UserNotLivez%Error when a channel/user is not liveNc                 J    d|d<    t                      j        |pdfi | d S )NTrz  z!The channel is not currently live)rh  r  )r   ro  r   ri  s      r   r  zUserNotLive.__init__  s8    !zC CNNvNNNNNr   r   r  r  s   @r   r  r    sM        //O O O O O O O O O Or   r  c                   $     e Zd ZdZd fd	Z xZS )DownloadErrorzDownload Error exception.

    This exception may be thrown by FileDownloader objects if they are not
    configured to continue on errors. They will contain the appropriate
    error message.
    Nc                 X    t                                          |           || _        dS )zh exc_info, if given, is the original exception that caused the trouble (as returned by sys.exc_info()). N)rh  r  rw  )r   ro  rw  ri  s      r   r  zDownloadError.__init__$  s&     r   r   r  r  s   @r   r  r    sG         ! ! ! ! ! ! ! ! ! !r   r  c                       e Zd ZdZdZdS )EntryNotInPlaylistzEntry not in playlist exception.

    This exception will be thrown by YoutubeDL when a requested entry
    is not found in the playlist info_dict
    zEntry not found in infoNr   r   r   r/  ro  r   r   r   r  r  *  s         
 $CCCr   r  c                   (     e Zd ZdZdZd fd	Z xZS )SameFileErrorzSame File exception.

    This exception will be thrown by FileDownloader objects if they detect
    multiple files would have to be downloaded to the same file on disk.
    z4Fixed output name but more than one file to downloadNc                 ~    || xj         d| z  c_         t                                          | j                    d S N: ro  rh  r  )r   r  ri  s     r   r  zSameFileError.__init__;  s?    HHX'HH"""""r   r   rr  r  s   @r   r  r  3  sO         
 AC# # # # # # # # # #r   r  c                       e Zd ZdZdS )PostProcessingErrorzPost Processing exception.

    This exception may be raised by PostProcessor's .run() method to
    indicate an error in the postprocessing task.
    Nr  r   r   r   r  r  A  s           r   r  c                       e Zd ZdZdZdS )DownloadCancelledz@ Exception raised when the download queue should be interrupted zThe download was cancelledNr  r   r   r   r  r  I  s        JJ
&CCCr   r  c                       e Zd ZdZdZdS )ExistingVideoReachedz --break-on-existing triggered zWEncountered a video that is already in the archive, stopping due to --break-on-existingNr  r   r   r   r  r  N  s        ))
cCCCr   r  c                       e Zd ZdZdZdS )RejectedVideoReachedz  --break-match-filter triggered zSEncountered a video that did not match filter, stopping due to --break-match-filterNr  r   r   r   r  r  S  s        **
_CCCr   r  c                       e Zd ZdZdZdS )MaxDownloadsReachedz) --max-downloads limit has been reached. zDMaximum number of downloads reached, stopping due to --max-downloadsNr  r   r   r   r  r  X  s        33
PCCCr   r  c                   $     e Zd ZdZd fd	Z xZS )ReExtractInfoz& Video info needs to be re-extracted. Fc                 X    t                                          |           || _        d S r   )rh  r  rz  )r   ro  rz  ri  s      r   r  zReExtractInfo.__init__`  s&     r   Fr  r  s   @r   r  r  ]  sC        00! ! ! ! ! ! ! ! ! !r   r  c                   &     e Zd ZdZdZ fdZ xZS )ThrottledDownloadz( Download speed below --throttled-rate. z*The download speed is below throttle limitc                 X    t                                          | j        d           d S )NFr  rh  r  ro  r   ri  s    r   r  zThrottledDownload.__init__i  s(    E22222r   rr  r  s   @r   r  r  e  sC        22
6C3 3 3 3 3 3 3 3 3r   r  c                   (     e Zd ZdZdZd fd	Z xZS )UnavailableVideoErrorzUnavailable Format exception.

    This exception will be thrown when a video is requested
    in a format that is not available for that video.
    zUnable to download videoNc                 ~    || xj         d| z  c_         t                                          | j                    d S r  r  )r   rr  ri  s     r   r  zUnavailableVideoError.__init__u  s>    ?HH
S

"HH"""""r   r   rr  r  s   @r   r  r  m  sN         
 %C# # # # # # # # # #r   r  c                   "     e Zd ZdZ fdZ xZS )ContentTooShortErrorzContent Too Short exception.

    This exception may be raised by FileDownloader objects when a file they
    download is too small for what the server announced first, indicating
    the connection was probably interrupted.
    c                 t    t                                          d| d| d           || _        || _        d S )NzDownloaded z bytes, expected z bytes)rh  r  
downloadedrz  )r   r  rz  ri  s      r   r  zContentTooShortError.__init__  sA    TzTTHTTTUUU$ r   r  r  s   @r   r  r  {  sB         ! ! ! ! ! ! ! ! !r   r  c                         e Zd Zd fd	Z xZS )XAttrMetadataErrorNUnknown errorc                 6   t                                          |           || _        || _        | j        t          j        t          j        fv sd| j        v s	d| j        v r	d| _        d S | j        t          j        k    s	d| j        v r	d| _        d S d| _        d S )NzNo space leftzDisk quota exceededNO_SPACEzArgument list too longVALUE_TOO_LONGNOT_SUPPORTED)	rh  r  codero  r  ENOSPCEDQUOTreasonE2BIG)r   r  ro  ri  s      r   r  zXAttrMetadataError.__init__  s    	 I%,555"dh..2G482S2S$DKKKY%+%%)ATX)M)M*DKKK)DKKKr   )Nr  r  r  s   @r   r  r    s=        * * * * * * * * * *r   r  c                       e Zd ZdS )XAttrUnavailableErrorNr   r   r   r   r  r    r   r   r  c                 P    t          | t          t          t          j        f          S r   )r   r   bytesrx   PathLikefs    r   is_path_liker    s    a#ubk2333r   c           	          t          j        d|           }d }|st          j        d|           }t                              |o&|                    d                                                    }|@| d t          |                    d                              } t          j        |          }n| d t          |                    d                              } |                    d          ry|                    d          dk    rdnd}t          j        |t          |                    d	                    z  |t          |                    d
                    z            }||t          ur|pt          j                    }|| fS )Na  (?x)
            ^.{8,}?                                              # >=8 char non-TZ prefix, if present
            (?P<tz>Z|                                            # just the UTC Z, or
                (?:(?<=.\b\d{4}|\b\d{2}:\d\d)|                   # preceded by 4 digits or hh:mm or
                   (?<!.\b[a-zA-Z]{3}|[a-zA-Z]{4}|..\b\d\d))     # not preceded by 3 alpha word or >= 4 alpha or 2 digits
                   [ ]?                                          # optional space
                (?P<sign>\+|-)                                   # +/-
                (?P<hours>[0-9]{2}):?(?P<minutes>[0-9]{2})       # hh[:]mm
            $)
        +\d{1,2}:\d{1,2}(?:\.\d+)?(?P<tz>\s*[A-Z]+)$tzrS  sign+r   rl  rS  rT  )rS  rT  )r   searchTIMEZONE_NAMESr  r
  r^  r   dt	timedeltar  r   )date_strr   r  timezoner  s        r   extract_timezoner    sy   
			 
	 
	A H 8IDhOO!%%a&AAGGDMM,?,?,A,ABB 4#aggdmm"4"4!4 45H|(333H0c!''$--00001776?? 	83..11BD|S!1!1222s1779#5#56668 8 8H G:55,blnnXr   Tc                 l   | dS t          j        dd|           } t          | |          \  }} t          j        t
          t                    5  d| d}t          j        	                    | |          |z
  }t          j        |                                          cddd           S # 1 swxY w Y   dS )z- Return a UNIX timestamp from the given date Nz\.[0-9]+r  r`   z%H:%M:%S)r   r  r  r   r   r4  	TypeErrorr  datetimestrptimecalendartimegmr  )r  	delimiterr  date_formatdt_s        r   parse_iso8601r    s     tvk2x00H)(H==Hh		Z	3	3 0 04444k""8[99HDs}}//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   AB))B-0B-c                 "    | rt           nt          S r   )DATE_FORMATS_DAY_FIRSTDATE_FORMATS_MONTH_FIRST)	day_firsts    r   date_formatsr    s    %.L!!4LLr   c                    | dS d}|                      dd          } t          j        dd|           } t          |           \  }} t	          |          D ]f}t          j        t                    5  t          j	        
                    | |                              d          }ddd           n# 1 swxY w Y   g|{t          j                            |           }|rZt          j        t                    5  t          j	        |dd                              d          }ddd           n# 1 swxY w Y   |t          |          S dS )z4Return a string with the date in the format YYYYMMDDNrk  r\  (?i)\s*(?:AM|PM)(?:\s+[A-Z]+)?r  ra      )r  r   r  r  r  r   r   r4  r  r  r  strftimer  r  r  r   )r  r  upload_dater   
expressionr  s         r   unified_strdater    s    tKS))Hv7XFFH"8,,KAx"9-- X X
 ,, 	X 	X+..xDDMMhWWK	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	XK,,X66	 	M$Z00 M M k9RaR=9BB8LLM M M M M M M M M M M M M M M; s$   /4B//B3	6B3	7*D--D14D1c           	         t          | t                    sd S t          j        ddt          j        dd|                     } t          j        d|           rdnd}t          | |rt          j        |          nd 	          \  }} t          j        d
d|           } t          j        d|           }|r+| d t          |	                    d                              } t          j        d|           }|r|	                    d          } t          |          D ]}t          j        t                    5  t          j                            | |          |z
  t          j        |          z   }t!          j        |                                          cd d d            c S # 1 swxY w Y   t&          j                            |           }|r<t!          j        |          |dz  z   t-          |                                          z
  S d S )Nr[  r\  z>(?i)[,|]|(mon|tues?|wed(nes)?|thu(rs)?|fri|sat(ur)?|sun)(day)?r  z(?i)PM   r   r  r   r  r  r  zT^([0-9]{4,}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}\.[0-9]{6})[0-9]+$r     )r   r   r   r  r  r  r  r  r   r
  r  r   r   r4  r  r  r  r  r  r  r  r  r  total_seconds)	r  r  	tz_offsetpm_deltar  r  r  r  r  s	            r   unified_timestampr    sQ   h$$ tvfc26I2x$Y $Y Z ZH Yy(33:rrH)9N",Y7777$P P PHh v7XFFH 		@(KKA 20c!''$--00001 		iksttA 771::"9-- 4 4
 ,, 	4 	4+&&x<<xG",]eJfJfJffC?3==??33	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 ((22I \y))HtO;c(BXBXBZBZ>[>[[[\ \s   4AF""F&	)F&	unknown_videoc                    | d| vr|S |                      d          d                             d          d         }t          j        d|          r|S |                    d          t
          v r|                    d          S |S )Nr   r  r   r   z^[A-Za-z0-9]+$r   )	partition
rpartitionr   r   rk  KNOWN_EXTENSIONS)r  default_extguesss      r   determine_extr    s    
{cnnMM#q!,,S11!4E	x!5)) 	c		.	.	.||C   r   c                 0    t          | |dz   |z   |          S Nr   )replace_extension)r  sub_lang
sub_formatexpected_real_exts       r   subtitles_filenamer  "  s    Xx#~
'BDUVVVr   autora   c                 "   d}|dk    rd}d}t          t          j                            t          j        j                  |          }| dv r|S | dk    r|t          j        d          z
  S t          j        d	|           }|t          |
                    d          ||          }t          |
                    d                    |
                    d          dk    rdndz  }|
                    d          }|dk    s|dk    rt          ||dk    r|dz  n|          }	d}n(|dk    rd}|dz  }t          j        di |dz   |i}
||
z   }	|rt          |	|          S |	S t          t          j                            | |          |          S )a  
    Return a datetime object from a string.
    Supported format:
        (now|today|yesterday|DATE)([+-]\d+(microsecond|second|minute|hour|day|week|month|year)s?)?

    @param format       strftime format of DATE
    @param precision    Round the datetime object: auto|microsecond|second|minute|hour|day
                        auto: round to the unit provided in date_str (if applicable).
    Fr  Tmicrosecond)nowtoday	yesterdayr   )dayszf(?P<start>.+)(?P<sign>[+-])(?P<time>\d+)(?P<unit>microsecond|second|minute|hour|day|week|month|year)s?Nr  rd  r  r  rl  unitmonthyearr  dayweek   r|  r   )datetime_roundr  r  r  r  utcr  r   r   datetime_from_strr
  r  datetime_add_monthsr  )r  	precisionr  auto_precisionr  r   
start_timerd  r  new_datedeltas              r   r"  r"  &  s    NF!	2;??2;?;;YGGE###;r|+++++Hq E &u{{7';';YOO
5;;v&&''V1D1D1K1K22QRS{{6""7??dfnn*:DFNNtbyyX\]]HDDv~~	L66D3J#566E!E)H 	2!(D111"+..x@@)LLLr   c                     |r(t          j        d|           st          d|  d          t          | d|                                          S )z
    Return a date object from a string using datetime_from_str

    @param strict  Restrict allowed patterns to "YYYYMMDD" and
                   (now|today|yesterday)(-\d+(day|week|month|year)s?)?
    z9\d{8}|(now|today|yesterday)(-\d+(day|week|month|year)s?)?zInvalid date format "r  r  )r$  r  )r   	fullmatchr4  r"  date)r  r  r_   s      r   date_from_strr,  P  s\      >bl#_aijj ><<<<===XvNNNSSUUUr   c                     | j         |z   dz
  }| j        |dz  z   }|dz  dz   }t          | j        t	          j        ||          d                   }|                     |||          S )z0Increment/Decrement a datetime object by months.r   r  )r  r  minr  r  
monthranger  )r  monthsr  r  r  s        r   r#  r#  \  si    I"E8erk!DBJNE
cgx*477:
;
;C;;tUC(((r   r  c                     |dk    r| S d}ddddd}d } |t          j        |                                           | j        |z  z   ||                   }t	          |          S )	z@
    Round a datetime object's time to a specific precision
    r  @B Q r  rY  r   )r  hourminutesecondc                     | |dz  z   |z  |z  S rf  r   )r   r   s     r   r  z datetime_round.<locals>.<lambda>s  s    QQY1,1 r   )r  r  r  r  r   )r  r$  
time_scaleunit_secondsroundtor  s         r   r   r   e  s     M!!
J	 L 21G883?Z;WWYefoYpqqI))444r   c                     t          j        d|           }|'d                    |                                          S | S )z?
    Convert a date in 'YYYYMMDD' format to 'YYYY-MM-DD' formatz^(\d\d\d\d)(\d\d)(\d\d)$Nr  )r   r   r   groups)r  r   s     r   hyphenate_dater=  x  s;     H0(;;Exx'''r   c                   H    e Zd ZdZd	dZed             Zd Zd Zd Z	d Z
dS )
	DateRangez,Represents a time interval between two datesNc                 P   |t          |d          | _        n(t          j        j                                        | _        |t          |d          | _        n(t          j        j                                        | _        | j        | j        k    rt          d|  d          dS )z<start and end must be strings in the format accepted by dateNTr^   zDate range: "z." , the start date must be before the end date)	r,  r  r  r  r.  r+  endmaxr4  r   r  rA  s      r   r  zDateRange.__init__  s    &uT:::DJJ--//DJ?$S666DHH{++--DH:  aTaaabbb ! r   c                      | ||          S )z0Returns a range that only contains the given dayr   )rE  r  s     r   r  zDateRange.day  s     s3}}r   c                     t          |t          j                  st          |          }| j        |cxk    o
| j        k    nc S )z!Check if the date is in the range)r   r  r+  r,  r  rA  )r   r+  s     r   __contains__zDateRange.__contains__  sI    $(( 	' &&DzT----TX-----r   c                     t            dt          |           j          d| j                                        d| j                                        dS Nr   (, ))r   r{  r  	isoformatrA  r  s    r   __repr__zDateRange.__repr__  sN    hhT$ZZ0hh4:3G3G3I3IhhtxOaOaOcOchhhhr   c                 $    | j          d| j         S )Nz to )r  rA  r  s    r   __str__zDateRange.__str__  s    *,,$(,,,r   c                 l    t          |t                    o| j        |j        k    o| j        |j        k    S r   )r   r?  r  rA  r   others     r   __eq__zDateRange.__eq__  s9    5),, HJ%+-H26(ei2G	Ir   NN)r   r   r   r/  r  rM  r  rF  rM  rO  rS  r   r   r   r?  r?    s        66c c c c   [. . .i i i- - -I I I I Ir   r?  c                  .   t          j                    } | dk    r/t          t          d          r| dt          j        d d         z  z  } g }t          j        t                    5  t          j                    }d d d            n# 1 swxY w Y   d	                    t          j
                    | t          j                    t          j                    d         t          j                     t          j        t          t!          |ddid d	                    S )
NPyPypypy_version_infoz version %d.%d.%dr  z Python {} ({} {} {}) - {} ({}{})r   rc  r\  z, %s)r   python_implementationr  r~   rW  r   r   r   libc_verr  python_versionmachinearchitecturesslOPENSSL_VERSIONr  r  )rX  rY  s     r   system_identifierr_    s6   $:<<&&738K+L+L&!4s7LRaR7P!PPH		W	%	% ' '$&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' .44!!"]H8C88$GG  s   $BBBc                  r    t           j        dk    r&t          t          j                    d                   S dS )z@ Get Windows version. returns () if it's not running on Windows r#  r   r   )rx   r   version_tupler   	win32_verr   r   r   get_windows_versionrc    s0     
w$X/11!4555rr   c                    t          | t                    sJ |pt          j        }|sd S t          j        dk    r%t          |          rt          j        dd|           } d |}}dt          |dd           pdv r|pt                      }n8t          |d          r(|j        }|pt          |dd           pt                      }|                    |r|                     |d	          n|            |                                 d S )
Nr#  z	([\r\n]+)z \1brq   r  r  rr   ignore)r   r   r~   rG  rx   r   supports_terminal_sequencesr   r  r  ri   r  r  writerf   flush)r|  outrr   encr  s        r   write_stringrl    s   a

C 	w$6s;;F<++C
wsFD))/R00-+--	h		 PO'#z488O<M<O<O
LLC6#x(((Q777IIKKKKKr   )printer
stacklevelc                F   t           j        ri| t          j        v rd S t          j                            |            |r ||  t                       fi |S t          d|  t                       dfi |S dd l}|                    t          |           |dz              d S )NzERROR: r]  r   r  )rn  )
r   r   deprecation_warning_cacheaddrn  rl  warningswarnDeprecationWarning)ro  rm  rn  r   rs  s        r   rp  rp    s    | 	J%,,,F"&&s+++ 	F7c:#6#8#8::EEfEEEDcD+>+@+@DDDOOOOO(--*q.IIIIIr   c                   "     e Zd ZdZ fdZ xZS )r  zFile locking is not supportedc                 T    t                                          | j                   d S r   r  r  s    r   r  z LockingUnsupportedError.__init__  s#    """""r   )r   r   r   ro  r  r  r  s   @r   r  r    s=        
)C# # # # # # # # #r   r  rt   c                       e Zd Zdej        j        fdej        j        fdej        j        fdej        j        fdej        j        fgZdS )
OVERLAPPEDInternalInternalHighOffset
OffsetHighhEventN)	r   r   r   ctypeswintypesLPVOIDDWORDHANDLE_fields_r   r   r   ry  ry    sV        /0V_34v,-6?01v-.
r   ry  kernel32    ic                    t                      }d|_        d|_        d|_        t	          j        |          | _        t          t          j	        | 
                                          |rdnd|rdndz  dt          t          | j                  s5t          dt	          j        t	          j                                        d S )Nr   r   r   zLocking file failed: )ry  r|  r}  r~  r  pointer_lock_file_overlapped_p
LockFileExr  get_osfhandler  	whole_low
whole_highBlockingIOErrorFormatErrorGetLastError)r  	exclusiver  
overlappeds       r   
_lock_filer    s    \\

 !

$*N:$>$>!&.qxxzz::"+4339N3OY
A4MO O 	i ""g&:LVM`MbMb:c:c"g"ghhh		i 	ir   c                     | j         sJ t          j        |                                           }t	          |dt
          t          | j                   s#t          dt          j	                              d S )Nr   zUnlocking file failed: )
r  r  r  r  UnlockFileExr  r  r   r  r  )r  handles     r   _unlock_filer  &  sq    ((((%ahhjj11FAy*a>WXX 	NLF4F4H4HLLMMM	N 	Nr   c                     |rt           j        nt           j        }|s|t           j        z  }	 t          j        | |           d S # t
          $ r  t          $ r t          j        | |           Y d S w xY wr   )fcntlLOCK_EXLOCK_SHLOCK_NBflockr  r   lockf)r  r  r  r  s       r   r  r  0  s    %.AEMMEME '&&Au%%%%%"    & & &Au%%%%%%&s   A )A10A1c                    t          j        t                    5  t          j        | t          j                  cd d d            S # 1 swxY w Y   t          j        t                    5  t          j        | t          j                  cd d d            S # 1 swxY w Y   t          j        | t          j        t          j        z            S r   )r   r   r   r  r  LOCK_UNr  r  r  s    r   r  r  ;  s   $W-- 5 5{1em445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5$W-- 5 5{1em445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5;q%-%-"?@@@s#   AA
A
*BBBc                     t           r   r  )r  r  r  s      r   r  r  D      ))r   c                     t           r   r  r  s    r   r  r  G  r  r   c                   @    e Zd ZdZd
dZd Zd Zd ZeZeZ	d Z
d	 ZdS )r  FTNc           
         dvrt                    |c| _        | _        t          fddD                       }t          fddD                       }t	          j        t          j        t          t          dd          t          t          dd          t          t          d	d          |rt          j
        ndd
v rt          j        nddv rt          j        nd|st          j        n|rt          j        nt          j        f          }t          j        t          j        ||d          |          | _        d S )N>   arrk   abrbwbc              3       K   | ]}|v V  	d S r   r   r   r  rq   s     r   	<genexpr>z'locked_file.__init__.<locals>.<genexpr>S  s'      11QqDy111111r   zwax+c              3       K   | ]}|v V  	d S r   r   r  s     r   r  z'locked_file.__init__.<locals>.<genexpr>T  s'      //QqDy//////r   zr+	O_CLOEXECr   r  O_NOINHERITr  r   ru   rr   )NotImplementedErrorrq   r  anyr   reduceoperatoriorr  rx   O_CREATO_APPENDO_EXCLO_RDONLYO_RDWRO_WRONLYfdopenr  r  )r   r  rq   r  rr   writablereadabler  s     `     r   r  zlocked_file.__init__N  s0   888%d+++ $e	4:1111&11111////$///// BQ''B
A&&Bq))")BJJ$;;BKKABII!'SBKK(-SRYY0
   278UE::D8TTTr   c                 f   d| j         v}	 t          | j        || j                   d| _        n(# t
          $ r | j                                          w xY wd| j         v rR	 | j                                         n7# t
          $ r*}|j        t          j	        t          j
        fvr Y d }~nd }~ww xY w| S )Nr  Trk   )rq   r  r  r  lockedr   r$  truncater  ESPIPEEINVAL)r   r  r~  s      r   r"  zlocked_file.__enter__a  s    ty(		tvy$*555DKK 	 	 	FLLNNN	 $)!!!!   7LL#   	     s!   ". %A A: :
B. B))B.c                 h    | j         sd S 	 t          | j                   d| _         d S # d| _         w xY wNF)r  r  r  r  s    r   unlockzlocked_file.unlockt  sD    { 	F	    DKKK%DKs   ( 	1c                     	 |                                   | j                                         d S # | j                                         w xY wr   )r  r  r$  r%  s     r   r&  zlocked_file.__exit__|  s;    	KKMMMFLLNNNNNDFLLNNNNs	   1 Ac                 ,    t          | j        |          S r   )r  r  )r   attrs     r   __getattr__zlocked_file.__getattr__  s    tvt$$$r   c                 *    t          | j                  S r   )iterr  r  s    r   __iter__zlocked_file.__iter__  s    DF||r   )TN)r   r   r   r  r  r"  r  r&  r  r$  r  r  r   r   r   r  r  K  s        FU U U U&  &        DE% % %    r   r  c                  4    t          j                    } | | ndS )Nrl   )r~   getfilesystemencodingr  s    r   get_filesystem_encodingr    s    (**H+888r   r  z\"""z%=%z%%cd:~,%)r  r]  %r%  c                    t          t          |                     } t          j        dk    rt	          j        |           S |rt          nt          d                    fd| D                       S )Nr#  r\  c              3      K   | ]b}t          j        d |t           j                  r|n;t          j        dd|                                                            d          V  cdS )z[\w#$*\-+./:?@\\]+z
(\\+)("|$)z\1\1\2r  N)r   r*  ASCIIr  	translater   )r   r|  transs     r   r  zshell_quote.<locals>.<genexpr>  s          \/BH== 	MVM9a00::5AAFFtLL     r   )r  variadicrx   r   shlexr   _CMD_QUOTE_TRANS_WINDOWS_QUOTE_TRANS)r   r  r  s     @r   r-  r-    s    D	w$z$ %?+?E88          r   c                     t          | i           \  } }|                    |           t          j                            dt          j        |          i          }| dz   |z   S )z1 Pass additional data in a URL for internal use. __youtubedl_smuggler  )unsmuggle_urlrj  r  r  	urlencoder|   dumps)r  dataidatasdatas       r   smuggle_urlr    sa     sB''JCKKL""	
4 0 013 3E9ur   c                     d| vr| |fS |                      d          \  }}}t          j                            |          d         d         }t	          j        |          }||fS )Nz#__youtubedl_smuggler  r  r   )r  r  r  parse_qsr|   loads)smug_urlr   r  r   r  jsondr  s          r   r  r    sj    X--  '',,MCEL!!%(()>?BE:eD9r   %d%srX  factorc                X   t          |           t          |          }} | | dk     rdS d}| dk    rdn<t          t          t	          j        | |                    t          |                    }dg||         }|dk    rddd                    || d          }| ||z  z  }|||fz  S )	z5 Formats numbers with decimal sufixes like K, M, etc Nr   kMGTPEZYr     Ki)kr  i)float_or_nonefloatr.  r  mathlogr   r  )numfmtr  POSSIBLE_SUFFIXESexponentro   	converteds          r   format_decimal_suffixr    s    $$eFmmC
{cAggt"1HHqq#c$(3*?*?&@&@#FWBXBX"Y"YH%$%h/F~~$$((F>>v)*I)V$$$r   c                 *    t          | dd          pdS )Nz%.2f%sBr  r  zN/A)r  )r  s    r   format_bytesr    s     	$???H5Hr   c                    |rt           nt                               dd          }d                    d | D                       } |rt          j        nt          j        d| d| d|          }|sd S t          |                    d                              d	d
                    }| |                    d                   }t          ||z            S )Nz\.z[,.]r  c              3   >   K   | ]}t          j        |          V  d S r   r   r   )r   us     r   r  z$lookup_unit_table.<locals>.<genexpr>  s*      99	!999999r   z(?P<num>z)\s*(?P<unit>z)\br  rk  r   r  )		NUMBER_REr  r   r   r*  r   r  r
  round)
unit_tabler|  r_   num_reunits_rer  r  mults           r   lookup_unit_tabler    s     FYYi&7&7v&F&FFxx99j99999H	-	-RX6F66666	; 	;A t
&&sC00
1
1Caggfoo&Dtr   c                 ~    t          d t          dgd          D             |                                 d          S )z9Parse a string indicating a byte quantity into an integerc                      i | ]\  }}|d |z  S )r  r   )r   r  r  s      r   
<dictcomp>zparse_bytes.<locals>.<dictcomp>  s"    ===1D!G===r   r  KMGTPEZYTr^   )r  	enumerateupperr  s    r   parse_bytesr    sG    ==	2*;
*; < <===			$       r   c           
      ~   | d S i ddddddddddd	dd
dddddddddddddddddddddi ddddddddddddddd d!d"d#d$d!d%d#d&d#d'd#d(d!d)d*d+d,d-d*i d.d,d/d,d0d,d1d*d2d3d4d5d6d3d7d5d8d5d9d5d:d3d;d<d=d>d?d<d@d>dAd>dBd>d<dCdDdCdDdDdDdCdE}t          ||           S )FNBr   re  r  KiBr  KBrX  kBKbkb	kilobytes	kibibytesMiBi   MBr2  mBMbmb	megabytes	mebibytesGiBi   @GB ʚ;gBGbgb	gigabytes	gibibytesTiBl        TBl    J)tBTbr  	terabytes	tebibytesPiBl           PBl     I5 pBPbpb	petabytes	pebibytesEiBl            EBl     NZoeBEbebexabytes	exbibytesZiBl            ZBl     @=7M.czBZbzb
zettabytesl               l      B3v^!< )	zebibytesYiBYByBYbyb
yottabytes	yobibytes)r  )r|  _UNIT_TABLEs     r   parse_filesizerO    s   yt<Q<Q< 	< 	t	<
 	d< 	d< 	d< 	d< 	T< 	T< 	y< 	i< 	i< 	i< 	i<  	Y!<" 	Y#< <$ 	y%<& 	i'<( 	i)<* 	i+<, 	i-<. 	Y/<0 	Y1<2 	y3<4 	i5<6 	i7<8 	i9<: 	i;<< 	Y=<> 	Y?<@ 	yA<B 	iC<D 	iE< < <F 	iG<H 	iI<J 	YK<L 	YM<N 	yO<P 	iQ<R 	iS<T 	iU<V 	iW<X 	IY<Z 	Y[<\ 	y]<^ 	i_<` 	ia<b 	ic<d 	ie<f 	ig< <h w< < <K| [!,,,r   c           	      V   | d S t          j        dd|                                           } t          j        d|           rt	          |           S ddddddddd}t          ||           }||S t          j        d|           }|r"t	          |                    d	                    S d S )
Nz	^[^\d]+\sr  z	^[\d,.]+$rX  r2  r&  )r  Kr  MkkKKre  r  z([\d,.]+)(?:$|\s)r   )r   r  r^  r   
str_to_intr  r
  )r|  rN  re  r   s       r   parse_countrV  -  s    yt
|R##))++A	xa   !}} 	 	K K
+
+C

8(!,,D )$**Q--((() )r   )lenientc                b   | i S |rt          j        d|           }nt          j        d|           }|rEt          |                    d                    t          |                    d                    dS t          j        d|           }|r$dt          |                    d                    iS t          j        d	|           }|r'dt          |                    d                    d
z  iS |r;t          j        d|           }|r$dt          |                    d                    iS i S )Nu!   (?P<w>\d+)\s*[xX×,]\s*(?P<h>\d+)u@   (?<![a-zA-Z0-9])(?P<w>\d+)\s*[xX×,]\s*(?P<h>\d+)(?![a-zA-Z0-9])rk   hwidthheightz*(?<![a-zA-Z0-9])(\d+)[pPiI](?![a-zA-Z0-9])r\  r   z\b([48])[kK]\bi  z (?<!\d)(\d{2,5})w(?![a-zA-Z0-9])r[  )r   r  r  r
  )r|  rW  r   s      r   parse_resolutionr]  J  s6   y	 ay=qAAy\^_`` 
C))$**S//**
 
 	

 9BAFFD .#djjmm,,--9&**D 4#djjmm,,s233 1y<a@@ 	1SA//00Ir   c                     t          | t                    sd S t          j        d|           }|r"t	          |                    d                    S d S )Nz\b(\d+)\s*kbpsr   )r   r   r   r  r  r
  )r|  r   s     r   parse_bitrater_  h  sU    a 9&**D "4::a==!!!" "r   r<   c                     t                               |t           d                   }	 |                    |           dz   S # t          $ r Y dS w xY w)zE Return the number of a month by (locale-independently) English name r<   r   N)MONTH_NAMESr  r3  r4  )r   langmonth_namess      r   month_by_namerd  p  s\     //$D(9::K  &&**   tts   A   
AAc                 t    	 d t           D                                 |           dz   S # t          $ r Y dS w xY w)zV Return the number of a month by (locale-independently) English
        abbreviations c                 "    g | ]}|d d         S )Nr  r   )r   r|  s     r   r   z)month_by_abbreviation.<locals>.<listcomp>  s     333!"1"333r   r   N)ENGLISH_MONTH_NAMESr3  r4  )abbrevs    r   month_by_abbreviationri  {  sQ    33233399&AAAEE   tts   &) 
77c                 .    t          j        dd|           S )z%Replace all the '&' by '&amp;' in XMLz<&(?!amp;|lt;|gt;|apos;|quot;|#x[0-9a-fA-F]{,4};|#[0-9]{,4};)r  r   r  )xml_strs    r   fix_xml_ampersandsrm    s    6G  r   c                    t          | t                    sJ 	 dd l}n# t          $ r Y d S w xY w	 |j                            d          }n# t          $ r Y d S t          $ r Y d S w xY w|                                 } |j	        t          |                    }||_        	 |                    d|ddd           d S # t          $ r Y d S w xY w)Nr   z	libc.so.6   )r   r   r  ImportErrorcdllLoadLibraryr   r  rf   create_string_bufferr   r   prctlAttributeError)rl  r  libctitle_bytesbufs        r   setproctitlery    s   eS!!!!!   {&&{33       		
 ,,..K
%&
%c+&6&6
7
7CCI

2sAq!$$$$$   s5    
,,A 
A%	A%$A%!B< <
C
	C
c                 b    | ,|                      |          r| t          |          d          n| S r   )rp  r   )r|  r  s     r   remove_startr{    s.    ]q||E/B/B]1SZZ[[>>Ir   c                 h    | /|r-|                      |          r| d t          |                    n| S r   )rq  r   )r|  rA  s     r   
remove_endr}    s2    McMajjooM1Zs3xxiZ==1Lr   c                     | t          |           dk     r| S dD ]&}| d         |k    r| d         |k    r| dd         c S '| S )Nr   )r  r  r   rl  r   r   )r|  r  s     r   remove_quotesr    sY    yCFFQJJ  Q45==QrUe^^QrT7NNNHr   c                 j    t          t          j                            |           j        d          pdS )zx
    This implementation is inconsistent, but is kept for compatibility.
    Use this only for "webpage_url_domain"
    zwww.N)r{  r  r  urlparser  r  s    r   
get_domainr    s,    
 --c2296BBJdJr   c                     t           j                            |           j        }|                    d                              d          d         S )Nr   rl  )r  r  r  ry   r^  r   )r  ry   s     r   url_basenamer    s=    <  %%*D::c??  %%b))r   c                 P    t          j        d|                                           S )Nzhttps?://[^?#]+/)r   r   r
  r  s    r   base_urlr    s!    8'--33555r   c                    t          |t                    r|                                }t          |t                    r|sd S t	          j        d|          r|S t          | t                    r|                                 } t          | t                    rt	          j        d|           sd S t          j                            | |          S )Nz(?:[a-zA-Z][a-zA-Z0-9+-.]*:)?//z^(?:https?:)?//)	r   r  ry  r   r   r   r  r  urljoin)r  ry   s     r   r  r    s    $ {{}}dC    t	x2D99 $ {{}}dC   )& )& t<d+++r   c                     |r| t          | |d           } |dk    r|dk     rt          d|z            }d}	 |t          |           nt          | |          |z  |z  S # t          t          t          f$ r |cY S w xY w)Nr   )r  )r  r  r4  r  OverflowError)vscaler   get_attrinvscaler  s         r   int_or_noner    s     'AMAx&&1}}q5y>>,AC,=,=,=IURR	=1   s   'A A;:A;c                 (    | |nt          |           S r   r   r  r   s     r   str_or_noner    s    i77SVV+r   c                     t          | t                    r| S t          | t                    r%t          j        dd|           } t          |           S dS )z' A more relaxed version of int_or_none z[,\.\+]r  N)r   r  r   r   r  r  )int_strs    r   rU  rU    sV    '3 $	GS	!	! $&R117###$ $r   c                     | |S |dk    r|dk     rt          d|z            }d}	 t          |           |z  |z  S # t          t          f$ r |cY S w xY wrS  )r  r  r4  r  )r  r  r  r   s       r   r  r    su    y1}}q5y>>Qxx("U**	"   s   ; AAc                 4    t          | t                    r| n|S r   r   boolr  s     r   bool_or_noner    s    1d##0110r   c                 X    t          | t                    r|                                 n|S r   )r   r   r^  r  s     r   strip_or_noner    s#    "1c**71779997r   c                     | rt          | t                    sd S |                                 } t          j        d|           r| nd S )Nz@(?:(?:https?|rt(?:m(?:pt?[es]?|fp)|sp[su]?)|mms|ftps?|wss?):)?//)r   r   r^  r   r   r  s    r   url_or_noner  
  sK     jc** t
))++C(^`cddn33jnnr   c                    d }	 t          | t          t          f          rt          |           }n5t          | t                    r t
          j                            | d          }t          j	        ddt          |
                                           |          }|                    |          S # t          t          t          t          t           f$ r |cY S w xY w)Nra   z(?<!%)(%%)*%s\g<1>)r   r  r  r   r   r  r  r  r   r  r  r  r4  r  ru  r  r   )r  r  r   datetime_objects       r   strftime_or_noner    s    O	i#u.. 	H<YGGOO	3'' 	H k229hGGOfIs?+D+D+F+F'G'GII;X X''444	>='J   s   B-B2 2%CCc           	      ,   t          | t                    sd S |                                 } | sd S d gdz  \  }}}}}t          j        d|           }|r |                    ddddd          \  }}}}}nct          j        d|           }|r|                                \  }}}}}n1t          j        d	|           }|r|                                \  }}nd S |r|                    d
d          }t          d |df|df|df|df|dffD                       S )N   z(?x)
            (?P<before_secs>
                (?:(?:(?P<days>[0-9]+):)?(?P<hours>[0-9]+):)?(?P<mins>[0-9]+):)?
            (?P<secs>(?(before_secs)[0-9]{1,2}|[0-9]+))
            (?P<ms>[.:][0-9]+)?Z?$
        r  rS  r^  r]  msa  (?ix)(?:P?
                (?:
                    [0-9]+\s*y(?:ears?)?,?\s*
                )?
                (?:
                    [0-9]+\s*m(?:onths?)?,?\s*
                )?
                (?:
                    [0-9]+\s*w(?:eeks?)?,?\s*
                )?
                (?:
                    (?P<days>[0-9]+)\s*d(?:ays?)?,?\s*
                )?
                T)?
                (?:
                    (?P<hours>[0-9]+)\s*h(?:(?:ou)?rs?)?,?\s*
                )?
                (?:
                    (?P<mins>[0-9]+)\s*m(?:in(?:ute)?s?)?,?\s*
                )?
                (?:
                    (?P<secs>[0-9]+)(?P<ms>\.[0-9]+)?\s*s(?:ec(?:ond)?s?)?\s*
                )?Z?$zW(?i)(?:(?P<hours>[0-9.]+)\s*(?:hours?)|(?P<mins>[0-9.]+)\s*(?:mins?\.?|minutes?)\s*)Z?$r   r   c              3   D   K   | ]\  }}t          |pd           |z  V  dS r   N)r  )r   r  r  s      r   r  z!parse_duration.<locals>.<genexpr>S  sO       G G:4uTYQ$& G G G G G Gr   r3  r  rY  r   )	r   r   r^  r   r   r
  r<  r  sum)r|  r  rS  r^  r]  r  r  s          r   parse_durationr    sy   a t			A t#'&1*D%tR
 
 	 	A 	 "&'ggfgvvt&T&T#eT4H, / 0  	*+((**'D%tRRsuvwwA hhjjttt	 "ZZS!! G G	ut}tRj4)b!W:F G G G G G Gr   c                     t           j                            |          \  }}|r|dd          |k    r+|}| r'|r%t                              |d           | d| | S | dt                              |           S )Nr   Tprependr   )rx   ry   splitext_UnsafeExtensionErrorsanitize_extension)r  r  extr  r   real_exts         r   _change_extensionr  W  s    W%%h//ND( 10A A A 	1x 	1!44S$4GGG000h000HH.AA#FFHHHr   c                     	 t                               | g|t          j        t          j                   n# t          $ r Y dS w xY w| S )z Checks if the given binary is installed somewhere in PATH, and returns its name.
    args can be a list of arguments for a short output (like -version) )r  rG  F)r  rH  rI  PIPEr   )exer   s     r   check_executabler  g  sS    		3,,zz	OOOO   uuJs   47 
AAc                     	 t                               t          |           g|dt          j        t          j        t          j                  \  }}}|s|rd S n# t          $ r Y dS w xY w|S )NT)r   stdinr  rG  F)r  rH  rQ  rI  r  STDOUTr   )r  r   ignore_return_coder  r   re  s         r   _get_exe_version_outputr  q  s    	 N3$7$7#?$#?d)3YcYj # l l3! 	c 	4   uuMs   AA 
A('A(presentc                     t          | t                    sJ |d}t          j        ||           }|r|                    d          S |S )Nzversion\s+([-0-9._a-zA-Z]+)r   )r   r   r   r  r
  )output
version_reunrecognizedr  s       r   detect_exe_versionr    sR    fc"""""3

	*f%%A wwqzzr   	--version)r  brokenc                     t          |          }t          |          dv sJ t          | |          }||d         S |ot          |||d                   S )z` Returns the version of the specified executable,
    or False if the executable is not present )r   r   Nrl  r   )r  r   r  r  )r  r   r  r  rj  s        r   get_exe_versionr    se     L))L|&&&&
!#t
,
,C
{BG%c:|AGGGr   c              #      K   |d| }} |rddg|dk             nd}|| z  ||z  k     r| V  | |z  } || z  ||z  k     dS dS )zFloat rangeNr   rl  r   r   )r  stopstepr  s       r   franger    sv      |t $+B74!8!D
,
$
$ ,
$
$
$
$
$
$r   c                       e Zd ZdZ G d de          ZddddZd Zd	 Zd
 Ze	d             Z
d Zd Zd Zd Zd Zd Zd ZdS )LazyListzbLazy immutable list from an iterable
    Note that slices of a LazyList are lists and not LazyListc                       e Zd ZdS )LazyList.IndexErrorNr   r   r   r   
IndexErrorr    r  r   r  FNreverserq  c                R    t          |          | _        |g n|| _        || _        d S r   )r  	_iterablerq  	_reversed)r   r  r  rq  s       r   r  zLazyList.__init__  s)    h"Nbb r   c              #      K   | j         r|                                 E d {V  d S | j        E d {V  | j        D ] }| j                            |           |V  !d S r   )r  exhaustrq  r  r   )r   items     r   r  zLazyList.__iter__  s      > 	||~~%%%%%%%F;N 	 	DKt$$$JJJJ	 	r   c                 \    | j                             | j                   g | _        | j         S r   )rq  extendr  r  s    r   _exhaustzLazyList._exhaust  s)    4>***{r   c                 N    |                                  dd| j        rdnd         S )zEvaluate the entire iterableNrl  r   )r  r  r  s    r   r  zLazyList.exhaust  s)    }}<<t~!<1<==r   c                     | d n|  S r   r   r   s    r   _reverse_indexzLazyList._reverse_index  s    yttqb(r   c                    t          |t                    rh| j        rIt          |                     |j                  |                     |j                  |j        pd           }|j        |j        |j        pd}}}nGt          |t                    r#| j        r|                     |          }||d}}}nt          d          |pddk     s|pddk     s||dk     s|P|dk    rJ| 	                                 	 | j
        |         S # t          $ r}|                     |          |d }~ww xY wt          |pd|pd          t          | j
                  z
  dz   }|dk    r2| j
                            t          j        | j        |                     	 | j
        |         S # t          $ r}|                     |          |d }~ww xY w)Nr   r   z"indices must be integers or slices)r   slicer  r  r  r  r  r  r  r  rq  r  rB  r   r  	itertoolsislicer  )r   idxr  r  r  r~  r   s          r   __getitem__zLazyList.__getitem__  s   c5!! 		B~ mD//	::D<O<OPSPX<Y<Y]`]e]jij[kll #	38SX]4EES!! 	B~ /))#.. #S!4EE@AAAZa1aMdQhhLTAXX MMOOO0{3'' 0 0 0ooa((a/0
DIA&&T[)9)99A=q55Ky/BBCCC	,;s## 	, 	, 	,//!$$!+	,s0   :D 
D,D''D,F! !
G+GGc                 Z    	 | j         r| d         n| d          n# | j        $ r Y dS w xY wdS )Nrl  r   FT)r  r  r  s    r   __bool__zLazyList.__bool__  sH    	3DHHDG 	 	 	55	ts    
((c                 R    |                                   t          | j                  S r   )r  r   rq  r  s    r   __len__zLazyList.__len__  s    4;r   c                 X     t          |           | j        | j         | j                  S Nr  r{  r  r  rq  r  s    r   __reversed__zLazyList.__reversed__  s(    tDzz$.dn2DT[YYYYr   c                 V     t          |           | j        | j        | j                  S r  r  r  s    r   __copy__zLazyList.__copy__  s%    tDzz$.$.UUUUr   c                 D    t          |                                           S r   reprr  r  s    r   rM  zLazyList.__repr__  s    DLLNN###r   c                 D    t          |                                           S r   r  r  s    r   rO  zLazyList.__str__  s    DLLNN###r   )r   r   r   r/  r  r  r  r  r  r  r  r  r  r  r  r  rM  rO  r   r   r   r  r    s!       A A    Z    -2$ ! ! ! ! !
    
> > > ) ) \), , ,:       Z Z ZV V V$ $ $$ $ $ $ $r   r  c                   X    e Zd Z G d de          Zd ZddZd Zdd	Zd
 Zd Z	d Z
dS )	PagedListc                       e Zd ZdS )PagedList.IndexErrorNr   r   r   r   r  r    r  r   r  c                 D    t          |                                           S r   )r   getslicer  s    r   r  zPagedList.__len__  s    4==??###r   Tc                 f    || _         || _        t          d          | _        || _        i | _        d S )Ninf)	_pagefunc	_pagesizer  
_pagecount
_use_cacherq  )r   pagefuncpagesize	use_caches       r   r  zPagedList.__init__	  s/    !!,,#r   c                     | j                             |          }|/|| j        k    rg n!t          |                     |                    }| j        r
|| j         |<   |S r   )rq  r  r  r  r  r  )r   pagenumpage_resultss      r   getpagezPagedList.getpage		  sa    {w//!(4?!:!:22T^^T[E\E\@]@]L? 	0#/DK r   r   Nc                 H    t          |                     ||                    S r   )r  	_getslicerC  s      r   r  zPagedList.getslice	  s    DNN5#..///r   c                      t          d          )Nz-This method must be implemented by subclasses)r  rC  s      r   r  zPagedList._getslice	  s    !"QRRRr   c                     | j         s
J d            t          |t                    r|dk     rt          d          |                     ||dz             }|s| j        |d         S )Nz!Indexing PagedList requires cacher   z%indices must be non-negative integersr   )r  r   r  r  r  r  )r   r  entriess      r   r  zPagedList.__getitem__	  st    CC CCCC#s## 	EsQwwCDDD--S1W-- 	"/!qzr   c                 H    t          |                     dd                    S Nr   r   )r  r  r  s    r   r  zPagedList.__bool__ 	  s    DMM!Q''(((r   Tr  )r   r   r   r  r  r  r  r  r  r  r  r   r   r   r  r    s            Z   $ $ $     0 0 0 0S S S  ) ) ) ) )r   r  c                       e Zd ZdZd ZdS )OnDemandPagedListz:Download pages until a page with less than maximum resultsc              #     K   t          j        || j        z            D ]}|| j        z  }|| j        z  | j        z   }||k    r%||cxk    r|k     rn n
|| j        z  nd}| ||cxk    r|k    rn n|dz
  | j        z  dz   nd }	 |                     |          }n# t          $ r |dz
  | _         w xY w|dk    s|
|||         }|E d {V  t          |          |z   | j        k     r d S ||k    r d S d S r  )r  countr  r  rg   r  r   )	r   r  rA  r  firstidnextfirstidstartvendvr  s	            r   r  zOnDemandPagedList._getslice'	  s      u'>?? "	 "	G.G!DN2T^CK## e1111k11111 &&  O3(E(E(E(E+(E(E(E(E(E 'T^+q00 
#||G44   ")A+ {{d.+F4K8######## <  6)DN:: k!! "C"	 "	s   BB1N)r   r   r   r/  r  r   r   r   r  r  $	  s)        DD# # # # #r   r  c                       e Zd ZdZd Zd ZdS )InAdvancePagedListz5PagedList with total number of pages known in advancec                 N    t                               | ||d           || _        d S NT)r  r  r  )r   r  	pagecountr   s       r   r  zInAdvancePagedList.__init__P	  s'    48T:::#r   c              #     K   || j         z  }|| j        nt          | j        || j         z  dz             }||| j         z  z
  }|d n||z
  }t          ||          D ]h}|                     |          }|r||d          }d }|9t          |          |k     r|t          |          z  }n|d |         E d {V   d S |E d {V  id S rS  )r  r  r.  rv  r  r   )	r   r  rA  
start_pageend_page
skip_elems	only_morer  r  s	            r   r  zInAdvancePagedList._getsliceT	  s     dn,
&)k4??s4?CSWSaLadeLe7f7fZ$.88
KDDS5[	Z22 	$ 	$G<<00L "+JKK8!
$|$$y00\!2!22II+JYJ77777777EE#########	$ 	$r   N)r   r   r   r/  r  r  r   r   r   r  r  M	  s8        ??$ $ $$ $ $ $ $r   r  c                       e Zd Z e            ZdZd Z ej        d          Z	e
d             Zd Zd Zej        d             Zd Zd	 Z G d
 de          ZdS )PlaylistEntriesFc                    || _         |                    d          }|t          d          t          |t                    rd| _        |                    d          }|d u| _        | j        rN| j        sJ | j        gt          |pdg          z  | _	        t          ||          D ]\  }}|| j	        |dz
  <   d S t          |t          t          t          f          r	|| _	        d S t          |          | _	        d S )Nr
  zThere are no entriesTrequested_entriesr   r   )ydlr  r  r   r  is_exhaustedis_incompleteMissingEntryrB  _entrieszipr  r  )r   r$  	info_dictr
  r#  r  entrys          r   r  zPlaylistEntries.__init__k	  s    --	**?$%;<<<&& 	% $D%MM*=>>.d: 	.$$$$!./#6G6NA32O2OODM 17;; - -5',a!e$$- -$	8!<== 	.#DMMM$W--DMMMr   z(?x)
        (?P<start>[+-]?\d+)?
        (?P<range>[:-]
            (?P<end>[+-]?\d+|inf(?:inite)?)?
            (?::(?P<step>[+-]?\d+))?
        )?c              #     K   |                     d          D ]}|st          d          | j                            |          }|st          |d          |                    dddd          \  }}}}t          |          dk    rt          d	|d
          |r8t          t          |          t          |          t          |                    nt          |          V  d S )Nrk  z'There is two or more consecutive commasz is not a valid specificationr  rA  r  rv  r   zStep in z cannot be zero)	r   r4  PLAYLIST_ITEMS_REr*  r
  r  r  r  r  )rE  stringsegmentr   r  rA  r  	has_ranges           r   parse_playlist_itemsz$PlaylistEntries.parse_playlist_items	  s     ||C(( 		p 		pG L !JKKK(227;;D N G!L!L!LMMM*.**WeVW*U*U'E3i4  A%% !FG!F!F!FGGGV_o%E**M#,>,>D@Q@QRRRehineoeooooo		p 		pr   c              #   :  K   | j         j                            d          }| j         j                            dd          }| j         j                            d          }|dv rd}|s| d| }n$|dk    s|r| j                             dd	
           |                     |          D ]p}| |         D ]e\  }}||fV  |s	 | j         j                            d          s| j                             |d	d	           L# t          t          f$ r Y   d S w xY wqd S )Nplaylist_itemsplayliststartr   playlistend)rl  Nr  r   zFIgnoring playliststart and playlistend because playlistitems was givenT)	only_oncelazy_playlist)
incompletesilent)r$  paramsr  report_warningr1  _match_entryr  r  )r   r3  playlist_startplaylist_endr3  r  r+  s          r   get_requested_itemsz#PlaylistEntries.get_requested_items	  sn     ,,-=>>,,_a@@x**=99:%%L 	~ .????NNq  L H##$lx|#}}}..~>> 	 	E K 
 
5h 8?..?? S--eT-RRR,.BC   FFFF
	 	s   <D  DDc                     | j         r| j        st          |           S t          | j        t
                    r| j        j        dk    r| j        j        S d S d S rS  )r%  r&  r   r   r(  r  r  r  r  s    r   get_full_countzPlaylistEntries.get_full_count	  sc     	0T%7 	0t99'9:: 	0}&!++}//	0 	0++r   c                 R     t           j        t                    r fd}n fd}|S )Nc                     	 j         |          }n%# t          $ r j        }j        sj        Y nw xY w|j        u rt	          d| dz    d          |S )NzEntry r   z cannot be found)r(  r  r'  r&  r  )r  r+  r   s     r   	get_entryz*PlaylistEntries._getter.<locals>.get_entry	  s    . M!,EE! . . . -E- ."o-. .. D---,-Ma!e-M-M-MNNNs    33c                     	  t          j                                      fd          j        |           S # t          j        t
          j        f$ r j        w xY w)Nc                     j         |         S r   )r(  )r   r  r   s     r   r  z<PlaylistEntries._getter.<locals>.get_entry.<locals>.<lambda>	  s    UYUbcdUe r   )r{  r$  _handle_extraction_exceptionsr  r  r  )r  r   s    r   rD  z*PlaylistEntries._getter.<locals>.get_entry	  sm    *f4>>GGHeHeHeHeffgkgoqrsss +Y-AB * * */)*s	   8< #A)r   r(  r  )r   rD  s   ` r   _getterzPlaylistEntries._getter	  sV    dmT** 	*	 	 	 	 	 	* * * * *
 r   c              #     K   t          |t                    rt          ||          }|j        dn|j        }|j        |dk    rdnt          |           dz
  }n,|j        dk    r
|j        dz
  nt          |           |j        z   }|j        |dk     rdnt          d          }n,|j        dk    r
|j        dz
  nt          |           |j        z   }|ddg|dk             z  }t          |||          D ]J}|dk     r		 | 	                    |          }n!# | j
        $ r d| _        |dk    rY  d S Y =w xY w|dz   |fV  Kd S )Nr   r   r  rl  T)r   r  r  r  r  r   r  r  r  rH  r  r%  )r   r  r  r  r  r  r+  s          r   r  zPlaylistEntries.__getitem__	  s     c3 	"S//C H$qq#(9AAs4yy1}EE%(Y!^^CIMMTSY9NE 8q11eEllDD#&8q==38a<<c$ii#(6JDQq!!tT** 
	 
	A1uuQ?   $(!!88EEE	
 a%,
	 
	s   =DD10D1c                 J    t          t          | d d                              S r   )r   tupler  s    r   r  zPlaylistEntries.__len__	  s    5aaa>>"""r   c                       e Zd ZdS )PlaylistEntries.IndexErrorNr   r   r   r   r  rM  	  r  r   r  N)r   r   r   objectr'  r%  r  r   compiler-  rM  r1  r?  rA  r   cached_propertyrH  r  r  r  r   r   r   r!  r!  g	  s        688LL. . ., #
 $   
p 
p [
p  20 0 0   (  <# # #    Z     r   r!  c                 ^    t          j        d          t          j        dfd|           S )Nunicode_escapez\\U[0-9a-fA-F]{8}c                 L     |                      d                    d         S r   r
  r  rR  s    r   r  z"uppercase_escape.<locals>.<lambda>	       ..,,Q/ r   codecs
getdecoderr   r  r|  rR  s    @r   uppercase_escaper[  	  :    &'788N6////	  r   c                 ^    t          j        d          t          j        dfd|           S )NrR  z\\u[0-9a-fA-F]{4}c                 L     |                      d                    d         S r   rT  rU  s    r   r  z"lowercase_escape.<locals>.<lambda>	  rV  r   rW  rZ  s    @r   lowercase_escaper_  	  r\  r   c                 t    t          j        j        t           j                            |           j        fi |S r   )r  r  r  r  query)r  r   s     r   r  r  	  s0    < !6!6s!;!;!ALLVLLLr   c                     d }t          j        |           5 }d t          ||          D             cd d d            S # 1 swxY w Y   d S )Nc                 v   t          | t                    s|                     dd          } d}|D ].}|                     |          r| t	          |          d          } /|                                 } | r|                     d          rdS t          j        d| d          d	                                         S )
Nrl   r  )u   ï»¿u   ﻿)r  r  r   Fz\s#r   )maxsplitr   )	r   r   ry  rp  r   rx  r   r   rk  )r  BOM_UTF8boms      r   r  zread_batch_urls.<locals>.fixup
  s    #s## 	1**Wi00C- 	% 	%C~~c"" %#c(())njjll 	cnn_55 	5 xa0003::<<<r   c                     g | ]}||S r   r   )r   r  s     r   r   z#read_batch_urls.<locals>.<listcomp>
  s    5555555r   )r   closingr  )batch_fdr  fds      r   read_batch_urlsrk  
  s    = = = 
	H	%	% 655s5"~~5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   ?AAc                  T    t          j        j        | i |                    d          S rO  )r  r  r  rf   )r   r   s     r   urlencode_postdatarm  
  s(    <!4151188AAAr   query_updatec                |   t          | t                    r%|s|s| S t          j                            |           } |rWd|vs
J d            t          j                            i t          j                            | j                  |d          |d<   t          j                             | j	        di |          S )zReplace URL components specified by kwargs
       @param url           str or parse url tuple
       @param query_update  update query
       @returns             str
    ra  z;query_update and query cannot be specified at the same timeTr   )
r   r   r  r  r  r  r  ra  
urlunparser  )r  ro  r   s      r   
update_urlrr  
  s     #s - 	-l 	-J,'',,C f$$$&c$$$ ,00 2
l##CI..2
2
  w <""<3<#9#9&#9#9:::r   c                 $    t          | |          S )Nrn  )rr  )r  ra  s     r   update_url_queryrt  /
  s    c....r   c                    d| }d}|                                  D ]\  }}|d|                    d          z   dz   z  }t          |t                    r|                                }t          |t                    r|                                }d|z   dz   |z   dz   }|                    d          |v rt	          d          ||z  }|d|                    d          z   d	z   z  }||fS )
Nzmultipart/form-data; boundary=r   s   --rP  s   
s&   Content-Disposition: form-data; name="s   "

zBoundary overlaps with datas   --
)rN  rf   r   r   r4  )r  boundarycontent_typerj  r  r  r   s          r   _multipart_encode_implrx  4
  s   >H>>L
C

  1uxw///'99a 	

Aa 	

A <a?,NQRRU\\??7##w..:;;;w58??7+++i77Cr   c                     |du}	 |%dt          t          j        dd                    z   }	 t          | |          \  }}n# t          $ r |r d}Y nw xY wR||fS )aR  
    Encode a dict to RFC 7578-compliant form-data

    data:
        A dict where keys and values can be either Unicode or bytes-like
        objects.
    boundary:
        If specified a Unicode object, it's used as the boundary. Otherwise
        a random boundary is generated.

    Reference: https://tools.ietf.org/html/rfc7578
    NTz---------------ir  )r   random	randrangerx  r4  )r  rv  has_specified_boundaryrj  rw  s        r   multipart_encoder}  J
  s     &T1
(3v/?
J/W/W+X+XXH	 6tX F FC 	 	 	% HHH	
 s   A AAc                     |t           u rt          t          t          j        j        f}t          | |          ot          | |           S r   )r   r   r  r  abcMappingr   )r   allowed_typesblocked_typess      r   is_iterable_liker  h
  s@    
""e[_%<=a''L
1m0L0L,LLr   c                     t          |t          t          f          st          d           t          |          }t	          | |          r| n| fS )Nz)allowed_types should be a tuple or a type)r  )r   rK  r{  rp  r  )r   r  s     r   r  r  n
  sR    meT]33 -GHHHm,, -@@@K11qeKr   )expected_typer   r   c           	          |D ]P}	  ||i |}| t          ||           r|c S "# t          t          t          t          t
          t          f$ r Y Mw xY wd S r   )r   ru  KeyErrorr  r  r4  ZeroDivisionError)r  r   r   funcsr  r   s         r   try_callr  u
  s      	!T$V$$C $
3(F(F$


 % )ZM^_ 	 	 	D	 s   %)AAc                 8    t          t          |          | f|dS )N)r   r  )r  r  )srcgetterr  s      r   try_getr  
  s!    Xf%%SF-PPPPr   c                 
    |d uS r   r   )r   r  s     r   r  r  
  s
    q} r   c                 D    fd|                                  D             S )Nc                 4    i | ]\  }} ||          ||S r   r   )r   r  r  cndns      r   r  zfilter_dict.<locals>.<dictcomp>
  s.    777TQDDAJJ7Aq777r   )rN  )dctr  s    `r   filter_dictr  
  s%    7777SYY[[7777r   c                      i }| D ]H}|                                 D ]1\  }}|||vs!t          |t                    r||         dk    r|||<   2I|S Nr  )rN  r   r   )dictsmergeda_dictr  r  s        r   merge_dictsr  
  ss    F  LLNN 	 	DAq1F??"1c** $3/5ayBq		 Mr   r_   c                 R    t          | t                    r| nt          | ||          S r   )r   r   )r.  rr   r!  s      r   encode_compat_strr  
  s'    ,,O66#fh2O2OOr   ru     r     )GPGzPG-13RNCr        )zTV-YzTV-Y7zTV-GzTV-PGzTV-14zTV-MAc                 ,   t          |           t          u rd| cxk    rdk    rn n| nd S t          | t                    sd S t	          j        d|           }|r"t          |                    d                    S |                                 } | t          v rt          |          S t	          j        d	                    d
                    d t          D                                 |           }|r#t          d|                    d	          z            S d S )
Nr      z^(?P<age>\d{1,2})\+?$agez^TV[_-]?({})$r  c              3   *   K   | ]}|d d         V  dS )r  Nr   )r   r  s     r   r  z"parse_age_limit.<locals>.<genexpr>
  s*      1X1XA!ABB%1X1X1X1X1X1Xr   zTV-r   )r{  r  r   r   r   r   r
  r  
US_RATINGSr  r   TV_PARENTAL_GUIDELINES)r|  r  s     r   parse_age_limitr  
  s    Aww#~~LLLLbLLLLLqqd*3 t
)1--A #1775>>"""			AJ!}
!((1X1XAW1X1X1X)X)XYY[\]]A :%eaggajj&8994r   c                 .    t          j        dd|           S )Nz(?sx)^
            (?:window\.)?(?P<func_name>[a-zA-Z0-9_.$]*)
            (?:\s*&&\s*(?P=func_name))?
            \s*\(\s*(?P<callback_data>.*)\);?
            \s*?(?://[^\n]*)*$z\g<callback_data>rk  )r  s    r   strip_jsonpr  
  s"    6	"
 	d$ $ $r   c                  	
 d	d                     d 	D                       }d}d| d}d| dd	fd
| ddffd 
fd	
fd}fd}t          j        dd|           } t          j        d||           } s]t          j        d| dd|           } t          j        dd |           } t          j        dd|           } t          j        dd|           } t          j        d| d| d| d| d| d ||           S )!Nz'"`r  c              3   *   K   | ]}| d | d| V  dS )z(?:\\.|[^\\z])*Nr   )r   qs     r   r  zjs_to_json.<locals>.<genexpr>
  s8      LLQ4414444LLLLLLr   z/\*(?:(?!\*/).)*?\*/|//[^\n]*\nz\s*(?:z)?\s*z(?s)^(0[xX][0-9a-fA-F]+)z:?$r  z(?s)^(0+[0-7]+)   c                     d}|                      d          p|                      d          }||v rd| n|dk    rdn	|dk    rdn|S )	Nz"\bfnrtur   r   r  r   z\u00r]  r  rT  )r   JSON_PASSTHROUGH_ESCAPESr   s      r   process_escapez"js_to_json.<locals>.process_escape
  s^    #. Q15;;q>>!'+C!C!CV &#WW!T>>RR	r   c                     t          |                     d                    }|d         dk    rJt          j        t          j                  5  t	          j        |          cd d d            S # 1 swxY w Y   |S )Nr   r^   r   r  )
js_to_jsonr
  r   r   r|   rz  r  )r   	evaluatedr_   varss     r   template_substitutez'js_to_json.<locals>.template_substitute
  s    u{{1~~tFCCC	Q<3$T%9:: - -z),,- - - - - - - - - - - - - - - -s   A22A69A6c                    |                      d          }|dv r|S |dv rdS |                    d          s|dk    rdS |d         v rP|d         dk    rt          j        d	|d
d                   n	|d
d         }t          j        d	|          }d| dS D ]k\  }}t          j        ||          }|rOt          |                     d
          |          }|                    d          rd| dnt          |          c S l|v rT	 
st          j	        |                    |         S # t          j
        $ r t          j        |                   cY S w xY w
sd| dS t          d|           )Nr   )truefalsenull)	undefinedzvoid 0r  )z/*r  ri  rk  r  `z(?s)\${([^}]+)}r   rl  z(?s)(")|\\(.)r  r   z":zUnknown value: )r
  rp  r   r  r   r  rq  r   r|   r  rz  r  r4  )r  r  escapedregexr  imr  INTEGER_TABLESTRING_QUOTESr  r_   r  r  s          r   fix_kvzjs_to_json.<locals>.fix_kv
  s   GGAJJ)))H)))6\\+,, 	S2Q4=  LMaDTWKK)+>!B$HHH]^_`ac_c]dAf-~qAAG!w>>>!( 	@ 	@KE4%##B @T**$%JJsOO?y1yyyyQ???@ 99 (JtAw''' Aw ' + + +z$q'*****+
  	q888O.1..///s   D1 1)EEc                     t          j        t          t          j        t	          |                     d          pd                                        S )Nr   z[])r  )r|   r  rI  r  r  r
  )r   r  s    r   
create_mapzjs_to_json.<locals>.create_map  sB    z$tz*TZZ]]5JdQU*V*V*VWWXXYYYr   z(?:new\s+)?Array\((.*?)\)z[\g<1>]znew Map\((\[.*?\])?\)znew Date\((z)\)r  znew \w+\((.*?)\)c                 P    t          j        |                     d                    S r   )r|   r  r
  r  s    r   r  zjs_to_json.<locals>.<lambda>	  s    TZ

5K5K r   zparseInt\([^\d]+(\d+)[^\d]+\)r  zB\(function\([^)]*\)\s*\{[^}]*\}\s*\)\s*\(\s*(["\'][^)]*["\'])\s*\)z(?sx)
        z
|
        z|,(?=z~[\]}])|
        void\s0|(?:(?<![0-9])[eE]|[a-df-zA-DF-Z_$])[.a-zA-Z_$0-9]*|
        \b(?:0[xX][0-9a-fA-F]+|(?<!\.)0+[0-7]+)(?:z:)?|
        [0-9]+(?=z:)|
        !+
        )r   r   r  )r  r  r_   	STRING_RE
COMMENT_RESKIP_REr  r  r  r  r  r  s    ``     @@@@r   r  r  
  s   MLLmLLLLLI3J)
)))G	1W	1	1	126	(G	(	(	(!,M
        0  0  0  0  0  0  0  0  0  0DZ Z Z Z Z 6.
DAAD6*J==D jv3Y333XtDDv)+K+KTRRv6tDDv[]bdhii6 	 	 !  4;	 
    T  r   c                       fd}|S )z> Get a numeric quality value out of a list of possible values c                 R    	                      |           S # t          $ r Y dS w xY w)Nrl  r2  )qidquality_idss    r   r  zqualities.<locals>.q  s>    	$$S))) 	 	 	22	s    
&&r   )r  r  s   ` r   	qualitiesr    s#        
 Hr   )pre_processafter_filtervideo	before_dlpost_process
after_moveafter_videoplaylistz%(title)s [%(id)s].%(ext)szC%(title)s - %(section_number)03d %(section_title)s [%(id)s].%(ext)s)r   chapterdescriptionzannotations.xmlz	info.json)r  subtitle	thumbnailr  
annotationinfojsonlinkpl_videopl_thumbnailpl_descriptionpl_infojsona  (?x)
    (?<!%)(?P<prefix>(?:%%)*)
    %
    (?P<has_key>\((?P<key>{0})\))?
    (?P<format>
        (?P<conversion>[#0\-+ ]+)?
        (?P<min_width>\d+)?
        (?P<precision>\.\d+)?
        (?P<len_mod>[hlL])?  # unused in python
        {1}  # conversion type
    )
diouxXeEfFgGcrsac                 r    | dS d}t          |           |k    r| d|t          |          z
           |z   S | S )z% Add ellipses to overly long strings N...r  )r|  lengthELLIPSESs      r   limit_lengthr  J  sF    ytH
1vv(&3x==(()H44Hr   c                    |rt          d          nt          t          fdt          j        d|           D                       S )Nrl  r  c              3   .   K   | ]} |          V  d S r   r   )r   r~  r  s     r   r  z version_tuple.<locals>.<genexpr>V  s+      88aq888888r   z[-.])r  r  rK  r   r   )r  rW  r  s     @r   ra  ra  T  sL    '.7K####CE888828GQ#7#7888888r   c                 t    | s| S 	 t          |           t          |          k     S # t          $ r | cY S w xY wr   )ra  r4  )versionlimit
assume_news      r   is_outdated_versionr  Y  s[     ~W%%e(<(<<<   ~s   ' 77c                  $    ddl m}   |              S )z* Returns if yt-dlp can be updated with -U r   is_non_updateable)rj  r  r  s    r   ytdl_is_updateabler  b  s(     +*****  """"r   c                      t          |           S r   )r-  )r   s    r   args_to_strr  j  s    tr   c                 4    t          |           j         d|  S r  )r{  r   )rr  s    r   error_to_strr  o  s    3ii ))C)))r   c                    t          | t                    s|t          ur|S d S i ddddddddddd	d
ddddddddddddddddddddddi dddd d!d"d#d"d$dd%d&d'dd(d)d*d+d,dd-d.d/d0d1d2d3d3d4d5d6d6d7d7i d8d7d9d2d:d3d;d)d<d=d>d7d?d?d@d@dAdAdBdCdDdDdEdFdGdHdIdJdKdKdLdMdNdOd@dPdQdRdSdTdUdUdVdWdXdYdZ}|                     d[          d\                                                                         }|                    d]          \  }}}t          j        ||||	                    d^          d_                   }|r|S |t          ur|S |
                    d^d`          S )aN3gpp3gpmp2ttsmp4mpegmpegurlm3u8	quicktimemovwebmvp9z	video/oggogvzx-flvflvzx-m4vm4vz
x-matroskamkvzx-mngmngzx-mp4-fragmentedzx-ms-asfasfzx-ms-wmvwmvz	x-msvideoavizvnd.dlna.mpeg-ttszdash+xmlmpdzf4m+xmlf4mzhds+xmlzvnd.apple.mpegurlzvnd.ms-sstr+xmlismz	x-mpegurlz	audio/mp4m4az
audio/mpegmp3z
audio/webmzaudio/x-matroskamkazaudio/x-mpegurlm3uaacpaacflacmidimidoggwavwavezx-aaczx-flaczx-m4azx-realaudiorazx-wavavifbmpgifjpegjpgpngzsvg+xmlsvgtifftifzvnd.wap.wbmpwbmpwebpzx-iconicozx-jngjngfsttdfxpttmlsamisrtgzr|   xmlr)  )zx-ms-bmpzfilmstrip+jsonzsmptett+xmlzttaf+xmlzttml+xmlz	x-ms-samizx-subripzx-srtgzipr|   r2  r)  r  r   r   r  rl  r   )r   r   r   r  r^  r,  r  r   traverse_objrsplitr  )mtr   MAPmimetyper   subtyper  s          r   mimetype2extr:  s  s   b# *$$NtMM 	M 	u	M
 	M 	6M 	UM 	M 	uM 	UM 	M 	M 	eM 	M 	EM  	E!M" 	E#M$ 	U%M M& 	V'M, 	E-M. 	5/M0 	51M2 	V3M4 	55M6 	V7M< 	U=MB 	eCMD 	fEMF 	EGMH 	5IMJ 	KML 	MMN 	OMP 	uQMR 	uSM M MT 	UMV 	WMX 	&YMZ 	[M\ 	t]M^ 	_Md 	eMf 	ugMh 	uiMj 	kMl 	umMn 	5oMp 	qMr 	sMt 	uMv 	%wMx 	yM Mz   YM M MC^ ||C  #))++1133H'',,MAq'

 h9L9LR9P
Q
QC
 
	
	"	"??3$$$r   c                 P    | sd S d| vrd|  } t          j        |           d         S )Nr   zfile.r   )	mimetypes
guess_type)
ext_or_urls    r   ext2mimetyper?    s=     t
*)Z))

++A..r   c                    | si S t          t          d t          t          j        |                                                     d                              d                                        }d\  }}}}|D ]}t          j        dd |          }t          j        dd|                              d          }|d         d	v rM|rO|}|d         d
v rd}^|d         dk    rt          j	        |d          dk    rd}|d d         ddgk    rd}|d         dv r|p|}|d         dv r|p|}t          d| d           |s|s|r|pd|pd|d|d|ini S t          |          dk    r|d         |d         dS i S )Nrk  )NNNNz^([^.]+)c                 P    |                      d                                          S rS  )r
  r,  r  s    r   r  zparse_codecs.<locals>.<lambda>  s    1771::3C3C3E3E r   z0+(?=\d)r  r   r   )avc1avc2avc3avc4r  vp8hev1hev2h263h264mp4vhvc1av1theoradvh1dvhe)rO  rP  DVrM  r  10HDR10r   r  2)r  mp4aopusvorbisr  r  ac-4zac-3ec-3eac3dtscdtsedtshdtsl)stppwvttzWARNING: Unknown codec r]  none)vcodecacodecdynamic_rangescodecr   rb  rc  )r  filterr  r   r^  r   r   r  r   r4  rl  r   )
codecs_strsplit_codecsrb  rc  re  hdr
full_codecr  s           r   parse_codecsrl    s0    	tS	:##%%++C0066s;;&= &= > > ? ?L"8FFFC" C C
VK)E)EzRR
{B
3399#>>8 Y Y Y FQx+++qU""y'=eQ'G'G4'O'Orrucl**1X R R R)zFF1X))))zFFA:AAABBBB 
 
6 
&& 
 
 &,%7&!!R	
 	
 
\		a		"1o"1o
 
 	
 Ir   )preferencesc                    t          |           t          |          k    r t          |          t          |          k    sJ | pd|v }|r0t          t          |          t          |                     dk    rdS h dh dd}t          j        t          d           } ||            ||          }	}|p|                                D ]E}
|                    |
t                                }|
dk    s|                    ||	f          r|
c S Fh dd	d
hf}|p|D ]5}
|
h|||
dk    s"|
hk    st          fd|D                       r|
c S 6|rdn|d         S )Nr	  r   >   rM  aaclrB  rJ  hevcrU  rX  rY  >   rM  rF  r  rV  vp8xvp9xvrbs)r  r  c                     | d                              d          d                             dd                                          S )Nr   r   r  r  )r   r  r,  r   s    r   r  z$get_compatible_ext.<locals>.<lambda>  s5    !A$**S//!"4"<"<S""E"E"K"K"M"M r   )r  >
   r  m4bm4pm4rr  r  r  r  ismaismvr  webac              3   B   K   | ]}|                               V  d S r   )
issuperset)r   ext_setscurrent_extss     r   r  z%get_compatible_ext.<locals>.<genexpr>*  sJ       8S 8S6>##L118S 8S 8S 8S 8S 8Sr   rl  )
r   rB  r   r   r  keysr  r   r|  r  )vcodecsacodecsvextsaextsrm  	allow_mkvCOMPATIBLE_CODECSsanitize_codecrb  rc  r  	codec_setCOMPATIBLE_EXTSr~  s                @r   get_compatible_extr    s   w<<3u::%%#g,,#e***D*D*D*D75K#7I SWs7||44q88u
 
 

 
 
	 	 &MMO O ON#^G,,nnW.E.EFF6/4466  %))#suu55	%<<9//0@AA<JJJ  	QPP	O #e  ,e,e,%<<<C500C 8S 8S 8S 8SBQ8S 8S 8S 5S 5S0JJJ 1 255;r?2r   c                 0   | j         j        } |d          x}r?t          j        d|          x}r(t	          |                    d          d           x}r|S t	           |d          d           p$ |d          pt           |d          |          S )	NzContent-Dispositionz,attachment;\s*filename="(?P<filename>[^"]+)"r  )r	  zx-amz-meta-namezx-amz-meta-file-typezContent-Typer  )headersr  r   r   r  r
  r:  )
url_handler   	getheadercdr  r  s         r   urlhandle_detect_extr  0  s    "&IY,---r H"MMM1 	#AGGJ$7$7TJJJJs 
 	ii 122EEE 	D9+,,	D		.117CCCEr   c                 x    d                     |t          j        |                               d                    S )Nzdata:{};base64,{}rP  )r  r  r  ry  )r  	mime_types     r   encode_data_urir  >  s1    %%i1A$1G1G1N1Nw1W1WXXXr   c                     |dS | dS || k     S )z0 Returns True iff the content should be blocked NFr   )content_limit	age_limits     r   age_restrictedr  B  s%     uu}$$r   ))s   ﻿rl   )s     z	utf-32-be)s     z	utf-32-le)s   z	utf-16-le)s   z	utf-16-bec                     d}t           D ]H\  }}|                     |          r.|| t          |          d         } }|                     |          .It          j        d|                     |d                    S )zC Detect whether a file contains HTML by examining its first bytes. rl   Nz\s*<r  )BOMSrp  r   r   r   ry  )first_bytesrr   rf  rk  s       r   is_htmlr  V  s     H @ @S$$S)) 	@$'SXXYY)?kH $$S)) 	@ 8G[//)DDEEEr   c                    |                      d          }||S t          | d                   }|                    d          rdS |                    d          rdS |                    d          rdS t          |          }|dk    r|                      d          rdndS |d	k    rd	S t          j                            |          j        S )
Nprotocolr  rtmpmmsrtspr  is_livem3u8_nativer  )r  r  rp  r  r  r  r  r  )r*  r  r  r  s       r   determine_protocolr  a  s    }}Z((H
y'
(
(C
~~f v			 u			 v


C
f}}"y11Dvv}D	u<  %%,,r   c           
      t  
 d fd}d 
|r ||          ng  
|           } 
fd|D             }| g|} ||          dz  rC| fdD             g|}|d         d         d t                    z           |d         d<   |D ]}t          t          t          |                    D ]^\  }}	d	|	v r5|	                    d	d
|          |	          z
  z            d
z  z   ||<   >|	d
|          |	          z
  z   z  z   ||<   _d                    d |D                       S )z[ Render a list of rows, each as a list of values.
    Text after a 	 will be right aligned c                 b    t          t          |                               dd                    S )N	r  )r   remove_terminal_sequencesr  r.  s    r   r[  zrender_table.<locals>.widthz  s)    ,V44<<T2FFGGGr   c                 4    fdt          | ddiD             S )Nc                 F    g | ]}t          fd |D                       S )c              3   H   K   | ]} t          |                    V  d S r   r  )r   r  r[  s     r   r  z@render_table.<locals>.get_max_lens.<locals>.<listcomp>.<genexpr>~  s1      //aEE#a&&MM//////r   rB  )r   colr[  s     r   r   z6render_table.<locals>.get_max_lens.<locals>.<listcomp>~  s6    TTTC////3/////TTTr   r_   T)r)  )tabler[  s    r   get_max_lensz"render_table.<locals>.get_max_lens}  s*    TTTT3;Sd;S;STTTTr   c                 D    d t          j        || d          D             S )Nc                     g | ]	\  }}||
S r   r   )r   taker  s      r   r   z;render_table.<locals>.filter_using_list.<locals>.<listcomp>  s"    fff	caeffffr   T)	fillvalue)r  zip_longest)rowfilter_arrays     r   filter_using_listz'render_table.<locals>.filter_using_list  s)    ffY%:<X\%]%]%]ffffr   c                 (    g | ]} |          S r   r   )r   r  r  max_lenss     r   r   z render_table.<locals>.<listcomp>  s'    ===c8,,===r   r   c                      g | ]
}|z   z  S r   r   )r   mlrc  	extra_gaps     r   r   z render_table.<locals>.<listcomp>  s"    JJJ2erI~6JJJr   rl  Nr  r\  r]  c              3   d   K   | ]+}d                      |                                          V  ,dS )r  N)r   rk  )r   r  s     r   r  zrender_table.<locals>.<genexpr>  s8      <<sRWWS\\((**<<<<<<r   )r   r  r  r   r  r   )
header_rowr  rc  r  
hide_emptyr  r  r  rn  r   r  r  r[  s     ``      @@@r   render_tabler  w  s   H H HU U U U Ug g g &07||D!!!RH"":x88J========D$E|E""HNI >JJJJJJJJRTRQx|$<iZ#e**%<$<=a R R"3sC==11 	R 	RICt||<<cXc]UU4[[5P.QRRUX[dUddC##t)Dy)P"QQC		R
 99<<e<<<<<<r   c                 
   t           j        d d d d}i |t           j        t           j        t           j        t           j        t           j        d}t          t                    rfd}nfd}t          j
        d                    d	                    t          t          j        |                                                                        }|                    |                                           }|rl|                                }||d
                  |d         rfd}n}|d         p|d         }	|d         r5|	                    d                    |d                   |d                   }	|                    |d                   }
d }t          |
t*          t,          f          rU	 t+          |	          }nD# t.          $ r7 t1          |	          }|t1          |	 d          }|t3          |	          }Y nw xY w|2|d
         |v r(t/          d                    |d
                             |
 ||d                   p|d         S  ||
||	n|          S d d d}t          j
        d                    d	                    t          t          j        |                                                                        }|                    |                                           }|rp||                    d
                   }|                    |                    d                    }
 ||                    d                    r|
dS  ||
          S t/          d|           )Nc                 ,    |                      |          S r   rp  r  r   s     r   r  z_match_one.<locals>.<lambda>  s    $//%"8"8 r   c                 ,    |                      |          S r   )rq  r  s     r   r  z_match_one.<locals>.<lambda>  s    $--"6"6 r   c                 ,    t          j        ||           S r   )r   r  r  s     r   r  z_match_one.<locals>.<lambda>  s    ")E4"8"8 r   )z*=z^=z$=z~=)z<=r;  z>=r:  r&  c                     S r   r   )r   r8  s    r   r  z_match_one.<locals>.<lambda>  s    * r   c                     | v S r   r   )r  r8  s    r   r  z_match_one.<locals>.<lambda>  s    !z/ r   z(?x)
        (?P<key>[a-z_]+)
        \s*(?P<negation>!\s*)?(?P<op>{})(?P<none_inclusive>\s*\?)?\s*
        (?:
            (?P<quote>["\'])(?P<quotedstrval>.+?)(?P=quote)|
            (?P<strval>.+?)
        )
        r  opnegationc                      | |           S r   r   )r  r   unnegated_ops     r   r  z_match_one.<locals>.<lambda>  s    dE)B)B%B r   quotedstrvalstrvalr  z\{}r   r  z(Operator {} only supports string values!none_inclusivec                 <    t          | t                    r| du n| d uS r  r  r  s    r   r  z_match_one.<locals>.<lambda>  s!    Z4%8%8MqDyyq} r   c                 <    t          | t                    r| du n| d u S r  r  r  s    r   r  z_match_one.<locals>.<lambda>  s!    z!T':':KU

d r   )r  ri  z3(?x)
        (?P<op>{})\s*(?P<key>[a-z_]+)
        TzInvalid filter part )r  containsleltgegteqr   r  r   rO  r  r   r  r   r  r*  r^  	groupdictr  r  r  r  r4  rO  r  r
  )filter_partr  r8  STRING_OPERATORSCOMPARISON_OPERATORSr&  operator_rexr  r  comparison_valueactual_valuenumeric_comparisonUNARY_OPERATORSr  s     `          @r   
_match_oner    s    886688	 
k[k[[   *d## 2,,,,1111:  F388C	+?+D+D+F+FGGHHIIK KL 	{002233A hKKMM+AdG4Z= 	BBBBBBB^,;(W: 	_/77aj8Q8QSTU\S]^^wwqx((!lS%L11 	J
J%()9%:%:"" J J J%34D%E%E"%-)7;K8N8N8N)O)O&%-)78H)I)I&J )ag9I.I.IGNNqQUwWWXXX =5**Aa0@.AAr,4F4N 0 0Tfggg NMKK O : F388C	?+?+?+A+ABBCCDDF FL 	{002233A  QWWT]]+wwqwwu~~..=(( 	\-A4r,
;K;;
<
<<s   <G >HHc                 d    t          fdt          j        d|           D                       S )aa   Filter a dictionary with a simple string syntax.
    @returns           Whether the filter passes
    @param incomplete  Set of keys that is expected to be missing from dct.
                       Can be True/False to indicate all/none of the keys may be missing.
                       All conditions on incomplete keys pass if the key is missing
    c              3   b   K   | ])}t          |                    d d                    V  *dS )z\&r  N)r  r  )r   r  r  r8  s     r   r  zmatch_str.<locals>.<genexpr>  sS       > > 	;&&uc22CDD> > > > > >r   z(?<!\\)&)allr   r   )
filter_strr  r8  s    ``r   	match_strr    sO      > > > > >8K<<> > > > > >r   c                 B     ssd S t           j         dt           j         d  d d}t                    pd t          t	           pg                      d v r                     d           t                              |          d	 fd	            }|S )
Nr   rI  rJ  rK  c                     d S r   r   )r   r  s     r   r  z#match_filter_func.<locals>.<lambda>  s    T r   r  Fc                 Z                }|t          |          rt           fdD                       rr	st          nd S                      d          p                     d          pd}d                    t          t          j                            }| d| dS )Nc              3   :   K   | ]}t          |          V  d S r   )r  )r   r  r8  r*  s     r   r  z9match_filter_func.<locals>._match_func.<locals>.<genexpr>  s/      SSai9jAASSSSSSr   rl  r   r+  z) | (z does not pass filter (z), skipping ..)r  r  r   r  r   r  r   r^  )r*  r8  re  video_titler  breaking_filtersfiltersinteractives   ``   r   _match_funcz&match_filter_func.<locals>._match_func  s    y*55?&s+++ 	U#SSSSS7SSSSS 	U!,IZI::TI#--00RIMM$4G4GR7K c#)W&=&=>>J!TT*TTTTr   r  )match_filter_funcr   r   r   r  r   function_with_reprset_repr)r  r  repr_r  r  s   ``  @r   r  r    s     + t +mm.?.LmmwmmZjmmmE()9::R?Q?Q(7=b))**G.K s  ''
U 
U 
U 
U 
U 
U 
U ('
U r   c                   >    e Zd ZddZd Zed             Zd Zd ZdS )	download_range_funcFc                 2    |||c| _         | _        | _        d S r   )chaptersranges	from_info)r   r  r  r  s       r   r  zdownload_range_func.__init__  s    5=vy2t{DNNNr   c              #     K   |                     d          rdnd}| j        pg D ]S}t          |                     d          pg           D ],\  }}t          j        ||d                   rd }i |d|iV  -T| j        r#|r!|                    d|d          d|            | j        pg D ]4\  }}|                     ||          |                     ||          d	V  5| j        rj|                     d
          s|                     d          r@|                     d
          pd|                     d          pt          d          d	V  d S | j        s| j        si V  d S d S d S )Nr  z(There are no chapters matching the regexz>Cannot match chapters since chapter information is unavailablerl  r3  z[info] r   r  )r&  end_timer&  r  r   r  )
r  r  r  r   r  	to_screenr  _handle_negative_timestampr  r  )	r   r*  r$  warningr  r  r  r  rA  s	            r   __call__zdownload_range_func.__call__  s     AJzAZAZ Y==X 	](b 	2 	2E'	j(A(A(GRHH 2 2
79UGG$455 2"G1W1gq111112 = 	BW 	BMM@IdO@@w@@AAA++ 	 	JE3"==eYOO ;;CKK     
 > 	y}}\:: 	immJ>W>W 	'mmL99>Q%MM*55Eu        	T] 	HHHHH	 	 	 	r   c                 n    |                     d          r| dk     rt          |d         | z   d          n| S )Ndurationr   )r  rB  )rd  infos     r   r  z.download_range_func._handle_negative_timestamp+  s<    26((:2F2F]4RS88s4
#d*A...Y]]r   c                 l    t          |t                    o| j        |j        k    o| j        |j        k    S r   )r   r  r  r  rQ  s     r   rS  zdownload_range_func.__eq__/  s:    5"566 TMU^3T8<u|8S	Ur   c                 `    t            dt          |           j          d| j         d| j         dS rH  )r   r{  r  r  r  s    r   rM  zdownload_range_func.__repr__3  s6    RRT$ZZ0RR4=RRDKRRRRr   Nr  )	r   r   r   r  r  r  r  rS  rM  r   r   r   r  r    s        Q Q Q Q  4 ^ ^ \^U U US S S S Sr   r  c                    | sd S t          j        dt           d|           }|r"t          |                    d                    S t          j        d|           }|rdt          |                    d                    z  dt          |                    d                    z  z   t          |                    d	                              d
d                    z   S d S )Nz^(?P<time_offset>z)s?$time_offsetz%^(\d+):(\d\d):(\d\d(?:(?:\.|:)\d+)?)$r  r   rY  r   r  r   r   )r   r   r  r  r
  r  r  )	time_exprr   s     r   parse_dfxp_time_exprr  7  s     88888)DDD 0TZZ..///8<iHHD lc$**Q--(((2DJJqMM0B0B+BBU4::VW==K`K`adfiKjKjEkEkkkl lr   c                 ,    dt          | dz            z  S )Nz%02d:%02d:%02d,%03drX  )r`  )rU  s    r   srt_subtitles_timecoder
  D  s     #6w~#F#FFFr   c                 Z    t          | dz            }dg |d d         |j        dz  R z  S )NrX  z%01d:%02d:%02d.%02drl  ru  )r`  rV  )rU  rd  s     r   ass_subtitles_timecoder  H  s<    w~..D #GT#2#Y#G0AB0F#G#GGGr   c           
      F   dg dfddgff}g dt          j        t          dddd	
          i i  G fdd          |                     dd          } fd}|D ] \  }}|D ]}|                     ||          } !t	          |           }g }|                     d                    p|                    d          }|st          d          d}		 |                     d                    D ]}
|
                    d          p|
                     d                    }|s8|
                    d          }|r$|vrd}	V|                                         |<   D ]>}|
                     d|z                       }|r|	                    |i           |<   ?|	rd}	nndD ]f}t          | d|z             d|z   g          }|&                    |                    d                    }
|
sQ                    |
           gt          |t          j        d          d          D ]\  }}t          |j                            d                     }t          |j                            d!                    }t          |j                            d"                    }|}|s|s||z   }|                    d#|t%          |          t%          |           ||          fz             d$                    |          S )%z
    @param dfxp_data A bytes-like object containing DFXP data
    @returns A unicode object containing converted SRT data
    s   http://www.w3.org/ns/ttml)s   http://www.w3.org/2004/11/ttaf1s   http://www.w3.org/2006/04/ttaf1s   http://www.w3.org/2006/10/ttaf1s!   http://www.w3.org/ns/ttml#stylings   http://www.w3.org/ns/ttml#style)color
fontFamilyfontSize	fontStyle
fontWeighttextDecorationz$http://www.w3.org/XML/1998/namespacezhttp://www.w3.org/ns/ttmlz!http://www.w3.org/ns/ttml#styling)r2  r.  tts)r   c                   B    e Zd ZdZg Zg Z fdZfdZd Zd Z	dS )$dfxp2srt.<locals>.TTMLPElementParserr  c                    | d          dfv r| xj         dz  c_         d S g }i }|                    d          }r|                               |r)|                                        |i                      D ]*}|                     d|z                       }|r|||<   +|rd}t          |                                          D ]\  }	}
| j        r%| j        d                             |	          |
k    r1|	dk    r
|d	|
 d
z  }A|	dk    r
|d|
 d
z  }Q|	dk    r
|d|
 d
z  }a|	dk    r,|
dk    r&| xj         dz  c_         |                    d           |	dk    r,|
dk    r&| xj         dz  c_         |                    d           |	dk    r+|
dk    r%| xj         dz  c_         |                    d           |r+| xj         d|z   dz   z  c_         |                    d           i }| j        r |                    | j        d                    |                    |           | j                            |           | j                            |           d S )Nttml:brbrr]  styletts:r  rl  r  z color="r  r  z size="r  z face="r  boldz<b>re  r  italicz<i>r  r  	underlinez<u>r  z<fontr:  font)_outr  rj  sortedrN  _applied_stylesr   _unclosed_elements)r   r   r   unclosed_elementsr  element_style_idpropprop_valr  r  r  applied_styleSUPPORTED_STYLING_xdefault_stylestyless               r   r  z*dfxp2srt.<locals>.TTMLPElementParser.startt  s   rr)}}d+++		T!				$&!#)::g#6#6   0LL///# CLL,<b!A!ABBB- / /D%zz""Vd]*;*;<<H /&.d ?D &u{{}} 5 5 : :1/ %D4H4L4P4PQR4S4SWX4X4X$<< OqOOO3DD*__ NaNNN2DD,.. NaNNN2DD,..1;; II.II-44S9999+--!x-- II.II-44S9999"222qK7G7G II.II-44S999 9		Wt^c%99		)00888$&M+ G%,,T-A"-EFFF!((///(//>>>'../@AAAAAr   c                     | d          dfvrc| j                                         }t          |          D ]}| xj        d| dz  c_        |r$| j        r| j                                         d S d S d S d S )Nr  r  r9  r:  )r#  r,  reversedr   r"  )r   r   r$  elementr*  s       r   rA  z(dfxp2srt.<locals>.TTMLPElementParser.end  s    22i==$///$($;$?$?$A$A!'(9:: 1 1GIIg0III$ /)= /(,,..... 0// / / /r   c                 &    | xj         |z  c_         d S r   )r   )r   r  s     r   r  z)dfxp2srt.<locals>.TTMLPElementParser.data  s    IIIIIIr   c                 4    | j                                         S r   )r   r^  r  s    r   r$  z*dfxp2srt.<locals>.TTMLPElementParser.close  s    9??$$$r   N)
r   r   r   r   r#  r"  r  rA  r  r$  )r)  r*  r+  r,  s   r   TTMLPElementParserr  o  s        +	B +	B +	B +	B +	B +	B +	B +	BZ	/ 	/ 	/ 	/ 	/	 	 		% 	% 	% 	% 	%r   r2  s   encoding='UTF-16's   encoding='UTF-8'c                                  }t           j        j                            |          }|                    t           j        j                            |                      |                                S )N)target)r2  etreeElementTree	XMLParserr<  tostringr$  )r   r4  r  r2  s      r   
parse_nodezdfxp2srt.<locals>.parse_node  s_    ##%%&000??CI)22488999||~~r   z	.//ttml:pz.//pzInvalid dfxp/TTML subtitleFTz.//ttml:styler   zxml:idr  r  )bodydivz.//ttml:z.//Nr   r^   beginrA  durz%d
%s --> %s
%s

r  )r   r   r   r  r   findallr4  r  r)  r+  r   rj  r)  r  r  r  r   r   r
  r   )	dfxp_dataLEGACY_NAMESPACESr9  r  r  r   r-  rj  parasrepeatr  style_idparent_style_idr&  r'  peleparar3  
begin_timer  r=  r)  r2  r*  r+  r,  s                         @@@@@r   dfxp2srtrI  M  s/    
& (
 (
 (
 	
 
..0
 		   
	=5+22 2 
 
 
B FM>% >% >% >% >% >% >% >% >% >% >% >% >%D !!"8:OPPI     " 1 11 	1 	1B!))"a00II	1 #9--D
CLLK))AT\\&-A-AE 75666F\\""_"5"566 	E 	EEyyA%))BBxLL*A*AH #ii00O B"&00!F#)/#:#?#?#A#Ax ) E E 99RR%6%677 E<DF%%h33D9E  	FF%(  $ $D22j1n#5#5uqy"ABB;

3777++,, 	U####5)/!"4"4UCCC  e)$+//'*B*BCC
'(>(>??"4;??5#9#9:: 	( !C'H

*":.."8,,Jt	.  	 	 	 	 773<<r   c                 l    |                      |          }|g n||t          |          gn| | | gS r   )r  r   )r:  command_optionr   	separators       r   
cli_optionrM    sM    JJuE-BB1:1B.#e**--#7Y7778:r   r  r  c                 b    |                      |          }|dv sJ t          ||d|||          S )N)TFN)TF)r  rM  )r:  rK  r   
true_valuefalse_valuerL  s         r   cli_bool_optionrQ    sB    JJuE'''''Z<<neU^___r   c                 >    |                      |          |k    r|gng S r   r  )r:  rK  r   expected_values       r   cli_valueless_optionrU    s&    %zz%00NBBNJr   c           
      V    t           t          t          f          r|r S d   |S t           t                    sJ t          |t          t          f          sJ |D ]I}t          t	          d  fdt          |          D                                 }|rd |D             c S J|S )Nc                 
    | d uS r   r   r   s    r   r  z(cli_configuration_args.<locals>.<lambda>  s
    atm r   c                 ^    g | ])}                     |                                          *S r   )r  r,  )r   r   argdicts     r   r   z*cli_configuration_args.<locals>.<listcomp>  s-    DDD#W[[%%DDDr   c                     g | ]	}|D ]}|
S r   r   )r   r   args      r   r   z*cli_configuration_args.<locals>.<listcomp>  s%    ===D==C====r   )r   r  rK  rI  rg  r  )rY  r  r   
use_compatkey_listarg_lists   `     r   cli_configuration_argsr_    s    'D%=))  	NGgt$$$$$dT5M***** > >##DDDD(1C1CDDDF F G G  	>==H======	>Nr   c                 *   |                                  |                                 }} | |k    r|n|  d| fd|pdgD             }|v r3| |k    r|                    | |f           |                    d           nd}t          ||||          S )Nr  c                     g | ]} | 	S r   r   )r   r  root_keys     r   r   z'_configuration_args.<locals>.<listcomp>  s$    555x555r   r  r   F)r,  r   r_  )main_keyrY  r  r  r   r\  rb  s         @r   _configuration_argsrd    s    NN$$ciikkcH#oossh+>+>+>+>H5555t|t555D4s??KK3(((I
!'4*EEEr   c                      e Zd Zi ddddddddd	d
dddddddddddddddddddddd d!d"i d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDi dEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfi dgdhdidjdkdldmdndodpdqdrdsdrdtdudvdwdxdydzd{d|d}d~dddddddddi ddddddddddddddddddddddddddddddddddi ddddddddddddddddddddddddddddēddƓddȓddʓi dd̓ddΓddГddғddԓdd֓ddؓddړddܓddޓddddddddddddddi dddddddddddddddddddd ddddddddd	d
ddddi dddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0i d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRi dSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdldndodpdqdrdsdtduiZedv             Zedw             ZdxS (y  ISO639Utilsaaaarr  abkrX   aveafafrakakaamamhanr[  araraasasmavavaayaymazazebabakbebelbgbulbhbihbibisbmbambnbenbobodr  brebsboscacatcechechchacocoscrcrecscescuchucvchvcycymdadandedeudvr;  dzdzoeeeweelellr<   engeoepoesspaetesteueusfafasfffulfifinfjfijfofaor=   frafyfrygaglegdglaglglggngrngugujgvglvhahauhehebiwhihinhohmohrhrvhthathuhunhyhyehzheriainar   indinr}  ileigiboiiiiiikipkr  idoisislititaiuikujajpnjvjavkakatkgkonkikikkjkuarS  kazklkalkmkhmknkankokorkrkaukskaskukurkvkomkwcorkykirlalatlbltzlglugrQ  limlnlinlolaor  litlulublvlavmgmlgmhmahmimrimkmkdr  malmnmonmrmarr  msar6  mltmymyananaunbnobndndenenepngndonlnldnnnnononornrnblnvnavnynyaocociojojiomormororirx   osspapanpeperpiplir>   polpspusptporququermrohrnrH  roronrurusrwkinsasanscsrdsdsndsesmesgsagsisinskslkslslvsmsmosnsnasosomsqsqisrsrprV   sswstsotsusunsvsweswswatatamteteltgtgkr\   thatitirtktuktltgltntsntotontrturr  tsor,  tattwtwitytahuguigukukrururduzuzbvevenvivievovolwawlnwowolxhxhoyiyidjiyoyorzazhazhzhozuzulc                 F    | j                             |dd                   S )z3Convert language code from ISO 639-1 to ISO 639-2/TNr   )	_lang_mapr  rE  r  s     r   
short2longzISO639Utils.short2long  s"     }  bqb***r   c                 X    | j                                         D ]\  }}||k    r|c S dS )z3Convert language code from ISO 639-2/T to ISO 639-1N)r  rN  )rE  r  
short_name	long_names       r   
long2shortzISO639Utils.long2short  sL     &)]%8%8%:%: 	" 	"!J	D  !!!! !	" 	"r   N)r   r   r   r  rM  r  r  r   r   r   rf  rf  '  s       }e}e} 	e} 	e	}
 	e} 	e} 	e} 	e} 	e} 	e} 	e} 	e} 	e} 	e} 	e}  	e!}" 	e#} }$ 	e%}& 	e'}( 	e)}* 	e+}, 	e-}. 	e/}0 	e1}2 	e3}4 	e5}6 	e7}8 	e9}: 	e;}< 	e=}> 	e?}@ 	eA}B 	eC}D 	eE} } }F 	eG}H 	eI}J 	eK}L 	eM}N 	eO}P 	eQ}R 	eS}T 	eU}V 	eW}X 	eY}Z 	e[}\ 	e]}^ 	e_}` 	ea}b 	ec}d 	ee}f 	eg} } }h 	ei}j 	ek}l 	em}n 	eo}p 	eq}r 	es}t 	eu}v 	ew}x 	ey}z 	e{}| 	e}}~ 	e}@ 	eA}B 	eC}D 	eE}F 	eG}H 	eI} } }J 	eK}L 	eM}N 	eO}P 	eQ}R 	eS}T 	eU}V 	eW}X 	eY}Z 	e[}\ 	e]}^ 	e_}` 	ea}b 	ec}d 	ee}f 	eg}h 	ei}j 	ek} } }l 	em}n 	eo}p 	eq}r 	es}t 	eu}v 	ew}x 	ey}z 	e{}| 	e}}~ 	e}@ 	eA}B 	eC}D 	eE}F 	eG}H 	eI}J 	eK}L 	eM} } }N 	eO}P 	eQ}R 	eS}T 	eU}V 	eW}X 	eY}Z 	e[}\ 	e]}^ 	e_}` 	ea}b 	ec}d 	ee}f 	eg}h 	ei}j 	ek}l 	em}n 	eo} } }p 	eq}r 	es}t 	eu}v 	ew}x 	ey}z 	e{}| 	e}}~ 	e}@ 	eA}B 	eC}D 	eE}F 	eG}H 	eI}J 	eK}L 	eM}N 	eO}P 	eQ} } }R 	eS}T 	eU}V 	eW}X 	eY}Z 	e[}\ 	e]}^ 	e_}` 	ea}b 	ec}d 	ee}f 	eg}h 	ei}j 	ek}l 	em}n 	eo}p 	eq}r 	es} } }t 	eu}v 	ew}x 	ey}z 	e{}| 	e}}~ 	e}@ 	eA}B 	eC}D 	eE}F 	eG}H 	eI}J 	eK}L 	eM}N 	eO}P 	eQ}R 	eS}T 	eU} } }V 	eW}X 	eY}Z 	e[}\ 	e]}^ 	e_}` 	ea}b 	ec}d 	ee}f 	eg}h 	ei}j 	ek}l 	em}n 	eo}p 	eq}r 	es}t 	eu}v 	ew} }x 	ey} }I~ + + [+ " " [" " "r   rf  c                      e Zd Zi ddddddddd	d
dddddddddddddddddddddd d!d"i d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDi dEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfi dgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddddddi ddddddddddddddddddddddddddddddddddi ddddddddddddddddddddddddddēddƓddȓddʓdd̓i ddΓddГddғddԓdd֓ddؓddړddܓddޓddddddddddddddddi dddddddddddddddddd ddddddddd	d
ddddddi dddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2i d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTi dUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvi dwdxdydzd{d|d}d~ddddddddddddddddddddddddddi ddddddddddddddddddddddddddddddddddi dddddddddÐdēdŐdƓdǐdȓdɐdʓdːd̓d͐dΓdϐdГdѐdғdӐdԓdՐd֓dאdؓdِdړdېdܓdݐdސdߐdddddddddddZed             ZdS (  ISO3166UtilsAFAfghanistanAXu   Åland IslandsALAlbaniaDZAlgeriaASzAmerican SamoaADAndorraAOAngolaAIAnguillaAQ
AntarcticaAGzAntigua and BarbudaAR	ArgentinaAMArmeniaAWArubaAU	AustraliaATAustriaAZ
AzerbaijanBSBahamasBHBahrainBD
BangladeshBBBarbadosBYBelarusBEBelgiumBZBelizeBJBeninBMBermudaBTBhutanBOzBolivia, Plurinational State ofBQz Bonaire, Sint Eustatius and SabaBAzBosnia and HerzegovinaBWBotswanaBVzBouvet IslandBRBrazilIOzBritish Indian Ocean TerritoryBNzBrunei DarussalamBGBulgariaBFzBurkina FasoBIBurundiKHCambodiar  CameroonCACanadaCVz
Cape VerdeKYzCayman IslandsCFzCentral African RepublicTDChadCLChileCNChinaCXzChristmas IslandCCzCocos (Keeling) IslandsCOColombiaKMComorosCGCongoCDz%Congo, the Democratic Republic of theCKzCook IslandsCRz
Costa RicaCIu   Côte d'IvoireHRCroatiaCUCubaCWu   CuraçaoCYCyprusCZzCzech RepublicDKDenmarkDJDjiboutiDMDominicaDOzDominican RepublicECEcuadorEGEgyptSVzEl SalvadorGQzEquatorial GuineaEREritreaEEEstoniaETEthiopiaFKzFalkland Islands (Malvinas)FOzFaroe IslandsFJFijiFIFinlandFRFranceGFzFrench GuianaPFzFrench PolynesiaTFzFrench Southern TerritoriesGAGabonGMGambiaGEGeorgiaDEGermanyGHGhanaGI	GibraltarGRGreeceGL	GreenlandGDGrenadaGP
GuadeloupeGUGuamGT	GuatemalaGGGuernseyGNGuineaGWzGuinea-BissauGYGuyanaHTHaitiHMz!Heard Island and McDonald IslandsVAzHoly See (Vatican City State)HNHondurasHKz	Hong KongHUHungaryISIcelandINIndiaID	IndonesiaIRzIran, Islamic Republic ofIQIraqIEIrelandIMzIsle of ManILIsraelITItalyJMJamaicaJPJapanJEJerseyJOJordanKZ
KazakhstanKEKenyaKIKiribatiKPz&Korea, Democratic People's Republic ofKRzKorea, Republic ofKWKuwaitKG
KyrgyzstanLAz Lao People's Democratic RepublicLVLatviaLBLebanonLSLesothoLRLiberiaLYLibyaLILiechtensteinLT	LithuaniaLU
LuxembourgMOMacaoMKz*Macedonia, the Former Yugoslav Republic ofMG
MadagascarMWMalawiMYMalaysiaMVMaldivesMLMaliMTMaltaMHzMarshall IslandsMQ
MartiniqueMR
MauritaniaMU	MauritiusYTMayotteMXMexicoFMzMicronesia, Federated States ofMDzMoldova, Republic ofMCMonacoMNMongoliaME
MontenegroMS
MontserratMAMoroccoMZ
MozambiqueMMMyanmarNANamibiaNRNauruNPNepalNLNetherlandsr  zNew CaledoniaNZzNew ZealandNI	NicaraguaNENigerNGNigeriaNUNiueNFzNorfolk IslandMPzNorthern Mariana IslandsNONorwayOMOmanPKPakistanPWPalauPSzPalestine, State ofPAPanamar  zPapua New GuineaPYParaguayPEPeruPHPhilippinesPNPitcairnPLPolandPTPortugalPRzPuerto RicoQAQatarREu   RéunionRORomaniaRUzRussian FederationRWRwandaBLu   Saint BarthélemySHz,Saint Helena, Ascension and Tristan da CunhaKNzSaint Kitts and NevisLCzSaint LuciaMFzSaint Martin (French part)PMzSaint Pierre and MiquelonVCz Saint Vincent and the GrenadinesWSSamoaSMz
San MarinoSTzSao Tome and PrincipeSAzSaudi ArabiaSNSenegalRSSerbiaSC
SeychellesSLzSierra LeoneSG	SingaporeSXzSint Maarten (Dutch part)SKSlovakiaSISloveniaSBzSolomon IslandsSOSomaliaZAzSouth AfricaGSz,South Georgia and the South Sandwich IslandsSSzSouth SudanESSpainLKz	Sri LankaSDSudanSRSurinameSJzSvalbard and Jan MayenSZ	SwazilandSESwedenCHSwitzerlandSYzSyrian Arab RepublicTWzTaiwan, Province of ChinaTJ
TajikistanTZzTanzania, United Republic ofrU   ThailandTLzTimor-LesteTGTogoTKTokelauTOTongaTTzTrinidad and TobagoTNTunisiaTRTurkeyTMTurkmenistanTCzTurks and Caicos IslandsTVTuvaluUGUgandaUAUkrainerQ   zUnited Arab Emiratesr%  zUnited KingdomUSzUnited StatesUMz$United States Minor Outlying IslandsUYUruguay
UzbekistanVanuatuz!Venezuela, Bolivarian Republic ofzViet NamzVirgin Islands, BritishzVirgin Islands, U.S.zWallis and FutunazWestern SaharaYemenZambiaZimbabwezAsia/Pacific RegionEurope)UZVUVEVNVGVIWFEHYEZMZWAPEUc                 Z    | j                             |                                          S )zAConvert an ISO 3166-2 country code to the corresponding full name)_country_mapr  r  r  s     r   
short2fullzISO3166Utils.short2full  s#     ##DJJLL111r   N)r   r   r   rj
  rM  rk
  r   r   r   r  r    s       }m}} 	i} 	i	}
 	} 	i} 	h} 	j} 	l} 	#} 	k} 	i} 	g} 	k} 	i}  	l!}" 	i#} }$ 	i%}& 	l'}( 	j)}* 	i+}, 	i-}. 	h/}0 	g1}2 	i3}4 	h5}6 	/7}8 	09}: 	&;}< 	j=}> 	o?}@ 	hA}B 	.C}D 	!E} } }F 	jG}H 	nI}J 	iK}L 	jM}N 	jO}P 	hQ}R 	lS}T 	U}V 	(W}X 	fY}Z 	g[}\ 	g]}^ 	 _}` 	'a}b 	jc}d 	ie}f 	gg} } }h 	5i}j 	nk}l 	lm}n 	o}p 	iq}r 	fs}t 	ju}v 	hw}x 	y}z 	i{}| 	j}}~ 	j}@ 	"A}B 	iC}D 	gE}F 	mG}H 	!I} } }J 	iK}L 	iM}N 	jO}P 	+Q}R 	oS}T 	fU}V 	iW}X 	hY}Z 	o[}\ 	 ]}^ 	+_}` 	ga}b 	hc}d 	ie}f 	ig}h 	gi}j 	kk} } }l 	hm}n 	ko}p 	iq}r 	ls}t 	fu}v 	kw}x 	jy}z 	h{}| 	o}}~ 	h}@ 	gA}B 	1C}D 	-E}F 	jG}H 	kI}J 	iK}L 	iM} } }N 	gO}P 	kQ}R 	)S}T 	fU}V 	iW}X 	mY}Z 	h[}\ 	g]}^ 	i_}` 	ga}b 	hc}d 	he}f 	lg}h 	gi}j 	jk}l 	7m}n 	"o} } }p 	hq}r 	ls}t 	1u}v 	hw}x 	iy}z 	i{}| 	i}}~ 	g}@ 	oA}B 	kC}D 	lE}F 	gG}H 	:I}J 	lK}L 	hM}N 	jO}P 	jQ} } }R 	fS}T 	gU}V 	 W}X 	lY}Z 	l[}\ 	k]}^ 	i_}` 	ha}b 	/c}d 	$e}f 	hg}h 	ji}j 	lk}l 	lm}n 	io}p 	lq}r 	is} } }t 	iu}v 	gw}x 	gy}z 	m{}| 	o}}~ 	m}@ 	kA}B 	gC}D 	iE}F 	fG}H 	I}J 	(K}L 	hM}N 	fO}P 	jQ}R 	gS}T 	#U} } }V 	hW}X 	 Y}Z 	j[}\ 	f]}^ 	m_}` 	ja}b 	hc}d 	je}f 	mg}h 	gi}j 	jk}l 	im}n 	"o}p 	hq}r 	!s}t 	<u}v 	%w} } }x 	my}z 	*{}| 	)}}~ 	0}@ 	gA}B 	lC}D 	%E}F 	nG}H 	iI}J 	hK}L 	lM}N 	nO}P 	kQ}R 	)S}T 	jU}V 	jW}X 	Y} } }Z 	i[}\ 	n]}^ 	<_}` 	ma}b 	gc}d 	ke}f 	gg}h 	ji}j 	&k}l 	km}n 	ho}p 	mq}r 	$s}t 	)u}v 	lw}x 	,y}z 	j{} } }| 	m}}~ 	f}@ 	iA}B 	gC}D 	#E}F 	iG}H 	hI}J 	nK}L 	(M}N 	hO}P 	hQ}R 	iS}T 	$U}V 	W}X 	oY}Z 	4[}\ 	i]} }^ 1'$!#y} } }L~ 2 2 [2 2 2r   r  c                      e Zd Zi ddddddddd	d
dddddddddddddddddddddd d!d"i d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDi dEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfi dgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddddddi ddddddddddddddddddddddddddddddddddi ddddddddddddddddddddddddddēddƓddȓddʓdd̓i ddΓddГddғddԓdd֓ddؓddړddܓddޓddddddddddddddddi dddddddddddddddddd ddddddddd	d
ddddddi dddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2i d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTi dUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvi dwdxdydzd{d|d}d~ddddddddddddddddddddddddddi ddddddddddddddddddddddddddddddddddi dddddddddÐdēdŐdƓdǐdȓdɐdʓdːd̓d͐dΓdϐdГdѐdғdӐdԓdՐd֓dאdؓdِdړdېdܓdݐdސdߜZed             ZdS (  GeoUtilsr  z46.172.224.0/19rQ   z94.200.0.0/13r  z149.54.0.0/17r  z209.59.64.0/18r  z204.14.248.0/21r  z46.99.0.0/16r  z46.70.0.0/15r  z105.168.0.0/13rg
  z182.50.184.0/21r  z23.154.160.0/24r  z181.0.0.0/12r  z202.70.112.0/20r  z77.116.0.0/14r  z1.128.0.0/11r  z181.41.0.0/18r  z185.217.4.0/22r  z5.197.0.0/16r	  z31.176.128.0/17r  z65.48.128.0/17r  z114.130.0.0/16r  z
57.0.0.0/8r	  z102.178.0.0/15r
	  z95.42.0.0/15r  z37.131.0.0/17r	  z154.117.192.0/18r  z137.255.0.0/16r	
  z185.212.72.0/23r  z196.12.64.0/18r		  z156.31.0.0/16r 	  z161.56.0.0/16r	  z161.0.80.0/20r	  z191.128.0.0/12r  z24.51.64.0/18r  z119.2.96.0/19r	  z168.167.0.0/16r  z178.120.0.0/13r  z179.42.192.0/18r	  z99.224.0.0/11r%	  z41.243.0.0/16r	  z197.242.176.0/21r#	  z160.113.0.0/16r5
  z85.0.0.0/13r(	  z102.136.0.0/14r&	  z202.65.32.0/19r	  z152.172.0.0/14r  z102.244.0.0/14r	  z36.128.0.0/10r	  z181.240.0.0/12r'	  z201.192.0.0/12r+	  z152.206.0.0/15r	  z165.90.96.0/19r-	  z190.88.128.0/17r.	  z31.153.0.0/16r0	  z88.100.0.0/14rU	  z
53.0.0.0/8r3	  z197.241.0.0/17r1	  z87.48.0.0/12r5	  z192.243.48.0/20r7	  z152.166.0.0/15r  z41.96.0.0/12r8	  z186.68.0.0/15r@	  z90.190.0.0/15r:	  z156.160.0.0/11r>	  z196.200.96.0/20r)
  z88.0.0.0/11rB	  z196.188.0.0/14rh
  z2.16.0.0/13rH	  z91.152.0.0/13rF	  z144.120.0.0/16rD	  z80.73.208.0/21r	  z119.252.112.0/20rE	  z88.85.32.0/19rJ	  z
90.0.0.0/9rO	  z41.158.0.0/15r%  z
25.0.0.0/8r_	  z74.122.88.0/21rS	  z31.146.0.0/16rL	  z161.22.64.0/18rg	  z62.68.160.0/19rW	  z154.160.0.0/12rY	  z95.164.0.0/16r]	  z88.83.0.0/19rQ	  z160.182.0.0/15ri	  z197.149.192.0/18ra	  z104.250.0.0/19r=	  z105.235.224.0/20r[	  z94.64.0.0/13re	  z168.234.0.0/16rc	  z168.123.0.0/16rk	  z197.214.80.0/20rl	  z181.41.64.0/18rt	  z113.252.0.0/14rr	  z181.210.0.0/16r)	  z93.136.0.0/13rn	  z148.102.128.0/17ru	  z84.0.0.0/14r{	  z39.192.0.0/10r	  z87.32.0.0/12r	  z79.176.0.0/13r	  z5.62.80.0/20ry	  z117.192.0.0/10r	  z203.83.48.0/21r~	  z37.236.0.0/14r}	  z2.176.0.0/12rw	  z82.221.0.0/16r	  z79.0.0.0/10r	  z87.244.64.0/18r	  z72.27.0.0/17r	  z176.29.0.0/16r	  z133.0.0.0/8r	  z105.48.0.0/12r	  z158.181.128.0/17r	  z36.37.128.0/17r	  z103.25.140.0/22r!	  z197.255.224.0/20r
  z198.167.192.0/19r	  z175.45.176.0/22r	  z175.192.0.0/10r	  z37.36.0.0/14r	  z64.96.0.0/15r	  z2.72.0.0/13r	  z115.84.64.0/18r	  z178.135.0.0/16r
  z24.92.144.0/20r	  z82.117.0.0/19r+
  z112.134.0.0/15r	  z102.183.0.0/16r	  z129.232.0.0/17r	  z78.56.0.0/13r	  z188.42.0.0/16r	  z46.109.0.0/16r	  z41.252.0.0/14r	  z105.128.0.0/11r	  z88.209.64.0/18r	  z37.246.0.0/16r	  z178.175.0.0/17r
  z74.112.232.0/21r	  z154.126.0.0/17r	  z117.103.88.0/21r	  z77.28.0.0/15r	  z154.118.128.0/18r	  z37.111.0.0/17r	  z49.0.128.0/17r	  z60.246.0.0/16r	  z202.88.64.0/20r	  z109.203.224.0/19r	  z41.188.64.0/18r	  z208.90.112.0/22r	  z46.11.0.0/16r	  z105.16.0.0/12r	  z27.114.128.0/18r	  z102.70.0.0/15r	  z187.192.0.0/11r	  z175.136.0.0/13r	  z197.218.0.0/15r	  z41.182.0.0/16r  z101.101.0.0/18r	  z197.214.0.0/18r	  z203.17.240.0/22r	  z105.112.0.0/12r	  z186.76.0.0/15r	  z145.96.0.0/11r	  z84.208.0.0/13r	  z36.252.0.0/15r	  z203.98.224.0/19r	  z49.156.48.0/22r	  z49.224.0.0/14r	  z5.36.0.0/15r	  z186.72.0.0/15r	  z186.160.0.0/14rM	  z123.50.64.0/18r  z124.240.192.0/19r	  z49.144.0.0/13r	  z39.32.0.0/11r	  z83.0.0.0/11r
  z70.36.0.0/20r 
  z66.50.0.0/16r	  z188.161.0.0/16r	  z85.240.0.0/13r	  z202.124.224.0/20r	  z181.120.0.0/14r
  z37.210.0.0/15r
  z102.35.0.0/16r
  z79.112.0.0/13r
  z93.86.0.0/15r
  z5.136.0.0/13r
  z41.186.0.0/16r
  z188.48.0.0/13r#
  z202.1.160.0/19r
  z154.192.0.0/11r,
  z102.120.0.0/13r3
  z78.64.0.0/12r
  z8.128.0.0/10r!
  z188.196.0.0/14r
  z78.98.0.0/15r
  z102.143.0.0/17r
  z89.186.32.0/19r
  z41.82.0.0/15r$
  z154.115.192.0/18r.
  z186.179.128.0/17r(
  z105.235.208.0/21r
  z197.159.160.0/19r<	  z168.243.0.0/16r
  z190.102.0.0/20r7
  z
5.0.0.0/16r1
  z41.84.224.0/19rK
  z65.255.48.0/20r	  z154.68.128.0/19r>
  z196.168.0.0/14rU   z171.96.0.0/13r9
  z85.9.128.0/18r@
  z27.96.24.0/21r=
  z180.189.160.0/20rI
  z95.85.96.0/19rE
  z197.0.0.0/11rB
  z175.176.144.0/21rG
  z78.160.0.0/11rD
  z186.44.0.0/15rL
  z202.2.96.0/19r8
  z120.96.0.0/11r;
  z156.156.0.0/14rP
  z37.52.0.0/14rN
  z102.80.0.0/13rR
  z	6.0.0.0/8rT
  z167.56.0.0/13r\
  z84.54.64.0/18rq	  z212.77.0.0/19r
  z207.191.240.0/21r^
  z186.88.0.0/13r`
  z66.81.192.0/20ra
  z146.226.0.0/16r_
  z14.160.0.0/11r]
  z202.80.32.0/20rb
  z117.20.32.0/21r
  z202.4.32.0/19rd
  z134.35.0.0/16r	  z41.242.116.0/22r&
  z41.0.0.0/11z102.144.0.0/13z102.177.192.0/18)re
  rf
  c                    t          |          dk    r1| j                            |                                          }|sd S n|}|                    d          \  }}t          j        dt          j        |                    d         }|dt          |          z	  z  }t          t          j        t          j        dt          j        ||                                        S )Nr   r   z!Lr   r  )r   _country_ip_mapr  r  r   structunpacksocket	inet_atonr  r   	inet_ntoapackrz  randint)rE  code_or_blockr  addrpreflenaddr_minaddr_maxs          r   random_ipv4zGeoUtils.random_ipv4  s    }""'++M,?,?,A,ABBE t "EC((g=v'7'='=>>qAzS\\9:6#KfnXx@@AAC C D D 	Dr   N)r   r   r   ro
  rM  r|
  r   r   r   rm
  rm
    s        qqoq 	oq 		q
 	q 	nq 	nq 	q 	q 	q 	nq 	q 	oq 	nq 	oq  	!q" 	n#q q$ 	%q& 	'q( 	)q* 	l+q, 	-q. 	n/q0 	o1q2 	 3q4 	5q6 	7q8 	9q: 	o;q< 	o=q> 	o?q@ 	AqB 	oCqD 	oEq q qF 	GqH 	IqJ 	KqL 	oMqN 	oOqP 	 QqR 	SqT 	mUqV 	WqX 	YqZ 	[q\ 	]q^ 	o_q` 	aqb 	cqd 	eqf 	gq q qh 	iqj 	okql 	omqn 	loqp 	qqr 	nsqt 	uqv 	wqx 	nyqz 	o{q| 	o}q~ 	q@ 	AqB 	mCqD 	EqF 	mGqH 	oIq q qJ 	KqL 	MqN 	 OqP 	oQqR 	lSqT 	oUqV 	lWqX 	YqZ 	o[q\ 	]q^ 	_q` 	aqb 	ocqd 	neqf 	gqh 	 iqj 	kq q ql 	 mqn 	noqp 	qqr 	sqt 	uqv 	wqx 	yqz 	{q| 	o}q~ 	 q@ 	mAqB 	oCqD 	nEqF 	oGqH 	nIqJ 	KqL 	Mq q qN 	oOqP 	nQqR 	oSqT 	mUqV 	WqX 	nYqZ 	o[q\ 	m]q^ 	o_q` 	 aqb 	cqd 	eqf 	 gqh 	 iqj 	kql 	mqn 	noq q qp 	nqqr 	msqt 	uqv 	wqx 	yqz 	o{q| 	}q~ 	q@ 	AqB 	nCqD 	oEqF 	oGqH 	oIqJ 	KqL 	MqN 	oOqP 	Qq q qR 	SqT 	UqV 	WqX 	nYqZ 	 [q\ 	o]q^ 	o_q` 	oaqb 	cqd 	 eqf 	gqh 	iqj 	nkql 	omqn 	oqp 	oqqr 	sq q qt 	uqv 	wqx 	oyqz 	{q| 	}q~ 	q@ 	AqB 	oCqD 	oEqF 	oGqH 	oIqJ 	KqL 	MqN 	oOqP 	mQqR 	oSqT 	Uq q qV 	WqX 	 YqZ 	o[q\ 	n]q^ 	m_q` 	naqb 	ncqd 	eqf 	ogqh 	 iqj 	kql 	omqn 	ooqp 	oqqr 	nsqt 	nuqv 	owq q qx 	oyqz 	{q| 	}q~ 	q@ 	nAqB 	nCqD 	EqF 	nGqH 	IqJ 	KqL 	nMqN 	 OqP 	 QqR 	 SqT 	 UqV 	WqX 	Yq q qZ 	l[q\ 	]q^ 	_q` 	aqb 	cqd 	oeqf 	ogqh 	oiqj 	 kql 	omqn 	noqp 	 qqr 	osqt 	ouqv 	owqx 	oyqz 	{q q q| 	n}q~ 	oq@ 	kAqB 	oCqD 	oEqF 	oGqH 	 IqJ 	oKqL 	MqN 	OqP 	oQqR 	SqT 	UqV 	oWqX 	oYqZ 	[q\ 	m]q q^  aq q qOf D D [D D Dr   rm
  c                 \   d}t          |           } | dk    r&t          j        d| dz            |z   }| dz	  } | dk    &t          t	          |                    D ]}||         dk    r nd}d}||d         }|dk    r-t	          |          |z  r|t	          |          |z  z
  dz  |z   }|S )a  long_to_bytes(n:long, blocksize:int) : string
    Convert a long integer to a byte string.

    If optional blocksize is given and greater than zero, pad the front of the
    byte string with binary zeros so that the length is a multiple of
    blocksize.
    r   r   >Ir  r      N)r  rp
  ru
  rv  r   )r   	blocksizer|  r  s       r   long_to_bytesr
    s     	AAA
a%%Ka*n--1G a%% 3q66]]  Q4:E  	!""A 1}}Q)+}Q)++w6:Hr   c           	          d}t          |           }|dz  rd|dz  z
  }d|z  | z   } ||z   }t          d|d          D ].}|dz  t          j        d| ||dz                      d         z   }/|S )zbytes_to_long(string) : long
    Convert a byte string to a long integer.

    This is (essentially) the inverse of long_to_bytes().
    r   r  r
  r  r~
  )r   rv  rp
  rq
  )r|  accr  extrar  s        r   bytes_to_longr
  "  s     CVVFz  VaZeOa%1fa   ? ?byFM$!AE'
;;A>>Jr   c                     t          t          j        | ddd                   d          }t          |||          }|dS )a0  
    Implement OHDave's RSA algorithm. See http://www.ohdave.com/rsa/

    Input:
        data: data to encrypt, bytes-like object
        exponent, modulus: parameter e and N of RSA algorithm, both integer
    Output: hex string of encrypted data

    Limitation: supports one block encryption only
    Nrl  r  r   )r  binasciihexlifypow)r  r  moduluspayload	encrypteds        r   ohdave_rsa_encryptr
  3  sE     ("4":..33GGXw//Ir   c                     t          |           |dz
  k    rt          d          d t          |t          |           z
  dz
            D             }ddg|d| S )z
    Padding input data with PKCS#1 scheme

    @param {int[]} data        input data
    @param {int}   length      target length
    @returns {int[]}           padded data
       z&Input data too long for PKCS#1 paddingc                 8    g | ]}t          j        d d          S )r      )rz  rv
  )r   r   s     r   r   zpkcs1pad.<locals>.<listcomp>O  s$    SSSV^As++SSSr   r  r   r   )r   r4  rv  )r  r  pseudo_randoms      r   pkcs1padr
  D  sn     4yy6B;ABBBSSU6CII;MPQ;Q5R5RSSSMq+=+!+d++r   c                     |s| st          d          |pdd |          }| r5| t          |          k    r"t          d|  dt          |                     |S )Nz#Either table or n must be specified>0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZzbase z exceeds table length )r4  r   )r   r  s     r   _base_n_tabler
  S  sz     @ @>???VVXZYZXZ[E HQ#e**__FFF#e**FFGGGLr   c                     t          ||          }| s|d         S dt          |          }}| r|| |z           |z   }| |z  } | |S )z$Convert given int to a base-n stringr   r  )r
  r   )r  r   r  r  r  s        r   encode_base_nr
  ]  sf    !U##E Qxs5zzDF
 sTz"V+Tk   Mr   c                     d t          t          ||                    D             }dt          |          }}| D ]}||z  ||         z   }|S )z"Convert given base-n string to intc                     i | ]\  }}||	S r   r   )r   r3  r  s      r   r  z!decode_base_n.<locals>.<dictcomp>l  s    OOO[UDT5OOOr   r   )r  r
  r   )r.  r   r  r  r  r  s         r   decode_base_nr
  j  s^    OOImAu6M6M,N,NOOOEc%jjDF - -$t,Mr   c                 R   t          j        t          |           }|                                \  }}}}t	          |          }t	          |          }|                    d          }i |r$|dz  }t          ||          }||         p||<   |$t          j        dfd|          S )Nr  r   z	\b(\w+)\bc                 |                         |                     d          |                     d                    S r   )r  r
  )r  symbol_tables    r   r  z%decode_packed_codes.<locals>.<lambda>  s+     0 0QWWQZZ H H r   )r   r  PACKED_CODES_REr<  r  r   r
  r  )r  r   obfuscated_coder  r  symbolsbase_n_countr
  s          @r   decode_packed_codesr
  s  s    9_d++D,0KKMM)OT5't99DJJEmmC  GL
 D
$UD11%,U^%C|\"  D
 6HHHH  r   c                 |    dk    r| S t                    d                    fd| D                       S )Nr   r  c              3   f   K   | ]+}|v r!                     |          z   z           n|V  ,d S r   )r3  )r   r   alphabetlshifts     r   r  zcaesar.<locals>.<genexpr>  s_         67(]](..##e+q011     r   )r   r   )r|  r
  r
  r
  s    ``@r   caesarr
    sd    zzHA77           r   c                 $    t          | dd          S )Nz^!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~/   )r
  r  s    r   rot47r
    s    !z|~r   c                     i }t          j        d|           D ])\  }}|                    d          r
|dd         }|||<   *|S )Nz2(?P<key>[A-Z0-9-]+)=(?P<val>"[^"]+"|[^",]+)(?:,|$)r  r   rl  )r   r>  rp  )r   r  r   r   s       r   parse_m3u8_attributesr
    sY    Dj!VX^__  
c>># 	ad)CS		Kr   c                 (    | dk    r| |z	  n| dz   |z	  S )Nr   l        r   )r   r   s     r   urshiftr
    s"    axx3!88cK&7A%==r   c                    t           j        dk    rd|vsJ t           j                            |           sJ 	 t	          |  d| d          5 }|                    |           d d d            n# 1 swxY w Y   n,# t          $ r}t          |j        |j	                  d }~ww xY wd S d }t          t          t           dd                     rt           j        }nWt          t          dd           dk    r*t          t          j                  dk    rt          j        }nt          rt          j        }|r=	  || ||           n,# t          $ r}t          |j        |j	                  d }~ww xY wd S t#          dd	g          rdnt#          d
dg          rd
nd }|s$t%          dt&          j        dk    rdndz             |                                }	 t,                              |d
k    r|d||| gn|d|d|| gdt0          j        t0          j        t0          j                  \  }}}	n,# t          $ r}t          |j        |j	                  d }~ww xY w|	rt          |	|          d S )Nr#  r   r  setxattr_yt_dlp__identifierpyxattr)r   r  r   setfattrr  r
   z-hzfCouldn't find a tool to set the xattrs. Install either the "xattr" or "pyxattr" Python modules or the linuxz"xattr" binaryz7GNU "attr" package (which contains the "setfattr" tool)z-wz-nz-vT)r   r  rG  r  )rx   r   ry   existsr  rh  r   r  r  strerrorcallabler  r
  r
   ra  __version__r   r  r  r~   r   ry  r  rH  rI  r  )
ry   r   r   r  r~  r
  r  r   rG  rD  s
             r   write_xattrr
    s    
w$#~~~~w~~d#####	:oooot,,                	: 	: 	:$QWaj999	: HJ--.. ";	-t	4	4		A	A *++y88yH	 "> 	:HT3&&&& 	: 	: 	:$QWaj999	: **{mDD G::+GdV<<F$  |#u#&<7#:#:@y{| | 	| LLNNE6 %		-0G^^S$UD))#tSRVX]_cAdjojoZ_ !* !^ !^6::  6 6 6 !*5556 5 V4445 5sl   A< A0$A< 0A44A< 7A48A< <
B%B  B%6E 
E-E((E-AH* *
I4IIc                 >   t          j        ddd          }t          j        ddd          }t          j        d||z
  j                  }|t          j        |          z   }| t          |j                  |t          |j                  |t          |j	                  iS )Ni  r   i  r     r   )
r  r+  rz  rv
  r  r  r   r  r  r  )
year_fieldmonth_field	day_field
start_dateend_dater@  random_dates          r   random_birthdayr
    s    q!$$JwtR$$H^A: 5;<<Fr|F333KC())S*++3{'' r   r  c                     	 t          j                     5 }|                    | df           |                                d         cd d d            S # 1 swxY w Y   d S # t          $ r Y d S w xY wr  )rr
  bindgetsocknamer   )	interfacesocks     r   find_available_portr
    s    ]__ 	)IIy!n%%%##%%a(	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)    tts4   A  1AA  AA  AA   
A.-A.z[InternetShortcut]
URL=%(url)s
z<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>URL</key>
	<string>%(url)s</string>
</dict>
</plist>
zV[Desktop Entry]
Encoding=UTF-8
Name=%(filename)s
Type=Link
URL=%(url)s
Icon=text-html
)r  desktopweblocc                 n   t           j                            |           }d|j        v rt	          d          d}|j        ra|t           j                            |j        d          z  }|j        ,|dt           j                            |j        d          z   z  }|dz  }||j        	                    d	          
                                z  }|j        %|j        d
k    r|dt          |j                  z   z  }t           j                            |j        |t           j                            |j        d          t           j                            |j        d          t           j                            |j        d          t           j                            |j        d          f          S )a}  
    Converts an IRI (Internationalized Resource Identifier, allowing Unicode characters) to a URI (Uniform Resource Identifier, ASCII-only).

    The function doesn't add an additional layer of escaping; e.g., it doesn't escape `%3C` as `%253C`. Instead, it percent-escapes characters with an underlying UTF-8 encoding *besides* those already escaped, leaving the URI intact.
    [z"IPv6 URIs are not, yet, supported.r  z!$%&'()*+,~)safeNr   @idnaP   z!$%&'()*+,/:;=@|~z!$%&'()*+,/:;=?@{|}~z!#$%&'()*+,/:;=?@{|}~)r  r  r  r  r4  r  r  r  r  rf   ry  r  r   rq  r  
quote_plusry   r:  ra  fragment)iri	iri_partsnet_locations      r   
iri_to_urir
  
  s    %%c**I
i=>>>
 L **9+=N*SSS)C&,"4"4Y5Gn"4"]"]]]LI&--f55<<>>>L~!in&:&:c).1111<""		L##IN9M#NN L##I$4;O#PP L##IO:Q#RRL##I$6=U#VV	XY Y Yr   c                 f    t           j        dv r"dt          j                            |           z   S | S )N)rt   cygwin\\?\)r~   r   rx   ry   abspath)ry   s    r   to_high_limit_pathr
  6  s.    
|***27??40000Kr   z%sc                     t          j        | gt          |          R  }|t          u r|sn|t          |          v r|S | ||          z  S r   )r   r4  r  r   )r   fieldtemplaterf  r   r   r   s          r   r  r  >  s]    

 
7x
7
7
7CJ&&3&&C8F3C3C,C,Cdd3iir   c                 Z    t          j        dd|           } t          j        dd|           S )Na  (?x)
        (?:
            (?:
                chtbl\.com/track|
                media\.blubrry\.com| # https://create.blubrry.com/resources/podcast-media-download-statistics/getting-started/
                play\.podtrac\.com|
                chrt\.fm/track|
                mgln\.ai/e
            )(?:/[^/.]+)?|
            (?:dts|www)\.podtrac\.com/(?:pts/)?redirect\.[0-9a-z]{3,4}| # http://analytics.podtrac.com/how-to-measure
            flex\.acast\.com|
            pd(?:
                cn\.co| # https://podcorn.com/analytics-prefix/
                st\.fm # https://podsights.com/docs/
            )/e|
            [0-9]\.gum\.fm|
            pscrb\.fm/rss/p
        )/r  z^\w+://(\w+://)r  rk  r  s    r   clean_podcast_urlr
  F  s6    
& " 3# C$ 6$eS111r   0123456789abcdefc                  0    t          j        dd d          S )Nz[xy]c                 B    t           t          j        dd                   S )Nr   ro  )
_HEX_TABLErz  rv
  r   s    r   r  zrandom_uuidv4.<locals>.<lambda>`  s    Zq"0E0E%F r   z$xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxxrk  r   r   r   random_uuidv4r
  _  s    6'FFHnooor   c                     	 t           j                            |           }|rt          j        |d           dS # t          $ r(}t          |           |d|            Y d }~dS d }~ww xY w)NT)exist_okzunable to create directory F)rx   ry   r{   makedirsr   r
  )ry   r  dnrr  s       r   make_dirr
  c  s    W__T"" 	+KT****t   I*I9C99:::uuuuus   7; 
A-A((A-c                      ddl m}  t          j                            t          j                             |             d                             S )Nr    _get_variant_and_executable_pathr   )rj  r
  rx   ry   r{   r
  r
  s    r   get_executable_pathr
  o  sE    9999997??27??+K+K+M+Ma+PQQRRRr   c              #   h  K   t          j        d          pt          d          }t           j                            ||           V  t          j        d          }|r"t           j                            ||           V  t           j                            t          d          d|            V  d S )NXDG_CONFIG_HOMEz	~/.configappdata~r   )rx   getenvr   ry   r   )package_namexdg_config_homeappdata_dirs      r   get_user_config_dirsr
  u  s      i 122T6G6T6TO
',,
5
5555 )I&&K 6gll;55555 ',,(--/A</A/A
B
BBBBBBr   c              #   N   K   t           j                            d|           V  d S )Nz/etc)rx   ry   r   )r
  s    r   get_system_config_dirsr
    s(      
',,v|
,
,,,,,,r   c                  p    t          j                     t          j        di |                                 z   S )zQ
    Returns TZ-aware time in seconds since the epoch (1970-01-01T00:00:00Z)
    r   )rd  r  r  r   )r   s    r   time_secondsr
    s1     9;;////==????r   HS256)algr  c                   |dv sJ d| d            d }d }|dd}|r d|v rd	|v r|}n|                     |            | ||                    } | ||                     }t          j        |                                |d
z   |z   t          j                  }	 ||	                                          }
|d
z   |z   d
z   |
z                                   S )N)r
  zUnsupported algorithm "r  c                 R    t          j        | d                                          S )N)rk  r   )
separators)r|   r  rf   )r   s    r   jwt_json_bytesz"jwt_encode.<locals>.jwt_json_bytes  s#    z#*555<<>>>r   c                 P    t          j        |                               d          S )N   =)r  urlsafe_b64encoderk  )
bytestrings    r   jwt_b64encodez!jwt_encode.<locals>.jwt_b64encode  s!    '
33::4@@@r   JWT)r
  typr
  r
     .)rj  hmacnewrf   hashlibsha256digestry  )payload_datar   r
  r  r  r  header_data
header_b64payload_b64rY  signature_b64s              r   
jwt_encoder    s.   *>>>>? ? ?A A A  K  (G 0 0!KKw'''~~k::;;J-| < <==K 	zD0;>OOA!M!((**--M+d2]BJJLLLr   c                     |                      d          \  }}}t          j        t          j        | d                    S )Nr   z===)r   r|   r  r  urlsafe_b64decode)jwt_header_b64r  _signature_b64s       r   jwt_decode_hs256r    s<    /2yy~~,Kn:f.+/B/B/BCCDDDr   c                     t           j        dk    rt          j        sdS nt          j        d          sdS 	 |                                 S # t          $ r Y dS w xY w)Nr#  FTERM)rx   r   r   r   r
  isattyr=  )r  s    r   rg  rg    sn    	w$$ 	5	Yv u}}   uus   A 
AAc                     t                      dk     rdS ddl} ddl} ddl}d} | j        dd          }t          j        dt
          j                  }	 | j        	                     |j
        |                    }| j                                        }|                    | | j        |                    }|st          d	          |                    || j                            |j        |z                      }|st          d
          	 t          j        |           n# t          j        |           w xY wdt$          _        t&                                           dS )z(Ref: https://bugs.python.org/issue30075 )ru  r   iZ)  Nr   r  r  F)use_last_errorzCONOUT$zGetConsoleMode failedzSetConsoleMode failedT)rc  r  ctypes.wintypesr  WinDLLrx   r  r  r  r  r  r  GetConsoleModebyrefrg   SetConsoleModer   r$  r   rg  cache_clear)r  r  "ENABLE_VIRTUAL_TERMINAL_PROCESSINGdllr  h_outdw_original_modesuccesss           r   windows_enable_vt_moder-    s|   ~--MMMMMM)/&
&-
5
9
9
9CWY	**F&&';v';F'C'CDD!?0022$$ULFL9I,J,JKK 	53444$$UFO,A,A"%GG-I -I J J 	53444	5 	 O++-----s   B=D( (D>z	\[[^m]+mc                 8    t                               d|           S r  )_terminal_sequences_rer  r  s    r   r  r    s    !%%b&111r   c                 &    t          d| z            S )Nrb  r  )numbers    r   number_of_digitsr2    s    tf}r   r  )rc  	from_dictc           	          fd|D             }|                      t          t          t          d |                              S )Nc              3   \   K   | ]&}t          j        t          |                    V  'd S r   )r   r4  r  )r   r  r3  s     r   r  z join_nonempty.<locals>.<genexpr>  s6      QQQ)(HQKK@@QQQQQQr   )r   r  r   rg  )rc  r3  r   s    ` r   r  r    sH    QQQQ&QQQ::c#vdF3344555r   c                 z    dt          fd| D             d          d         s|S fd|D             S )a3  
    Find the largest format dimensions in terms of video width and, for each thumbnail:
    * Modify the URL: Match the width with the provided regex and replace with the former width
    * Update dimensions

    This function is useful with video services that scale the provided thumbnails on demand
    rZ  c              3   P   K   | ]t          fd D                       V   dS )c              3   F   K   | ]}                     |          pd V  dS r  rS  )r   r  r  s     r   r  zAscale_thumbnails_to_max_format_width.<locals>.<genexpr>.<genexpr>  s1      ..1swwqzzQ......r   N)rK  )r   r  _keyss    @r   r  z7scale_thumbnails_to_max_format_width.<locals>.<genexpr>  sA      BB3.......	.	.BBBBBBr   )r   r   r  r   c                     g | ]_}t          d t          j        t          d                   |d                    it	          t          d                    |          `S )r  r   Tr^   )r  r   r  r   rI  r)  )r   r  r9  max_dimensionsurl_width_res     r   r   z8scale_thumbnails_to_max_format_width.<locals>.<listcomp>  s{         	BF<^A->)?)?5AQRRSUN4888999	F 	F  r   r  )formats
thumbnailsr<  r9  r;  s     `@@r   $scale_thumbnails_to_max_format_widthr?    s      EBBBB'BBB  N !       $	   r   c                    | sdS t          j        d|           }|sdS t          |                    d                    t	          |                    d                    t	          |                    d                    fS )zC Parse value of "Range" or "Content-Range" HTTP header into tuple. )NNNz bytes[ =](\d+)-(\d+)?(?:/(\d+))?r   r   r  )r   r  r  r
  r  )rv  crgs     r   parse_http_rangerB  	  ss      
)7
?
?C  syy||k#))A,,77SYYq\\9R9RRRr   c                 r    | r*t           j        dk    rdnd}t          d|  d| d           t          j        S )Nr#  zCtrl+ZzCtrl+DzReading z from STDIN - EOF (z
) to end:
)rx   r   rl  r~   r  )whateofs     r   
read_stdinrF    sH     K'T//hhxIIIIIIJJJ9r   c                    t           D ]-\  }}|                     |          r|t          |          fc S .|                     dd          } t	          j        d|           }|r'|                    d                                          nddfS )zN
    Detect the text encoding used
    @returns (encoding, bytes to skip)
    r
  r   s   (?m)^#\s*coding\s*:\s*(\S+)\s*$r   Nr   )r  rp  r   r  r   r   r
  ry  )r  rf  rk  r   s       r   determine_file_encodingrH    s      ! !S??3 	!C=   	!
 <<s##D87>>D%)34::a==!!!tQ66r   c                       e Zd ZdZdZdZdZddZddZd Z	d Z
eg fd            Zed             Zdd	d
Zed             Zd Zd ZdS )ConfigNFc                 Z    ||c| _         | _        t                      g c| _        | _        d S r   )r  labelr   _loaded_pathsconfigs)r   r  rL  s      r   r  zConfig.__init__2  s+    "(%TZ+.55"(DLLLr   c                 Z    | j         rJ ||c| _        | _        |                                 S r   )_Config__initializedown_argsr  load_configs)r   r   r  s      r   initzConfig.init6  s3    %%%%'+X$t}  """r   c                    d}| j         rht          j                            | j                   }t          j                            |          }|| j        v rdS | j                            |           d| _        | j        	                    | j
                  \  }}| j
        | _        |j        pg D ]8}|dk    r]|| j        v r| j                            |           |                     t          j        t!          d          d          d           ft          j                            |t%          |                    }t          j                            |          r t          j                            |d	          }t          j                            |          s| j                            d
| d           |                     |                     |          |           :dS )Nr  FTr  optionscommentsr  rL  zyt-dlp.confzconfig location z does not exist)r  rx   ry   realpathr{   rM  rr  rP  r  parse_known_argsrQ  parsed_argsconfig_locationsappend_configr  r   rF  r   r  isdirr
  error	read_file)r   	directorylocationoptsr   s        r   rR  zConfig.load_configs;  s   	= 	-w''66H11I4---u""8,,,!+..t}==a=-3 	C 	CH3t111"&&x000""5;z)/D/Dt#T#T#T\c"dddw||I{8/D/DEEHw}}X&& A7<<-@@7>>(++ P!!"NX"N"N"NOOOt~~h77BBBBtr   c                 $   t          | j        d| j        rd| j         dndd          }t          | j        d uo@|d                                          |dd           d|                     | j                   gd	 | j        D             R d
diS )Nconfigr  r  r\  r  r   r   r  c              3   X   K   | ]%}d |                      d d          dd         V  &dS )r]  z
| r   Nr  r   s     r   r  z!Config.__str__.<locals>.<genexpr>\  sA      GGQh1hhtV,,QRR0GGGGGGr   rc  r]  )r  rL  r  rQ  r  hide_login_inforN  )r   rL  s     r   rO  zConfig.__str__V  s    J$-"O"6dm"6"6"6"6R   M%qU1X^^-=-=*quQRRy*q*qDL`L`aeanLoLo*q*qGG$,GGG     	r   c                 F   	 t          | d          }n# t          $ r |cY S w xY w	 t          |                    d                    \  }}|                    |t
          j                   n# t          $ r d }Y nw xY w	 |                                                    |pt                                }t          j
        |d          }n'# t          $ r}t          d|  d|           d }~ww xY w	 |                                 n# |                                 w xY w|S )Nr  i   TrV  zUnable to parse "z": )r  r   rH  readseekr  SEEK_SETry  ri   r  r   rg   r4  r$  )r  r   optionfrk  skipcontentsresrr  s           r   r`  zConfig.read_file_  sL   	8T**GG 	 	 	NNN		/S0A0ABBICLLr{++++ 	 	 	CCC		||~~,,S-G4E4G4GHHH+h666CC 	E 	E 	ECCCcCCDDD	E  MMOOOOGMMOOOO
sI    ""AA, ,A;:A;?AC 
D 
C/C**C//D Dc                 0   h d}t          j        dd                    d |D                       z   dz             fd}t          t	          ||                     } t          |           D ]'\  }}||v r|dz   t          |           k     rd| |dz   <   (| S )	N>   -p-u
--password
--username--ap-password--ap-username--video-passwordz	^(?P<key>r  c              3   >   K   | ]}t          j        |          V  d S r   r  )r   pos     r   r  z)Config.hide_login_info.<locals>.<genexpr>w  s*      1W1WB")B--1W1W1W1W1W1Wr   z)=.+$c                 f                         |           }|r|                    d          dz   S | S )Nr   z=PRIVATE)r   r
  )or  eqres     r   	_scrub_eqz)Config.hide_login_info.<locals>._scrub_eqy  s4    

1A wwu~~
22r   r   PRIVATE)r   rO  r   r  r  r  r   )rc  PRIVATE_OPTSr}  r  optr|  s        @r   rg  zConfig.hide_login_infot  s    uuuz+1W1W,1W1W1W)W)WX[bbcc	 	 	 	 	 C	4(())!$ 	* 	*HCl""sQwT':': )S1Wr   rX  c                     t          |           | j        |          }| j        |_         |j        | r| j                            |           d S d S r   )r{  r  rM  rS  rN  r   )r   rL  r   re  s       r   r]  zConfig.append_config  s]    dDK//#16; 	(L'''''	( 	(r   c              #   p   K   t          | j                  D ]}|j        E d {V  | j        pg E d {V  d S r   )r.  rN  all_argsr[  )r   re  s     r   r  zConfig.all_args  sb      t|,, 	' 	'F&&&&&&&&#)r)))))))))r   c                 2     | j         j        | j        fi |S r   )r  rZ  r  )r   r   s     r   rZ  zConfig.parse_known_args  s!    +t{+DMDDVDDDr   c                 @    | j                             | j                  S r   )r  
parse_argsr  r  s    r   r  zConfig.parse_args  s    {%%dm444r   r   rT  )r   r   r   rQ  r[  r  rP  r  rS  rR  rO  r  r`  rg  r]  r  r  rZ  r  r   r   r   rJ  rJ  ,  s       HKHM5 5 5 5# # # #
  6   $&    \(   \" *. ( ( ( ( ( * * X*
E E E5 5 5 5 5r   rJ  c                      d t           j                            t          t          j        |                     D             S )zLMerge dicts of http headers case insensitively, prioritizing the latter onesc                 >    i | ]\  }}|                                 |S r   )rl  )r   r  r  s      r   r  z!merge_headers.<locals>.<dictcomp>  s&    [[[TQAGGIIq[[[r   )r  chainfrom_iterabler  rI  rN  )r  s    r   merge_headersr    s3    [[Y_%B%B3tzSXCYCY%Z%Z[[[[r   c                 r     t          j                   t          j                    fd            }|S )zCache a methodc                 X    j         | g|R i |}|                                 t          |j                                                  dd          }t          |                               di                               j        i           }||vr | g|R i |||<   ||         S )Nr   _cached_method__cache)r
  apply_defaultsrK  	argumentsr   r  r+  r   )r   r   r   
bound_argsr   cacher  r   s         r   wrapperzcached_method.<locals>.wrapper  s    #Y^D:4:::6::
!!###J(//11221226T

%%&=rBBMMajZ\]]e41$111&11E#JSzr   )r   r   r   r   )r  r  r   s   ` @r   cached_methodr    sN    !!$$I_Q      Nr   c                   6     e Zd ZdZd fd	ZdddZd Z xZS )	classpropertyz7property access for class methods with optional cachingNc                 t    |st          j        | g|R i |S t                                          |           S r   )r   r   rh  __new__)rE  r   r   r   ri  s       r   r  zclassproperty.__new__  sB     	;$S:4:::6:::wws###r   F)r  c                T    t          j        | |           || _        |ri nd | _        d S r   )r   update_wrapperr   rq  )r   r   r  s      r   r  zclassproperty.__init__  s0     t,,,	!+bbtr   c                     | j         |                     |          S || j         vr|                     |          | j         |<   | j         |         S r   )rq  r   )r   r   rE  s      r   __get__zclassproperty.__get__  sJ    ;99S>>!###yy~~DK{3r   r   )r   r   r   r/  r  r  r  r  r  s   @r   r  r    sp        AA$ $ $ $ $ $
 ', , , , , ,
             r   r  c                   8    e Zd ZddZd Zed             Zd ZdS )r  Nc                 N    t          j        | |           ||c| _        | _        d S r   )r   r  r   _function_with_repr__repr)r   r   r  s      r   r  zfunction_with_repr.__init__  s)     t,,,!%u	4;;;r   c                      | j         |i |S r   )r   r?  s      r   r  zfunction_with_repr.__call__  s    ty$)&)))r   c                 .    t          j        | |          S )N)r  )r   r   )rE  r  s     r   r  zfunction_with_repr.set_repr  s     E2222r   c                 T    | j         r| j         S | j        j         d| j        j         S r  )r  r   r   r   r  s    r   rM  zfunction_with_repr.__repr__  s2    ; 	;)&AA)?AAAr   r   )r   r   r   r  r  rM  r  rM  r   r   r   r  r    sf        - - - -* * * 3 3 [3B B B B Br   r  c                   .    e Zd ZdZd Zed             ZdS )	NamespacezImmutable namespacec                 N    t          | j                                                  S r   )r  __dict__r   r  s    r   r  zNamespace.__iter__  s    DM((**+++r   c                 4    | j                                         S r   )r  rN  r  s    r   items_zNamespace.items_  s    }""$$$r   N)r   r   r   r/  r  r  r  r   r   r   r  r    sD        , , , % % X% % %r   r  )r  r  r	  r  r  r  )	3g2r  f4vmk3ddivxmpgr  r  r  )	aiffalacr  r  r  r  r  rV  r  )r  aper  f4af4bru  rw  ogaogxspxrW  wmarz  )r"  r#  r(  )mhtml)r0  vttasslrc)f4fr  r  smilr  )common_videor  common_audioaudior>  storyboards	subtitles	manifestsc                       e Zd ZdZ eg dddddddd	d
ej        dddddddddddddddddddddd d!ej        d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3ej        d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBej	        dCdDdEdFdGdHdIdJdKdLdMdNdOej
        ej        dPdQdRdSdTdU          Z fdVZedWdXdY            Z xZS )Zr  z
    Mitigation exception for uncommon/malicious file extensions
    This should be caught in YoutubeDL.py alongside a warning

    Ref: https://github.com/yt-dlp/yt-dlp/security/advisories/GHSA-79w7-vh3h-8g4j
    r  r|   metar  r  tempuncutr  ytdlasxry  m2tm2tsm2vm4sr
  mp2vrK  mper  mpeg1mpeg2mpeg4mxfogmqtra  swfr  vidvobr  3gaac3adtsaifaudtsrx  r  r  modmpgamp1mp2rU  mpar  shnxmr  r  r   heicr)  imagejfifr*  jper!  jxlr$  r&  r%  r'  r-  r+  ismtjson3r/  sccsrv1srv2srv3ssar,  r.  r2  r
  r  r  sbvr  r
  c                ^    t                                          d|           || _        d S )Nzunsafe file extension: )rh  r  	extension)r   r  ri  s     r   r  z_UnsafeExtensionError.__init___  s/    @9@@AAA"r   Fr  c                   |d S d|v sd|v r | |          |sI|                     d          \  }}}|dk    rdx}}|                                | j        vr | |          |S )Nr   r  r   binr  )r  r,  ALLOWED_EXTENSIONS)rE  r  r  r   lasts        r   r  z(_UnsafeExtensionError.sanitize_extensionc  s    4)ty00#i..  	%"--c22JAq$u}}#22	Dzz||3#999c)nn$r   )r   r   r   r/  	frozensetMEDIA_EXTENSIONSr  r  r>  r  r  r  r  r  rM  r  r  r  s   @r   r  r    s         # f$f$ 	f$ 		f$
 	f$ 	f$ 	f$ 	f$ 	f$ 	f$ 
	f$ 	f$ 	f$  	!f$" 	#f$$ 	%f$& 	'f$( 	)f$* 	+f$, 	-f$. 	/f$0 	1f$2 	3f$4 	5f$6 	7f$8 	9f$: 	;f$< 	=f$> 	?f$@ 	Af$B 	Cf$D 	Ef$F 	Gf$H 	If$N 
	Of$P 	Qf$R 	Sf$T 	Uf$V 	Wf$X 	Yf$Z 	[f$\ 	]f$^ 	_f$` 	af$b 	cf$d 	ef$f 	gf$h 	if$j 	kf$l 	mf$n 	of$p 	qf$r 	sf$x 
	$yf$z 	{f$| 	}f$~ 	f$@ 	Af$B 	Cf$D 	Ef$F 	Gf$H 	If$J 	Kf$L 	Mf$N 	Of$P 	Qf$R 	Sf$T 	Uf$V 	Wf$\ 
	#]f$^ 	_f$` 	af$b 	cf$d 	ef$f 	gf$h 	if$j 	kf$l 	mf$n 	of$p 	qf$r 	sf$t 	uf$v 	wf$| 
	#}f$~ 
	%f$@ 	Af$B 	Cf$D 	Ef$F 	Gf$H 	If$J 	Kf$ f fP# # # # # 9>     [    r   r  c                       e Zd ZdZd\  ZZd Zd Zed             Z	e	j
        d             Z	d Zeddd	d
            ZdS )RetryManagerzUsage:
        for retry in RetryManager(...):
            try:
                ...
            except SomeException as err:
                retry.error = err
                continue
    r  c                 F    |pd| _         t          j        |fi || _        d S r   )retriesr   r   error_callback)r   _retries_error_callbackr   s       r   r  zRetryManager.__init__  s.    }1'/JJ6JJr   c                 >    | j         t          uo| j        | j        k    S r   )_errorr   r}  r  r  s    r   _should_retryzRetryManager._should_retry  s    {*,M1MMr   c                 0    | j         t          u rd S | j         S r   )r  r   r  s    r   r_  zRetryManager.error  s    ;*$$4{r   c                     || _         d S r   )r  )r   r   s     r   r_  zRetryManager.error  s    r   c              #      K   |                                  rct          | _        | xj        dz  c_        | V  | j        r&|                     | j        | j        | j                   |                                  ad S d S rS  )r  r   r_  r}  r  r  r  s    r   r  zRetryManager.__iter__  s        "" 	L#DJLLALLJJJz L##DJdlKKK   "" 	L 	L 	L 	L 	Lr   N)r_  ro   c          
      
   ||k    r6|r2|dk    r ||  d|dz
   d          n |t          |                     S | |s ||           S t          | t                    r)t          t	          | j                  p| j        d          }  ||  dt          |dd           d| d	| d
           t          |          rt           ||dz
                      n|}|r& |d|dd           t          j        |           dS dS )z&Utility function for reporting retriesr   z. Giving up after z retriesr   z
. RetryingNz %sz (r   z)...)r   z	Sleeping z.2fz seconds ...)r   r   r   r}  r  r{  rx  r  r
  r  rd  sleep)	r~  r  r  
sleep_funcr  rt  r_  ro   delays	            r   report_retryzRetryManager.report_retry  sb    7?? jMRUVYYuuHHUQYHHHIII\a\abefgbhbh\i\iiG 	D477N>** 	D;qw//=1:sCCAWW\&$>>WW%WW'WWWXXX:B::N:N^jj519555666T^ 	D4U4444555Ju	 	r   )r   r   r   r/  r}  r  r  r  r  r_  setterr  r  r  r   r   r   r  r  u  s          OGVK K KN N N   X
 \  \L L L IMVZ     \  r   r  c                     t          | t                    r| n|                                 }|                                 d| S )Nr\  )r   r   ie_keyr,  )r}  r|  r  s      r   make_archive_idr    s>    b#&&7RRBIIKKFllnn))x)))r   c                     |dk    r|dk    sJ | t          |           ||z   k    r| S | d |dz
            d|r| | d          nd S )Nr  r   r  r  r  )r|  leftrights      r   truncate_stringr    sh    !88



yCFFdUl**		l<<U:q%zz<<<r   )	use_regexr  c                8   d|v s
J d            t          |pg           }| D ]}|                    d          }|r
|dd          }||v r/|s||         nd ||         D             }t          |||          }V|r8t          t	          j        |t          j                  j        |d                   n||d         v r|gnd }|t          |          |r#|D ]}||v r|	                    |           ||v  |
                    |           t          |          S )Nr  z"all" alias is requiredr  r   c                 V    g | ]&}|                     d           r
|dd         nd | 'S )r  r   Nr  )r   r  s     r   r   z+orderedSet_from_options.<locals>.<listcomp>  sN     7R 7R 7R<=c**7!""A7R 7R 7Rr   )r  )r  rp  orderedSet_from_optionsrg  r   rO  Ir*  r4  r   r  r  )	rU  
alias_dictr  r  	requestedr   discardcurrentr  s	            r   r  r    s   J 9U[b!!I & &..%% 	abb'C*)0 R*S// 7R 7RAKC7R 7R 7RC 0ZyQQQIQZ D6"*S"$//9:e;LMMM!$
5(9!9!9t 	?S//! 	& + +i''$$T*** i''+ W%%%%i   r   c            
       p   e Zd ZdZdZdZdZi dddg dd	d
ddg dd	ddddg ddddddg dddddddddddddddddddd d!d"ddd#d$d% d&d'ddd(d)ddd*d+d,d-d
d*d+d.d/d0d1d2d3d4d0d2d5d6d7d8id9d8d:d;d<d=d>d;d?d7d@ii dAd7d@idBd7d@idCd@dDd;dEd7d@idFd7d@idGd7d@idHd7d@idId0dJd2d3dKdLd$dMdNd#dOd@dP dQdRd#dSd8dT dQdUdLdVdMdWd#dXdY dZd>d[d<dMd\d[d'dMd1d[d/dMdJd[dIdMi dd[ddMd:d[d9dMdDd[dCdMd]d[dWdd^d_d[dWdd^d`d[dUdd^dad[dNdd^dbd[dEdd^dcd[dFdd^ddd[dGdd^ded[dBdd^dfd[dRdd^dgd[dHdd^dd[ddd^dd[ddd^dhd[ddd^did[d
dd^d[d)dd^d[d)dd^d[d-dd^d[d-dd^d[d'dd^d[d'dd^djZdk Zdl Z	dudmZ
dn Zdo Zdp Zdq Zedr             Zds ZdtS )vFormatSorterzT *((?P<reverse>\+)?(?P<field>[a-zA-Z0-9_]+)((?P<separator>[~:])(?P<limit>.*?))?)? *$)hidden
aud_or_vidhasvidie_prefrb  qualityro  fpshdr:12rb  channelsrc  sizer  asrprotor  hasaudsourcer   )r  r   r!  r"  rb  r#  ro  r$  r%  zvcodec:vp9.2r&  rc  r'  r  r(  r)  r  r*  r+  r   )r*  rb  r#  tbrfilesizevbrr\  r[  r)  vextabraextr$  	fs_approxr+  r   rb  orderedT)zav0?1z
vp0?9\.0?2zvp0?9[hx]265|he?vc?z[hx]264|avczvp0?8z	mp4v|h263rN  r  Nra  )r{  r  orderrc  )z[af]laczwav|aiffrV  z
vorbis|oggr  zmp?4a?r  zac-?4z	e-?a?c-?3zac-?3r  r  Nra  rj  rd  )r  z(hdr)?12z
(hdr)?10\+z(hdr)?10hlgr  sdrN)r{  r  r
  r5  r)  r  )
z	(ht|f)tpsz	(ht|f)tp$zm3u8.*z.*dashwebsocket_fragzrtmpe?r  zmms|rtspzws|websocketf4r/  	video_ext)r  r  r  r  r  ra  )r  r  r  r  r  ra  )r{  r
  r5  
order_freer1  	audio_ext)r  r  r  r  rV  web[am]r  ra  )r  rV  r=  r  r  r  r  ra  )r{  r  r
  r5  r;  r  F	extractori)visibleforcedr{  rB  r   multiplerf  c                 N    t          t          d | D                                 S )Nc              3   "   K   | ]
}|d k    V  dS )ra  Nr   )r   r  s     r   r  z(FormatSorter.<lambda>.<locals>.<genexpr>  s&      5N5Naa6k5N5N5N5N5N5Nr   )r  r  r  s    r   r  zFormatSorter.<lambda>  s%    c#5N5N25N5N5N2N2N.O.O r   )r?  r@  r{  r
  functionr"  )priorityr{  r!  boolean)ra  )rF  r
  r{  not_in_listr*  )r
  r{  rH  rb  r  language_preferencerl  )convertr
  r   r#  )rJ  r   r-  rJ  r  r2  filesize_approx)rJ  r
  r   r.  	format_idr\  
float_noner[  r$  r&  audio_channelsr,  r.  r0  r(  r+  source_preferencecodeccombined)r{  r
  r  )r,  r.  r0  c                 >    t          t          d |           d           S r   nextrg  rD  s    r   r  zFormatSorter.<lambda>  s    d6$+;+;T&B&B r   )r{  r
  rJ  rE  r'  )r-  r2  c                 >    t          t          d |           d           S r   rS  rD  s    r   r  zFormatSorter.<lambda>  s    VD"-=-=t(D(D r   r  )r/  r1  ro  )r\  r[  c                 @    t          t          d |           d          S )Nr   r  )r.  rg  rD  s    r   r  zFormatSorter.<lambda>  s    s6$+;+;Q'G'G'G r   )r{  r
  rE  alias
preference	dimension)r{  r
  
deprecated
resolutionr  bitratetotal_bitratevideo_bitrateaudio_bitrate	frameratefilesize_estimate
sampleratevideo_codecaudio_codec)r  	has_videor  	has_audior>  extractor_preferencec                     || _         g | _        |                     | j         j        |           |j                            d          r!|                     | j         j                   d S d S )Nverbose)r$  _orderevaluate_paramsr:  r  print_verbose_infowrite_debug)r   r$  field_preferences      r   r  zFormatSorter.__init__5  sj    TX_.>???:>>)$$ 	:##DH$899999	: 	:r   c                 d   || j         vr.|dv rdS | j                            d| d           i | j         |<   | j         |         }||vra|                    d          }|dk    r|dk    rdn|d	v r|fn|}n/|d
k    r|dk    rdn|rdnd}nddg dd                    |          }|||<   ||         S )N)r@  rF  FzUsing arbitrary fields (zI) for format sorting is deprecated and may be removed in a future versionr{  r
  r>  rX  )rQ  rA  rJ  r3  r5  float_stringrf  Tr   )r{  r?  r5  rH  )settingsr$  deprecated_featurer  )r   r
  r   prop_objtype_r   s         r   _get_field_settingzFormatSorter._get_field_setting<  s   %%,,,uH'' )\5 )\ )\ )\ ] ] ]#%DM% ='hLL((Eg~~*/;*>*>,,PUYqPqPqUHHw|	!!%*i%7%7''u=b^^Zb#*tbY`aaeefijj#HSM}r   c                    ||sd S n|                                 }|                     |d          }|dk    rd S |dk    r|S |dk    rt          |          S |dk    rt          |          S |dk    r| j        r|                     |d          p|                     |d          }|                     |d          }t          |          }d	|v r|                    d	          n|d
z   }|r:|8t          |          D ]#\  }	}
|
rt          j	        |
|          r||	z
  c S $||z
  S |||v r|                    |          n|z
  S |
                                rt          |          S d| j        |         d<   |S )NrJ  rf  r.  rM  r  r5  r;  r  r  r   )r,  ru  r  r  _use_free_orderr   r3  r  r   r   	isnumericr  rq  )r   r
  r   convert_none
conversion
order_listr  list_length	empty_posr  r  s              r   _resolve_field_valuez!FormatSorter._resolve_field_valueO  s   = t KKMME,,UI>>
!!4!!L<'' '''7""u%%%7""._43J3J5R^3_3_  Ldhd{d{  }B  DK  eL  eLJ//w??Ij//K02j0@0@
((,,,kTUoI eU. )* 5 5 / /HAu /%!7!7 /*Q..."Y.."*ATATj&6&6u&=&=&=Zcdd   U||#2:e$Y/r   c           	      <    |                     dd           _        |                     dg            _        | _         fd}t	           fd j        D                       |                     dd          rt	                      nt	           fd j        D                       z   t	           j                  z   t	          |          z    j        z   }|D ]}t          j         j        |          }|t          d| d	          |
                    d
          }|J                     |d          dk    rO|                     |d
          }}                     |d          r! j                            d| d| d           |
                    d          d u}	|
                    d          dk    }
|
                    d          }|d u}                     |d          dk    }|o|o                     |d           }|r                     |d
          n|f}|r|                    d          n|r|fnt	                      }t          |          }t!          |          D ]-\  }} |||	|
||k     r||         n|r
|s|d         nd            .d S )Nprefer_free_formatsFformat_sortc                 &   |                                  } | j        v rd S j                            |                                | |          }||dn|||d}| j        v r"j        |                              |           d S |j        | <   d S )NF)r  closest
limit_textr  )r,  rj  r   r~  rq  rj  )r
  r  r  r  r  r  r   s         r   add_itemz.FormatSorter.evaluate_params.<locals>.add_itemv  s    KKMME##Ku%%%--eZ@@E"$)M55w(	   D
 %%e$++D11111'+e$$$r   c              3   H   K   | ]}                     |d           |V  dS )r@  Nru  r   r
  r   s     r   r  z/FormatSorter.evaluate_params.<locals>.<genexpr>  s9      ^^ET5L5LUT\5]5]^%^^^^^^r   format_sort_forcec              3   H   K   | ]}                     |d           |V  dS )rF  Nr  r  s     r   r  z/FormatSorter.evaluate_params.<locals>.<genexpr>  s:      iiUd>U>UV[]g>h>hi5iiiiiir   zInvalid format sort string "z" given by extractorr
  r{  rW  rZ  zFormat sorting alias zB is deprecated and may be removed in a future version. Please use z insteadr  rL  r
  r  rQ  
same_limitr   r   )r  rw  
_sort_user_sort_extractorrK  r   r   r   r  r   r
  ru  r$  rr  r   r   r  )r   r:  sort_extractorr  	sort_listr  r   r
  rW  r  r  r  	has_limithas_multiple_fieldshas_multiple_limitsfieldslimitslimit_countr  r  s   `                   r   rk  zFormatSorter.evaluate_paramsq  s@   %zz*?GG **]B77-	, 	, 	, 	, 	," ^^^^T\^^^^^ **%8%@@ juwwwiiiidliiiiik DO$$% (-^'<'<= @D|L 	  	$ 	$DHTZ..E}$%^D%^%^%^___KK((E}&&uf55@@$d&=&=eW&M&Mu**5,?? oH// 1n 1n 1n^c1n 1n 1n o o okk),,D8Gkk+..#5GW--J"$.I"&"9"9%"H"HJ"V"+"x0C"xDLcLcdikwLxLxHx@SaT,,UG<<<Z_YaF.AnZ%%c***XaGn
}}glgngnFf++K#F++ $ $AGW&'+oo+4 #=P #fQii"$ $ $ $$/	$ 	$r   c                      j         r6 |d                    d                     j                                         j        r6 |d                    d                     j                                        |d                    d                     fd j        D                                            d S )NzSort order given by user: {}rJ  z!Sort order given by extractor: {}zFormats sorted by: {}c                 t   g | ]}                     |d           d                                         |d          rdnd|                     |d          Wd                                         |d          rd	nd
                     |d                               |d                    nd          S )r?  z{}{}{}r  r  r  r  Nz{}{}({})r  r
  r   r  )ru  r  r  s     r   r   z3FormatSorter.print_verbose_info.<locals>.<listcomp>  s     >S >S >S (?(?y(Q(Q>Shoo**5)<<DCC"e &&ul;;G T%<%<UI%N%NWccTW"55e\JJ"55eWEEG G G NP?Q ?Q >S >S >Sr   )r  r  r   r  rj  )r   rm  s   ` r   rl  zFormatSorter.print_verbose_info  s    ? 	[K6==dii>X>XYYZZZ 	eK;BB499TMaCbCbccddd+22499 >S >S >S >S >S >S >S 4T 4T U U 	V 	V 	V 	V 	Vr   c                    |                      |d          }|                      |d          }|                      |d          }|dk    r#|                      |d          }||||k    rd}n`|dk    r=|                      |d          }	|                      |d	          }
|	||	v r|
||
vrd
nd}n|dk    r|                     ||d          }t          ||                      |d                    }|                      |d          dk    o|d u}|r|}|dnR|sd|d
fnK|r d
t          ||z
             |r||z
  n||z
  fn)|s|||k    rd
|d
fn||r||k    s||k    rd
| d
fnd|d
fS )Nr  r  r  r>  rB  rl  rG  in_listrH  r   r3  Tr   r  rJ  r.  )ir   r   )ru  r~  r  abs)r   format_r
  rt  r   r  r  r  maximumr  rH  val_numis_nums                r   &_calculate_field_preference_from_valuez3FormatSorter._calculate_field_preference_from_value  s   ))%;;))%;;''w77K--eU;;G}!4'9I9Ii--eY??G11%GGK"?ew.>.>[EX\ait\t\tAA|~EEi--eUDAAE  t/F/Fui/X/XYYY((	::hF^7Z^K^ 	E!M*0 $a]]^e $a#eem,,,w.YeemmETYMZZ*1 $u}QVa]]',}}Ue^^X]`eXeXea%^^%^	%r   c                                           |d          } fd|dk    rDd}                      |d          }                       |d          fd|D                       }n |          }                     |||          S )Nr{  c                 V                                             | d                    S )Nr
  )r  ru  )r  r  r   s    r   r  z:FormatSorter._calculate_field_preference.<locals>.<lambda>  s#    gkk$*A*A!W*M*MNN r   rA  r
  rE  c              3   .   K   | ]} |          V  d S r   r   )r   r  	get_values     r   r  z;FormatSorter._calculate_field_preference.<locals>.<genexpr>  s,      >c>cPQyy||>c>c>c>c>c>cr   )ru  r  )r   r  r
  rt  actual_fieldsr   r  s   ``    @r   _calculate_field_preferencez(FormatSorter._calculate_field_preference  s    ''v66NNNNN	JE 33E7CCM>D++E:>>>c>c>c>cUb>c>c>cccEEIe$$E::7E5RWXXXr   c                 (                          d          st                      d<                         d          s.d v r*t           d                                                    d<                         d          dk    r,                      d          dk    r d         nd d<   d d<   n d          d<   d d<                         d	          H                      d          d
k    r/t	          j        d                      d          pd          rd d	<                         d          dk    rd d<                         d          dk    rd d<                         d          s0                      d          dk    rt           fd          pd  d<                         d          s0                      d          dk    rt           fd          pd  d<                         d          st           fd          pd  d<   d S d S )Nr  r  r  rb  ra  rc  r<  r:  rX  r  r4  r  ir   r.  r0  c                  &     d          d         z
  S )Nr,  r0  r   r  s   r   r  z3FormatSorter._fill_sorting_fields.<locals>.<lambda>      VE]VE]-J r   c                  &     d          d         z
  S )Nr,  r.  r   r  s   r   r  z3FormatSorter._fill_sorting_fields.<locals>.<lambda>  r  r   r,  c                  &     d          d         z   S )Nr.  r0  r   r  s   r   r  z3FormatSorter._fill_sorting_fields.<locals>.<lambda>  r  r   )r  r  r  r,  r   r   r  r  s   `r   _fill_sorting_fieldsz!FormatSorter._fill_sorting_fields  s[    zz*%% 	<!3F!;!;F: zz%   	AUf__)&-88>>@@F5M::h6))39::h3G3G63Q3Q&--W]F;"(F;"(-F;"(F; ::l##+

50A0AU0J0JrxXhjpjtjtu}j~j~  kE  CE  PF  PF0J $(F<  ::h6))F5M::h6))F5Mzz%   	TVZZ%9%9V%C%C$%J%J%J%JKKStF5Mzz%   	TVZZ%9%9V%C%C$%J%J%J%JKKStF5Mzz%   	T$%J%J%J%JKKStF5MMM	T 	Tr   c                 r                                      t           fd j        D                       S )Nc              3   D   K   | ]}                     |          V  d S r   )r  )r   r
  r  r   s     r   r  z4FormatSorter.calculate_preference.<locals>.<genexpr>  s3      ^^T55feDD^^^^^^r   )r  rK  rj  )r   r  s   ``r   calculate_preferencez!FormatSorter.calculate_preference  sB    !!&)))^^^^^RVR]^^^^^^r   Nr  )r   r   r   r  r   _prefer_vp9_sortytdl_defaultrq  r  ru  r~  rk  rl  r  r  r  r  r  r   r   r   r  r    s       cENGW8LL9t Q  Q  QR RL 	9t Z  Z  Z[ [L
 		D?^^^` `L 	)dZ L  L  LM ML 	[CHJ JL 	TKUZ\ \L 	et[QVWWL  	%4 4#O#OQ Q!L& 	k::'L( 	th	Zcdd)L* 	Hi	RR+L, 	G.CPRSS-L. 	w266/L0 	Y(1L2 	3DEE3L4 	([995L6 	9l+7L L8 	)\*9L: 		<(;L< 	7GHH=L> 		<(?L@ 		<(ALB 		<(CLD 		<(ELF 	g0CPRSSGLJ 	*/CDDKLL 	z,AlBBD DMLP 	.GT[DDF FQLT 	
-=>>ULV 	
-@GGI IWL^ 	g55_L` 	w;;aLb 	&AAcLd 	gAAeL L Lf 	Ww77gLh 	GkBBiLj 	7Z@@kLp 	gTJJqLr 	wdKKsLt 	gTJJuLv 	Gd$GGwLx 	'ENNyLz 	'ENN{L| 	'ENN}L~ 	gTJJL@ 	gdSSALB 	wdKKCLD 	gdKKELF 	gdKKGLH 	($OOILJ 	($OOKL LL "HDII%MM!HDII%MM%	NN)09TX Y YWL L LH\: : :  &       D6$ 6$ 6$pV V V% % %:
Y 
Y 
Y !T !T \!TF_ _ _ _ _r   r  c                 8    | |dS t          || z  dz            S )z
    @param tbr:      Total bitrate in kbps (1000 bits/sec)
    @param duration: Duration in seconds
    @returns         Filesize in bytes
    Ng     @_@)r  )r,  r  s     r   filesize_from_tbrr    s*     {h&tx#~*+++r   c                    |&t          j        |                                          }t          ||| d          }|pd}t	          |          |k    rXdt          j        |                                                                          z   }|d |t	          |          z
           |z   }t          | dd          }t          j        dk    r7t          j	        
                    |          }t	          |          d	k    rd
| }|S )Nr   r     ___z.dumpT)r  r#  i  r
  )r  md5	hexdigestr  r   rf   r  rx   r   ry   r
  )r  r|  r  trim_lengthbasenrY  r  absfilepaths           r   _request_dump_filenamer    s    {4  **,,(D#S999E$K
5zzKGK//99;;;+{SVV++,q0 ETBBBH 
w$gooh//{c!!,{,,HOr   c                   F    e Zd ZddZd Zd ZdddZdd	d
Zd Zd Z	dS )
_YDLLoggerNc                     || _         d S r   )_ydl)r   r$  s     r   r  z_YDLLogger.__init__'  s    			r   c                 L    | j         r| j                             |           d S d S r   )r  rm  r   messages     r   debugz_YDLLogger.debug*  s2    9 	+I!!'*****	+ 	+r   c                 L    | j         r| j                             |           d S d S r   )r  r  r  s     r   r  z_YDLLogger.info.  2    9 	)I(((((	) 	)r   F)oncec                N    | j         r| j                             ||           d S d S r   )r  r;  )r   r  r  s      r   r  z_YDLLogger.warning2  s4    9 	4I$$Wd33333	4 	4r   Tis_errorc                P    | j         r| j                             ||           d S d S )Nr  )r  report_error)r   r  r  s      r   r_  z_YDLLogger.error6  s7    9 	?I""7X">>>>>	? 	?r   c                 L    | j         r| j                             |           d S d S r   )r  	to_stdoutr  s     r   r  z_YDLLogger.stdout:  r  r   c                 L    | j         r| j                             |           d S d S r   )r  	to_stderrr  s     r   rG  z_YDLLogger.stderr>  r  r   r   )
r   r   r   r  r  r  r  r_  r  rG  r   r   r   r  r  &  s           + + +) ) ) (- 4 4 4 4 4 *. ? ? ? ? ?) ) )) ) ) ) )r   r  c                   D    e Zd ZdZdZdZdZdZdZe	d             Z
d
d	ZdS )_ProgressStatez
    Represents a state for a progress bar.

    See: https://conemu.github.io/en/AnsiEscapeCodes.html#ConEmu_specific_OSC
    r   r  r   r  r   c                    |d         dk    r| j         S |d         dk    r| j        S |                    d          | j         n| j        S )Nstatusfinishedr_  _percent)INDETERMINATEERRORr  VISIBLE)rE  r|  s     r   r3  z_ProgressState.from_dictP  sT    X;*$$$$ X;'!!9$%EE*$5$5$=s  3;Nr   Nc                D    |dnt          |          }d| j         d| dS )Nr   z]9;4;r  )r  r   )r   percents     r   get_ansi_escapez_ProgressState.get_ansi_escape[  s0    !!CLL54:555555r   r   )r   r   r   r/  HIDDENr  r  WARNINGr  rM  r3  r  r   r   r   r  r  C  si          FMGGEO O [O6 6 6 6 6 6r   r  r   r  )r   F)r  )r  Nr  )Tr   )r  )r  ra   )ra   F)r  rT  )r  )r<   )r   NNr   N)r   r   N)ra   N)Nr  )r   Nr   )Fr   F)r  r  N)r   )r  ({  r  r
  r  rX  r  collections.abcr   r  r  email.headerr  email.utilsenumr  r   r  r  html.entitiesr   html.parserr   r  r  r|   rd   r  r<  netrcr  rx   r   rz  r   r  rr
  r]  rp
  rI  r~   rv   rd  ry  typesr  urllib.errorr  urllib.parseurllib.requestxml.etree.ElementTreer2  r  r   compatr   r   r   r	   dependenciesr
   globalsr   r   r   r5  r   r   rg  ra  r  rI  r)  r  r  DATE_FORMATSr  r  r  r  r
  
JSON_LD_REr  r  ri   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r	  rD  rL  rV  rY  r_  JSONDecoderra  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  rQ  
namedtupler[  r`  rf  rn  rg   rp  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#  r   r=  r?  r_  rc  rl  rp  r   rq  r   r  r  r"  r  	Structurery  r#  r  r  r  r  r  POINTERargtypesBOOLrestyper  r  r  r  r  r  rp  r  r  r   	maketransr  r  r-  r  r  r  r  r  r  rO  rV  r]  r_  rd  ri  rm  ry  r{  r}  r  r  r  r  r  r  r  rU  r  r  r  r  r  r  r  r   prepend_extensionr  r  r  r  r  r  r  Sequencer  r  r  r  r!  r[  r_  r  rk  rm  rr  rt  rx  r}  Iterabler  r  r  r  r  r  r  r  r  r  r  r  r  POSTPROCESS_WHENDEFAULT_OUTTMPLOUTTMPL_TYPESSTR_FORMAT_RE_TMPLSTR_FORMAT_TYPESr  ra  r  r  r  r  r:  r?  rl  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  rI  rM  rQ  rU  r_  rd  rf  r  rm
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  DOT_URL_LINK_TEMPLATEDOT_WEBLOC_LINK_TEMPLATEDOT_DESKTOP_LINK_TEMPLATELINK_TEMPLATESr
  r
  r  r
  r
  r
  r
  r
  r
  r
  r
  r  r  rg  r-  rO  r/  r  r2  r  r?  rB  rF  rH  rJ  r  r  r  r  SimpleNamespacer  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  Enumr  r   r   r   <module>r     s                                                				              				   				   



      



                                             !           - - - - - - - -??3""1%	 	 	 	 	 	 	 	  F F F 
 M M MV V V
 
 Aaabbbbb  tCC  c'	4&:NQUPVX`cgimbn(04&:NQUPVX`cgbhjmo ow{} } } ~ ~+Z l++     	 	 	 	 	 	  4--     ! ! !    Ds
	     4  "   	 	 	 %)z    . "&UJ     '+% 
 
 
 
> > >
C C C
) ) )) ) )) ) )
) ) )
" " "" " "` ` `
\ \ \
 LWei 
 
 
 
 
6'6 '6 '6 '6 '6$+"8 '6 '6 '6V >  >  >F	, 	, 	, 	, 	,$+0 	, 	, 	,    $+0   "  *     %9 %9 %9 %9 %9) %9 %9 %9P$ $ $N   %* 4 4 4 4n  (0 0 0 0< !'     (	1 	1 	14 4 4
 "' 	. 	. 	. 	. 	.  :G G G  , , , , , , , ,QI QI QI QI QIJ QI QI QIh: : : $[#F,[\\
- - -A A A A
2 
2 
2 
2	# 	# 	# 	# 	#Y 	# 	# 	#)% )% )% )% )%^ )% )% )%X    ~   	 	 	 	 	 	 	 	

# 
# 
# 
# 
# 
# 
# 
#O O O O O. O O O! ! ! ! !N ! ! !$ $ $ $ $ $ $ $# # # # #N # # #    .   ' ' ' ' ' ' ' '
d d d d d, d d d
` ` ` ` `, ` ` `
Q Q Q Q Q+ Q Q Q
! ! ! ! !N ! ! !3 3 3 3 3 3 3 3# # # # #N # # #! ! ! ! !> ! ! !* * * * * * * * 	 	 	 	 	N 	 	 	4 4 4   D 0 0 0 0 M M M M       0 \ \ \ \D 
 
 
 
W W W W'M 'M 'M 'MT	V 	V 	V 	V) ) )5 5 5 5&  #I #I #I #I #I #I #I #IL   &      . )- 
J 
J 
J 
J 
J !SUU  # # # # #g # # # <7MMMMMM
 
 
 
 
V% 
 
 
 v}Z((H$Jz""J  -J(Lz""L "?/LIJi i iN N N N*		& 		& 		&	A 	A 	A 	A  * * *	* 	* 	*	* 	* 	* 	* 	**> > > > > > > >B 9 9 9
 }}c5\22 ==	 
 

" 
" 
 
   % 
 
 
 
 
     %T % % % % %I I I
 
 
 
     D- D- D-N) ) ): $)     <" " "         8J J JM M M  K K K* * *
6 6 6 , , , 	 	 	 	, , , ,$ $ $ 	 	 	 	1 1 1 18 8 8 8o o o   5G 5G 5Gp	I 	I 	I 	I &I%&7>> %I%&7??   "            +m#2G	H 	H 	H 	H   V$ V$ V$ V$ V${' V$ V$ V$r() () () () () () () ()V& & & & &	 & & &R$ $ $ $ $ $ $ $4E E E E E E E EP    M M M6 6 6&B B B $( ; ; ; ; ;( / / /  ,   < '2o&>j M M M M ) L L L L $(b     Q Q Q Q 54 8 8 8 8   (9'8':':8 P P P P
 

	
 
     $$ $ $  O O O O O Od   B  ,T 
  ## "  &    !& 9 9 9 9 9
   # # #  
* * * ' ]% ]% ]% ]%@/ / /( ( (V GK &3 &3 &3 &3 &3R .8 E E E EY Y Y% % %  F F F- - -,= = = =>M= M= M=`	> 	> 	> 	>   6'S 'S 'S 'S 'S 'S 'S 'ST
l 
l 
lG G GH H H
e e eP: : : :` ` ` `K K K K 35    ( 6:2RV 
F 
F 
F 
FK" K" K" K" K" K" K" K"\D2 D2 D2 D2 D2 D2 D2 D2NAD AD AD AD AD AD AD ADP   <  "  ", , ,  
 
 
 
     $  @ @ @  > > >25 25 25j	 	 	    
	   !(& 'Y 'Y 'YX    4
BU]        2 2 2,  
p p p	 	 	 	S S SC C C- - -
@ @ @ *1$ M M M M M>E E E 	 	 	. . .> $O44 2 2 2   "% 6 6 6 6 6  ,S S S  7 7 7$j5 j5 j5 j5 j5 j5 j5 j5Z\ \ \
  "               (B B B B B B B B$% % % % %% % % % 9<
KT
i%*3	 	 	    *7 7     *7 7  b%+b.>.DbGWGabb B B B B BI B B BJ5 5 5 5 5 5 5 5p * * *
 = = = = ?D4 ! ! ! ! !>k_ k_ k_ k_ k_ k_ k_ k_\	, , ,   &) ) ) ) ) ) ) ):6 6 6 6 6TY 6 6 6 6 6s   
V* *V87V8