ó
    k‘ÐhÔ  ã            
       óx  • S r SSKrSSKrSSKJrJrJrJrJr  SSK	J
r
  S\\\\\\\4   \\\\4   \\\4   4      S\\\
      4S jr SS	\\
   S
\\   SS4S jjrS\\\\4   \\\\\4   4   S\\\R                  \4   \\R                   \\\4   4   4S jrS	\\
   S\\\\4   \\\\\4   4   SS4S jrg)z'Utility functions for aiohappyeyeballs.é    N)ÚDictÚListÚOptionalÚTupleÚUnioné   )ÚAddrInfoTypeÚaddrÚreturnc                 ó  • U c  gU S   nU S   nSU;   nU(       a:  SnSn[        U 5      nUS:¼  a  U S   nUS:¼  a  U S   nXXE4n [        R                  nOX4n [        R                  nU[        R                  [        R
                  SU 4/$ )	z7Convert an address tuple to a list of addr_info tuples.Nr   r   Ú:é   é   é   Ú )ÚlenÚsocketÚAF_INET6ÚAF_INETÚSOCK_STREAMÚIPPROTO_TCP)r
   ÚhostÚportÚis_ipv6ÚflowinfoÚscopeidÚaddr_lenÚfamilys           ÚS/home/mande/repo/quber/.venv/lib/python3.13/site-packages/aiohappyeyeballs/utils.pyÚaddr_to_addr_infosr    
   s    € ð �|ØØ�‰7€DØ�‰7€DØ�T‰k€GÞØˆØˆÜ�t“9ˆØ�q‹=Ø˜1‘gˆGØ�q‹=Ø˜A‘wˆHØ˜HÐ.ˆÜ—‘‰àˆ|ˆÜ—‘ˆØ”V×'Ñ'¬×);Ñ);¸RÀÐFÐGÐGó    Ú
addr_infosÚ
interleavec                 óÂ   • 0 nUc  Sn/ nU  H6  nUS   nXR;  a  SX%'   X%   U:  a  UR                  U5        X%==   S-  ss'   M8     U H  nU R                  U5        M     g)zÄ
Pop addr_info from the list of addr_infos by family up to interleave times.

The interleave parameter is used to know how many addr_infos for
each family should be popped of the top of the list.
Nr   r   )ÚappendÚremove)r"   r#   ÚseenÚ	to_removeÚ	addr_infor   s         r   Úpop_addr_infos_interleaver*   %   sw   € ð €DØÑØˆ
Ø$&€IÛˆ	Ø˜1‘ˆØÓØˆD‰LØ‰<˜*Ó$Ø×Ñ˜YÔ'Ø‹˜Ñ�ñ  ó ˆ	Ø×Ñ˜)Ö$ò r!   c                 óB   • [         R                  " U S   5      /U SS Q7$ )z+Convert an address tuple to an IPv4Address.r   r   N)Ú	ipaddressÚ
ip_address)r
   s    r   Ú_addr_tuple_to_ip_addressr.   =   s'   € ô × Ò   a¡Ó)Ð5¨D°°¨HÑ5Ð5r!   c                 óh  • / nU  H  nUS   U:X  d  M  UR                  U5        M!     U(       a  U H  nU R                  U5        M     g[        U5      nU  H(  nU[        US   5      :X  d  M  UR                  U5        M*     U(       a  U H  nU R                  U5        M     g[        SU S35      e)zu
Remove an address from the list of addr_infos.

The addr value is typically the return value of
sock.getpeername().
éÿÿÿÿNzAddress z not found in addr_infos)r%   r&   r.   Ú
ValueError)r"   r
   Úbad_addrs_infosr)   Úbad_addr_infoÚ
match_addrs         r   Úremove_addr_infosr5   F   s¶   € ð +-€OÛˆ	Ø�R‰=˜DÕ Ø×"Ñ" 9Ö-ñ  ö Û,ˆMØ×Ñ˜mÖ,ñ -àä*¨4Ó0€JÛˆ	ØÔ2°9¸R±=ÓAÕAØ×"Ñ" 9Ö-ñ  ö Û,ˆMØ×Ñ˜mÖ,ñ -àÜ
�x ˜vÐ%=Ð>Ó
?Ð?r!   )N)Ú__doc__r,   r   Útypingr   r   r   r   r   Útypesr	   ÚstrÚintr    r*   ÚIPv4AddressÚIPv6Addressr.   r5   © r!   r   Ú<module>r>      sK  ðÙ -ã Û ß 5Õ 5å ðHØ
Øˆe�C˜˜c 3Ð&Ñ'¨¨s°C¸¨}Ñ)=¸uÀSÈ#ÀX¹ÐNÑOñðHð ˆd�<Ñ Ñ!ô	Hð8 AEñ%Ø�\Ñ"ð%Ø08¸±ð%à	õ%ð06Ø
��c˜3�h‘  s¨C°°cÐ'9Ñ!:Ð:Ñ
;ð6à
Ø	ˆ)×
Ñ
 Ð
$Ñ% u¨Y×-BÑ-BÀCÈÈcÐ-QÑ'RÐRñô6ð@Ø�\Ñ"ð@à
��c˜3�h‘  s¨C°°cÐ'9Ñ!:Ð:Ñ
;ð@ð 
õ@r!   