
    $gG                        d Z ddlZddlZddlmZ ddlmZ	m
ZmZmZmZmZmZmZmZ dZdZdez  dz
  Z G d d	e          Z G d
 de          Z G d de          Z  G d de          Z! G d de          Z"eZ#d dd$                    dgdz            z   dz   dd$                    dgdz            z   dz   dd$                    dgdz            z   dz   dd$                    dgdz            z   dz   dd$                    dgdz            z   dz   dd$                    dgdz            z   d z   fD             Z%d! Z&d" Z'd# Z(d0d$Z)d% Z*d& Z+d0d'Zd0d(Z
d0d)Zd0d*Zd0d+Zd0d,Zd0d-Zd. Zd/ ZdS )1z5
IEEE 64-bit EUI (Extended Unique Identifier) logic.
    N)AddrFormatError)	valid_wordsint_to_wordswords_to_int
valid_bitsbits_to_intint_to_bits	valid_bin
int_to_bin
bin_to_int@         c                   <    e Zd ZdZdZeez  Zdez  dz
  ZdZdZ	dZ
dS )	
eui64_basez%A standard IEEE EUI-64 dialect class.   r   r   -z%.2X   N)__name__
__module____qualname____doc__	word_sizewidth	num_wordsmax_wordword_sepword_fmt	word_base     V/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/netaddr/strategy/eui64.pyr   r   (   sL        // I "I )|aH H H IIIr!   r   c                   ,    e Zd ZdZdZeez  ZdZdZdZ	dS )
eui64_unixz'A UNIX-style MAC address dialect class.r   :z%xr   N
r   r   r   r   r   r   r   r   r   r   r    r!   r"   r$   r$   >   s2        11I"IHHIIIr!   r$   c                       e Zd ZdZdZdS )eui64_unix_expandedz;A UNIX-style MAC address dialect class with leading zeroes.%.2xN)r   r   r   r   r   r    r!   r"   r(   r(   H   s        EEHHHr!   r(   c                   ,    e Zd ZdZdZeez  ZdZdZdZ	dS )eui64_ciscoz2A Cisco 'triple hextet' MAC address dialect class.r   .%.4xNr&   r    r!   r"   r+   r+   N   s2        <<I"IHHIIIr!   r+   c                   ,    e Zd ZdZdZeez  ZdZdZdZ	dS )
eui64_barez1A bare (no delimiters) MAC address dialect class.r    z%.16Xr   Nr&   r    r!   r"   r/   r/   X   s2        ;;I"IHHIIIr!   r/   c                 L    g | ]!}t          j        |t           j                  "S r    )_recompile
IGNORECASE).0_s     r"   
<listcomp>r7   j   s6       	 K3>""  r!   ^r%   z([0-9A-F]{1,2})r   $r   z([0-9A-F]{1,4})   z\.z^(r0   z[0-9A-F]r   z)$c                 R    |D ]#}|                     |           }|r
|d         c S $d S )Nr   )findall)addressformatsregexpmatchs       r"   _get_match_resultrA   z   sF      w'' 	8OOO	 r!   c                 X    	 t          | t                    rdS n# t          $ r Y nw xY wdS )z
    :param addr: An IEEE EUI-64 identifier in string form.

    :return: ``True`` if EUI-64 identifier is valid, ``False`` otherwise.
    TF)rA   RE_EUI64_FORMATS	TypeError)addrs    r"   	valid_strrF      sK    T#344 	4	    5s    
''c                 \   g }	 t          | t                    }|st          n!# t          $ r t          d| d          w xY wt	          |t
                    rn|f}t          |          dk    r.t          d                    d |D                       d          }nt          |          dk    r.t          d                    d |D                       d          }nMt          |          d	k    r(t          d
t          |d         d          z  d          }nt          d| z            |S )z
    :param addr: An IEEE EUI-64 identifier in string form.

    :return: An unsigned integer that is equivalent to value represented
        by EUI-64 string address formatted according to the dialect
    z invalid IEEE EUI-64 identifier: !r   r0   c                 4    g | ]}d t          |d          z  S )r)   r   intr5   ws     r"   r7   zstr_to_int.<locals>.<listcomp>   %    BBBqvAr

2BBBr!   r   r:   c                 4    g | ]}d t          |d          z  S )r-   r   rJ   rL   s     r"   r7   zstr_to_int.<locals>.<listcomp>   rN   r!   r   z%016xr   z)bad word count for EUI-64 identifier: %r!)	rA   rC   rD   r   
isinstancetuplelenrK   join)rE   wordsint_vals      r"   
str_to_intrV      sG    EO!$(899 	O	 O O OotttMNNNO % 
5zzQbggBBEBBBCCRHH	UqbggBBEBBBCCRHH	UqgE!Hb 1 11266IDPQQQNs	   # Ac                     t           t          |           }fd|D             }j                            |          }|S )z
    :param int_val: An unsigned integer.

    :param dialect: (optional) a Python class defining formatting options

    :return: An IEEE EUI-64 identifier that is equivalent to unsigned integer.
    Nc                 $    g | ]}j         |z  S r    )r   )r5   idialects     r"   r7   zint_to_str.<locals>.<listcomp>   s!    222qg"222r!   )r   r   r   rS   )rU   rZ   rT   tokensrE   s    `   r"   
int_to_strr\      sR     '**E2222E222F  ((DKr!   c                 D    t          |           }t          j        dg|R  S )z
    :param int_val: the integer to be packed.

    :return: a packed string that is equivalent to value represented by an
    unsigned integer.
    >8B)r   _structpack)rU   rT   s     r"   int_to_packedra      s)     !!E<&&&&&r!   c                     t          t          j        d|                     }d}t          t	          |                    D ]\  }}|}|d|z  z  }||z  }|S )a  
    :param packed_int: a packed string containing an unsigned integer.
        It is assumed that string is packed in network byte order.

    :return: An unsigned integer equivalent to value of network address
        represented by packed binary string.
    r^   r   r   )listr_   unpack	enumeratereversed)
packed_intrT   rU   rY   numwords         r"   packed_to_intrj      se     z2233EGHUOO,, ! !3q1u}D.Nr!   c                 J    |t           }t          | |j        |j                  S N)DEFAULT_EUI64_DIALECT_valid_wordsr   r   rT   rZ   s     r"   r   r      s$    'w0'2CDDDr!   c                 J    |t           }t          | |j        |j                  S rl   )rm   _int_to_wordsr   r   rU   rZ   s     r"   r   r      s$    ''"3W5FGGGr!   c                 J    |t           }t          | |j        |j                  S rl   )rm   _words_to_intr   r   ro   s     r"   r   r      s$    ' 173DEEEr!   c                 J    |t           }t          | t          |j                  S rl   )rm   _valid_bitsr   r   bitsrZ   s     r"   r   r      s!    'tUG$4555r!   c                 J    |t           }t          | t          |j                  S rl   )rm   _bits_to_intr   r   rw   s     r"   r   r      s!    'eW%5666r!   c                 V    |t           }t          | |j        |j        |j                  S rl   )rm   _int_to_bitsr   r   r   rr   s     r"   r	   r	      s)    '!2G4EwGWXXXr!   c                 >    |t           }t          | t                    S rl   )rm   
_valid_binr   )bin_valrZ   s     r"   r
   r
     s    'gu%%%r!   c                 ,    t          | t                    S rl   )_int_to_binr   )rU   s    r"   r   r         w&&&r!   c                 ,    t          | t                    S rl   )_bin_to_intr   )r   s    r"   r   r     r   r!   rl   ),r   structr_   rer2   netaddr.corer   netaddr.strategyr   rn   r   rq   r   rt   r   rv   r   rz   r	   r|   r
   r~   r   r   r   r   r   versionmax_intobjectr   r$   r(   r+   r/   rm   rS   rC   rA   rF   rV   r\   ra   rj   r    r!   r"   <module>r      s            ( ( ( ( ( (
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 	  U(Q,       ,           *       *           #   	chh)*Q.///#5chh)*Q.///#5chh)*Q.///#5chh)*Q.///#5ejj+,q0111C7rww
|b()))D0
        ! ! !H    ' ' '  &E E E EH H H HF F F F6 6 6 67 7 7 7Y Y Y Y& & & &' ' '' ' ' ' 'r!   