Ë
    ÓŠð^7  ã                   óp   — d Z ddlZddlmZmZ d„ Z e«       Zd„ Zd„ Z	d„ Z
dd„Zdd	„Zdd
„Zd„ Zd„ Zd„ Zy)z)
Shared logic for various address types.
é    N)Ú_rangeÚ_is_strc                  ó¾   — g } t        ddd«      }t        d«      D ]?  }ddgz  }|D ]  }d|dz     ||<   |dz  }Œ | j                  dj                  |«      «       ŒA | S )	z
    :return: A 256 element list containing 8-bit binary digit strings. The
        list index value is equivalent to its bit string value.
    é   éÿÿÿÿé   é   NÚ01é   Ú )r   ÚrangeÚappendÚjoin)ÚlookupÚbits_per_byteÚnumÚbitsÚis        ú;/usr/lib/python3/dist-packages/netaddr/strategy/__init__.pyÚbytes_to_bitsr      s{   € ð
 €FÜ˜1˜b "Ó%€MÜS‹zò %ˆØD6‰zˆØò 	ˆAØ˜3 ™7‘mˆD‰GØA‰I‰Cð	ð 	‰b—g‘g˜d“mÕ$ð%ð €Mó    c                 óz   — t        | d«      syt        | «      |k7  ryd|z  dz
  }| D ]  }d|cxk  r|k  rŒ y  y y)a6  
    :param words: A sequence of unsigned integer word values.

    :param word_size: Width (in bits) of each unsigned integer word value.

    :param num_words: Number of unsigned integer words expected.

    :return: ``True`` if word sequence is valid for this address type,
        ``False`` otherwise.
    Ú__iter__Fé   r   r   T)ÚhasattrÚlen)ÚwordsÚ	word_sizeÚ	num_wordsÚmax_wordr   s        r   Úvalid_wordsr!   !   sZ   € ô 5˜*Ô%Øä
ˆ5ƒzYÒØàI‰~ Ñ!€Hàò ˆØAÔ!˜Ó!Ùð "Ùðð r   c                 ó  — d||z  z  dz
  }d| cxk  r|k  sn t        dt        | «      z  «      ‚d|z  dz
  }g }t        |«      D ]&  }| |z  }|j                  t	        |«      «       | |z  } Œ( t        t        |«      «      S )aJ  
    :param int_val: Unsigned integer to be divided into words of equal size.

    :param word_size: Width (in bits) of each unsigned integer word value.

    :param num_words: Number of unsigned integer words expected.

    :return: A tuple contain unsigned integer word values split according
        to provided arguments.
    r   r   r   zinteger out of bounds: %r!)Ú
IndexErrorÚhexr   r   ÚintÚtupleÚreversed)Úint_valr   r   Úmax_intr    r   Ú_Úwords           r   Úint_to_wordsr,   ;   s–   € ð I 	Ñ)Ñ*¨QÑ.€GàÔ"˜7Ô"ÜÐ5¼¸G»ÑDÓEÐEàI‰~ Ñ!€Hà€EÜ9Óò ˆØ˜Ñ!ˆØ‰”S˜“YÔØIÑ‰ðô
 ”˜%“Ó!Ð!r   c                 ó˜   — t        | ||«      st        d| ›d«      ‚d}t        t        | «      «      D ]  \  }}|}|||z  z  }||z  }Œ |S )a5  
    :param words: A sequence of unsigned integer word values.

    :param word_size: Width (in bits) of each unsigned integer word value.

    :param num_words: Number of unsigned integer words expected.

    :return: An unsigned integer that is equivalent to value represented
        by word sequence.
    zinvalid integer word sequence: ú!r   )r!   Ú
ValueErrorÚ	enumerater'   )r   r   r   r(   r   r   r+   s          r   Úwords_to_intr1   V   sb   € ô u˜i¨Ô3ÝÂÐHÓIÐIà€GÜœH U›OÓ,ò !‰ˆˆ3ØˆØy 1‘}Ñ$ˆØ˜D‘.‰ð!ð
 €Nr   c                 óÊ   — t        | «      sy|dk7  r| j                  |d«      } t        | «      |k7  ryd|z  dz
  }	 dt        | d«      cxk  r|k  ry y	 y# t        $ r Y yw xY w)al  
    :param bits: A network address in a delimited binary string format.

    :param width: Maximum width (in bits) of a network address (excluding
        delimiters).

    :param word_sep: (optional) character or string used to delimit word
        groups (default: '', no separator).

    :return: ``True`` if network address is valid, ``False`` otherwise.
    Fr   r   r   r   T)r   Úreplacer   r%   r/   )r   ÚwidthÚword_sepr)   s       r   Ú
valid_bitsr6   m   s‡   € ô 4Œ=Øà2‚~Ø|‰|˜H bÓ)ˆä
ˆ4ƒyEÒØà5‰j˜1‰n€GðØ”D˜!“Ô' Ò'Øð (ð
 ð (ð
 øô ò Øàðús   ¼A ÁA Á	A"Á!A"c                 ó€   — t        | ||«      st        d| ›d«      ‚|dk7  r| j                  |d«      } t        | d«      S )a¡  
    :param bits: A network address in a delimited binary string format.

    :param width: Maximum width (in bits) of a network address (excluding
        delimiters).

    :param word_sep: (optional) character or string used to delimit word
        groups (default: '', no separator).

    :return: An unsigned integer that is equivalent to value represented
        by network address in readable binary form.
    z invalid readable binary string: r.   r   r   )r6   r/   r3   r%   )r   r4   r5   s      r   Úbits_to_intr8      sA   € ô d˜E 8Ô,ÝÂ$ÐHÓIÐIà2‚~Ø|‰|˜H bÓ)ˆäˆtQ‹<Ðr   c                 ób  — g }t        | ||«      D ]n  }g }|r#|j                  t        |dz     «       |dz  }|rŒ#|j                  «        dj	                  |«      xs d|z  }d|z  |z   | d }|j                  |«       Œp |dk7  rt        |«      st        d|›d«      ‚|j	                  |«      S )a¯  
    :param int_val: An unsigned integer.

    :param word_size: Width (in bits) of each unsigned integer word value.

    :param num_words: Number of unsigned integer words expected.

    :param word_sep: (optional) character or string used to delimit word
        groups (default: '', no separator).

    :return: A network address in a delimited binary string format that is
        equivalent in value to unsigned integer.
    éÿ   r	   r   Ú0Nz word separator is not a string: r.   )r,   r   ÚBYTES_TO_BITSÚreverser   r   r/   )r(   r   r   r5   Ú	bit_wordsr+   r   Úbit_strs           r   Úint_to_bitsr@   £   sÀ   € ð €Iä˜W i°Ó;ò ˆØˆÙØK‰Kœ d¨S¡jÑ1Ô2ØQ‰JˆDò ð 	‰ŒØ—'‘'˜$“-Ò2 3¨¡?ˆØi‘ 'Ñ)¨I¨:¨;Ð7ˆØ×Ñ˜Õðð 2‚~äxÔ ÝÂhÐPÓQÐQà=‰=˜Ó#Ð#r   c                 óä   — t        | «      sy| j                  d«      sy| j                  dd«      } t        | «      |kD  ryd|z  dz
  }	 dt	        | d«      cxk  r|k  ry y	 y# t
        $ r Y yw xY w)a  
    :param bin_val: A network address in Python's binary representation format
        ('0bxxx').

    :param width: Maximum width (in bits) of a network address (excluding
        delimiters).

    :return: ``True`` if network address is valid, ``False`` otherwise.
    FÚ0br   r   r   r   T)r   Ú
startswithr3   r   r%   r/   )Úbin_valr4   r)   s      r   Ú	valid_binrE   Å   s’   € ô 7ÔØà×Ñ˜dÔ#Øào‰o˜d BÓ'€Gä
ˆ7ƒ|eÒØà5‰j˜1‰n€GðØ”G˜Q“Ô* 7Ò*Øð +ð
 ð +ð
 øô ò Øàðús   Á	A# ÁA# Á#	A/Á.A/c           	      óP  — g }	 t        | «      }t        |dd	 «      |kD  rt        d
|›d«      ‚|S # t        $ rk | }|dkD  r(|dz  }|j                  t        |   «       |dz  }|dkD  rŒ(|j	                  «        dt        j                  dddj                  |«      «      z   }Y Œ•w xY w)zÚ
    :param int_val: An unsigned integer.

    :param width: Maximum allowed width (in bits) of a unsigned integer.

    :return: Equivalent string value in Python's binary representation format
        ('0bxxx').
    r   r:   r	   rB   z^[0]+([01]+)$z\1r   r   Nzbinary string out of bounds: r.   )
ÚbinÚ	NameErrorr   r<   r=   Ú_reÚsubr   r   r#   )r(   r4   Ú
bin_tokensrD   r   r+   s         r   Ú
int_to_binrL   å   s¼   € ð €JðOäg“,ˆô ˆ712ˆ;Ó˜%ÒÝºwÐHÓIÐIà€Nøô ò 	OàˆØ!ŠeØt‘8ˆDØ×Ñœm¨DÑ1Ô2Ø!‰GˆAð !‹eð
 	×ÑÔØœŸ™Ð!1°5¸"¿'¹'À*Ó:MÓNÑNŠð	Oús   „1 ±7B%Á)9B%Â$B%c                 óp   — t        | |«      st        d| ›d«      ‚t        | j                  dd«      d«      S )a9  
    :param bin_val: A string containing an unsigned integer in Python's binary
        representation format ('0bxxx').

    :param width: Maximum allowed width (in bits) of a unsigned integer.

    :return: An unsigned integer that is equivalent to value represented
        by Python binary string format.
    z"not a valid Python binary string: r.   rB   r   r   )rE   r/   r%   r3   )rD   r4   s     r   Ú
bin_to_intrN     s4   € ô W˜eÔ$ÝÂGÐMÓNÐNäˆw‰˜t RÓ(¨!Ó,Ð,r   )r   )Ú__doc__ÚrerI   Únetaddr.compatr   r   r   r<   r!   r,   r1   r6   r8   r@   rE   rL   rN   © r   r   ú<module>rS      sP   ðñó ç *òñ  “€òò4"ò6ó.ó@ó,$òDò@ó>-r   