<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

]'                @   s   d  Z  d d l Z d Z d Z Gd d   d e  Z Gd d   d e  Z d	 d
   Z d d d  Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d  d!   Z Gd" d#   d#  Z e j Gd$ d%   d% e   Z e j Gd& d'   d' e   Z Gd( d)   d)  Z Gd* d+   d+ e e  Z Gd, d-   d- e  Z Gd. d/   d/ e e  Z Gd0 d1   d1  Z e e _ Gd2 d3   d3  Z Gd4 d5   d5 e e  Z Gd6 d7   d7 e  Z Gd8 d9   d9 e e  Z  Gd: d;   d;  Z! e! e _ d S)<z1.0    N       c               @   s   e  Z d  Z d S)AddressValueErrorN)__name__
__module____qualname__ r   r   ./opt/alt/python35/lib64/python3.5/ipaddress.pyr      s   r   c               @   s   e  Z d  Z d S)NetmaskValueErrorN)r   r   r   r   r   r   r	   r
      s   r
   c             C   sf   y t  |   SWn t t f k
 r( Yn Xy t |   SWn t t f k
 rQ Yn Xt d |    d  S)Nz0%r does not appear to be an IPv4 or IPv6 address)IPv4Addressr   r
   IPv6Address
ValueError)addressr   r   r	   
ip_address   s    r   Tc             C   sl   y t  |  |  SWn t t f k
 r+ Yn Xy t |  |  SWn t t f k
 rW Yn Xt d |    d  S)Nz0%r does not appear to be an IPv4 or IPv6 network)IPv4Networkr   r
   IPv6Networkr   )r   strictr   r   r	   
ip_network9   s    r   c             C   sf   y t  |   SWn t t f k
 r( Yn Xy t |   SWn t t f k
 rQ Yn Xt d |    d  S)Nz2%r does not appear to be an IPv4 or IPv6 interface)IPv4Interfacer   r
   IPv6Interfacer   )r   r   r   r	   ip_interfaceW   s    r   c             C   s9   y |  j  d d  SWn t k
 r4 t d   Yn Xd  S)N   bigz&Address negative or too large for IPv4)to_bytesOverflowErrorr   )r   r   r   r	   v4_int_to_packedz   s    r   c             C   s9   y |  j  d d  SWn t k
 r4 t d   Yn Xd  S)N   r   z&Address negative or too large for IPv6)r   r   r   )r   r   r   r	   v6_int_to_packed   s    
r   c             C   s;   t  |   j d  } t |  d k r7 t d |    | S)N/   zOnly one '/' permitted in %r)strsplitlenr   )r   addrr   r   r	   _split_optional_netmask   s    r$   c             c   si   t  |   } t |  } } x; | D]3 } | j | j d k rP | | f V| } | } q# W| | f Vd  S)N   )iternext_ip)	addressesitfirstlastipr   r   r	   _find_address_range   s    

r.   c             C   s,   |  d k r | St  | |  |  d @j    S)Nr   r%   )min
bit_length)Znumberbitsr   r   r	   _count_righthand_zero_bits   s    r2   c             c   s?  t  |  t  o t  | t  s* t d   |  j | j k rR t d |  | f   |  | k rj t d   |  j d k r t } n$ |  j d k r t } n t d   |  j } |  j } | j } xw | | k r:t	 t
 | |  | | d j   d  } | | | | f  } | V| d | >7} | d | j k r Pq Wd  S)Nz1first and last must be IP addresses, not networksz%%s and %s are not of the same versionz*last IP address must be greater than firstr      zunknown IP versionr%   )
isinstance_BaseAddress	TypeErrorversionr   r   r   _max_prefixlenr(   r/   r2   r0   	_ALL_ONES)r+   r,   r-   Zip_bitsZ	first_intZlast_intZnbitsnetr   r   r	   summarize_address_range   s0    					r;   c             c   s   t  |   } i  } xj | r~ | j   } | j   } | j |  } | d  k r[ | | | <q | | k r | | =| j |  q Wd  } xF t | j    D]2 } | d  k	 r | j | j k r q | V| } q Wd  S)N)listpopsupernetgetappendsortedvaluesbroadcast_address)r)   Zto_mergesubnetsr:   r>   Zexistingr,   r   r   r	   _collapse_addresses_internal  s$    	rE   c             C   s  g  } g  } g  } x*|  D]"} t  | t  rt | rd | d j | j k rd t d | | d f   | j |  q | j | j k r | r | d j | j k r t d | | d f   y | j | j  Wq;t k
 r | j | j	  Yq;Xq | r.| d j | j k r.t d | | d f   | j |  q Wt
 t |   } | rx0 t |  D]" \ } } | j t | |   qdWt | |  S)	Nr%   z%%s and %s are not of the same versionrF   rF   rF   rF   rF   )r4   r5   _versionr6   r@   
_prefixlenr8   r-   AttributeErrornetwork_addressrA   setr.   extendr;   rE   )r)   ZaddrsZipsZnetsr-   r+   r,   r   r   r	   collapse_addresses2  s4    rM   c             C   s6   t  |  t  r |  j   St  |  t  r2 |  j   St S)N)r4   _BaseNetwork_get_networks_keyr5   _get_address_keyNotImplemented)objr   r   r	   get_mixed_type_keyh  s
    

rS   c               @   s   e  Z d  Z f  Z e d d    Z e d d    Z e d d    Z e d d    Z d	 d
   Z	 d d   Z
 e d d    Z e d d    Z e d d    Z e d d    Z e d d    Z d d   Z d S)_IPAddressBasec             C   s
   |  j    S)N)_explode_shorthand_ip_string)selfr   r   r	   exploded  s    z_IPAddressBase.explodedc             C   s
   t  |   S)N)r    )rV   r   r   r	   
compressed  s    z_IPAddressBase.compressedc             C   s
   |  j    S)N)_reverse_pointer)rV   r   r   r	   reverse_pointer  s    	z_IPAddressBase.reverse_pointerc             C   s#   d t  |   f } t |   d  S)Nz%200s has no version specified)typeNotImplementedError)rV   msgr   r   r	   r7     s    z_IPAddressBase.versionc             C   sc   | d k  r+ d } t  | | |  j f   | |  j k r_ d } t  | | |  j |  j f   d  S)Nr   z-%d (< 0) is not permitted as an IPv%d addressz2%d (>= 2**%d) is not permitted as an IPv%d address)r   rG   r9   r8   )rV   r   r]   r   r   r	   _check_int_address  s    z!_IPAddressBase._check_int_addressc             C   sA   t  |  } | | k r= d } t | | | | |  j f   d  S)Nz6%r (len %d != %d) is not permitted as an IPv%d address)r"   r   rG   )rV   r   Zexpected_lenZaddress_lenr]   r   r   r	   _check_packed_address  s
    z$_IPAddressBase._check_packed_addressc             C   s   |  j  |  j  | ?AS)N)r9   )cls	prefixlenr   r   r	   _ip_int_from_prefix  s    z"_IPAddressBase._ip_int_from_prefixc       	      C   s|   t  | |  j  } |  j | } | | ?} d | >d } | | k rx |  j d } | j | d  } d } t | |   | S)Nr%      r   z&Netmask pattern %r mixes zeroes & ones)r2   r8   r   r   )	r`   ip_intZtrailing_zeroesra   Zleading_onesZall_onesZbyteslenZdetailsr]   r   r   r	   _prefix_from_ip_int  s    
z"_IPAddressBase._prefix_from_ip_intc             C   s   d | } t  |  d   d  S)Nz%r is not a valid netmask)r
   )r`   Znetmask_strr]   r   r   r	   _report_invalid_netmask  s    
z&_IPAddressBase._report_invalid_netmaskc             C   s   t  j j |  s |  j |  y t |  } Wn t k
 rP |  j |  Yn Xd | k ok |  j k n s} |  j |  | S)Nr   )_BaseV4_DECIMAL_DIGITS
issupersetrf   intr   r8   )r`   Zprefixlen_strra   r   r   r	   _prefix_from_prefix_string  s    z)_IPAddressBase._prefix_from_prefix_stringc             C   s   y |  j  |  } Wn t k
 r4 |  j |  Yn Xy |  j |  SWn t k
 rZ Yn X| |  j N} y |  j |  SWn t k
 r |  j |  Yn Xd  S)N)_ip_int_from_stringr   rf   re   r   r9   )r`   ip_strrd   r   r   r	   _prefix_from_ip_string  s    z%_IPAddressBase._prefix_from_ip_stringc             C   s   |  j  t |   f f S)N)	__class__r    )rV   r   r   r	   
__reduce__  s    z_IPAddressBase.__reduce__N)r   r   r   	__slots__propertyrW   rX   rZ   r7   r^   r_   classmethodrb   re   rf   rk   rn   rp   r   r   r   r	   rT     s   	"rT   c               @   s   e  Z d  Z f  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d S)r5   c             C   s   |  j  S)N)r(   )rV   r   r   r	   __int__&  s    z_BaseAddress.__int__c             C   sC   y& |  j  | j  k o$ |  j | j k SWn t k
 r> t SYn Xd  S)N)r(   rG   rI   rQ   )rV   otherr   r   r	   __eq__)  s
    z_BaseAddress.__eq__c             C   sa   t  | t  s t S|  j | j k r; t d |  | f   |  j | j k r] |  j | j k  Sd S)Nz%%s and %s are not of the same versionF)r4   r5   rQ   rG   r6   r(   )rV   ru   r   r   r	   __lt__0  s    z_BaseAddress.__lt__c             C   s*   t  | t  s t S|  j t |   |  S)N)r4   rj   rQ   ro   )rV   ru   r   r   r	   __add__<  s    z_BaseAddress.__add__c             C   s*   t  | t  s t S|  j t |   |  S)N)r4   rj   rQ   ro   )rV   ru   r   r   r	   __sub__A  s    z_BaseAddress.__sub__c             C   s   d |  j  j t |   f S)Nz%s(%r))ro   r   r    )rV   r   r   r	   __repr__F  s    z_BaseAddress.__repr__c             C   s   t  |  j |  j   S)N)r    _string_from_ip_intr(   )rV   r   r   r	   __str__I  s    z_BaseAddress.__str__c             C   s   t  t t |  j    S)N)hashhexrj   r(   )rV   r   r   r	   __hash__L  s    z_BaseAddress.__hash__c             C   s   |  j  |  f S)N)rG   )rV   r   r   r	   rP   O  s    z_BaseAddress._get_address_keyc             C   s   |  j  |  j f f S)N)ro   r(   )rV   r   r   r	   rp   R  s    z_BaseAddress.__reduce__N)r   r   r   rq   rt   rv   rw   rx   ry   rz   r|   r   rP   rp   r   r   r   r	   r5     s   	r5   c               @   s  e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z e d d    Z e d d    Z e d d    Z e d d    Z e d d     Z e d! d"    Z e d# d$    Z e d% d&    Z d' d(   Z d) d*   Z d+ d,   Z d- d. d/ d0  Z d- d. d1 d2  Z e d3 d4    Z e d5 d6    Z e d7 d8    Z e d9 d:    Z e d; d<    Z  e d= d>    Z! e d? d@    Z" d. S)ArN   c             C   s   i  |  _  d  S)N)_cache)rV   r   r   r   r	   __init___  s    z_BaseNetwork.__init__c             C   s   d |  j  j t |   f S)Nz%s(%r))ro   r   r    )rV   r   r   r	   rz   b  s    z_BaseNetwork.__repr__c             C   s   d |  j  |  j f S)Nz%s/%d)rJ   ra   )rV   r   r   r	   r|   e  s    z_BaseNetwork.__str__c             c   sN   t  |  j  } t  |  j  } x) t | d |  D] } |  j |  Vq2 Wd  S)Nr%   )rj   rJ   rC   range_address_class)rV   network	broadcastxr   r   r	   hostsh  s    z_BaseNetwork.hostsc             c   sN   t  |  j  } t  |  j  } x) t | | d  D] } |  j |  Vq2 Wd  S)Nr%   )rj   rJ   rC   r   r   )rV   r   r   r   r   r   r	   __iter__t  s    z_BaseNetwork.__iter__c             C   s   t  |  j  } t  |  j  } | d k rQ | | | k r@ t  |  j | |  S| d 7} | | | k  rq t  |  j | |  Sd  S)Nr   r%   )rj   rJ   rC   
IndexErrorr   )rV   nr   r   r   r   r	   __getitem__z  s    
z_BaseNetwork.__getitem__c             C   s   t  | t  s t S|  j | j k r; t d |  | f   |  j | j k r] |  j | j k  S|  j | j k r |  j | j k  Sd S)Nz%%s and %s are not of the same versionF)r4   rN   rQ   rG   r6   rJ   netmask)rV   ru   r   r   r	   rw     s    z_BaseNetwork.__lt__c             C   sa   yD |  j  | j  k oB |  j | j k oB t |  j  t | j  k SWn t k
 r\ t SYn Xd  S)N)rG   rJ   rj   r   rI   rQ   )rV   ru   r   r   r	   rv     s     z_BaseNetwork.__eq__c             C   s    t  t |  j  t |  j  A S)N)r}   rj   rJ   r   )rV   r   r   r	   r     s    z_BaseNetwork.__hash__c             C   s`   |  j  | j  k r d St | t  r) d St |  j  t | j  k oY t |  j  k SSd  S)NF)rG   r4   rN   rj   rJ   r(   rC   )rV   ru   r   r   r	   __contains__  s     z_BaseNetwork.__contains__c             C   s:   |  j  | k p9 |  j | k p9 | j  |  k p9 | j |  k S)N)rJ   rC   )rV   ru   r   r   r	   overlaps  s    z_BaseNetwork.overlapsc             C   sT   |  j  j d  } | d  k rP |  j t |  j  t |  j  B } | |  j  d <| S)NrC   )r   r?   r   rj   rJ   hostmask)rV   r   r   r   r	   rC     s    z_BaseNetwork.broadcast_addressc             C   sN   |  j  j d  } | d  k rJ |  j t |  j  |  j A } | |  j  d <| S)Nr   )r   r?   r   rj   r   r9   )rV   r   r   r   r	   r     s
    z_BaseNetwork.hostmaskc             C   s   d |  j  |  j f S)Nz%s/%d)rJ   rH   )rV   r   r   r	   with_prefixlen  s    z_BaseNetwork.with_prefixlenc             C   s   d |  j  |  j f S)Nz%s/%s)rJ   r   )rV   r   r   r	   with_netmask  s    z_BaseNetwork.with_netmaskc             C   s   d |  j  |  j f S)Nz%s/%s)rJ   r   )rV   r   r   r	   with_hostmask  s    z_BaseNetwork.with_hostmaskc             C   s   t  |  j  t  |  j  d S)Nr%   )rj   rC   rJ   )rV   r   r   r	   num_addresses  s    z_BaseNetwork.num_addressesc             C   s#   d t  |   f } t |   d  S)Nz%%200s has no associated address class)r[   r\   )rV   r]   r   r   r	   r     s    z_BaseNetwork._address_classc             C   s   |  j  S)N)rH   )rV   r   r   r	   ra     s    z_BaseNetwork.prefixlenc             c   s  |  j  | j  k s( t d |  | f   t | t  sG t d |   | j |  j k oh | j |  j k s t d | |  f   | |  k r d  S| j d | j | j f  } |  j	   \ } } x | | k ru| | k ru| j | j k r| j | j k r| V| j	   \ } } q | j | j k rY| j | j k rY| V| j	   \ } } q t
 d | | | f   q W| | k r| Vn- | | k r| Vn t
 d | | | f   d  S)Nz%%s and %s are not of the same versionz%s is not a network objectz%s not contained in %sz%s/%sz3Error performing exclusion: s1: %s s2: %s other: %s)rG   r6   r4   rN   rJ   rC   r   ro   ra   rD   AssertionError)rV   ru   s1s2r   r   r	   address_exclude  s<    $z_BaseNetwork.address_excludec             C   s   |  j  | j  k r( t d |  | f   |  j | j k  r> d S|  j | j k rT d S|  j | j k  rj d S|  j | j k r d Sd S)Nz"%s and %s are not of the same typer%   r   rF   rF   )rG   r6   rJ   r   )rV   ru   r   r   r	   compare_networks.  s    !z_BaseNetwork.compare_networksc             C   s   |  j  |  j |  j f S)N)rG   rJ   r   )rV   r   r   r	   rO   ^  s    z_BaseNetwork._get_networks_keyr%   Nc       	      c   s%  |  j  |  j k r |  Vd  S| d  k	 rg | |  j  k  rB t d   | d k rZ t d   | |  j  } | d k  r t d   |  j  | } | |  j k r t d | |  f   t |  j  } t |  j  d } t |  j  d | ?} x4 t | | |  D]  } |  j | | f  } | Vq Wd  S)Nznew prefix must be longerr%   z(cannot set prefixlen_diff and new_prefixr   zprefix length diff must be > 0z0prefix length diff %d is invalid for netblock %s)	rH   r8   r   rj   rJ   rC   r   r   ro   )	rV   prefixlen_diff
new_prefixnew_prefixlenstartendstepZnew_addrcurrentr   r   r	   rD   h  s,    z_BaseNetwork.subnetsc             C   s   |  j  d k r |  S| d  k	 r_ | |  j  k r: t d   | d k rR t d   |  j  | } |  j | } | d k  r t d |  j | f   |  j t |  j  t |  j  | >@| f  S)Nr   znew prefix must be shorterr%   z(cannot set prefixlen_diff and new_prefixz;current prefixlen is %d, cannot have a prefixlen_diff of %d)rH   r   ra   ro   rj   rJ   r   )rV   r   r   r   r   r   r	   r>     s     z_BaseNetwork.supernetc             C   s   |  j  j o |  j j S)N)rJ   is_multicastrC   )rV   r   r   r	   r     s    	z_BaseNetwork.is_multicastc             C   s   |  j  j o |  j j S)N)rJ   is_reservedrC   )rV   r   r   r	   r     s    	z_BaseNetwork.is_reservedc             C   s   |  j  j o |  j j S)N)rJ   is_link_localrC   )rV   r   r   r	   r     s    z_BaseNetwork.is_link_localc             C   s   |  j  j o |  j j S)N)rJ   
is_privaterC   )rV   r   r   r	   r     s    	z_BaseNetwork.is_privatec             C   s   |  j  S)N)r   )rV   r   r   r	   	is_global  s    	z_BaseNetwork.is_globalc             C   s   |  j  j o |  j j S)N)rJ   is_unspecifiedrC   )rV   r   r   r	   r      s    	z_BaseNetwork.is_unspecifiedc             C   s   |  j  j o |  j j S)N)rJ   is_loopbackrC   )rV   r   r   r	   r     s    	z_BaseNetwork.is_loopback)#r   r   r   r   rz   r|   r   r   r   rw   rv   r   r   r   rr   rC   r   r   r   r   r   r   ra   r   r   rO   rD   r>   r   r   r   r   r   r   r   r   r   r   r	   rN   V  s>   		N0
5)rN   c            
   @   s  e  Z d  Z f  Z d Z d e d Z e d  Z e d d d d d	 d
 d d d h	  Z	 e Z
 i  Z d d   Z e d d    Z e d d    Z e d d    Z e d d    Z d d   Z d d   Z d d   Z e d d    Z e d  d!    Z d" S)#rg   r   r   r%   
0123456789                     r   r   c             C   s
   t  |   S)N)r    )rV   r   r   r	   rU   0  s    z$_BaseV4._explode_shorthand_ip_stringc             C   s   | |  j  k r t | t  r' | } n7 y |  j |  } Wn! t k
 r] |  j |  } Yn Xt |  j |   } | | f |  j  | <|  j  | S)N)_netmask_cacher4   rj   rk   r
   rn   r   rb   )r`   argra   r   r   r   r	   _make_netmask3  s    		z_BaseV4._make_netmaskc             C   s   | s t  d   | j d  } t |  d k rC t  d |   y  t j t |  j |  d  SWn> t k
 r } z t  d | | f  d   WYd  d  } ~ Xn Xd  S)NzAddress cannot be empty.r   zExpected 4 octets in %rr   z%s in %r)r   r!   r"   rj   
from_bytesmap_parse_octetr   )r`   rm   Zoctetsexcr   r   r	   rl   K  s     z_BaseV4._ip_int_from_stringc             C   s   | s t  d   |  j j |  s: d } t  | |   t |  d k rb d } t  | |   t | d  } | d k r | d d k r d	 } t  | |   | d
 k r t  d |   | S)NzEmpty octet not permittedz#Only decimal digits permitted in %r   z$At most 3 characters permitted in %r
      r   0z3Ambiguous (octal/decimal) value in %r not permittedr   zOctet %d (> 255) not permitted)r   rh   ri   r"   rj   )r`   Z	octet_strr]   Z	octet_intr   r   r	   r   e  s    z_BaseV4._parse_octetc             C   s"   d j  t t | j d d    S)Nr   r   r   )joinr   r    r   )r`   rd   r   r   r	   r{     s    z_BaseV4._string_from_ip_intc             C   s   | j  d  } t |  d k r y. x' | D] } t |  |  j k r+ d Sq+ WWn t k
 rg d SYn Xx> t |  D]0 \ } } | d k ru | | | d k ru d Squ Wd Sy t |  } Wn t k
 r d SYn Xd | k o |  j k SS)Nr   r   Fr   r%   T)r!   r"   rj   _valid_mask_octetsr   	enumerater8   )rV   r   maskr   idxyr   r   r	   _is_valid_netmask  s"    	 	z_BaseV4._is_valid_netmaskc                s   | j  d  } y&   f d d   t t |  D } Wn t k
 rM d SYn Xt |  t |  k rj d S| d | d k  r d Sd S)	Nr   c                s%   g  |  ] } |   j  k r |  q Sr   )r   ).0r   )rV   r   r	   
<listcomp>  s   	 z(_BaseV4._is_hostmask.<locals>.<listcomp>Fr   r%   TrF   )r!   r   rj   r   r"   )rV   rm   r1   partsr   )rV   r	   _is_hostmask  s    
&	z_BaseV4._is_hostmaskc             C   s3   t  |   j d  d  d  d  } d j |  d S)Nr   r%   z.in-addr.arparF   )r    r!   r   )rV   Zreverse_octetsr   r   r	   rY     s    "z_BaseV4._reverse_pointerc             C   s   |  j  S)N)r8   )rV   r   r   r	   max_prefixlen  s    z_BaseV4.max_prefixlenc             C   s   |  j  S)N)rG   )rV   r   r   r	   r7     s    z_BaseV4.versionN)r   r   r   rq   rG   
IPV4LENGTHr9   	frozensetrh   r   r8   r   rU   rs   r   rl   r   r{   r   r   rY   rr   r   r7   r   r   r   r	   rg     s"   	'%	rg   c               @   s   e  Z d  Z d Z d d   Z e d d    Z e d d    Z e e j	   d	 d
     Z
 e e j	   d d     Z e d d    Z e d d    Z e d d    Z e d d    Z d S)r   r(   __weakref__c             C   s   t  | t  r) |  j |  | |  _ d  St  | t  ra |  j | d  t j | d  |  _ d  St |  } d | k r t d |   |  j	 |  |  _ d  S)Nr   r   r   zUnexpected '/' in %r)
r4   rj   r^   r(   bytesr_   r   r    r   rl   )rV   r   addr_strr   r   r	   r     s    	zIPv4Address.__init__c             C   s   t  |  j  S)N)r   r(   )rV   r   r   r	   packed  s    zIPv4Address.packedc             C   s   |  |  j  j k S)N)
_constants_reserved_network)rV   r   r   r	   r     s    	zIPv4Address.is_reservedc                s#   t    f d d     j j D  S)Nc             3   s   |  ] }   | k Vq d  S)Nr   )r   r:   )rV   r   r	   	<genexpr>   s    z)IPv4Address.is_private.<locals>.<genexpr>)anyr   _private_networks)rV   r   )rV   r	   r     s    
zIPv4Address.is_privatec             C   s   |  |  j  j k o |  j S)N)r   _public_networkr   )rV   r   r   r	   r   "  s    zIPv4Address.is_globalc             C   s   |  |  j  j k S)N)r   _multicast_network)rV   r   r   r	   r   '  s    	zIPv4Address.is_multicastc             C   s   |  |  j  j k S)N)r   _unspecified_address)rV   r   r   r	   r   2  s    	zIPv4Address.is_unspecifiedc             C   s   |  |  j  j k S)N)r   _loopback_network)rV   r   r   r	   r   =  s    zIPv4Address.is_loopbackc             C   s   |  |  j  j k S)N)r   _linklocal_network)rV   r   r   r	   r   G  s    zIPv4Address.is_link_localN)r(   r   )r   r   r   rq   r   rr   r   r   	functools	lru_cacher   r   r   r   r   r   r   r   r   r	   r     s   #
r   c               @   s   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z e j	 Z	 e
 d d    Z e
 d d    Z e
 d d    Z e
 d d    Z d S)r   c             C   s;  t  | t t f  rG t j |  |  t |  j  |  _ |  j |  _	 d  St  | t
  r t j |  | d  t |  d k r t | d  |  _	 n |  j |  _	 t | d d |  _ |  j j |  _ |  j j |  _ d  St |  } t j |  | d  t | d d |  _ |  j j	 |  _	 |  j j |  _ |  j j |  _ d  S)Nr   r%   r   F)r4   r   rj   r   r   r   r(   r   r8   rH   tupler"   r   r   r$   )rV   r   r#   r   r   r	   r   T  s(    zIPv4Interface.__init__c             C   s    d |  j  |  j  |  j j f S)Nz%s/%d)r{   r(   r   ra   )rV   r   r   r	   r|   p  s    zIPv4Interface.__str__c             C   sZ   t  j |  |  } | s% | t k r) | Sy |  j | j k SWn t k
 rU d SYn Xd  S)NF)r   rv   rQ   r   rI   )rV   ru   address_equalr   r   r	   rv   t  s    zIPv4Interface.__eq__c             C   sk   t  j |  |  } | t k r" t Sy, |  j | j k  pL |  j | j k oL | SWn t k
 rf d SYn Xd  S)NF)r   rw   rQ   r   rI   )rV   ru   address_lessr   r   r	   rw     s    zIPv4Interface.__lt__c             C   s   |  j  |  j At |  j j  AS)N)r(   rH   rj   r   rJ   )rV   r   r   r	   r     s    zIPv4Interface.__hash__c             C   s   t  |  j  S)N)r   r(   )rV   r   r   r	   r-     s    zIPv4Interface.ipc             C   s   d |  j  |  j  |  j f S)Nz%s/%s)r{   r(   rH   )rV   r   r   r	   r     s    zIPv4Interface.with_prefixlenc             C   s   d |  j  |  j  |  j f S)Nz%s/%s)r{   r(   r   )rV   r   r   r	   r     s    zIPv4Interface.with_netmaskc             C   s   d |  j  |  j  |  j f S)Nz%s/%s)r{   r(   r   )rV   r   r   r	   r     s    zIPv4Interface.with_hostmaskN)r   r   r   r   r|   rv   rw   r   rT   rp   rr   r-   r   r   r   r   r   r   r	   r   R  s   	r   c               @   sC   e  Z d  Z e Z d d d  Z e e j   d d     Z	 d S)r   Tc             C   s  t  j |  |  t | t t f  rV t |  |  _ |  j |  j  \ |  _	 |  _
 d  St | t  rt |  d k r | d } n	 |  j } t | d  |  _ |  j |  \ |  _	 |  _
 t |  j  } | t |  j	  @| k r| r t d |    n t | t |  j	  @ |  _ d  St |  } t |  j | d   |  _ t |  d k rc| d } n	 |  j } |  j |  \ |  _	 |  _
 | rt t |  j  t |  j	  @ |  j k rt d |    t t |  j  t |  j	  @ |  _ |  j
 |  j d k r|  j |  _ d  S)Nr%   r   z%s has host bits setr   )rN   r   r4   rj   r   r   rJ   r   r8   r   rH   r   r"   r   r$   rl   r   r   )rV   r   r   r   r   r#   r   r   r	   r     s@    %		zIPv4Network.__init__c             C   s3   |  j  t d  k o' |  j t d  k o2 |  j S)Nz100.64.0.0/10)rJ   r   rC   r   )rV   r   r   r	   r     s    
zIPv4Network.is_globalN)
r   r   r   r   r   r   rr   r   r   r   r   r   r   r	   r     s   Tr   c               @   s   e  Z d  Z e d  Z e d  Z e d  Z e d  Z e d  e d  e d  e d  e d  e d  e d	  e d
  e d  e d  e d  e d  e d  e d  g Z e d  Z	 e
 d  Z d S)_IPv4Constantsz169.254.0.0/16z127.0.0.0/8z224.0.0.0/4z100.64.0.0/10z	0.0.0.0/8z
10.0.0.0/8z172.16.0.0/12z192.0.0.0/29z192.0.0.170/31z192.0.2.0/24z192.168.0.0/16z198.18.0.0/15z198.51.100.0/24z203.0.113.0/24z240.0.0.0/4z255.255.255.255/32z0.0.0.0N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r     s(   													r   c               @   s   e  Z d  Z f  Z d Z d e d Z d Z e d  Z	 e Z
 i  Z e d d    Z e d d	    Z e d
 d    Z e d d    Z e d d d   Z d d   Z d d   Z e d d    Z e d d    Z d S)_BaseV6r3   r   r%   rc   Z0123456789ABCDEFabcdefc             C   si   | |  j  k r^ t | t  r' | } n |  j |  } t |  j |   } | | f |  j  | <|  j  | S)N)r   r4   rj   rk   r   rb   )r`   r   ra   r   r   r   r	   r   M  s    		z_BaseV6._make_netmaskc             C   s  | s t  d   | j d  } d } t |  | k  rU d | | f } t  |   d | d k r y t | j    j } Wn> t  k
 r } z t  d | | f  d   WYd  d  } ~ Xn X| j d | d	 ?d
 @ | j d | d
 @ |  j d } t |  | k r,d | d | f } t  |   d  } xS t d t |  d  D]8 }	 | |	 sL| d  k	 r~d | } t  |   |	 } qLW| d  k	 rQ| }
 t |  | d } | d s|
 d 8}
 |
 rd } t  | |   | d s| d 8} | rd } t  | |   |  j |
 | } | d k  rd } t  | |  j d | f   n t |  |  j k rd } t  | |  j | f   | d sd } t  | |   | d sd } t  | |   t |  }
 d } d } y d } x5 t |
  D]' }	 | d	 K} | |  j	 | |	  O} qW| d	 | K} x9 t | d  D]' }	 | d	 K} | |  j	 | |	  O} q=W| SWn> t
 k
 r} z t  d | | f  d   WYd  d  } ~ Xn Xd  S)NzAddress cannot be empty:r   z At least %d parts expected in %rr   r%   z%s in %rz%xr   i  z!At most %d colons permitted in %rz At most one '::' permitted in %rr   z0Leading ':' only permitted as part of '::' in %rz1Trailing ':' only permitted as part of '::' in %rz/Expected at most %d other parts with '::' in %rz,Exactly %d parts expected without '::' in %rrF   rF   rF   )r   r!   r"   r   r=   r(   r@   _HEXTET_COUNTr   _parse_hextetr   )r`   rm   r   Z
_min_partsr]   Zipv4_intr   Z
_max_partsZ
skip_indexiZparts_hiZparts_loZparts_skippedrd   r   r   r	   rl   _  s    , 






 



z_BaseV6._ip_int_from_stringc             C   sW   |  j  j |  s" t d |   t |  d k rJ d } t | |   t | d  S)NzOnly hex digits permitted in %rr   z$At most 4 characters permitted in %rr   )_HEX_DIGITSri   r   r"   rj   )r`   Z
hextet_strr]   r   r   r	   r     s    z_BaseV6._parse_hextetc       	      C   s   d } d } d } d } xi t  |  D][ \ } } | d k rt | d 7} | d k rY | } | | k r | } | } q% d } d } q% W| d k r | | } | t |  k r | d g 7} d g | | |  <| d k r d g | } | S)	Nr%   r   r    rF   rF   rF   rF   )r   r"   )	r`   hextetsZbest_doublecolon_startZbest_doublecolon_lenZdoublecolon_startZdoublecolon_lenindexZhextetZbest_doublecolon_endr   r   r	   _compress_hextets  s.    
	
z_BaseV6._compress_hextetsNc                s   | d  k r t  |  j  } | |  j k r6 t d   d |     f d d   t d d d  D } |  j |  } d j |  S)	NzIPv6 address is too largez%032xc                s1   g  |  ]' } d  t    | | d  d   q S)z%xr   r   )rj   )r   r   )hex_strr   r	   r   &  s   	 z/_BaseV6._string_from_ip_int.<locals>.<listcomp>r   r   r   r   )rj   r(   r9   r   r   r   r   )r`   rd   r   r   )r   r	   r{     s    
%z_BaseV6._string_from_ip_intc                s   t  |  t  r! t |  j  } n- t  |  t  rB t |  j  } n t |   } |  j |  } d |     f d d   t d d d  D } t  |  t t f  r d d j	 |  |  j
 f Sd j	 |  S)	Nz%032xc                s$   g  |  ] }   | | d    q S)r   r   )r   r   )r   r   r	   r   >  s   	 z8_BaseV6._explode_shorthand_ip_string.<locals>.<listcomp>r   r   r   z%s/%dr   )r4   r   r    rJ   r   r-   rl   r   rN   r   rH   )rV   rm   rd   r   r   )r   r	   rU   +  s    

%z$_BaseV6._explode_shorthand_ip_stringc             C   s3   |  j  d  d  d  j d d  } d j |  d S)Nr%   r   r   r   z	.ip6.arparF   )rW   replacer   )rV   Zreverse_charsr   r   r	   rY   C  s    "z_BaseV6._reverse_pointerc             C   s   |  j  S)N)r8   )rV   r   r   r	   r   L  s    z_BaseV6.max_prefixlenc             C   s   |  j  S)N)rG   )rV   r   r   r	   r7   P  s    z_BaseV6.version)r   r   r   rq   rG   
IPV6LENGTHr9   r   r   r   r8   r   rs   r   rl   r   r   r{   rU   rY   rr   r   r7   r   r   r   r	   r   9  s"   	h0	r   c               @   s  e  Z d  Z d Z d d   Z e d d    Z e d d    Z e d	 d
    Z e d d    Z	 e d d    Z
 e e j   d d     Z e d d    Z e d d    Z e d d    Z e d d    Z e d d    Z e d d    Z d S)r   r(   r   c             C   s   t  | t  r) |  j |  | |  _ d  St  | t  ra |  j | d  t j | d  |  _ d  St |  } d | k r t d |   |  j	 |  |  _ d  S)Nr   r   r   zUnexpected '/' in %r)
r4   rj   r^   r(   r   r_   r   r    r   rl   )rV   r   r   r   r   r	   r   [  s    	zIPv6Address.__init__c             C   s   t  |  j  S)N)r   r(   )rV   r   r   r	   r     s    zIPv6Address.packedc             C   s   |  |  j  j k S)N)r   r   )rV   r   r   r	   r     s    	zIPv6Address.is_multicastc                s#   t    f d d     j j D  S)Nc             3   s   |  ] }   | k Vq d  S)Nr   )r   r   )rV   r   r	   r     s    z*IPv6Address.is_reserved.<locals>.<genexpr>)r   r   _reserved_networks)rV   r   )rV   r	   r     s    	zIPv6Address.is_reservedc             C   s   |  |  j  j k S)N)r   r   )rV   r   r   r	   r     s    zIPv6Address.is_link_localc             C   s   |  |  j  j k S)N)r   _sitelocal_network)rV   r   r   r	   is_site_local  s    zIPv6Address.is_site_localc                s#   t    f d d     j j D  S)Nc             3   s   |  ] }   | k Vq d  S)Nr   )r   r:   )rV   r   r	   r     s    z)IPv6Address.is_private.<locals>.<genexpr>)r   r   r   )rV   r   )rV   r	   r     s    
zIPv6Address.is_privatec             C   s   |  j  S)N)r   )rV   r   r   r	   r     s    	zIPv6Address.is_globalc             C   s   |  j  d k S)Nr   )r(   )rV   r   r   r	   r     s    	zIPv6Address.is_unspecifiedc             C   s   |  j  d k S)Nr%   )r(   )rV   r   r   r	   r     s    	zIPv6Address.is_loopbackc             C   s(   |  j  d ?d k r d  St |  j  d @ S)Nr   i  l    )r(   r   )rV   r   r   r	   ipv4_mapped  s    	zIPv6Address.ipv4_mappedc             C   s@   |  j  d ?d k r d  St |  j  d ?d @ t |  j  d @ f S)N`   i   @   l    )r(   r   )rV   r   r   r	   teredo  s    
zIPv6Address.teredoc             C   s,   |  j  d ?d k r d  St |  j  d ?d @ S)Np   i   P   l    )r(   r   )rV   r   r   r	   	sixtofour  s    	zIPv6Address.sixtofourN)r(   r   )r   r   r   rq   r   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r   U  s   $
r   c               @   s   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z e j	 Z	 e
 d d    Z e
 d d    Z e
 d d    Z e
 d d    Z e
 d d    Z e
 d d    Z d S)r   c             C   s;  t  | t t f  rG t j |  |  t |  j  |  _ |  j |  _	 d  St  | t
  r t j |  | d  t |  d k r t | d  |  _	 n |  j |  _	 t | d d |  _ |  j j |  _ |  j j |  _ d  St |  } t j |  | d  t | d d |  _ |  j j |  _ |  j j	 |  _	 |  j j |  _ d  S)Nr   r%   r   F)r4   r   rj   r   r   r   r(   r   r8   rH   r   r"   r   r   r$   )rV   r   r#   r   r   r	   r     s(    zIPv6Interface.__init__c             C   s    d |  j  |  j  |  j j f S)Nz%s/%d)r{   r(   r   ra   )rV   r   r   r	   r|   #  s    zIPv6Interface.__str__c             C   sZ   t  j |  |  } | s% | t k r) | Sy |  j | j k SWn t k
 rU d SYn Xd  S)NF)r   rv   rQ   r   rI   )rV   ru   r   r   r   r	   rv   '  s    zIPv6Interface.__eq__c             C   sk   t  j |  |  } | t k r" t Sy, |  j | j k  pL |  j | j k oL | SWn t k
 rf d SYn Xd  S)NF)r   rw   rQ   r   rI   )rV   ru   r   r   r   r	   rw   3  s    zIPv6Interface.__lt__c             C   s   |  j  |  j At |  j j  AS)N)r(   rH   rj   r   rJ   )rV   r   r   r	   r   ?  s    zIPv6Interface.__hash__c             C   s   t  |  j  S)N)r   r(   )rV   r   r   r	   r-   D  s    zIPv6Interface.ipc             C   s   d |  j  |  j  |  j f S)Nz%s/%s)r{   r(   rH   )rV   r   r   r	   r   H  s    zIPv6Interface.with_prefixlenc             C   s   d |  j  |  j  |  j f S)Nz%s/%s)r{   r(   r   )rV   r   r   r	   r   M  s    zIPv6Interface.with_netmaskc             C   s   d |  j  |  j  |  j f S)Nz%s/%s)r{   r(   r   )rV   r   r   r	   r   R  s    zIPv6Interface.with_hostmaskc             C   s   |  j  d k o |  j j S)Nr   )r(   r   r   )rV   r   r   r	   r   W  s    zIPv6Interface.is_unspecifiedc             C   s   |  j  d k o |  j j S)Nr%   )r(   r   r   )rV   r   r   r	   r   [  s    zIPv6Interface.is_loopbackN)r   r   r   r   r|   rv   rw   r   rT   rp   rr   r-   r   r   r   r   r   r   r   r   r	   r   	  s   	r   c               @   sC   e  Z d  Z e Z d d d  Z d d   Z e d d    Z d S)	r   Tc             C   s  t  j |  |  t | t t f  rV t |  |  _ |  j |  j  \ |  _	 |  _
 d  St | t  rt |  d k r | d } n	 |  j } |  j |  \ |  _	 |  _
 t | d  |  _ t |  j  } | t |  j	  @| k r| r t d |    n t | t |  j	  @ |  _ d  St |  } t |  j | d   |  _ t |  d k rc| d } n	 |  j } |  j |  \ |  _	 |  _
 | rt t |  j  t |  j	  @ |  j k rt d |    t t |  j  t |  j	  @ |  _ |  j
 |  j d k r|  j |  _ d  S)Nr%   r   z%s has host bits setr   )rN   r   r4   r   rj   r   rJ   r   r8   r   rH   r   r"   r   r$   rl   r   r   )rV   r   r   r   r   r#   r   r   r	   r   p  s@     		zIPv6Network.__init__c             c   sR   t  |  j  } t  |  j  } x- t | d | d  D] } |  j |  Vq6 Wd  S)Nr%   )rj   rJ   rC   r   r   )rV   r   r   r   r   r   r	   r     s    zIPv6Network.hostsc             C   s   |  j  j o |  j j S)N)rJ   r   rC   )rV   r   r   r	   r     s    zIPv6Network.is_site_localN)	r   r   r   r   r   r   r   rr   r   r   r   r   r	   r   `  s   Nr   c               @   s!  e  Z d  Z e d  Z e d  Z e d  e d  e d  e d  e d  e d  e d	  e d
  e d  e d  g
 Z e d  e d  e d  e d  e d  e d  e d  e d  e d  e d  e d  e d  e d  e d  e d  g Z e d  Z d S)_IPv6Constantsz	fe80::/10zff00::/8z::1/128z::/128z::ffff:0:0/96z100::/64z	2001::/23z2001:2::/48z2001:db8::/32z2001:10::/28zfc00::/7z::/8z100::/8z200::/7z400::/6z800::/5z1000::/4z4000::/3z6000::/3z8000::/3zA000::/3zC000::/3zE000::/4zF000::/5zF800::/6zFE00::/9z	fec0::/10N)	r   r   r   r   r   r   r   r   r   r   r   r   r	   r     s*   									r   )"__version__r   r   r   r   r   r
   r   r   r   r   r   r$   r.   r2   r;   rE   rM   rS   rT   total_orderingr5   rN   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   <module>   sH   #716: uSr	 Wz!