
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,aÜ ã                   @   s€  d Z ddlZdZdZG dd„ deƒZG d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G d"d#„ d#ƒZejG d$d%„ d%eƒƒZejG d&d'„ d'eƒƒZG d(d)„ d)ƒZG d*d+„ d+eeƒZG d,d-„ d-eƒZG d.d/„ d/eeƒZG d0d1„ d1ƒZee_G d2d3„ d3ƒZG d4d5„ d5eeƒZG d6d7„ d7eƒZG d8d9„ d9eeƒZ G d: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/python38/lib64/python3.8/ipaddress.pyr      s   r   c                   @   s   e Zd ZdS )ÚNetmaskValueErrorNr   r	   r	   r	   r
   r      s   r   c              	   C   sX   z
t | ƒW S  ttfk
r"   Y nX z
t| ƒW S  ttfk
rF   Y nX t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   s\   zt | |ƒW S  ttfk
r$   Y nX zt| |ƒW S  ttfk
rJ   Y nX t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   sX   z
t | ƒW S  ttfk
r"   Y nX z
t| ƒW S  ttfk
rF   Y nX t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   s0   z|   dd¡W S  tk
r*   tdƒ‚Y nX d 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   s0   z|   dd¡W S  tk
r*   tdƒ‚Y nX d S )Né   r   z&Address negative or too large for IPv6r   r   r	   r	   r
   Úv6_int_to_packedŽ   s    
r    c                 C   s*   t | ƒ d¡}t|ƒdkr&td|  ƒ‚|S )Nú/é   zOnly one '/' permitted in %r)ÚstrÚsplitÚlenr   )r   Úaddrr	   r	   r
   Ú_split_optional_netmaskž   s    r'   c                 c   sN   t | ƒ}t|ƒ }}|D ]&}|j|jd kr:||fV  |}|}q||fV  d S ©Né   )ÚiterÚnextÚ_ip)Ú	addressesÚitÚfirstÚlastÚipr	   r	   r
   Ú_find_address_range¦   s    

r2   c                 C   s$   | dkr|S t ||  | d @  ¡ ƒS )Nr   r)   )ÚminÚ
bit_length)ZnumberÚbitsr	   r	   r
   Ú_count_righthand_zero_bitsº   s    r6   c                 c   sâ   t | tƒrt |tƒstdƒ‚| j|jkr8td| |f ƒ‚| |krHtdƒ‚| jdkrXt}n| jdkrht}ntdƒ‚| j}| j}|j}||krÞt	t
||ƒ|| d  ¡ d ƒ}|||| fƒ}|V  |d|> 7 }|d |jkr‚qÞq‚d S )Nz1first and last must be IP addresses, not networksú%%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,   r3   r6   r4   Ú	_ALL_ONES)r/   r0   r1   Zip_bitsZ	first_intZlast_intZnbitsÚnetr	   r	   r
   Úsummarize_address_rangeÊ   s8    
ÿ ÿ


ÿr@   c                 c   s�   t | ƒ}i }|rV| ¡ }| ¡ }| |¡}|d kr<|||< q||kr||= | |¡ qd }t| ¡ ƒD ]$}|d k	r€|j|jkr€qf|V  |}qfd S ©N)ÚlistÚpopÚsupernetÚgetÚappendÚsortedÚvaluesÚbroadcast_address)r-   Zto_mergeÚsubnetsr?   rD   Zexistingr0   r	   r	   r
   Ú_collapse_addresses_internal  s$    

rK   c              	   C   s0  g }g }g }| D ]Ü}t |tƒrR|rF|d j|jkrFtd||d f ƒ‚| |¡ q|j|jkrº|r†|d j|jkr†td||d f ƒ‚z| |j¡ W qì tk
r¶   | |j	¡ Y qìX q|râ|d j|jkrâtd||d f ƒ‚| |¡ qt
t|ƒƒ}|�r$t|ƒD ]\}}| t||ƒ¡ �qt|| ƒS )Néÿÿÿÿr7   )r9   r:   Ú_versionr;   rF   Ú
_prefixlenr=   r1   ÚAttributeErrorÚnetwork_addressrG   Úsetr2   Úextendr@   rK   )r-   ZaddrsZipsZnetsr1   r/   r0   r	   r	   r
   Úcollapse_addresses2  s@    
 ÿ ÿ ÿrS   c                 C   s(   t | tƒr|  ¡ S t | tƒr$|  ¡ S tS rA   )r9   Ú_BaseNetworkÚ_get_networks_keyr:   Ú_get_address_keyÚNotImplemented)Úobjr	   r	   r
   Úget_mixed_type_keyh  s
    

rY   c                   @   s    e Zd Zd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edd„ ƒZdd„ ZdS )Ú_IPAddressBaser	   c                 C   s   |   ¡ S rA   )Ú_explode_shorthand_ip_string©Úselfr	   r	   r
   Úexploded‡  s    z_IPAddressBase.explodedc                 C   s   t | ƒS rA   ©r#   r\   r	   r	   r
   Ú
compressedŒ  s    z_IPAddressBase.compressedc                 C   s   |   ¡ S rA   )Ú_reverse_pointerr\   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©r]   Úmsgr	   r	   r
   r<   œ  s    z_IPAddressBase.versionc                 C   sF   |dk rd}t ||| jf ƒ‚|| jkrBd}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   rM   r>   r=   )r]   r   rg   r	   r	   r
   Ú_check_int_address¡  s    

ÿz!_IPAddressBase._check_int_addressc                 C   s.   t |ƒ}||kr*d}t||||| jf ƒ‚d S )Nz6%r (len %d != %d) is not permitted as an IPv%d address)r%   r   rM   )r]   r   Zexpected_lenZaddress_lenrg   r	   r	   r
   Ú_check_packed_addressª  s     ÿz$_IPAddressBase._check_packed_addressc                 C   s   | j | j |? A S rA   )r>   )Ú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 }| |d¡}d}t|| ƒ‚|S )Nr)   é   r   z&Netmask pattern %r mixes zeroes & ones)r6   r=   r   r   )	rj   Úip_intZtrailing_zeroesrk   Zleading_onesZall_onesZbyteslenZdetailsrg   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   )rj   Znetmask_strrg   r	   r	   r
   Ú_report_invalid_netmask×  s    z&_IPAddressBase._report_invalid_netmaskc                 C   sl   |  ¡ r| ¡ s|  |¡ zt|ƒ}W n tk
rD   |  |¡ Y nX d|  kr\| jkshn |  |¡ |S ©Nr   )ÚisasciiÚisdigitrp   Úintr   r=   )rj   Zprefixlen_strrk   r	   r	   r
   Ú_prefix_from_prefix_stringÜ  s    

z)_IPAddressBase._prefix_from_prefix_stringc                 C   sŠ   z|   |¡}W n tk
r,   |  |¡ Y nX z|  |¡W S  tk
rN   Y nX || jN }z|  |¡W S  tk
r„   |  |¡ Y nX d S rA   )Ú_ip_int_from_stringr   rp   ro   r   r>   )rj   Úip_strrn   r	   r	   r
   Ú_prefix_from_ip_stringõ  s    
z%_IPAddressBase._prefix_from_ip_stringc                 C   sH   t |ttfƒr|| jfS t |tƒs*t|ƒ}t|ƒdkr:|S |d | jfS )Nr)   r   )r9   Úbytesrt   r=   Útupler'   r%   )rj   r   r	   r	   r
   Ú_split_addr_prefix  s    

z!_IPAddressBase._split_addr_prefixc                 C   s   | j t| ƒffS rA   )Ú	__class__r#   r\   r	   r	   r
   Ú
__reduce__/  s    z_IPAddressBase.__reduce__N)r   r   r   Ú	__slots__Úpropertyr^   r`   rb   r<   rh   ri   Úclassmethodrl   ro   rp   ru   rx   r{   r}   r	   r	   r	   r
   rZ   �  s0   




	




!
rZ   c                   @   s`   e Zd 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S )r:   r	   c                 C   s   | j S rA   ©r,   r\   r	   r	   r
   Ú__int__>  s    z_BaseAddress.__int__c                 C   s8   z| j |j ko| j|jkW S  tk
r2   t Y S X d S rA   )r,   rM   rO   rW   ©r]   Úotherr	   r	   r
   Ú__eq__A  s    
ÿz_BaseAddress.__eq__c                 C   sF   t |tƒstS | j|jkr*td| |f ƒ‚| j|jkrB| j|jk S dS ©Nr7   F)r9   r:   rW   rM   r;   r,   rƒ   r	   r	   r
   Ú__lt__H  s    
 ÿz_BaseAddress.__lt__c                 C   s    t |tƒstS |  t| ƒ| ¡S rA   ©r9   rt   rW   r|   rƒ   r	   r	   r
   Ú__add__T  s    
z_BaseAddress.__add__c                 C   s    t |tƒstS |  t| ƒ| ¡S rA   rˆ   rƒ   r	   r	   r
   Ú__sub__Y  s    
z_BaseAddress.__sub__c                 C   s   d| j jt| ƒf S ©Nz%s(%r)©r|   r   r#   r\   r	   r	   r
   Ú__repr__^  s    z_BaseAddress.__repr__c                 C   s   t |  | j¡ƒS rA   )r#   Ú_string_from_ip_intr,   r\   r	   r	   r
   Ú__str__a  s    z_BaseAddress.__str__c                 C   s   t tt| jƒƒƒS rA   )ÚhashÚhexrt   r,   r\   r	   r	   r
   Ú__hash__d  s    z_BaseAddress.__hash__c                 C   s
   | j | fS rA   ©rM   r\   r	   r	   r
   rV   g  s    z_BaseAddress._get_address_keyc                 C   s   | j | jffS rA   )r|   r,   r\   r	   r	   r
   r}   j  s    z_BaseAddress.__reduce__N)r   r   r   r~   r‚   r…   r‡   r‰   rŠ   r�   r�   r’   rV   r}   r	   r	   r	   r
   r:   3  s   	r:   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ejdd„ ƒZ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%d&„ Zd'd(„ Zd)d*„ ZdEd-d.„ZdFd/d0„Zed1d2„ ƒZed3d4„ ƒZd5d6„ Z d7d8„ Z!ed9d:„ ƒZ"ed;d<„ ƒZ#ed=d>„ ƒZ$ed?d@„ ƒZ%edAdB„ ƒZ&edCdD„ ƒZ'd,S )GrT   c                 C   s   d| j jt| ƒf S r‹   rŒ   r\   r	   r	   r
   r�   v  s    z_BaseNetwork.__repr__c                 C   s   d| j | jf S ©Nú%s/%d)rP   rk   r\   r	   r	   r
   r�   y  s    z_BaseNetwork.__str__c                 c   s8   t | jƒ}t | jƒ}t|d |ƒD ]}|  |¡V  q"d S r(   ©rt   rP   rI   ÚrangeÚ_address_class©r]   ÚnetworkÚ	broadcastÚxr	   r	   r
   Úhosts|  s    

z_BaseNetwork.hostsc                 c   s8   t | jƒ}t | jƒ}t||d ƒD ]}|  |¡V  q"d S r(   r–   r™   r	   r	   r
   Ú__iter__ˆ  s    

z_BaseNetwork.__iter__c                 C   sl   t | jƒ}t | jƒ}|dkr>|| |kr0tdƒ‚|  || ¡S |d7 }|| |k rZtdƒ‚|  || ¡S d S )Nr   zaddress out of ranger)   )rt   rP   rI   Ú
IndexErrorr˜   )r]   Únrš   r›   r	   r	   r
   Ú__getitem__Ž  s    

z_BaseNetwork.__getitem__c                 C   s^   t |tƒstS | j|jkr*td| |f ƒ‚| j|jkrB| j|jk S | j|jkrZ| j|jk S dS r†   )r9   rT   rW   rM   r;   rP   Únetmaskrƒ   r	   r	   r
   r‡   ›  s    
 ÿz_BaseNetwork.__lt__c                 C   sL   z.| j |j ko,| j|jko,t| jƒt|jƒkW S  tk
rF   t Y S X d S rA   )rM   rP   rt   r¢   rO   rW   rƒ   r	   r	   r
   r…   §  s    
ÿþz_BaseNetwork.__eq__c                 C   s   t t| jƒt| jƒA ƒS rA   )r�   rt   rP   r¢   r\   r	   r	   r
   r’   ¯  s    z_BaseNetwork.__hash__c                 C   s8   | j |j krdS t|tƒrdS |j| jj@ | jjkS d S ©NF)rM   r9   rT   r,   r¢   rP   rƒ   r	   r	   r
   Ú__contains__²  s
    
z_BaseNetwork.__contains__c                 C   s(   | j |kp&| j|kp&|j | kp&|j| kS rA   )rP   rI   rƒ   r	   r	   r
   Úoverlaps¾  s
    


ýz_BaseNetwork.overlapsc                 C   s   |   t| jƒt| jƒB ¡S rA   )r˜   rt   rP   Úhostmaskr\   r	   r	   r
   rI   Å  s    ÿz_BaseNetwork.broadcast_addressc                 C   s   |   t| jƒ| jA ¡S rA   )r˜   rt   r¢   r>   r\   r	   r	   r
   r¦   Ê  s    z_BaseNetwork.hostmaskc                 C   s   d| j | jf S r”   )rP   rN   r\   r	   r	   r
   Úwith_prefixlenÎ  s    z_BaseNetwork.with_prefixlenc                 C   s   d| j | jf S ©Nú%s/%s)rP   r¢   r\   r	   r	   r
   Úwith_netmaskÒ  s    z_BaseNetwork.with_netmaskc                 C   s   d| j | jf S r¨   )rP   r¦   r\   r	   r	   r
   Úwith_hostmaskÖ  s    z_BaseNetwork.with_hostmaskc                 C   s   t | jƒt | jƒ d S r(   )rt   rI   rP   r\   r	   r	   r
   Únum_addressesÚ  s    z_BaseNetwork.num_addressesc                 C   s   dt | ƒf }t|ƒ‚d S )Nz%%200s has no associated address classrc   rf   r	   r	   r
   r˜   ß  s    z_BaseNetwork._address_classc                 C   s   | j S rA   )rN   r\   r	   r	   r
   rk   ç  s    z_BaseNetwork.prefixlenc                 c   s  | j |j kstd| |f ƒ‚t|tƒs2td| ƒ‚| | ¡sLtd|| f ƒ‚|| krXd S | d|j|jf ¡}|  	¡ \}}||krÚ||krÚ| |¡r¨|V  | 	¡ \}}qz| |¡rÆ|V  | 	¡ \}}qzt
d|||f ƒ‚qz||krê|V  n"||krú|V  nt
d|||f ƒ‚d S )Nr7   z%s is not a network objectz%s not contained in %sr©   z3Error performing exclusion: s1: %s s2: %s other: %s)rM   r;   r9   rT   Ú	subnet_ofr   r|   rP   rk   rJ   ÚAssertionError)r]   r„   Ú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r<dS | j|jk rLdS | j|jkr\dS dS )Nz"%s and %s are not of the same typerL   r)   r   )rM   r;   rP   r¢   rƒ   r	   r	   r
   Úcompare_networks6  s    ! ÿz_BaseNetwork.compare_networksc                 C   s   | j | j| jfS rA   )rM   rP   r¢   r\   r	   r	   r
   rU   f  s    z_BaseNetwork._get_networks_keyr)   Nc           	      c   sÒ   | j | jkr| V  d S |d k	rJ|| j k r0tdƒ‚|dkr@tdƒ‚|| j  }|dk rZtdƒ‚| j | }|| jkr~td|| f ƒ‚t| jƒ}t| jƒd }t| jƒd |? }t|||ƒD ]}|  ||f¡}|V  q´d S )Nznew prefix must be longerr)   ú(cannot set prefixlen_diff and new_prefixr   zprefix length diff must be > 0z0prefix length diff %d is invalid for netblock %s)	rN   r=   r   rt   rP   rI   r¦   r—   r|   )	r]   Úprefixlen_diffÚ
new_prefixÚnew_prefixlenÚstartÚendÚstepZnew_addrZcurrentr	   r	   r
   rJ   p  s2    



 ÿÿ
z_BaseNetwork.subnetsc                 C   sˆ   | j dkr| S |d k	rB|| j kr(tdƒ‚|dkr8tdƒ‚| j | }| j| }|dk rftd| j|f ƒ‚|  t| jƒt| jƒ|> @ |f¡S )Nr   znew prefix must be shorterr)   r³   z;current prefixlen is %d, cannot have a prefixlen_diff of %d)rN   r   rk   r|   rt   rP   r¢   )r]   r´   rµ   r¶   r	   r	   r
   rD   ¥  s&    



ÿÿþz_BaseNetwork.supernetc                 C   s   | j jo| jjS rA   )rP   Úis_multicastrI   r\   r	   r	   r
   rº   Î  s    	ÿz_BaseNetwork.is_multicastc                 C   sh   z:| j |j kr"t| › d|› d�ƒ‚|j| jko8|j| jkW S  tk
rb   td| › d|› �ƒ‚Y nX d S )Nz and z are not of the same versionz*Unable to test subnet containment between )rM   r;   rP   rI   rO   )ÚaÚbr	   r	   r
   Ú_is_subnet_ofÚ  s    
ÿz_BaseNetwork._is_subnet_ofc                 C   s   |   | |¡S rA   ©r½   rƒ   r	   r	   r
   r­   æ  s    z_BaseNetwork.subnet_ofc                 C   s   |   || ¡S rA   r¾   rƒ   r	   r	   r
   Úsupernet_ofê  s    z_BaseNetwork.supernet_ofc                 C   s   | j jo| jjS rA   )rP   Úis_reservedrI   r\   r	   r	   r
   rÀ   î  s    	ÿz_BaseNetwork.is_reservedc                 C   s   | j jo| jjS rA   )rP   Úis_link_localrI   r\   r	   r	   r
   rÁ   ú  s    ÿz_BaseNetwork.is_link_localc                 C   s   | j jo| jjS rA   )rP   Ú
is_privaterI   r\   r	   r	   r
   rÂ     s    	ÿz_BaseNetwork.is_privatec                 C   s   | j  S rA   ©rÂ   r\   r	   r	   r
   Ú	is_global  s    	z_BaseNetwork.is_globalc                 C   s   | j jo| jjS rA   )rP   Úis_unspecifiedrI   r\   r	   r	   r
   rÅ     s    	ÿz_BaseNetwork.is_unspecifiedc                 C   s   | j jo| jjS rA   )rP   Úis_loopbackrI   r\   r	   r	   r
   rÆ   (  s    	ÿz_BaseNetwork.is_loopback)r)   N)r)   N)(r   r   r   r�   r�   r�   rž   r¡   r‡   r…   r’   r¤   r¥   Ú	functoolsÚcached_propertyrI   r¦   r   r§   rª   r«   r¬   r˜   rk   r±   r²   rU   rJ   rD   rº   Ústaticmethodr½   r­   r¿   rÀ   rÁ   rÂ   rÄ   rÅ   rÆ   r	   r	   r	   r
   rT   n  sb   







K0

5
)








rT   c                   @   s€   e Zd ZdZdZde d 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edd„ ƒZedd„ ƒZdS )Ú_BaseV4r	   r   r"   r)   c                 C   s   t | ƒS rA   r_   r\   r	   r	   r
   r[   H  s    z$_BaseV4._explode_shorthand_ip_stringc                 C   s�   || j kr†t|tƒr<|}d|  kr.| jksjn |  |¡ n.z|  |¡}W n tk
rh   |  |¡}Y nX t|  	|¡ƒ}||f| j |< | j | S rq   )
Ú_netmask_cacher9   rt   r=   rp   ru   r   rx   r   rl   ©rj   Úargrk   r¢   r	   r	   r
   Ú_make_netmaskK  s    	

z_BaseV4._make_netmaskc              
   C   s~   |st dƒ‚| d¡}t|ƒdkr.t d| ƒ‚zt t| j|ƒd¡W S  tk
rx } zt d||f ƒd ‚W 5 d }~X Y nX d S )NúAddress cannot be emptyÚ.r   zExpected 4 octets in %rr   ú%s in %r)r   r$   r%   rt   Ú
from_bytesÚmapÚ_parse_octetr   )rj   rw   ZoctetsÚexcr	   r	   r
   rv   e  s    
z_BaseV4._ip_int_from_stringc                 C   sŽ   |st dƒ‚| ¡ r| ¡ s,d}t || ƒ‚t|ƒdkrHd}t || ƒ‚|dkrl|d dkrld}t || ƒ‚t|dƒ}|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Ú0r   z%Leading zeros are not permitted in %ré
   éÿ   zOctet %d (> 255) not permitted)r   rr   rs   r%   rt   )rj   Z	octet_strrg   Z	octet_intr	   r	   r
   rÔ     s    
z_BaseV4._parse_octetc                 C   s   d  tt| dd¡ƒ¡S )NrÐ   r   r   )ÚjoinrÓ   r#   r   )rj   rn   r	   r	   r
   rŽ   £  s    z_BaseV4._string_from_ip_intc                 C   s&   t | ƒ d¡d d d… }d |¡d S )NrÐ   rL   z.in-addr.arpa)r#   r$   rÚ   )r]   Zreverse_octetsr	   r	   r
   ra   °  s    z_BaseV4._reverse_pointerc                 C   s   | j S rA   ©r=   r\   r	   r	   r
   Úmax_prefixlen¹  s    z_BaseV4.max_prefixlenc                 C   s   | j S rA   r“   r\   r	   r	   r
   r<   ½  s    z_BaseV4.versionN)r   r   r   r~   rM   Ú
IPV4LENGTHr>   r=   rË   r[   r€   rÎ   rv   rÔ   rŽ   ra   r   rÜ   r<   r	   r	   r	   r
   rÊ   5  s&   	


#
	
rÊ   c                   @   sˆ   e Zd ZdZdd„ Zedd„ ƒZedd„ ƒZee 	¡ dd	„ ƒƒZ
ee 	¡ 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   sr   t |tƒr|  |¡ || _d S t |tƒrF|  |d¡ t |d¡| _d S t|ƒ}d|krbtd| ƒ‚|  	|¡| _d S )Nr   r   r!   úUnexpected '/' in %r©
r9   rt   rh   r,   ry   ri   rÒ   r#   r   rv   ©r]   r   Zaddr_strr	   r	   r
   Ú__init__È  s    


zIPv4Address.__init__c                 C   s
   t | jƒS rA   )r   r,   r\   r	   r	   r
   Úpackedë  s    zIPv4Address.packedc                 C   s   | | j jkS rA   )Ú
_constantsÚ_reserved_networkr\   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 rA   r	   ©Ú.0r?   r\   r	   r
   Ú	<genexpr>  s     z)IPv4Address.is_private.<locals>.<genexpr>©Úanyrå   Ú_private_networksr\   r	   r\   r
   rÂ   û  s    
zIPv4Address.is_privatec                 C   s   | | j jko| j S rA   )rå   Ú_public_networkrÂ   r\   r	   r	   r
   rÄ     s    zIPv4Address.is_globalc                 C   s   | | j jkS rA   ©rå   Ú_multicast_networkr\   r	   r	   r
   rº     s    	zIPv4Address.is_multicastc                 C   s   | | j jkS rA   )rå   Ú_unspecified_addressr\   r	   r	   r
   rÅ     s    	zIPv4Address.is_unspecifiedc                 C   s   | | j jkS rA   )rå   Ú_loopback_networkr\   r	   r	   r
   rÆ   "  s    zIPv4Address.is_loopbackc                 C   s   | | j jkS rA   ©rå   Ú_linklocal_networkr\   r	   r	   r
   rÁ   ,  s    zIPv4Address.is_link_localN)r   r   r   r~   rã   r   rä   rÀ   rÇ   Ú	lru_cacherÂ   rÄ   rº   rÅ   rÆ   rÁ   r	   r	   r	   r
   r   Â  s(   #








	r   c                   @   sx   e Zd Zdd„ Zej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   sD   |   |¡\}}t | |¡ t||fdd�| _| jj| _| jj| _d S ©NF)r   )r{   r   rã   r   rš   r¢   rN   ©r]   r   r&   Úmaskr	   r	   r
   rã   9  s
    
zIPv4Interface.__init__c                 C   s   | j jS rA   ©rš   r¦   r\   r	   r	   r
   r¦   A  s    zIPv4Interface.hostmaskc                 C   s   d|   | j¡| jf S r”   ©rŽ   r,   rN   r\   r	   r	   r
   r�   E  s    ÿzIPv4Interface.__str__c                 C   sF   t  | |¡}|r|tkr|S z| j|jkW S  tk
r@   Y dS X d S r£   )r   r…   rW   rš   rO   ©r]   r„   Zaddress_equalr	   r	   r
   r…   I  s    zIPv4Interface.__eq__c                 C   sR   t  | |¡}|tkrtS z| j|jk p4| j|jko4|W S  tk
rL   Y dS X d S r£   )r   r‡   rW   rš   rO   ©r]   r„   Zaddress_lessr	   r	   r
   r‡   U  s    ÿzIPv4Interface.__lt__c                 C   s   t | j| jt| jjƒfƒS rA   ©r�   r,   rN   rt   rš   rP   r\   r	   r	   r
   r’   a  s    zIPv4Interface.__hash__c                 C   s
   t | jƒS rA   )r   r,   r\   r	   r	   r
   r1   f  s    zIPv4Interface.ipc                 C   s   d|   | j¡| jf S r¨   rù   r\   r	   r	   r
   r§   j  s    ÿzIPv4Interface.with_prefixlenc                 C   s   d|   | j¡| jf S r¨   ©rŽ   r,   r¢   r\   r	   r	   r
   rª   o  s    ÿzIPv4Interface.with_netmaskc                 C   s   d|   | j¡| jf S r¨   ©rŽ   r,   r¦   r\   r	   r	   r
   r«   t  s    ÿzIPv4Interface.with_hostmaskN)r   r   r   rã   rÇ   rÈ   r¦   r�   r…   r‡   r’   rZ   r}   r   r1   r§   rª   r«   r	   r	   r	   r
   r   7  s    



r   c                   @   s.   e Zd ZeZddd„Zee ¡ dd„ ƒƒZ	dS )r   Tc                    s¤   |   |¡\‰ }tˆ ƒ| _|  |¡\| _| _t| jƒ}|t| jƒ@ |krl|rXtd|  ƒ‚nt|t| jƒ@ ƒ| _| j| jd kr†| j	| _
n| j| jkr ‡ fdd„| _
d S )Nú%s has host bits setr)   c                      s
   t ˆ ƒgS rA   )r   r	   ©r&   r	   r
   Ú<lambda>»  ó    z&IPv4Network.__init__.<locals>.<lambda>)r{   r   rP   rÎ   r¢   rN   rt   r   r=   rž   r�   ©r]   r   r   r÷   rä   r	   r   r
   rã   ‰  s    #

ÿ
zIPv4Network.__init__c                 C   s&   | j tdƒko| jtdƒk o$| j S )Nú100.64.0.0/10)rP   r   rI   rÂ   r\   r	   r	   r
   rÄ   ½  s
    
ÿþzIPv4Network.is_globalN)T)
r   r   r   r   r˜   rã   r   rÇ   rô   rÄ   r	   r	   r	   r
   r   z  s
   
4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/4r  z	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d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 )Ú_BaseV6r	   r8   r"   r)   rm   Z0123456789ABCDEFabcdefc                 C   sl   || j krbt|tƒr<|}d|  kr.| jksFn |  |¡ n
|  |¡}t|  |¡ƒ}||f| j |< | j | S rq   )rË   r9   rt   r=   rp   ru   r   rl   rÌ   r	   r	   r
   rÎ     s    	


z_BaseV6._make_netmaskc              
   C   sÜ  |st dƒ‚| d¡}d}t|ƒ|k r:d||f }t |ƒ‚d|d kr¶zt| ¡ ƒj}W n4 t k
rŒ } zt d||f ƒd ‚W 5 d }~X Y nX | d|d	? d
@  ¡ | d|d
@  ¡ | jd }t|ƒ|kräd|d |f }t |ƒ‚d }tdt|ƒd ƒD ]*}	||	 sú|d k	�r d| }t |ƒ‚|	}qú|d k	�rÈ|}
t|ƒ| d }|d �sl|
d8 }
|
�rld}t || ƒ‚|d �s”|d8 }|�r”d}t || ƒ‚| j|
|  }|dk �r2d}t || jd |f ƒ‚njt|ƒ| jk�rîd}t || j|f ƒ‚|d �sd}t || ƒ‚|d �s"d}t || ƒ‚t|ƒ}
d}d}znd}t|
ƒD ] }	|d	K }||  	||	 ¡O }�q@|d	| K }t| dƒD ] }	|d	K }||  	||	 ¡O }�qz|W S  t
k
�rÖ } zt d||f ƒd ‚W 5 d }~X Y nX d S )NrÏ   ú:rÖ   z At least %d parts expected in %rrÐ   rL   rÑ   ú%xr   éÿÿ  r)   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 %r)r   r$   r%   r   rC   r,   rF   Ú_HEXTET_COUNTr—   Ú_parse_hextetr   )rj   rw   ÚpartsZ
_min_partsrg   Zipv4_intrÕ   Z
_max_partsZ
skip_indexÚiZparts_hiZparts_loZparts_skippedrn   r	   r	   r
   rv     s„    
$







z_BaseV6._ip_int_from_stringc                 C   s>   | j  |¡std| ƒ‚t|ƒdkr4d}t|| ƒ‚t|dƒS )NzOnly hex digits permitted in %rr   z$At most 4 characters permitted in %rr   )Ú_HEX_DIGITSÚ
issupersetr   r%   rt   )rj   Z
hextet_strrg   r	   r	   r
   r  ~  s    z_BaseV6._parse_hextetc           	      C   s¢   d}d}d}d}t |ƒD ]>\}}|dkrN|d7 }|dkr<|}||krV|}|}qd}d}q|dkrž|| }|t|ƒkr~|dg7 }dg|||…< |dkrždg| }|S )NrL   r   r×   r)   Ú )Ú	enumerater%   )	rj   ÚhextetsZbest_doublecolon_startZbest_doublecolon_lenZdoublecolon_startZdoublecolon_lenÚindexZhextetZbest_doublecolon_endr	   r	   r
   Ú_compress_hextets˜  s0    ÿ

z_BaseV6._compress_hextetsNc                    sZ   |d krt | jƒ}|| jkr$tdƒ‚d| ‰ ‡ fdd„tdddƒD ƒ}|  |¡}d |¡S )	NzIPv6 address is too largeú%032xc                    s&   g | ]}d t ˆ ||d … dƒ ‘qS )r  r   r   )rt   ©rè   rœ   ©Zhex_strr	   r
   Ú
<listcomp>Ý  s     z/_BaseV6._string_from_ip_int.<locals>.<listcomp>r   r   r   r  )rt   r,   r>   r   r—   r  rÚ   )rj   rn   r  r	   r  r
   rŽ   È  s    


z_BaseV6._string_from_ip_intc                    sŒ   t | tƒrt| jƒ}nt | tƒr,t| jƒ}nt| ƒ}|  |¡}d| ‰ ‡ fdd„tdddƒD ƒ}t | ttfƒr‚dd 	|¡| j
f S d 	|¡S )	Nr  c                    s   g | ]}ˆ ||d  … ‘qS )r   r	   r  r  r	   r
   r  õ  s     z8_BaseV6._explode_shorthand_ip_string.<locals>.<listcomp>r   r   r   r•   r  )r9   r   r#   rP   r   r1   rv   r—   rT   rÚ   rN   )r]   rw   rn   r  r	   r  r
   r[   â  s    



z$_BaseV6._explode_shorthand_ip_stringc                 C   s&   | j d d d…  dd¡}d |¡d S )NrL   r  r  rÐ   z	.ip6.arpa)r^   ÚreplacerÚ   )r]   Zreverse_charsr	   r	   r
   ra   ú  s    z_BaseV6._reverse_pointerc                 C   s   | j S rA   rÛ   r\   r	   r	   r
   rÜ     s    z_BaseV6.max_prefixlenc                 C   s   | j S rA   r“   r\   r	   r	   r
   r<     s    z_BaseV6.version)N)r   r   r   r~   rM   Ú
IPV6LENGTHr>   r
  Ú	frozensetr  r=   rË   r€   rÎ   rv   r  r  rŽ   r[   ra   r   rÜ   r<   r	   r	   r	   r
   r  î  s.   	

g

/	
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 ¡ 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Þ   c                 C   sr   t |tƒr|  |¡ || _d S t |tƒrF|  |d¡ t |d¡| _d S t|ƒ}d|krbtd| ƒ‚|  	|¡| _d S )Nr   r   r!   rà   rá   râ   r	   r	   r
   rã     s    


zIPv6Address.__init__c                 C   s
   t | jƒS rA   )r    r,   r\   r	   r	   r
   rä   6  s    zIPv6Address.packedc                 C   s   | | j jkS rA   rî   r\   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 rA   r	   r  r\   r	   r
   ré   O  s     z*IPv6Address.is_reserved.<locals>.<genexpr>)rë   rå   Ú_reserved_networksr\   r	   r\   r
   rÀ   F  s    	zIPv6Address.is_reservedc                 C   s   | | j jkS rA   rò   r\   r	   r	   r
   rÁ   Q  s    zIPv6Address.is_link_localc                 C   s   | | j jkS rA   )rå   Ú_sitelocal_networkr\   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 rA   r	   rç   r\   r	   r
   ré   s  s     z)IPv6Address.is_private.<locals>.<genexpr>rê   r\   r	   r\   r
   rÂ   i  s    
zIPv6Address.is_privatec                 C   s   | j  S rA   rÃ   r\   r	   r	   r
   rÄ   u  s    	zIPv6Address.is_globalc                 C   s
   | j dkS rq   r�   r\   r	   r	   r
   rÅ   €  s    	zIPv6Address.is_unspecifiedc                 C   s
   | j dkS r(   r�   r\   r	   r	   r
   rÆ   ‹  s    	zIPv6Address.is_loopbackc                 C   s    | j d? dkrd S t| j d@ ƒS )Nr   r	  ì   ÿÿ ©r,   r   r\   r	   r	   r
   Úipv4_mapped–  s    	zIPv6Address.ipv4_mappedc                 C   s4   | j d? dkrd S t| j d? d@ ƒt| j  d@ ƒfS )Né`   i   é@   r  r   r\   r	   r	   r
   Úteredo£  s
    
ÿzIPv6Address.teredoc                 C   s$   | j d? dkrd S t| j d? d@ ƒS )Nép   i   éP   r  r   r\   r	   r	   r
   Ú	sixtofour²  s    	zIPv6Address.sixtofourN)r   r   r   r~   rã   r   rä   rº   rÀ   rÁ   r  rÇ   rô   rÂ   rÄ   rÅ   rÆ   r!  r$  r'  r	   r	   r	   r
   r     s6   $





	









r   c                   @   s�   e Zd Zdd„ Zej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   sD   |   |¡\}}t | |¡ t||fdd�| _| jj| _| jj| _d S rõ   )r{   r   rã   r   rš   r¢   rN   rö   r	   r	   r
   rã   Â  s
    
zIPv6Interface.__init__c                 C   s   | j jS rA   rø   r\   r	   r	   r
   r¦   Ê  s    zIPv6Interface.hostmaskc                 C   s   d|   | j¡| jf S r”   rù   r\   r	   r	   r
   r�   Î  s    ÿzIPv6Interface.__str__c                 C   sF   t  | |¡}|r|tkr|S z| j|jkW S  tk
r@   Y dS X d S r£   )r   r…   rW   rš   rO   rú   r	   r	   r
   r…   Ò  s    zIPv6Interface.__eq__c                 C   sR   t  | |¡}|tkrtS z| j|jk p4| j|jko4|W S  tk
rL   Y dS X d S r£   )r   r‡   rW   rš   rO   rû   r	   r	   r
   r‡   Þ  s    ÿzIPv6Interface.__lt__c                 C   s   t | j| jt| jjƒfƒS rA   rü   r\   r	   r	   r
   r’   ê  s    zIPv6Interface.__hash__c                 C   s
   t | jƒS rA   )r   r,   r\   r	   r	   r
   r1   ï  s    zIPv6Interface.ipc                 C   s   d|   | j¡| jf S r¨   rù   r\   r	   r	   r
   r§   ó  s    ÿzIPv6Interface.with_prefixlenc                 C   s   d|   | j¡| jf S r¨   rý   r\   r	   r	   r
   rª   ø  s    ÿzIPv6Interface.with_netmaskc                 C   s   d|   | j¡| jf S r¨   rþ   r\   r	   r	   r
   r«   ý  s    ÿzIPv6Interface.with_hostmaskc                 C   s   | j dko| jjS rq   )r,   rš   rÅ   r\   r	   r	   r
   rÅ     s    zIPv6Interface.is_unspecifiedc                 C   s   | j dko| jjS r(   )r,   rš   rÆ   r\   r	   r	   r
   rÆ     s    zIPv6Interface.is_loopbackN)r   r   r   rã   rÇ   rÈ   r¦   r�   r…   r‡   r’   rZ   r}   r   r1   r§   rª   r«   rÅ   rÆ   r	   r	   r	   r
   r   À  s(   





r   c                   @   s.   e Zd ZeZd	dd„Zdd„ Zedd„ ƒZdS )
r   Tc                    s¤   |   |¡\‰ }tˆ ƒ| _|  |¡\| _| _t| jƒ}|t| jƒ@ |krl|rXtd|  ƒ‚nt|t| jƒ@ ƒ| _| j| jd kr†| j	| _
n| j| jkr ‡ fdd„| _
d S )Nrÿ   r)   c                      s
   t ˆ ƒgS rA   )r   r	   r   r	   r
   r  I  r  z&IPv6Network.__init__.<locals>.<lambda>)r{   r   rP   rÎ   r¢   rN   rt   r   r=   rž   r�   r  r	   r   r
   rã     s    

ÿ
zIPv6Network.__init__c                 c   s<   t | jƒ}t | jƒ}t|d |d ƒD ]}|  |¡V  q&d S r(   r–   r™   r	   r	   r
   r�   K  s    

zIPv6Network.hostsc                 C   s   | j jo| jjS rA   )rP   r  rI   r\   r	   r	   r
   r  W  s    ÿzIPv6Network.is_site_localN)T)	r   r   r   r   r˜   rã   r�   r   r  r	   r	   r	   r
   r     s
   
0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(  g  s<   ö       ør(  )T)"Ú__version__rÇ   rÝ   r  r   r   r   r   r   r   r   r    r'   r2   r6   r@   rK   rS   rY   rZ   Útotal_orderingr:   rT   rÊ   r   r   r   r  rå   r  r   r   r   r(  r	   r	   r	   r
   Ú<module>   sT   
#716 3:   I uCR    5K\!