Ë
    V.jj  ã            	       óF  — d Z ddlZddlZddlmZ deeeeef   eeeef   z  eeef   z  dz  dee   dz  fd„Z		 ddee   d	edz  ddfd
„Z
deeef   eeeeef   z  deej                  ef   eej                  eeef   z  fd„Zdee   deeef   eeeeef   z  ddfd„Zy)z'Utility functions for aiohappyeyeballs.é    Né   )ÚAddrInfoTypeÚaddrÚreturnc                 ó  — | €y| d   }| d   }d|v }|r:d}d}t        | «      }|dk\  r| d   }|dk\  r| d   }||||f} t        j                  }n||f} t        j                  }|t        j                  t        j
                  d| fgS )	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           úXC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\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Ø�d˜H gÐ.ˆÜ—‘‰à�dˆ|ˆÜ—‘ˆØ”V×'Ñ'¬×);Ñ);¸RÀÐFÐGÐGó    Ú
addr_infosÚ
interleavec                 óº   — i }|€d}g }| D ]6  }|d   }||vrd||<   ||   |k  r|j                  |«       ||xx   dz  cc<   Œ8 |D ]  }| j                  |«       Œ y)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%   "   s   € ð €DØÐØˆ
Ø$&€IÛˆ	Ø˜1‘ˆØ˜ÑØˆD�‰LØ�‰<˜*Ò$Ø×Ñ˜YÔ'ØˆV‹˜ÑŒð  ó ˆ	Ø×Ñ˜)Õ$ñ r   c                 ó@   — t        j                  | d   «      g| dd ¢­S )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                 ó<  — g }| D ]  }|d   |k(  sŒ|j                  |«       Œ |r|D ]  }| j                  |«       Œ yt        |«      }| D ]%  }|t        |d   «      k(  sŒ|j                  |«       Œ' |r|D ]  }| j                  |«       Œ yt        d|› d�«      ‚)z…
    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_infosr0   A   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   Útypesr   ÚtupleÚstrÚintÚlistr   r%   ÚIPv4AddressÚIPv6Addressr)   r0   © r   r   Ú<module>r:      s,  ðÙ -ã Û å ðHØ
��S˜#˜sÐ"Ñ
# e¨C°°c¨MÑ&:Ñ
:¸UÀ3ÈÀ8¹_Ñ
LÈtÑ
SðHà	ˆ,Ñ˜$ÑóHð4 >Bñ%Ø�\Ñ"ð%Ø03°d±
ð%à	ó%ð06Ø
��S�‰/˜E # s¨C°Ð"4Ñ5Ñ
5ð6à
ˆ9× Ñ  #Ð%Ñ&¨¨y×/DÑ/DÀcÈ3ÐPSÐ/SÑ)TÑTó6ð@Ø�\Ñ"ð@à
��S�‰/˜E # s¨C°Ð"4Ñ5Ñ
5ð@ð 
ô@r   