U
    -ec|                     @   s*  d dddgZ ddlZddlZddlZddlZddlZddlZddlZddlZzddl	Z
W n ek
rt   ddl
Z
Y nX ddlmZ ddlmZmZ dd	lmZ ejZz$ddlZdd
lmZmZmZmZ W n$ ek
r   ejdkr dZY nX dZdZe ZdZdgZe edr"dZedg7 Zejdkr<dZedg7 ZefddZ!dd Z"dd Z#dd Z$dd Z%G dd dZ&erG dd de&Z'G dd  d e&Z(G d!d de)Z*dOd"d Z+ejdkrdPd$dZ,n
dQd%dZ,G d&d' d'e)Z-d(d) Z.ejdkrG d*d+ d+e)Z/d,d- Z0d.Z1d/Z2d0Z3d1Z4d2d3 Z5d4d5 Z6G d6d7 d7e)Z7d8d9 Z8d:d; Z9G d<d= d=e*Z:d>d? Z;ejdkrd@dA Z<ej=ej>hZ?dRdBdZ@n,ddlAZAe eAdCreAjBZCneAjDZCdSdDdZ@ejdkr
dEdF ZEdGdH ZFeGe(eE dIdJ ZHdKdL ZIeGe'eH ndMdF ZEdNdH ZFeGe(eE dS )TClientListenerPipewait    N   )util)AuthenticationErrorBufferTooShort)	reduction)WAIT_OBJECT_0WAIT_ABANDONED_0WAIT_TIMEOUTINFINITEwin32i    g      4@AF_INETAF_UNIXAF_PIPEc                 C   s   t tdtj |  S N	monotonicgetattrtime)timeout r   X/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/multiprocess/connection.py_init_timeout>   s    r   c                 C   s   t tdtj | kS r   r   )tr   r   r   _check_timeoutA   s    r   c                 C   sX   | dkrdS | dkr&t jdt dS | dkrLt jdt ttf ddS td	d
S )z?
    Return an arbitrary free address for the given family
    r   )	localhostr   r   z	listener-)prefixdirr   z\\.\pipe\pyc-%d-%d- zunrecognized familyN)	tempfilemktempr   Zget_temp_dirosgetpidnext_mmap_counter
ValueErrorfamilyr   r   r   arbitrary_addressH   s    r+   c                 C   sJ   t jdkr| dkrtd|  t jdkrF| dkrFtt| sFtd|  dS )zD
    Checks if the family is valid for the current environment.
    r   r   zFamily %s is not recognized.r   N)sysplatformr(   hasattrsocketr)   r   r   r   _validate_familyV   s
    
r0   c                 C   sT   t | tkrdS t | tkr*| dr*dS t | tks@t| rDdS td|  dS )z]
    Return the types of the address

    This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE'
    r   z\\r   r   zaddress type of %r unrecognizedN)typetuplestr
startswithr   is_abstract_socket_namespacer(   )addressr   r   r   address_typeb   s    r7   c                   @   s   e Zd ZdZd+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dd Zdd Zd,ddZdd Zd-ddZd.d d!Zd"d# Zd/d%d&Zd'd( Zd)d* ZdS )0_ConnectionBaseNTc                 C   s>   |  }|dk rtd|s(|s(td|| _|| _|| _d S )Nr   zinvalid handlez6at least one of `readable` and `writable` must be True)	__index__r(   _handle	_readable	_writable)selfhandlereadablewritabler   r   r   __init__x   s    z_ConnectionBase.__init__c                 C   s   | j d k	r|   d S Nr:   _closer=   r   r   r   __del__   s    
z_ConnectionBase.__del__c                 C   s   | j d krtdd S )Nzhandle is closed)r:   OSErrorrE   r   r   r   _check_closed   s    
z_ConnectionBase._check_closedc                 C   s   | j stdd S )Nzconnection is write-only)r;   rG   rE   r   r   r   _check_readable   s    z_ConnectionBase._check_readablec                 C   s   | j stdd S )Nzconnection is read-only)r<   rG   rE   r   r   r   _check_writable   s    z_ConnectionBase._check_writablec                 C   s"   | j rd| _n|   tdd S )NFzbad message length)r<   r;   closerG   rE   r   r   r   _bad_message_length   s    z#_ConnectionBase._bad_message_lengthc                 C   s
   | j dkS )z True if the connection is closedNr:   rE   r   r   r   closed   s    z_ConnectionBase.closedc                 C   s   | j S )z"True if the connection is readable)r;   rE   r   r   r   r?      s    z_ConnectionBase.readablec                 C   s   | j S )z"True if the connection is writable)r<   rE   r   r   r   r@      s    z_ConnectionBase.writablec                 C   s   |    | jS )z+File descriptor or handle of the connection)rH   r:   rE   r   r   r   fileno   s    z_ConnectionBase.filenoc                 C   s$   | j dk	r z|   W 5 d| _ X dS )zClose the connectionNrC   rE   r   r   r   rK      s    
z_ConnectionBase.closer   c                 C   s   |    |   t|}|jdkr.tt|}t|}|dk rFtd||k rVtd|dkrh|| }n&|dk rztdn|| |krtd| ||||   dS )z,Send the bytes data from a bytes-like objectr   r   zoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)rH   rJ   
memoryviewitemsizebyteslenr(   _send_bytes)r=   bufoffsetsizemnr   r   r   
send_bytes   s"    


z_ConnectionBase.send_bytesc                 C   s$   |    |   | t| dS )zSend a (picklable) objectN)rH   rJ   rT   _ForkingPicklerdumpsr=   objr   r   r   send   s    z_ConnectionBase.sendc                 C   sJ   |    |   |dk	r(|dk r(td| |}|dkrB|   | S )z7
        Receive bytes data as a bytes object.
        Nr   znegative maxlength)rH   rI   r(   _recv_bytesrL   getvalue)r=   Z	maxlengthrU   r   r   r   
recv_bytes   s    
z_ConnectionBase.recv_bytesc              
   C   s   |    |   t|}|j}|t| }|dk r>tdn||krNtd|  }| }||| k rvt|	 |
d |||| || |   |W  5 Q R  S Q R X dS )zq
        Receive bytes data into a writeable bytes-like object.
        Return the number of bytes read.
        r   znegative offsetzoffset too largeN)rH   rI   rP   rQ   rS   r(   r`   tellr	   ra   seekreadinto)r=   rU   rV   rX   rQ   ZbytesizeresultrW   r   r   r   recv_bytes_into   s$    



z_ConnectionBase.recv_bytes_intoc                 C   s&   |    |   |  }t| S )zReceive a (picklable) object)rH   rI   r`   r[   loads	getbuffer)r=   rU   r   r   r   recv   s    z_ConnectionBase.recv        c                 C   s   |    |   | |S )z/Whether there is any input available to be read)rH   rI   _pollr=   r   r   r   r   poll   s    z_ConnectionBase.pollc                 C   s   | S rB   r   rE   r   r   r   	__enter__  s    z_ConnectionBase.__enter__c                 C   s   |    d S rB   rK   r=   exc_type	exc_valueexc_tbr   r   r   __exit__	  s    z_ConnectionBase.__exit__)TT)r   N)N)r   )rk   )__name__
__module____qualname__r:   rA   rF   rH   rI   rJ   rL   propertyrN   r?   r@   rO   rK   rZ   r_   rb   rg   rj   rn   ro   ru   r   r   r   r   r8   u   s.   







r8   c                   @   sD   e Zd ZdZdZejfddZdd Zddd	Z	d
d Z
dd ZdS )PipeConnectionz
        Connection class based on a Windows named pipe.
        Overlapped I/O is used, so the handles must have been created
        with FILE_FLAG_OVERLAPPED.
        Fc                 C   s   || j  d S rB   rM   )r=   Z_CloseHandler   r   r   rD     s    zPipeConnection._closec              	   C   s   t j| j|dd\}}zHz,|t jkrBt |jgdt}|tksBt	W n   |
   Y nX W 5 |d\}}X |dks|t	|t|kst	d S )NT
overlappedFr   )_winapiZ	WriteFiler:   GetOverlappedResultERROR_IO_PENDINGWaitForMultipleObjectseventr   r   AssertionErrorcancelrS   )r=   rU   overrZnwrittenwaitresr   r   r   rT     s    
  zPipeConnection._send_bytesNc           	      C   s2  | j rd| _ t S |d kr dnt|d}ztj| j|dd\}}d zHz,|tjkrpt|jgdt}|tksptW n   |   Y nX W 5 |d\}}|dkrt }||	  |  W S |tj
kr| ||  W S X  W n: tk
r$ } z|jtjkrtn W 5 d }~X Y nX tdd S )NF   Tr{   r   z.shouldn't get here; expected KeyboardInterrupt)_got_empty_messageioBytesIOminr}   ReadFiler:   r~   writeri   ZERROR_MORE_DATA_get_more_datar   r   r   r   r   r   r   rG   winerrorERROR_BROKEN_PIPEEOFErrorRuntimeError)	r=   maxsizeZbsizer   r   Znreadfr   er   r   r   r`   )  s>    


  
zPipeConnection._recv_bytesc                 C   s.   | j st| jd dkrdS tt| g|S )Nr   T)r   r}   PeekNamedPiper:   boolr   rm   r   r   r   rl   I  s
    zPipeConnection._pollc                 C   s   |  }t }|| t| jd }|dks6t|d k	rVt|| |krV| 	  tj
| j|dd\}}|d\}}|dkst||kst||   |S )Nr   r   Tr{   )ri   r   r   r   r}   r   r:   r   rS   rL   r   r~   )r=   r   r   rU   r   leftr   Zrbytesr   r   r   r   O  s    
zPipeConnection._get_more_data)N)rv   rw   rx   __doc__r   r}   CloseHandlerD   rT   r`   rl   r   r   r   r   r   rz     s   
 rz   c                   @   s|   e Zd ZdZer,ejfddZejZ	ej
ZnejfddZejZ	ejZe	fddZefddZd	d
 ZdddZdd ZdS )
Connectionzo
    Connection class based on an arbitrary file descriptor (Unix only), or
    a socket handle (Windows).
    c                 C   s   || j  d S rB   rM   r=   rD   r   r   r   rD   f  s    zConnection._closec                 C   s   || j  d S rB   rM   r   r   r   r   rD   k  s    c                 C   s8   t |}|| j|}||8 }|dkr&q4||d  }qd S Nr   )rS   r:   )r=   rU   r   	remainingrY   r   r   r   _sendp  s    zConnection._sendc                 C   sb   t  }| j}|}|dkr^|||}t|}|dkrJ||krBtntd|| ||8 }q|S )Nr   zgot end of file during message)r   r   r:   rS   r   rG   r   )r=   rW   readrU   r>   r   chunkrY   r   r   r   _recvy  s    


zConnection._recvc                 C   s   t |}|dkrHtdd}td|}| | | | | | n8td|}|dkrr| | | | n| ||  d S )Ni!i!Qi @  )rS   structpackr   )r=   rU   rY   Z
pre_headerheaderr   r   r   rT     s    


zConnection._send_bytesNc                 C   s^   |  d}td| \}|dkr@|  d}td| \}|d k	rT||krTd S |  |S )N   r   r      r   )r   r   unpackra   )r=   r   rU   rW   r   r   r   r`     s    

zConnection._recv_bytesc                 C   s   t | g|}t|S rB   )r   r   )r=   r   rr   r   r   rl     s    zConnection._poll)N)rv   rw   rx   r   r}   _multiprocessingZclosesocketrD   r_   _writerj   _readr$   rK   r   r   r   r   rT   r`   rl   r   r   r   r   r   _  s   	

r   c                   @   sR   e Zd ZdZdddZdd Zdd	 Zed
d Zedd Z	dd Z
dd ZdS )r   z
    Returns a listener object.

    This is a wrapper for a bound socket which is 'listening' for
    connections, or for a Windows named pipe.
    Nr   c                 C   sp   |p|rt |pt}|pt|}t| |dkr>t||| _nt|||| _|d k	rft|tsft	d|| _
d S )Nr   authkey should be a byte string)r7   default_familyr+   r0   PipeListener	_listenerSocketListener
isinstancerR   	TypeError_authkey)r=   r6   r*   backlogauthkeyr   r   r   rA     s    zListener.__init__c                 C   s>   | j dkrtd| j  }| jr:t|| j t|| j |S )zz
        Accept a connection on the bound socket or named pipe of `self`.

        Returns a `Connection` object.
        Nzlistener is closed)r   rG   acceptr   deliver_challengeanswer_challenge)r=   cr   r   r   r     s    

zListener.acceptc                 C   s    | j }|dk	rd| _ |  dS )zA
        Close the bound socket or named pipe of `self`.
        N)r   rK   )r=   Zlistenerr   r   r   rK     s    zListener.closec                 C   s   | j jS rB   )r   _addressrE   r   r   r   r6     s    zListener.addressc                 C   s   | j jS rB   )r   _last_acceptedrE   r   r   r   last_accepted  s    zListener.last_acceptedc                 C   s   | S rB   r   rE   r   r   r   ro     s    zListener.__enter__c                 C   s   |    d S rB   rp   rq   r   r   r   ru     s    zListener.__exit__)NNr   N)rv   rw   rx   r   rA   r   rK   ry   r6   r   ro   ru   r   r   r   r   r     s   
	

c                 C   sh   |p
t | }t| |dkr&t| }nt| }|dk	rHt|tsHtd|dk	rdt|| t|| |S )z=
    Returns a connection to the address of a `Listener`
    r   Nr   )	r7   r0   
PipeClientSocketClientr   rR   r   r   r   )r6   r*   r   r   r   r   r   r     s    


Tc                 C   sj   | r>t  \}}|d |d t| }t| }n$t \}}t|dd}t|dd}||fS )L
        Returns pair of connection objects at either end of a pipe
        TFr@   r?   )r/   
socketpairsetblockingr   detachr$   pipe)duplexs1s2c1c2Zfd1fd2r   r   r   r     s    

c              
   C   s   t d}| r*tj}tjtjB }tt }}ntj}tj}dt }}t||tjB tj	B tj
tjB tjB d||tjtj}t||dtjtjtjtj}t|tjdd tj|dd}|d\}	}
|
dkstt|| d}t|| d}||fS )	r   r   r   r   NTr{   r   r   )r+   r}   PIPE_ACCESS_DUPLEXGENERIC_READGENERIC_WRITEBUFSIZEZPIPE_ACCESS_INBOUNDCreateNamedPipeFILE_FLAG_OVERLAPPEDFILE_FLAG_FIRST_PIPE_INSTANCEPIPE_TYPE_MESSAGEPIPE_READMODE_MESSAGE	PIPE_WAITNMPWAIT_WAIT_FOREVERNULL
CreateFileOPEN_EXISTINGSetNamedPipeHandleStateConnectNamedPiper~   r   rz   )r   r6   ZopenmodeaccessZobsizeZibsizeZh1Zh2r|   _r   r   r   r   r   r   r     sV    
 
   	        c                   @   s*   e Zd ZdZd
ddZdd Zdd Zd	S )r   zO
    Representation of a socket which is bound to an address and listening
    r   c                 C   s   t  tt || _zRtjdkr2| jt jt jd | jd | j	| | j
| | j | _W n  tk
r   | j   Y nX || _d | _|dkrt|stj| tj|fdd| _nd | _d S )Nposixr   Tr   r   argsZexitpriority)r/   r   _socketr$   name
setsockopt
SOL_SOCKETSO_REUSEADDRr   bindlistengetsocknamer   rG   rK   Z_familyr   r   r5   Finalizeunlink_unlink)r=   r6   r*   r   r   r   r   rA   J  s0    

 
   
zSocketListener.__init__c                 C   s&   | j  \}| _|d t| S )NT)r   r   r   r   r   r   r=   sr   r   r   r   c  s    
zSocketListener.acceptc                 C   s0   z| j  W 5 | j }|d k	r*d | _ |  X d S rB   )r   r   rK   )r=   r   r   r   r   rK   h  s    zSocketListener.closeN)r   )rv   rw   rx   r   rA   r   rK   r   r   r   r   r   F  s   
r   c              
   C   sP   t | }ttt|.}|d ||  t| W  5 Q R  S Q R X dS )zO
    Return a connection object connected to the socket given by `address`
    TN)r7   r/   r   r   connectr   r   )r6   r*   r   r   r   r   r   r  s
    

r   c                   @   s8   e Zd ZdZdddZdddZdd	 Zed
d ZdS )r   z0
        Representation of a named pipe
        Nc                 C   sL   || _ | jddg| _d | _td| j  tj| tj| j| j fdd| _	d S )NT)firstz listener created with address=%rr   r   )
r   _new_handle_handle_queuer   r   	sub_debugr   r   _finalize_pipe_listenerrK   )r=   r6   r   r   r   r   rA     s     
 zPipeListener.__init__Fc              
   C   sH   t jt jB }|r|t jO }t | j|t jt jB t jB t j	t
t
t jt jS rB   )r}   r   r   r   r   r   r   r   r   ZPIPE_UNLIMITED_INSTANCESr   r   r   )r=   r   flagsr   r   r   r     s    
 
   zPipeListener._new_handlec              
   C   s   | j |   | j d}ztj|dd}W n0 tk
r^ } z|jtjkrN W 5 d }~X Y n\X z<zt|jgdt}W n    |  t|  Y nX W 5 |	d\}}|dkst
X t|S )Nr   Tr{   F)r   appendr   popr}   r   rG   r   ZERROR_NO_DATAr~   r   r   r   r   r   r   rz   )r=   r>   r   r   r   r   resr   r   r   r     s(      
zPipeListener.acceptc                 C   s$   t d| | D ]}t| qd S )Nz closing listener with address=%r)r   r   r}   r   )queuer6   r>   r   r   r   r     s    z$PipeListener._finalize_pipe_listener)N)F)	rv   rw   rx   r   rA   r   r   staticmethodr   r   r   r   r   r     s   

r   c              
   C   s   t  }z6t| d t| tjtjB dtjtjtjtj}W q t	k
rz } z |j
tjtjfksht|rj W 5 d}~X Y qX qq t|tjdd t|S )zU
        Return a connection object connected to the pipe given by `address`
          r   N)r   r}   ZWaitNamedPiper   r   r   r   r   r   rG   r   ZERROR_SEM_TIMEOUTZERROR_PIPE_BUSYr   r   r   rz   )r6   r   hr   r   r   r   r     s8     
      r      s   #CHALLENGE#s	   #WELCOME#s	   #FAILURE#c                 C   s   dd l }t|ts$tdt|tt}| 	t
|  |||d }| d}||krl| 	t n| 	t tdd S )Nr    Authkey must be bytes, not {0!s}md5   zdigest received was wrong)hmacr   rR   r(   formatr1   r$   urandomMESSAGE_LENGTHrZ   	CHALLENGEnewdigestrb   WELCOMEFAILUREr   
connectionr   r  messager
  responser   r   r   r     s    



r   c                 C   s   dd l }t|ts$tdt|| d}|d tt tksNt	d| |ttd  }|
||d }| | | d}|tkrtdd S )Nr   r  r  zmessage = %rr  zdigest sent was rejected)r  r   rR   r(   r  r1   rb   rS   r  r   r	  r
  rZ   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S )ConnectionWrapperc                 C   s6   || _ || _|| _dD ]}t||}t| || qd S )N)rO   rK   rn   rb   rZ   )_conn_dumps_loadsr   setattr)r=   connr\   rh   attrr^   r   r   r   rA     s    
zConnectionWrapper.__init__c                 C   s   |  |}| j| d S rB   )r  r  rZ   )r=   r^   r   r   r   r   r_     s    
zConnectionWrapper.sendc                 C   s   | j  }| |S rB   )r  rb   r  r   r   r   r   rj     s    
zConnectionWrapper.recvN)rv   rw   rx   rA   r_   rj   r   r   r   r   r     s   r  c                 C   s   t | fd d d ddS )Nr   utf-8)	xmlrpclibr\   encode)r^   r   r   r   
_xml_dumps  s    r  c                 C   s   t | d\\}}|S )Nr  )r  rh   decode)r   r^   methodr   r   r   
_xml_loads  s    r  c                   @   s   e Zd Zdd ZdS )XmlListenerc                 C   s"   dd l ma t| }t|ttS r   )xmlrpc.clientclientr  r   r   r  r  r  r]   r   r   r   r     s    
zXmlListener.acceptN)rv   rw   rx   r   r   r   r   r   r    s   r  c                  O   s   dd l ma tt| |ttS r   )r   r!  r  r  r   r  r  )r   kwdsr   r   r   	XmlClient  s    r#  c                 C   s   t | }g }|rt|d|}|tkr*qn\t|  krFtt| k rTn n
|t8 }n2t|  krptt| k r~n n
|t8 }ntd|||  ||d d  }d}q|S )NFzShould not get herer   r   )	listr}   r   r   r   rS   r   r   r   )Zhandlesr   Lreadyr   r   r   r   _exhaustive_wait(  s     
 
r'  c           
         s^  |dkrt }n|dk rd}nt|d d }t| } i g }t  t }z@| D ]&}zt|d}	W n  tk
r   || < Y qPX zt	|	 dd\}}W n8 tk
r } zd|j }}|tkrƂ W 5 d}~X Y nX |t	jkr|| ||j< qP|rjt dd d	krjz|d
\}}W n* tk
rP } z
|j}W 5 d}~X Y nX |sjt|drjd|_ | d}qPt |}W 5 |D ]}|  q|D ]}z|d\}}W n6 tk
r } z|j}|tkr W 5 d}~X Y nX |t	j
kr|j } | |dkrt|drd|_qX  fdd|D   fdd| D S )
        Wait till an object in object_list is ready/readable.

        Returns list of those objects in object_list which are ready/readable.
        Nr   r   g      ?Tr   rO      )   r)  Fc                 3   s   | ]} | V  qd S rB   r   ).0r   )waithandle_to_objr   r   	<genexpr>  s     zwait.<locals>.<genexpr>c                    s   g | ]}| kr|qS r   r   )r+  o)ready_objectsr   r   
<listcomp>  s      wait.<locals>.<listcomp>)r   intr$  setr   r~   rG   r   _ready_errorsr}   ZERROR_OPERATION_ABORTEDr   addr.   r   r   AttributeErrorr9   r   r   r   r,   getwindowsversionr'  keysupdate)
object_listr   Zov_listZready_handlesr   r   r   r   r.  rO   r   )r/  r,  r   r   >  sh    







PollSelectorc              
   C   s   t  }| D ]}||tj q|dk	r<ttdtj | }||}|rddd |D W  5 Q R  S |dk	r<|ttdtj  }|dk r<|W  5 Q R  S q<W 5 Q R X dS )r(  Nr   c                 S   s   g | ]\}}|j qS r   )fileobj)r+  keyeventsr   r   r   r0    s     r1  r   )_WaitSelectorregister	selectors
EVENT_READr   r   select)r:  r   selectorr^   deadliner&  r   r   r   r     s    
c              
   C   sZ   |   }t|tjtj6}ddlm} ||}t|| j	| j
ffW  5 Q R  S Q R X d S )Nr   )resource_sharer)rO   r/   fromfdr   SOCK_STREAMr!   rF  Z	DupSocketrebuild_connectionr?   r@   )r  r>   r   rF  dsr   r   r   reduce_connection  s
    
rK  c                 C   s   |   }t|  ||S rB   r   r   )rJ  r?   r@   sockr   r   r   rI    s    rI  c                 C   sB   | j rtjnd| jrtjndB }t|  |}t|| j | jffS r   )	r?   r}   ZFILE_GENERIC_READr@   ZFILE_GENERIC_WRITEr
   Z	DupHandlerO   rebuild_pipe_connection)r  r   dhr   r   r   reduce_pipe_connection  s
    rP  c                 C   s   |   }t|||S rB   )r   rz   )rO  r?   r@   r>   r   r   r   rN    s    rN  c                 C   s    t |  }t|| j| jffS rB   )r
   ZDupFdrO   rI  r?   r@   )r  dfr   r   r   rK    s    c                 C   s   |   }t|||S rB   rL  )rQ  r?   r@   fdr   r   r   rI    s    )NN)T)T)N)N)J__all__r   r$   r,   r/   r   r   r"   	itertoolsZ_multiprocessr   ImportErrorr!   r   r   r	   contextr
   ZForkingPicklerr[   r}   r   r   r   r   r-   r   ZCONNECTION_TIMEOUTcountr'   r   Zfamiliesr.   r   r   r+   r0   r7   r8   rz   r   objectr   r   r   r   r   r   r   r  r  r  r  r   r   r  r  r  r  r#  r'  r   ZERROR_NETNAME_DELETEDr4  r   rA  r;  r?  SelectSelectorrK  rI  r@  rP  rN  r   r   r   r   <module>
   s   



 PT=

,,8	P
