
    ,h                     &   d Z ddlZddlZddlmZmZ ddlZddlZ ej                  d      Z
dedefdZ ej                  d      Z ej                  d	      Z ej                  d
      Zddeeef   dedefdZdZdedefdZdeeef   defdZy)zIPv6 helper functions.    N)ListUnionz0+([0-9a-f]+)addressreturnc                    t        |       dk7  rt        d      t        j                  |       }g }d}t        |      }||k  rZ|||dz    j	                         }t
        j                  |      }||j                  d      }|j                  |       |dz  }||k  rZd}d}d}	d}
t        d	      D ]'  }||   d
k7  r|
s|}||	z
  }||kD  r|	}|}d}
!|
r$|}	d}
) |
rd	}||	z
  }||kD  r|	}|}|dkD  ry|dk(  rC|dk(  s|dk(  r9|d   dk(  r1|dk(  rd}nd}|t        j                  j                  | dd       z   }|S dj                  |d|       dz   dj                  |||z   d       z   }|S dj                  |      }|S )zConvert an IPv6 address in binary form to text form.

    *address*, a ``bytes``, the IPv6 address in binary form.

    Raises ``ValueError`` if the address isn't 16 bytes long.
    Returns a ``str``.
       z IPv6 addresses are 16 bytes longr      N   F   0T      ffffz::z::ffff:   :)len
ValueErrorbinasciihexlifydecode_leading_zeromatchgroupappendrangednsipv4	inet_ntoajoin)r   hexchunksilchunkm
best_startbest_lenstartlast_was_zeroendcurrent_lenprefixthexs                  J/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/dns/ipv6.pyr   r      s    7|r;<<


7
#CF	ACA
a%AA%%' &=GGAJEe	Q a% JHEM1X !!9!Ek)!&J*H %E M! Ek!J"H!|?AQ6!9PVCV1}"CHH..wrs|<<D K ,-((6*x"7"9:;<  K xxK    s   (.*):(\d+\.\d+\.\d+\.\d+)$s   ::.*s   .*::$textignore_scopec                 Z   t        | t              s| j                         }n| }|rF|j                  d      }t	        |      }|dk(  r|d   }n|dkD  rt
        j                  j                  |dk(  rt
        j                  j                  |j                  d      r+|j                  d      st
        j                  j                  |j                  d      r+|j                  d      st
        j                  j                  |dk(  rd}t        j                  |      }|wt
        j                  j                  |j                  d            }|j                  d	      j                          d
|d   d|d	   dd
|d   d|d   dj                         }t         j                  |      }||d	d }nt"        j                  |      }||dd }|j                  d      }t	        |      }|dkD  rt
        j                  j                  d}g }	|D ]  }
|
dk(  rG|rt
        j                  j                  d}t%        dd|z
  d	z         D ]  }|	j'                  d        Ot	        |
      }|dkD  rt
        j                  j                  |dk7  rdd|z
  z  |
z   }
|	j'                  |
        |dk  r|st
        j                  j                  dj)                  |	      }	 t+        j,                  |      S # t*        j.                  t0        f$ r t
        j                  j                  w xY w)a+  Convert an IPv6 address in text form to binary form.

    *text*, a ``str`` or ``bytes``, the IPv6 address in textual form.

    *ignore_scope*, a ``bool``.  If ``True``, a scope will be ignored.
    If ``False``, the default, it is an error for a scope to be present.

    Returns a ``bytes``.
       %   r   r0      :s   ::s   0::Nr
   r   02x   r   r   FTs   0000r	      0)
isinstancebytesencodesplitr   r   	exceptionSyntaxErrorendswith
startswith
_v4_endingr   r   	inet_atonr   r   _colon_colon_start_colon_colon_endr   r   r    r   	unhexlifyError	TypeError)r1   r2   btextpartsr$   r&   br"   
seen_empty	canonicalc_lcs                r/   rC   rC   h   s    dE"D!J6!HEU--+++|mm'''		ennU&;mm'''			$	(8(8(?mm'''	% 	A}HHqwwqz*wwqz  "#1QqT#JqtCj!A$sAaD:N
&( 	 	  'A}ab	""5)=#2JE [[FFA1umm'''JI  8mm///J1a!eai( *  )* QBAvmm///QwQV_)Q  	1uZmm'''HHYE
(!!%((NNI& (mm'''(s   !K6 64L*s             c                 ,    | j                  t              S )zIs the specified address a mapped IPv4 address?

    *address*, a ``bytes`` is an IPv6 address in binary form.

    Returns a ``bool``.
    )rA   _mapped_prefix)r   s    r/   	is_mappedrS      s     n--r0   c                 z    t         j                  j                  t         j                  j                  |             S )a  Verify that *address* is a valid text form IPv6 address and return its
    canonical text form.  Addresses with scopes are rejected.

    *text*, a ``str`` or ``bytes``, the IPv6 address in textual form.

    Raises ``dns.exception.SyntaxError`` if the text is not valid.
    )r   ipv6r   rC   )r1   s    r/   canonicalizerV      s(     88chh00677r0   )F)__doc__r   retypingr   r   dns.exceptionr   dns.ipv4compiler   r;   strr   rB   rD   rE   boolrC   rR   rS   rV    r0   r/   <module>r`      s   $   	   

+,Bu B BJ RZZ67
RZZ) 2::i( X(E#u*% X(T X(e X(v ,.u . .8uS%Z( 8S 8r0   