§
    �ŸjÚ#  ã                  ó  — U d Z ddlmZ ddlZddlZddlZddlZddlmZm	Z	m
Z
mZ ddlmZmZ ddlmZ ddlmZ g Zded	<   g Zded
<   daded<   d5d„Zd6d„Zd7d„Zd7d„Z G d„ de¦  «        Zd8d„Zd9d!„Z ej        d"ej        ¦  «        Z d:d#„Z!d:d$„Z" ej        d%ej        ¦  «        Z#d:d&„Z$d:d'„Z%d:d(„Z&d:d)„Z'd:d*„Z(ed;d<d.„¦   «         Z)ed=d/„¦   «         Z*ed=d0„¦   «         Z+ed>d1„¦   «         Z,ed?d3„¦   «         Z-ed?d4„¦   «         Z.dS )@z-Utilities for identifying local IP addresses.é    )ÚannotationsN)ÚCallableÚIterableÚMappingÚSequence)ÚPIPEÚPopen)ÚAny)Úwarnú	list[str]Ú	LOCAL_IPSÚ
PUBLIC_IPSÚ ÚstrÚ	LOCALHOSTÚelemsr   ÚreturnÚlistc                óŒ   — t          ¦   «         }g }| D ]0}||vr*|                     |¦  «         |                     |¦  «         Œ1|S )z£uniq_stable(elems) -> list

    Return from an iterable, a list of all the unique elements in the input,
    maintaining the order in which they first appear.
    )ÚsetÚappendÚadd)r   ÚseenÚvalueÚxs       úk/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/jupyter_client/localinterfaces.pyÚ_uniq_stabler      sN   € õ ‰5Œ5€DØ€EØð ð ˆØ�Dˆ=ˆ=Ø�LŠL˜‰OŒOˆOØ�HŠH�Q‰KŒKˆKøØ€Ló    Úcmdústr | Sequence[str]c                ó”  — d}t           j        dk    r-t          j        ¦   «         }|xj        t          j        z  c_        t          | t          t          |¬¦  «        }|                     ¦   «         \  }}|j	        r9d 
                    | |                     dd¦  «        ¦  «        }t          |¦  «        ‚|                     dd¦  «        S )z4Get output of a command, raising IOError if it failsNÚnt)ÚstdoutÚstderrÚstartupinfozFailed to run {}: {}Úutf8Úreplace)ÚosÚnameÚ
subprocessÚSTARTUPINFOÚdwFlagsÚSTARTF_USESHOWWINDOWr	   r   ÚcommunicateÚ
returncodeÚformatÚdecodeÚOSError)r   r%   Úpr#   r$   Úmsgs         r   Ú_get_outputr5   %   s«   € à€KÝ	„w�$‚€Ý Ô,Ñ.Ô.ˆØÐÔ�zÔ>Ñ>ÐÔÝˆc�$¥t¸ÐEÑEÔE€AØ—]’]‘_”_�N€FˆFØ„|ð Ø$×+Ò+¨C°·²¸vÀyÑ1QÔ1QÑRÔRˆÝ�c‰lŒlÐØ�=Š=˜ Ñ+Ô+Ð+r   Úfr   c                ó"   ‡ — d‰ _         dˆ fd„}|S )z%decorator to only run a function onceFÚkwargsr
   r   c                 ó8   •— ‰j         rd S  ‰di | ¤Ž}d‰_         |S )NT© ©Úcalled)r8   Úretr6   s     €r   Úwrappedz_only_once.<locals>.wrapped7   s/   ø€ ØŒ8ð 	ØˆFØˆaˆkˆk�&ˆkˆkˆØˆŒØˆ
r   )r8   r
   r   r
   r;   )r6   r>   s   ` r   Ú
_only_oncer?   3   s/   ø€ à€A„Hðð ð ð ð ð ð €Nr   c                ó   ‡ — dˆ fd„}|S )z2decorator to ensure load_ips has been run before fÚargsr
   r8   r   c                 ó0   •— t          ¦   «           ‰| i |¤ŽS )N)Ú	_load_ips)rA   r8   r6   s     €r   Ú
ips_loadedz!_requires_ips.<locals>.ips_loadedD   s!   ø€ Ý‰ŒˆØˆq�$Ð!˜&Ð!Ð!Ð!r   )rA   r
   r8   r
   r   r
   r:   )r6   rD   s   ` r   Ú_requires_ipsrE   A   s)   ø€ ð"ð "ð "ð "ð "ð "ð Ðr   c                  ó   — e Zd ZdS )ÚNoIPAddressesN)Ú__name__Ú
__module__Ú__qualname__r:   r   r   rG   rG   L   s   € € € € € Ø€Dr   rG   ÚaddrsúSequence[str]ÚNonec                ó(   — t          d| i¦  «         dS )z7populate local and public IPs from flat list of all IPsÚallN)Ú_populate_from_dict)rK   s    r   Ú_populate_from_listrQ   P   s   € å˜ ˜Ñ'Ô'Ð'Ð'Ð'r   úMapping[str, Sequence[str]]c                ój  — | st          ¦   «         ‚g }g }|                      ¦   «         D ]‘\  }}|D ]‰}|                     |¦  «         t          s,|                     d¦  «        s|                     d¦  «        r|a|                     d¦  «        s*|                     d¦  «        s|                     |¦  «         ŒŠŒ’t          rt          dk    rda|                     dt          ¦  «         |                     ddg¦  «         t          |¦  «        t          dd…<   t          |¦  «        t          dd…<   dS )	z8populate local and public IPs from dict of {'en0': 'ip'}Úloú127.)rU   z169.254.ú	127.0.0.1r   ú0.0.0.0r   N)
rG   Úitemsr   r   Ú
startswithÚinsertÚextendr   r   r   )rK   Ú
public_ipsÚ	local_ipsÚifaceÚip_listÚips         r   rP   rP   U   sL  € àð Ý‰oŒoÐð €JØ€IàŸ+š+™-œ-ð &ð &‰ˆˆwØð 	&ð 	&ˆBØ×Ò˜RÑ Ô Ð Ýð  %×"2Ò"2°4Ñ"8Ô"8ð ¸B¿MºMÈ&Ñ<QÔ<Qð Ø�	Ø×#Ò# DÑ)Ô)ð &°"·-²-Ð@TÑ2UÔ2Uð &à×!Ò! "Ñ%Ô%Ð%øð	&õ ð '�	 [Ò0Ð0Øˆ	Ø×Ò˜�IÑ&Ô&Ð&à×Ò�i �_Ñ%Ô%Ð%å 	Ñ*Ô*…Iˆaˆaˆa�LÝ  Ñ,Ô,…Jˆqˆqˆq�M€M€Mr   zinet\b.*?(\d+\.\d+\.\d+\.\d+)c                 óf  — 	 t          d¦  «        } n# t          $ r t          d¦  «        } Y nw xY w|                      ¦   «         }g }|D ]X}t                               |                     ¦   «         ¦  «        }|r(|                     |                     d¦  «        ¦  «         ŒYt          |¦  «         dS )z0load ip addresses from `ifconfig` output (posix)Úifconfigz/sbin/ifconfigé   N)	r5   r2   Ú
splitlinesÚ_ifconfig_ipv4_patÚmatchÚstripr   ÚgrouprQ   ©ÚoutÚlinesrK   ÚlineÚms        r   Ú_load_ips_ifconfigrn   t   s¼   € ð,Ý˜*Ñ%Ô%ˆˆøÝð ,ð ,ð ,åÐ*Ñ+Ô+ˆˆˆð,øøøð �NŠNÑÔ€EØ€EØð %ð %ˆÝ×$Ò$ T§Z¢Z¡\¤\Ñ2Ô2ˆØð 	%Ø�LŠL˜Ÿš ™œÑ$Ô$Ð$øÝ˜ÑÔÐÐÐs   ‚ ’.­.c                 ón  — t          g d¢¦  «        } |                      ¦   «         }g }|D ]{}|                     ¦   «                              ¦   «         }t	          |¦  «        dk    r@|d         dk    r4|                     |d                              d¦  «        d         ¦  «         Œ|t          |¦  «         dS )z/load ip addresses from `ip addr` output (Linux))r`   z-fÚinetÚaddré   r   rp   rc   ú/N)r5   rd   ÚlowerÚsplitÚlenr   rQ   )rj   rk   rK   rl   Úblockss        r   Ú_load_ips_iprx   †   s­   € å
Ð2Ð2Ð2Ñ
3Ô
3€Cà�NŠNÑÔ€EØ€EØð 2ð 2ˆØ—’‘”×#Ò#Ñ%Ô%ˆÝ�‰KŒK˜1ÒÐ 6¨!¤9°Ò#6Ð#6Ø�LŠL˜ œŸš¨Ñ-Ô-¨aÔ0Ñ1Ô1Ð1øÝ˜ÑÔÐÐÐr   zipv4.*?(\d+\.\d+\.\d+\.\d+)$c                 ó$  — t          d¦  «        } |                      ¦   «         }g }|D ]X}t                               |                     ¦   «         ¦  «        }|r(|                     |                     d¦  «        ¦  «         ŒYt          |¦  «         dS )z2load ip addresses from `ipconfig` output (Windows)Úipconfigrc   N)r5   rd   Ú_ipconfig_ipv4_patrf   rg   r   rh   rQ   ri   s        r   Ú_load_ips_ipconfigr|   –   s†   € å
�jÑ
!Ô
!€Cà�NŠNÑÔ€EØ€EØð %ð %ˆÝ×$Ò$ T§Z¢Z¡\¤\Ñ2Ô2ˆØð 	%Ø�LŠL˜Ÿš ™œÑ$Ô$Ð$øÝ˜ÑÔÐÐÐr   c                 ó¦   — ddl } i }|                      ¦   «                              ¦   «         D ]\  }}d„ |D ¦   «         ||<   Œt          |¦  «         dS )zload ip addresses with psutilr   Nc                óF   — g | ]}|j         t          j        k    ¯|j        ‘ŒS r:   )ÚfamilyÚsocketÚAF_INETÚaddress)Ú.0Úaddress_datas     r   ú
<listcomp>z$_load_ips_psutil.<locals>.<listcomp>­   s5   € ð 
ð 
ð 
àØÔ"¥f¤nÒ4Ð4ð Ô à4Ð4Ð4r   )ÚpsutilÚnet_if_addrsrX   rP   )r†   Ú	addr_dictr^   Úifaddressess       r   Ú_load_ips_psutilrŠ   £   sz   € à€M€M€Mà&(€Ið
 %×1Ò1Ñ3Ô3×9Ò9Ñ;Ô;ð 
ð 
Ñˆˆ{ð
ð 
à +ð
ñ 
ô 
ˆ	�%ÑÐõ ˜	Ñ"Ô"Ð"Ð"Ð"r   c                 ó2  — ddl } i }|                      ¦   «         D ]l}g ||<   |                      |¦  «                             | j        g ¦  «        }|D ]4}|                     d¦  «        }|r||                              |¦  «         Œ5Œmt          |¦  «         dS )z load ip addresses with netifacesr   Nrq   )Ú	netifacesÚ
interfacesr‰   Úgetr�   r   rP   )rŒ   rˆ   r^   Úipv4sÚentryrq   s         r   Ú_load_ips_netifacesr‘   ¶   s½   € àÐÐÐà&(€Ið ×%Ò%Ñ'Ô'ð .ð .ˆàˆ	�%Ñà×%Ò% eÑ,Ô,×0Ò0°Ô1BÀBÑGÔGˆØð 	.ð 	.ˆEØ—9’9˜VÑ$Ô$ˆDØð .Ø˜%Ô ×'Ò'¨Ñ-Ô-Ð-øð	.õ ˜	Ñ"Ô"Ð"Ð"Ð"r   c                 ó‚  — 	 t          j        d¦  «        d         t          dd…<   n# t          $ r dgt          dd…<   Y nw xY w	 t          j        ¦   «         } t          j        | ¦  «        d         t
          dd…<   |                      d¦  «        sVt          d„ t
          D ¦   «         ¦  «        r8t          j        t          j        ¦   «         dz   ¦  «        d         t
          dd…<   n# t          $ r Y nw xY wt          t
          ¦  «        t
          dd…<   t           	                    t
          ¦  «         nB# t          t
          ¦  «        t
          dd…<   t           	                    t
          ¦  «         w xY wt           	                    ddg¦  «         t          t          ¦  «        t          dd…<   t          d	         a
dS )
zJload ip addresses with socket.gethostbyname_ex

    This can be slow.
    Ú	localhostrr   NrV   z.localc              3  ó@   K  — | ]}|                      d ¦  «        V — ŒdS )Ú127N)rY   )rƒ   r`   s     r   ú	<genexpr>z*_load_ips_gethostbyname.<locals>.<genexpr>Ù   s.   è è € Ð2]Ð2]ÈB°2·=²=ÀÑ3GÔ3GÐ2]Ð2]Ð2]Ð2]Ð2]Ð2]r   rW   r   r   )r€   Úgethostbyname_exr   r2   Úgethostnamer   ÚendswithrO   r   r[   r   )Úhostnames    r   Ú_load_ips_gethostbynamer›   É   s¤  € ð%ÝÔ.¨{Ñ;Ô;¸AÔ>�	�!�!�!‰ˆøÝð %ð %ð %à#�}�	�!�!�!‰ˆˆð%øøøð
%ÝÔ%Ñ'Ô'ˆÝÔ/°Ñ9Ô9¸!Ô<�
�1�1�1‰à× Ò  Ñ*Ô*ð 	X­sÐ2]Ð2]ÕR\Ð2]Ñ2]Ô2]Ñ/]Ô/]ð 	XÝ"Ô3µFÔ4FÑ4HÔ4HÈ8Ñ4SÑTÔTÐUVÔW�J�q�q�q‰MøøÝð ð ð Øˆðøøøõ %¥ZÑ0Ô0�
�1�1�1‰Ý×Ò�Ñ$Ô$Ð$Ð$øõ %¥ZÑ0Ô0�
�1�1�1‰Ý×Ò�Ñ$Ô$Ð$Ð$øøøõ ×Ò�i �_Ñ%Ô%Ð%å¥	Ñ*Ô*…Iˆaˆaˆa�Lå˜!”€I€I€Is:   ‚$' §AÁ AÁB"C( Ã'D6 Ã(
C5Ã2D6 Ã4C5Ã5D6 Ä6?E5c                 óJ   — da t           ddgt          dd…<   g t          dd…<   dS )z&Fallback in case of unexpected failurerV   rW   r   N)r   r   r   r:   r   r   Ú_load_ips_dumbr�   é   s.   € ð €IÝ˜y¨"Ð-…Iˆaˆaˆa�LØ…Jˆqˆqˆq�M€M€Mr   TÚsuppress_exceptionsÚboolc                ó  — 	 	 t          ¦   «         S # t          $ r Y nw xY w	 t          ¦   «         S # t          $ r Y nw xY wt          j        dk    r&	 t          ¦   «         S # t          t          f$ r Y nPw xY w	 t          ¦   «         S # t          t          f$ r Y nw xY w	 t          ¦   «         S # t          t          f$ r Y nw xY wt          ¦   «         S # t          $ r!}| s‚ t          d|z  d¬¦  «         Y d}~nd}~ww xY wt          ¦   «          dS )a…  load the IPs that point to this machine

    This function will only ever be called once.

    If will use psutil to do it quickly if available.
    If not, it will use netifaces to do it quickly if available.
    Then it will fallback on parsing the output of ifconfig / ip addr / ipconfig, as appropriate.
    Finally, it will fallback on socket.gethostbyname_ex, which can be slow.
    r"   z9Unexpected error discovering local network interfaces: %srr   )Ú
stacklevelN)rŠ   ÚImportErrorr‘   r(   r)   r|   r2   rG   rx   rn   r›   Ú	Exceptionr   r�   )rž   Úes     r   rC   rC   ñ   s�  € ð%\ð	Ý#Ñ%Ô%Ð%øÝð 	ð 	ð 	ØˆDð	øøøð	Ý&Ñ(Ô(Ð(øÝð 	ð 	ð 	ØˆDð	øøøõ
 Œ7�dŠ?ˆ?ðÝ)Ñ+Ô+Ð+øÝ�]Ð+ð ð ð Ø�ðøøøðÝ#‘~”~Ð%øÝ�]Ð+ð ð ð Ø�ðøøøðÝ)Ñ+Ô+Ð+øÝ�]Ð+ð ð ð Ø�ðøøøõ
 'Ñ(Ô(Ð(øÝð \ð \ð \Ø"ð 	ØåÐHÈ1ÑLÐYZÐ[Ñ[Ô[Ð[Ð[Ð[Ð[Ð[Ð[øøøøð	\øøøõ
 ÑÔÐÐÐs˜   ƒ ‘
›C �žC ¢0 °
=ºC ¼=½C ÁA ÁA3Á0C Á2A3Á3C Á7B ÂBÂC ÂBÂC ÂB+ Â+B?Â<C Â>B?Â?C Ã
C;ÃC6Ã6C;c                 ó   — t           S )z2return the IP addresses that point to this machine©r   r:   r   r   r]   r]   &  ó
   € õ Ðr   c                 ó   — t           S )zKreturn the IP addresses for this machine that are visible to other machines©r   r:   r   r   r\   r\   ,  s
   € õ Ðr   c                 ó   — t           S )z1return ip for localhost (almost always 127.0.0.1))r   r:   r   r   r“   r“   2  r§   r   r`   c                ó   — | t           v S )z does `ip` point to this machine?r¦   ©r`   s    r   Úis_local_ipr­   8  s   € ð •ˆ?Ðr   c                ó   — | t           v S )z#is `ip` a publicly visible address?r©   r¬   s    r   Úis_public_ipr¯   >  s   € ð •ÐÐr   )r   r   r   r   )r   r    r   r   )r6   r   r   r   )rK   rL   r   rM   )rK   rR   r   rM   )r   rM   )T)rž   rŸ   r   rM   )r   r   )r   r   )r`   r   r   rŸ   )/Ú__doc__Ú
__future__r   r(   Úrer€   r*   Úcollections.abcr   r   r   r   r   r	   Útypingr
   Úwarningsr   r   Ú__annotations__r   r   r   r5   r?   rE   r£   rG   rQ   rP   ÚcompileÚ
IGNORECASEre   rn   rx   r{   r|   rŠ   r‘   r›   r�   rC   r]   r\   r“   r­   r¯   r:   r   r   ú<module>r¹      s  ðØ 3Ð 3Ð 3ð #Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à€	Ð Ð Ð Ñ Ø€
Ð Ð Ð Ñ à€	Ð Ð Ð Ñ ðð ð ð ð,ð ,ð ,ð ,ðð ð ð ðð ð ð ð	ð 	ð 	ð 	ð 	�Iñ 	ô 	ð 	ð(ð (ð (ð (ð
-ð -ð -ð -ð8  �R”ZÐ @À"Ä-ÑPÔPÐ ðð ð ð ð$
ð 
ð 
ð 
ð  �R”ZÐ ?ÀÄÑOÔOÐ ð
ð 
ð 
ð 
ð#ð #ð #ð #ð&#ð #ð #ð #ð&ð ð ð ð@ð ð ð ð ð1ð 1ð 1ð 1ñ „ð1ðh ðð ð ñ „ðð
 ðð ð ñ „ðð
 ðð ð ñ „ðð
 ðð ð ñ „ðð
 ðð ð ñ „ðð ð r   