ó
    ÖÁ“ii  ã                  óØ   • S SK Jr  S SKrS SKrS SKrSSKJr  SSKJ	r	  SSK
JrJr  SSKJr  SSKJrJr  / S	Qr\R&                   " S
 S5      5       rSS jrSS jr\4       SS jjrg)é    )ÚannotationsNé   )ÚHeaders)ÚInvalidProxy)Úbuild_authorization_basicÚ
build_host)Ú
USER_AGENT)ÚDELIMSÚWebSocketURI)Ú	get_proxyÚparse_proxyÚProxyc                  óh   • \ rS rSr% SrS\S'   S\S'   S\S'   SrS	\S
'   SrS	\S'   \SS j5       r	Sr
g)r   é   aÈ  
Proxy address.

Attributes:
    scheme: ``"socks5h"``, ``"socks5"``, ``"socks4a"``, ``"socks4"``,
        ``"https"``, or ``"http"``.
    host: Normalized to lower case.
    port: Always set even if it's the default.
    username: Available when the proxy address contains `User Information`_.
    password: Available when the proxy address contains `User Information`_.

.. _User Information: https://datatracker.ietf.org/doc/html/rfc3986#section-3.2.1

ÚstrÚschemeÚhostÚintÚportNú
str | NoneÚusernameÚpasswordc                ól   • U R                   c  g U R                  c   eU R                   U R                  4$ )N)r   r   )Úselfs    ÚM/home/mande/repo/quber/.venv/lib/python3.13/site-packages/websockets/proxy.pyÚ	user_infoÚProxy.user_info(   s2   € à�=‰=Ñ ØØ�}‰}Ñ(Ð(Ð(Ø—‘˜tŸ}™}Ð-Ð-ó    © )Úreturnztuple[str, str] | None)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r   r   Úpropertyr   Ú__static_attributes__r   r   r   r   r      s>   ‡ ñð ƒKØ
ƒIØ
ƒIØ€HˆjÓØ€HˆjÓàó.ó ó.r   r   c                ót  • [         R                  R                  U 5      nUR                  S;  a  [	        U SUR                   S35      eUR
                  c  [	        U S5      eUR                  S;  a  [	        U S5      eUR                  S:w  a  [	        U S5      eUR                  S:w  a  [	        U S	5      eUR                  nUR
                  nUR                  =(       d    UR                  S
:X  a  SOSnUR                  nUR                  nUb  Uc  [	        U S5      e U R                  S5        [#        X#XEU5      $ ! [         an    UR                  S5      R                  5       nUbI  Uc   e[         R                  R                  U[         S9n[         R                  R                  U[         S9n N„f = f)z�
Parse and validate a proxy.

Args:
    proxy: proxy.

Returns:
    Parsed proxy.

Raises:
    InvalidProxy: If ``proxy`` isn't a valid proxy.

)Úsocks5hÚsocks5Úsocks4aÚsocks4ÚhttpsÚhttpzscheme z isn't supportedzhostname isn't provided)Ú Ú/zpath is meaninglessr0   zquery is meaninglesszfragment is meaninglessr.   i»  éP   z"username provided without passwordÚasciiÚidna)Úsafe)ÚurllibÚparseÚurlparser   r   ÚhostnameÚpathÚqueryÚfragmentr   r   r   ÚencodeÚUnicodeEncodeErrorÚdecodeÚquoter
   r   )ÚproxyÚparsedr   r   r   r   r   s          r   r   r   0   s”  € ô �\‰\×"Ñ" 5Ó)€FØ‡}�}ÐWÓWÜ˜5 G¨F¯M©M¨?Ð:JÐ"KÓLÐLØ‡�ÑÜ˜5Ð";Ó<Ð<Ø‡{�{˜)Ó#Ü˜5Ð"7Ó8Ð8Ø‡|�|�rÓÜ˜5Ð"8Ó9Ð9Ø‡�˜"ÓÜ˜5Ð";Ó<Ð<à�]‰]€FØ�?‰?€DØ�;‰;×C &§-¡-°7Ó":™3À€DØ�‰€HØ�‰€Hð Ñ Ñ 0Ü˜5Ð"FÓGÐGð	AØ�‰�WÔô �˜t¨xÓ8Ð8øô ó Að �{‰{˜6Ó"×)Ñ)Ó+ˆØÑØÑ'Ð'Ð'Ü—|‘|×)Ñ)¨(¼Ð)Ð@ˆHÜ—|‘|×)Ñ)¨(¼Ð)Ð@ˆHùðAús   Ä!D? Ä?A5F7Æ6F7c                óz  • [         R                  R                  U R                   SU R                   35      (       a  g[         R                  R                  5       nU R                  (       a  / SQnO/ SQnU H?  nUR                  U5      nUc  M  US:X  a  UR                  S5      (       a  SUSS -   nUs  $    g)	zM
Return the proxy to use for connecting to the given WebSocket URI, if any.

Ú:N)ÚwssÚsocksr.   )ÚwsrF   r.   r/   rF   zhttp://z
socks5h://é   )	r6   ÚrequestÚproxy_bypassr   r   Ú
getproxiesÚsecureÚgetÚ
startswith)ÚuriÚproxiesÚschemesr   rA   s        r   r   r   b   s¤   € ô
 ‡~�~×"Ñ" c§h¡h Z¨q°·±°
Ð#;×<Ñ<Øô �n‰n×'Ñ'Ó)€GØ
‡z‡zÚ+‰â2ˆãˆØ—‘˜FÓ#ˆØÓØ˜Ó  U×%5Ñ%5°i×%@Ñ%@Ø$ u¨Q¨R yÑ0�ØŠLñ ð r   c                óœ  • [        UR                  UR                  UR                  SS9n[	        5       n[        UR                  UR                  UR                  5      US'   Ub  X$S'   U R
                  b2  U R                  c   e[        U R
                  U R                  5      US'   SU S3R                  5       UR                  5       -   $ )NT)Úalways_include_portÚHostz
User-AgentzProxy-AuthorizationzCONNECT z HTTP/1.1
)
r   r   r   rL   r   r   r   r   r=   Ú	serialize)rA   Úws_uriÚuser_agent_headerr   Úheaderss        r   Úprepare_connect_requestrY   †   s³   € ô
 �f—k‘k 6§;¡;°·±ÐSWÑX€DÜ‹i€GÜ  §¡¨f¯k©k¸6¿=¹=ÓI€GˆF�OØÑ$Ø 1�ÑØ‡~�~Ñ!Ø�~‰~Ñ)Ð)Ð)Ü)BØ�N‰N˜EŸN™Nó*
ˆÐ%Ñ&ð �d�V˜=Ð)×0Ñ0Ó2°W×5FÑ5FÓ5HÑHÐHr   )rA   r   r    r   )rO   r   r    r   )rA   r   rV   r   rW   r   r    Úbytes)Ú
__future__r   ÚdataclassesÚurllib.parser6   Úurllib.requestÚdatastructuresr   Ú
exceptionsr   rX   r   r   Úhttp11r	   rO   r
   r   Ú__all__Ú	dataclassr   r   r   rY   r   r   r   Ú<module>rd      s…   ðÝ "ã Û Û å #Ý $ß :Ý ß %ò 0€ð ×Ñ÷.ð .ó ð.ô</9ôd!ðN %/ðIØðIàðIð "ðIð ö	Ir   