
    V|h!                       S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKr\R                  (       a  \R                  " S5      rSSKJrJrJr  SSKJr  S r " S S	\5      r\" \" 5       S
SSS.5      rSS jrSS jrS rS rS rS rg)    )annotationsNT   )
NO_DEFAULTremove_startformat_field)traverse_objc                 T    Sn SnU R                  [        R                  " U6  S35      $ )NzhMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{} Safari/537.36)      z.0.0.0)formatrandomrandint)USER_AGENT_TMPLCHROME_MAJOR_VERSION_RANGEs     Q/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/utils/networking.pyrandom_user_agentr      s4     AO!+!!V^^5O%P$QQW"XYY    c                    ^  \ rS rSrSrSS jrU 4S jrSS jrSU 4S jjrSU 4S jjr	SU 4S jjr
S	 rS S
 jrS S jrSU 4S jjrS!U 4S jjrS S jr\R$                  S"S j5       r\R$                  S#S j5       r\4U 4S jjr\R$                  S$S j5       r\R$                  S#S j5       r\4U 4S jjrS%U 4S jjr\R$                  S$S j5       r\R$                  S$S j5       rS&SU 4S jjjrS!S jrSrU =r$ )'HTTPHeaderDict   z
Store and access keys case-insensitively.
The constructor can take multiple dicts, in which keys in the latter are prioritised.

Retains a case sensitive mapping of the headers, which can be accessed via `.sensitive()`.
c                H    [         R                  " U /UQ70 UD6n0 Ul        U$ N)dict__new___HTTPHeaderDict__sensitive_map)clsargskwargsobjs       r   r   HTTPHeaderDict.__new__   s'    ll3000 
r   c                  > [         TU ]  5         0 U l        [        S U5       H  nU R	                  U5        M     U(       a  U R	                  U5        g g r   )super__init__r   filterupdate)selfr   r   dct	__class__s       r   r$   HTTPHeaderDict.__init__$   sG    !$%CKK &KK r   c               t    U R                  5        VVs0 s H  u  pU R                  U   U_M     snn$ s  snnf r   )itemsr   )r'   keyvalues      r   	sensitiveHTTPHeaderDict.sensitive-   sA     #jjl
*
   %u,*
 	
 
s   4c               t   > [         TU ]  [        U[        5      (       a  UR	                  5       5      $ U5      $ r   )r#   __contains__
isinstancestrtitler'   r-   r)   s     r   r2   HTTPHeaderDict.__contains__3   s-    w#:c33G3GCIIKQQSQQr   c               ^   > UR                  5       nU R                  U	 [        TU ]  U5        g r   )r5   r   r#   __delitem__r6   s     r   r9   HTTPHeaderDict.__delitem__6   s)    iik  %C r   c               >   > [         TU ]  UR                  5       5      $ r   )r#   __getitem__r5   r6   s     r   r<   HTTPHeaderDict.__getitem__;   s    w"399;//r   c                   [        U[        U 5      5      (       a  UR                  5       n[        U[        5      (       a  U R	                  U5        g [
        $ r   )r3   typer/   r   r&   NotImplementedr'   others     r   __ior__HTTPHeaderDict.__ior__>   sA    eT$Z((OO%EeT""KKr   c                   [        U[        U 5      5      (       a  UR                  5       n[        U[        5      (       a   [        U 5      " U R                  5       U5      $ [        $ r   r3   r?   r/   r   r@   rA   s     r   __or__HTTPHeaderDict.__or__F   sJ    eT$Z((OO%EeT"":dnn.66r   c                   [        U[        U 5      5      (       a  UR                  5       n[        U[        5      (       a  [        U 5      " XR                  5       5      $ [        $ r   rF   rA   s     r   __ror__HTTPHeaderDict.__ror__M   sH    eT$Z((OO%EeT"":e^^%566r   c                  > [        U[        5      (       a  UR                  S5      nUR                  5       nXR                  U'   [
        TU ]  U[        U5      R                  5       5        g )Nzlatin-1)	r3   bytesdecoder5   r   r#   __setitem__r4   strip)r'   r-   r.   	key_titler)   s       r   rO   HTTPHeaderDict.__setitem__T   sS    eU##LL+EIIK	*-Y'Is5z'7'7'9:r   c               V   > U R                   R                  5         [        TU ]  5         g r   )r   clearr#   r'   r)   s    r   rT   HTTPHeaderDict.clear[   s    ""$r   c               @    [        U 5      " U R                  5       5      $ r   )r?   r/   )r'   s    r   copyHTTPHeaderDict.copy_   s    Dz$..*++r   c                   g r    r'   r-   s     r   getHTTPHeaderDict.getb       .1r   c                   g r   r[   r'   r-   defaults      r   r]   r^   e       7:r   c               r   > UR                  5       nU[        L a  [        TU ]  U5      $ [        TU ]  X5      $ r   )r5   r   r#   r]   r'   r-   rb   r)   s      r   r]   r^   h   s4    iikj 7;s##w{3((r   c                   g r   r[   r\   s     r   popHTTPHeaderDict.popn   s    '*r   c                   g r   r[   ra   s      r   rg   rh   q   rc   r   c                  > UR                  5       nU[        L a*  U R                  R                  U5        [        TU ]  U5      $ U R                  R                  X5        [        TU ]  X5      $ r   )r5   r   r   rg   r#   re   s      r   rg   rh   t   s\    iikj   $$S)7;s##  .w{3((r   c                T   > U R                   R                  5         [        TU ]  5       $ r   )r   popitemr#   rU   s    r   rl   HTTPHeaderDict.popitem|   s"    $$&w  r   c                   g r   r[   r\   s     r   
setdefaultHTTPHeaderDict.setdefault   r_   r   c                   g r   r[   ra   s      r   ro   rp      rc   r   c                  > UR                  5       nXR                  ;   a  [        TU ]  U5      $ U=(       d    SX'   X   $ )N )r5   r   r#   r<   re   s      r   ro   rp      s=    iik&&&7&s++Mr	yr   c                  [        U[        U 5      5      (       a  UR                  5       n[        U[        R                  R
                  5      (       a  UR                  5        H	  u  p4X@U'   M     O>[        US5      (       a  UR                  5        H	  nX   X'   M     OU H	  u  p4X@U'   M     UR                  5        H	  u  p4X@U'   M     g )Nkeys)	r3   r?   r/   collectionsabcMappingr,   hasattrru   )r'   rB   r   r-   r.   s        r   r&   HTTPHeaderDict.update   s    eT$Z((OO%Ee[__4455#kkm
!S	 , UF##zz|!J	 $ $
!S	 $ !,,.JCI )r   )__sensitive_map)r   
typing.Anyr   r|   returntyping.Self)r}   zdict[str, str])r-   r4   r}   bool)r-   r4   r}   None)r}   r4   )r}   r~   )r}   r   )r-   r4   r}   z
str | None)rb   r   r-   r4   r}   zstr | T)r-   r4   r}   r4   )r}   ztuple[str, str]r   )__name__
__module____qualname____firstlineno____doc__r   r$   r/   r2   r9   r<   rC   rG   rJ   rO   rT   rX   typingoverloadr]   r   rg   rl   ro   r&   __static_attributes____classcell__)r)   s   @r   r   r      s    
 
R!
0;, __1 1__: :", ) __* *__: :", )! __1 1__: :  r   r   z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zen-us,en;q=0.5navigate)z
User-AgentAcceptzAccept-LanguagezSec-Fetch-Modec                   UR                  SS 5      nU(       a  U R                  5         X S'   U R                  5        H  u  p4US:X  a  S X'   M  US:X  a  M  Uc  M   [        R                  R                  U5      S   nUc  S[        US5      -   X'   SS	S
.nXV;   d  Ma  [        R                  R                  [        R                  R                  U5      R                  Xe   S95      X'   M     g ! [         a     M  f = f)NzYtdl-Request-Proxyall__noproxy__nor   zhttp://z//socks5hsocks4)socks5socks)scheme)rg   rT   r,   urllibrequest_parse_proxy
ValueErrorr   parse
urlunparseurlparse_replace)proxiesheaders	req_proxy	proxy_key	proxy_urlproxy_schemereplace_schemes          r   clean_proxiesr      s    0$7I" '	%!%G %~~::9EaH #%.i1N%N" $!N -%+\\%<%<LL)))4==^Ea=b&d"/ !0   	s   "C11
C?>C?c                D    SU ;   a  U S	 SU S'   U R                  SS 5        g )NzYoutubedl-No-CompressionidentityzAccept-EncodingzYtdl-socks-proxy)rg   )r   s    r   clean_headersr      s-    !W,./%/!"KK"D)r   c                ^   / nU R                  S5      nU H=  nUS:X  a  M  US:X  a  U(       a  UR                  5         M*  M,  UR                  U5        M?     US   (       d#  U(       a
  US   (       a  UR                  SS5        US   S;   a  UR                  S5        SR	                  U5      $ )N/...r   rs   )r   r   )splitrg   appendinsertjoin)pathoutputsegmentsss       r   remove_dot_segmentsr      s     Fzz#H8$Y

  MM!  A;&)a|{"b88Fr   c                B    [         R                  R                  U S5      $ )z4Escape non-ASCII characters as suggested by RFC 3986s   %/;:@&=+$,!~*'()?#[])r   r   quote)r   s    r   escape_rfc3986r      s    <<a!899r   c           	     |   [         R                  R                  U 5      nUR                  UR                  R                  S5      R                  S5      [        [        UR                  5      5      [        UR                  5      [        UR                  5      [        UR                  5      S9R                  5       $ )z&Normalize URL as suggested by RFC 3986idnaascii)netlocr   paramsqueryfragment)r   r   r   r   r   encoderN   r   r   r   r   r   r   geturl)url
url_parseds     r   normalize_urlr      s    &&s+J  ''/66w?/
@Aj//0Z--.
 3 34   fhr   c                r   [         R                  R                  U 5      nSU;   at  UR                  [	        UR
                  SS5      -   n[         R                  R                  USUS   05      (       a  g[         R                  R                  U5      (       a  g[        XR                  =(       d    SS5      $ )z'Unified proxy selector for all backendsr   Nz:%shttpr   )r   r   r   hostnamer   portr   proxy_bypass_environmentproxy_bypassr	   r   )r   r   url_componentshostports       r   select_proxyr      s    \\**3/Nw!**\.:M:MtUZ-[[>>228dGDM=RSS^^((22!6!6!@&%HHr   )r   r   r   r   )r   r   )
__future__r   rv   collections.abcr   r   urllib.parser   urllib.requestTYPE_CHECKINGTypeVarr   _utilsr   r   r   	traversalr	   r   r   r   std_headersr   r   r   r   r   r   r[   r   r   <module>r      s    "      	sA : : #ZFT FR #%O' 	 d@**:
	
Ir   