
    z%i                        	 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d dl	Z	d dl
Z
d dlZd dlmZ g dZdZdZdZdZdZd	Z ej,                  d
ej.                        Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z  G d de      Z! G d de      Z" G d de      Z#d Z$d  Z%d! Z&d" Z'd# Z(	 d dl)Z)d$Z* G d& d'      Z,e*r G d( d)e,      Z-ej]                  d)       d*Z/ G d+ d,e,      Z0e1d-k(  rd. Z2 e2d/      Z3 e2d0      ji                  d1      Z5 e6d2       d3Z7ejp                  js                         xZ:r"e7e:z   Z7ejp                  js                         xZ:r" e6d4 e;e7      z          e,d5      Z<e<j{                  d6       e<j}                  e3e5e7       e<j                          yy# e+$ r d%Z*Y w xY w)7    N)body_encode)SMTPExceptionSMTPNotSupportedErrorSMTPServerDisconnectedSMTPResponseExceptionSMTPSenderRefusedSMTPRecipientsRefusedSMTPDataErrorSMTPConnectErrorSMTPHeloErrorSMTPAuthenticationError	quoteaddr	quotedataSMTP   i  
s   
i       z	auth=(.*)c                       e Zd Zy)r   N__name__
__module____qualname__     ;/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/smtplib.pyr   r   H   s    >r   r   c                       e Zd Zy)r   Nr   r   r   r   r   r   K       r   r   c                       e Zd Zy)r   Nr   r   r   r   r   r   R   s    r   r   c                       e Zd Z	 d Zy)r   c                 2    || _         || _        ||f| _        y N)	smtp_code
smtp_errorargs)selfcodemsgs      r   __init__zSMTPResponseException.__init__c   s    3K	r   Nr   r   r   r(   r   r   r   r   r   Z   s     r   r   c                       e Zd Z	 d Zy)r   c                 B    || _         || _        || _        |||f| _        y r!   )r"   r#   senderr$   )r%   r&   r'   r,   s       r   r(   zSMTPSenderRefused.__init__o   s%    3'	r   Nr)   r   r   r   r   r   h   s    (r   r   c                       e Zd Z	 d Zy)r	   c                 "    || _         |f| _        y r!   )
recipientsr$   )r%   r/   s     r   r(   zSMTPRecipientsRefused.__init__}   s    $M	r   Nr)   r   r   r   r	   r	   u   s    "r   r	   c                       e Zd Zy)r
   Nr   r   r   r   r
   r
      s    1r   r
   c                       e Zd Zy)r   Nr   r   r   r   r   r      s    0r   r   c                       e Zd Zy)r   Nr   r   r   r   r   r      s    ,r   r   c                       e Zd Zy)r   Nr   r   r   r   r   r      r   r   r   c                     	 t         j                  j                  |       \  }}||fdk(  r&| j                         j	                  d      r| S d| z  S d|z  S )N r6   <z<%s>)emailutils	parseaddrstrip
startswith
addrstringdisplaynameaddrs      r   r   r      sa     --j9KTh&((-
""D=r   c                 \    t         j                  j                  |       \  }}||fdk(  r| S |S )Nr5   )r8   r9   r:   r=   s      r   
_addr_onlyrB      s3    --j9KTh&Kr   c           	      d    	 t        j                  ddt        j                  dt        |             S )Nz(?m)^\.z..(?:\r\n|\n|\r(?!\n))resubCRLFdatas    r   r   r      s/    
 66*d
&d35 5r   c                 0    t        j                  dd|       S )Ns   (?m)^\.s   ..)rF   rG   )bindatas    r   _quote_periodsrM      s    66+ug..r   c                 8    t        j                  dt        |       S )NrD   rE   rI   s    r   	_fix_eolsrO      s    FF*D$77r   TFc                   R   e Zd Z	 dZdZdZdZdZdZdZ	e
Zdddej                  dfdZd Zd Zd	 Zd
 Zd Zd+dZd Zd,dZd Zd,dZd,dZd,dZd Zd,dZd Zd Zd Zd-dZ d-dZ!d Z"d Z#e#Z$d Z%d Z&ddd Z'd.d!Z(d.d"Z)d.d#Z*ddd$Z+dd%d&Z,	 	 d/d'Z-	 	 d0d(Z.d) Z/d* Z0y)1r   r   NehloFr6   c                    	 || _         || _        i | _        d| _        || _        d| _        |r6| j                  ||      \  }}|dk7  r| j                          t        ||      ||| _	        y t        j                         }d|v r|| _	        y d}		 t        j                  t        j                               }	d|	z  | _	        y # t        j                  $ r Y  w xY w)Nasciir      .z	127.0.0.1z[%s])_hosttimeoutesmtp_featurescommand_encodingsource_address_auth_challenge_countconnectcloser   local_hostnamesocketgetfqdngethostbynamegethostnamegaierror)
r%   hostportr^   rW   rZ   r&   r'   fqdnr@   s
             r   r(   zSMTP.__init__   s    	 
  ',%&",,tT2KT3s{

&tS11%"0D
 >>#Dd{&*# #!//0B0B0DED '-tm#  s   'C CCc                     | S r!   r   r%   s    r   	__enter__zSMTP.__enter__  s    r   c                     	 | j                  d      \  }}|dk7  rt        ||      	 | j                          y # t        $ r Y w xY w# | j                          w xY w)NQUIT   )docmdr   r   r]   )r%   r$   r&   messages       r   __exit__zSMTP.__exit__  s]    	 JJv.MD's{+D':: 
 JJL & 		 JJLs&   %9 A 	AA AA Ac                     	 || _         y r!   )
debuglevel)r%   rq   s     r   set_debuglevelzSMTP.set_debuglevel"  s    	 %r   c                     | j                   dkD  rHt        t        j                  j                         j	                         g|dt
        j                  i y t        |dt
        j                  i y )N   file)rq   printdatetimenowtimesysstderrr%   r$   s     r   _print_debugzSMTP._print_debug+  sM    ??Q(##'')..0I4IcjjI4)cjj)r   c                     ||st        d      | j                  dkD  r| j                  d||f| j                         t	        j
                  ||f|| j                        S )N0Non-blocking socket (timeout=0) is not supportedr   zconnect: to)
ValueErrorrq   r}   rZ   r_   create_connection)r%   rd   re   rW   s       r   _get_socketzSMTP._get_socket1  sd     wOPP??QmdD\4;N;NO''tg(,(;(;= 	=r   c                    	 |r|| _         |sR|j                  d      |j                  d      k(  r/|j                  d      }|dk\  r|d | ||dz   d  }}	 t        |      }|s| j                  }t        j                  d| ||       | j                  ||| j                        | _        d | _        | j                         \  }}| j                  dkD  r| j                  dt!        |             ||fS # t        $ r t        d      w xY w)N:r   rt   znonnumeric portzsmtplib.connectconnect:)rZ   findrfindintr   OSErrordefault_portrz   auditr   rW   sockru   getreplyrq   r}   repr)r%   rd   re   rZ   ir&   r'   s          r   r\   zSMTP.connect;  s   		 "0D34::c?:

3AAv!"1XtAEF|d5t9D $$D		#T46$$T4>		mmos??Qj$s)4c{ " 5!"3445s   C/ /Dc                    	 | j                   dkD  r| j                  dt        |             | j                  r_t	        |t
              r|j                  | j                        }t        j                  d| |       	 | j                  j                  |       y t        d      # t        $ r | j                          t        d      w xY w)Nr   zsend:zsmtplib.sendServer not connectedzplease run connect() first)rq   r}   r   r   
isinstancestrencoderY   rz   r   sendallr   r]   r   )r%   ss     r   sendz	SMTP.send\  s    %??QgtAw/99!S! HHT223IIndA.E		!!!$
 ))EFF	  E

,-CDDEs   ;B" "%Cc                     	 |dk(  r|}n| d| }d|v sd|v r0|j                  dd      j                  dd      }t        d|       | j                  | t                y )Nr6    
z\nz\rz=command and arguments contain prohibited newline characters: )replacer   r   rH   )r%   cmdr$   r   s       r   putcmdzSMTP.putcmdo  sx    +2:A%qA19			$&..tU;AOPQsS  			QCv,r   c                    	 g }| j                    | j                  j                  d      | _         	 	 | j                   j                  t        dz         }|s| j                          t        d      | j                  dkD  r| j                  dt        |             t        |      t        kD  r| j                          t        dd      |j                  |d	d  j                  d
             |d d }	 t!        |      }|dd	 dk7  rndj%                  |      }| j                  dkD  r| j                  d|d|       ||fS # t
        $ r,}| j                          t        dt        |      z         d }~ww xY w# t"        $ r d}Y w xY w)Nrbrt   z Connection unexpectedly closed: zConnection unexpectedly closedr   zreply:i  zLine too long.   s    	
      -   
zreply: retcode (z); Msg: )ru   r   makefilereadline_MAXLINEr   r]   r   r   rq   r}   r   lenr   appendr;   r   r   join)r%   resplineer&   errcodeerrmsgs          r   r   zSMTP.getreply|  s   	 99		**40DI7yy))(Q,7
 

,-MNN"!!(DJ74y8#

+C1ABBKKQRz238Dd)
 AayD 5 8 D!??QPQ9  7

,-O/21v.6 7 77$  s)   "E 2E: 	E7'E22E7:FFc                 H    	 | j                  ||       | j                         S r!   r   r   )r%   r   r$   s      r   rm   z
SMTP.docmd  s    ;C}}r   c                     	 | j                  d|xs | j                         | j                         \  }}|| _        ||fS )Nhelo)r   r^   r   	helo_resp)r%   namer&   r'   s       r   r   z	SMTP.helo  sB    	 	FD7D$7$78mmosc{r   c                    	 i | _         | j                  | j                  |xs | j                         | j	                         \  }}|dk(  r)t        |      dk(  r| j                          t        d      || _        |dk7  r||fS d| _	        | j                  j                  d      j                  d      }|d= |D ]  }t        j                  |      }|rB| j                   j                  dd	      d
z   |j                  d      d   z   | j                   d<   ]t!        j                  d|      }|sv|j#                  d      j%                         }|j&                  |j)                  d      d  j+                         }	|dk(  r0| j                   j                  |d	      d
z   |	z   | j                   |<   |	| j                   |<    ||fS )Nr   r   r      Tzlatin-1r   authr6   r   z((?P<feature>[A-Za-z0-9][A-Za-z0-9\-]*) ?feature)rX   r   ehlo_msgr^   r   r   r]   r   	ehlo_resp
does_esmtpdecodesplitOLDSTYLE_AUTHmatchgetgroupsrF   grouplowerstringendr;   )
r%   r   r&   r'   r   each
auth_matchmr   paramss
             r   rQ   z	SMTP.ehlo  s   	 !DMM4#>4+>+>?mmos 2:#c(a-JJL()?@@3;#; ~~$$Y/55d;G 	:D ',,T2J.2.A.A.E.Efb.Q/ * 1 1! 4Q 7/8##F+ DdKA''),224!%%	"2"34::<f$373F3F3J3J7TV3W!4"$*4+D''0 4:D''05	:6 c{r   c                 <    	 |j                         | j                  v S r!   )r   rX   )r%   opts     r   has_extnzSMTP.has_extn  s    Eyy{d1111r   c                 N    	 | j                  d|       | j                         d   S )Nhelprt   r   r|   s     r   r   z	SMTP.help  s&    	*FD!}}q!!r   c                 4    	 d| _         | j                  d      S )NrS   rset)rY   rm   rh   s    r   r   z	SMTP.rset  s    4 'zz&!!r   c                 F    	 	 | j                          y # t        $ r Y y w xY wr!   )r   r   rh   s    r   _rsetz
SMTP._rset  s'    		IIK% 		s    	  c                 &    	 | j                  d      S )Nnoop)rm   rh   s    r   r   z	SMTP.noop  s    ;zz&!!r   c                    	 d}|rV| j                   rJt        d |D              r$| j                  d      rd| _        nt	        d      ddj                  |      z   }| j                  ddt        |      |       | j                         S )	Nr6   c              3   B   K   | ]  }|j                         d k(    yw)smtputf8N)r   ).0xs     r   	<genexpr>zSMTP.mail.<locals>.<genexpr>  s     :Q1779j(:s   r   zutf-8z SMTPUTF8 not supported by serverr   mailzFROM:)	r   anyr   rY   r   r   r   r   r   )r%   r,   options
optionlists       r   r   z	SMTP.mail  s    	 
t:'::==,,3D)/:< <sxx00JF9V+<jIJ}}r   c                     	 d}|r | j                   rddj                  |      z   }| j                  ddt        |      |       | j	                         S )Nr6   r   rcptzTO:)r   r   r   r   r   )r%   recipr   r   s       r   r   z	SMTP.rcpt$  sJ    I
tsxx00JF5)9:FG}}r   c                    	 | j                  d       | j                         \  }}| j                  dkD  r| j                  d||f       |dk7  rt	        ||      t        |t              rt        |      j                  d      }t        |      }|dd  t        k7  r	|t        z   }|dz   t        z   }| j                  |       | j                         \  }}| j                  dkD  r| j                  d||f       ||fS )NrJ   r   zdata:ib  rS      .)r   r   rq   r}   r
   r   r   rO   r   rM   bCRLFr   )r%   r'   r&   replqs        r   rJ   z	SMTP.data,  s    	 	F}}t??Qgd|43;d++#s#n++G4s#AvID5 AIIaL--/KT3"!!'D#;7#;r   c                 Z    	 | j                  dt        |             | j                         S )Nvrfyr   rB   r   r%   addresss     r   verifyzSMTP.verifyI  s$    CFJw/0}}r   c                 Z    	 | j                  dt        |             | j                         S )Nexpnr   r   s     r   r   z	SMTP.expnP  s$    <FJw/0}}r   c                     	 | j                   Y| j                  Ld| j                         d   cxk  rdk  s/n | j                         \  }}d|cxk  rdk  sn t	        ||      y y y y )N   r   i+  )r   r   rQ   r   r   )r%   r&   r   s      r   ehlo_or_helo_if_neededzSMTP.ehlo_or_helo_if_neededW  sn    		 >>!dnn&<499;q>0S0#yy{tt*s*'d33 + 1 '=!r   Tinitial_response_okc                J   	 |j                         }|r |       nd }|?t        |j                  d      d      }| j                  d|dz   |z         \  }}d| _        n| j                  d|      \  }}d| _        |dk(  r| xj                  dz  c_        t        j                  |      }t         ||      j                  d      d      }| j                  |      \  }}| j                  t        kD  rt        d	t        ||f      z         |dk(  r|d
v r||fS t        ||      )NrS   r6   )eolAUTHr   rt   r   iN  z4Server AUTH mechanism infinite loop. Last response:    i  )upperencode_base64r   rm   r[   base64decodebytes_MAXCHALLENGEr   r   r   )	r%   	mechanism
authobjectr   initial_responseresponser&   r   	challenges	            r   r   z	SMTP.authh  s2   	* OO%	,?JLT'$%5%<%<W%E2NH::fi#o.HILT4)*D&::fi8LT4)*D&ck&&!+&**40I$9%,,W52?H::h/LT4))M9#JD$<()  ck :$<%dD11r   c                     	 |y | j                   dz   t        j                  | j                  j	                  d      |d      j                         z   S )Nr   rS   md5)userhmacHMACpasswordr   	hexdigestr%   r  s     r   auth_cram_md5zSMTP.auth_cram_md5  sQ    	( yy3MM  )9e"==FY[I 	Ir   c                 :    d| j                   d| j                  S )N )r  r  r  s     r   
auth_plainzSMTP.auth_plain  s    	$!YY66r   c                 V    	 || j                   dk  r| j                  S | j                  S )N   )r[   r  r  r  s     r   
auth_loginzSMTP.auth_login  s.    	$ : :Q >99== r   c                   	 | j                          | j                  d      st        d      | j                  d   j	                         }g d}|D cg c]  }||v r|
 }}|st        d      ||c| _        | _        |D ]Q  }d|j                         j                  dd      z   }		 | j                  |t        | |	      |      \  }
}|
d	v r|
|fc S S c c}w # t        $ r}|}Y d }~kd }~ww xY w)
Nr   z,SMTP AUTH extension not supported by server.)zCRAM-MD5PLAINLOGINz(No suitable authentication method found.auth_-_r   r   )r   r   r   rX   r   r   r  r  r   r   r   getattrr   )r%   r  r  r   advertised_authlistpreferred_authsr   authlist
authmethodmethod_namer&   r   r   last_exceptions                 r   loginz
SMTP.login  s5   	6 	##%}}V$'>@ @ #11&9??A 9 &5 4T22  4 4 JKK
 $( 	4=" 	#J!J$4$4$6$>$>sC$HHK	##yyk :(;  )  =t
 :% $<' &	# /4& + #!"#s   C'(C	C0$C++C0)contextc                   	 | j                          | j                  d      st        d      | j                  d      \  }}|dk(  rzt        st        d      |t        j                         }|j                  | j                  | j                        | _	        d | _        d | _        d | _        i | _        d| _        ||fS t!        ||      )Nstarttlsz+STARTTLS extension not supported by server.STARTTLSrT   z&No SSL support included in this Pythonserver_hostnameF)r   r   r   rm   	_have_sslRuntimeErrorssl_create_stdlib_contextwrap_socketr   rV   ru   r   r   rX   r   r   )r%   r#  r   replys       r   r%  zSMTP.starttls  s    	  	##%}}Z('=? ?

:.u3;"#KLL446++DII<@JJ , HDIDI
 "DN!DN"$D#DO e} (e44r   c                 |   	 | j                          g }t        |t              rt        |      j	                  d      }| j
                  rF| j                  d      r|j                  dt        |      z         |D ]  }|j                  |        | j                  ||      \  }}	|dk7  r3|dk(  r| j                          n| j                          t        ||	|      i }
t        |t              r|g}|D ]H  }| j                  ||      \  }}	|dk7  r|dk7  r||	f|
|<   |dk(  s/| j                          t        |
       t        |
      t        |      k(  r| j                          t        |
      | j                  |      \  }}	|dk7  r2|dk(  r| j                          n| j                          t!        ||	      |
S )NrS   sizezsize=%dr   i     )r   r   r   rO   r   r   r   r   r   r   r]   r   r   r   r	   rJ   r
   )r%   	from_addrto_addrsr'   mail_optionsrcpt_options
esmtp_optsoptionr&   r   senderrsr   s               r   sendmailzSMTP.sendmail  s   =	| 	##%
c3C.''0C??}}V$!!)c#h"67& *!!&)*yyJ7t3;s{



#D$	::h$ zH 	6D99T<8LT4$#+"&s{

+H55	6 x=CM)JJL'11yy~t3;s{



d++r   c                 2   	 | j                          |j                  d      }|d}nt        |      dk(  rd}nt        d      |=|dz   |v r||dz      n||dz      }t        j
                  j                  |g      d   d   }|U||d	z      ||d
z      ||dz      fD cg c]  }|| }	}t        j
                  j                  |	      D 
cg c]  }
|
d   	 }}
t        j                  |      }|d
= |d= d}	 dj                  |g|      j                  d       t        j                         5 }|rEt        j                  j!                  ||j"                  j%                  d            }g |dd}nt        j                  j!                  |      }|j'                  |d       |j)                         }d d d        | j+                  ||||      S c c}w c c}
w # t        $ r! | j                  d      st        d      d}Y w xY w# 1 sw Y   UxY w)NzResent-Dater6   rt   zResent-z0message has more than one 'Resent-' header blockSenderFromr   ToBccCcz
Resent-BccFrS   r   zOne or more source or delivery addresses require internationalized email support, but the server does not advertise the required SMTPUTF8 capabilityT)utf8)policySMTPUTF8zBODY=8BITMIMEr   )linesep)r   get_allr   r   r8   r9   getaddressescopyr   r   UnicodeEncodeErrorr   r   ioBytesIO	generatorBytesGeneratorrA  cloneflattengetvaluer9  )r%   r'   r2  r3  r4  r5  resentheader_prefixfaddr_fieldsamsg_copyinternationalbytesmsggflatmsgs                   r   send_messagezSMTP.send_message  s`   	: 	##%]+>M[A%MOPP  -x7C? ]X56 #MF$: ;  00)=a@CI'*=4+?'@'*=5+@'A'*=4+?'@'B -  m  -K - ',kk&>&>{&KL!LHL99S>UO\"	!GGY**+227; ZZ\ 	*XOO22SZZ%5%54%5%@ 3 BKKzK?KOO228<IIhI/'')G	* }}Y'<)+ 	+9- M " 	!==,+KL L !M	!	* 	*s+   GG8#G  /B
H 'H
	H
Hc                     	 	 | j                   }d | _         |r|j                          | j                  }d | _        |r|j                          y y # | j                  }d | _        |r|j                          w w xY wr!   )ru   r]   r   )r%   ru   r   s      r   r]   z
SMTP.close  sl    6		99DDI

99DDI

  99DDI

 s   %A (A7c                     	 | j                  d      }d x| _        | _        i | _        d| _        | j                          |S )NquitF)rm   r   r   rX   r   r]   )r%   ress     r   r\  z	SMTP.quit  s>    )jj *.. 


r   	localhostr   N)r6   )r   r!   )r   r   )NNr   r   )1r   r   r   rq   r   ru   r   r   r   r   	SMTP_PORTr   r_   _GLOBAL_DEFAULT_TIMEOUTr(   ri   ro   rr   r}   r   r\   r   r   r   rm   r   rQ   r   r   r   r   r   r   r   rJ   r   r   r   r   r   r  r  r  r"  r%  r9  rY  r]   r\  r   r   r   r   r      s&   8 JDDIHIJLQt77 $.4`%*=BG& /b1f2""

"*:
 D4" BF .2`I7
! <@ @D #' +Z ?A fP :>35K+Zr   r   c                   J     e Zd Z	 eZdej                  ddddZ fdZ xZ	S )SMTP_SSLN)rW   rZ   r#  c                r    |t        j                         }|| _        t        j	                  | |||||       y r!   )r+  r,  r#  r   r(   )r%   rd   re   r^   rW   rZ   r#  s          r   r(   zSMTP_SSL.__init__  s7     446"DLMM$dNG(*r   c                     | j                   dkD  r| j                  d||f       t        |   |||      }| j                  j                  || j                        }|S )Nr   r   r'  )rq   r}   superr   r#  r-  rV   )r%   rd   re   rW   
new_socket	__class__s        r   r   zSMTP_SSL._get_socket  s_    "!!*tTl;,T4AJ11*BF** 2 NJr   )r6   r   N)
r   r   r   SMTP_SSL_PORTr   r_   ra  r(   r   __classcell__rh  s   @r   rc  rc    s1    	 %	* & > >$($	*	 	r   rc  i  c                   P     e Zd Z	 dZdeddej                  f fd	Zd fd	Z xZ	S )LMTPlhlor6   Nc                 0    	 t         |   |||||       y )N)r^   rZ   rW   )rf  r(   )r%   rd   re   r^   rZ   rW   rh  s         r   r(   zLMTP.__init__   s$    (tN(6 	 	Ir   c                    	 |d   dk7  rt         |   |||      S | j                  | j                  st        d      	 t	        j                  t        j
                  t        j                        | _        | j                  t        j                  ur%| j                  j                  | j                         d | _
        | j                  j                  |       | j                         \  }}| j                  dkD  r| j                  d|       ||fS # t        $ rP | j                  dkD  r| j                  d|       | j                  r| j                  j                          d | _         w xY w)Nr   /)rZ   r   zconnect fail:r   )rf  r\   rW   r   r_   AF_UNIXSOCK_STREAMr   ra  
settimeoutru   r   rq   r}   r]   r   )r%   rd   re   rZ   r&   r'   rh  s         r   r\   zLMTP.connect&  s'   K7c>7?4n?MM<<#DLLOPP	fnnf6H6HIDI||6#A#AA		$$T\\2DIIId# mmos??Qj#.c{  	"!!/48yy		!DI	s   BD AE,r^  )
r   r   r   r   	LMTP_PORTr_   ra  r(   r\   rj  rk  s   @r   rm  rm    s1    4 HYt $f.L.LI r   rm  __main__c                     t         j                  j                  | dz          t         j                  j                          t         j                  j                         j                         S )Nz: )rz   stdoutwriteflushstdinr   r;   )prompts    r   r|  r|  E  sD    

$'

yy!!#))++r   r<  r=  ,zEnter message, end with ^D:r6   zMessage length is %dr_  rt   )@r_   rH  rF   email.utilsr8   email.messageemail.generatorr   r	  rF  rw   rz   email.base64mimer   r   __all__r`  ri  rH   r   r   r   compileIr   r   r   r   r   r   r   r	   r
   r   r   r   r   rB   r   rM   rO   r+  r)  ImportErrorr   rc  r   ru  rm  r   r|  fromaddrr   toaddrsrv   r'   r{  r   r   r   serverrr   r9  r\  r   r   r   <module>r     s)  R  	 	        
 9-
 	

<.?G ?M ]  M  (- (
"M 
"2) 21, 1-) -3 5/8 Ii iV 4 < NN:
 	/4 /h z,
 f~HTl  %G	
'(
C))$$&
&$
&Dj ))$$&
&$
&	
 3s8
+,+F
!
OOHgs+
KKM# Y  Is   G G"!G"