<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

]ҫ                 @   s\  d  Z  d d 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
 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 d Z d	 Z d
 d   Z Gd d   d e j  Z Gd d   d e j  Z Gd d   d e  Z d d   Z d a d d   Z d d   Z Gd d   d e  Z  e e d d d d d  Z! e" d k rXe j#   Z$ e$ j% d d d d d  e$ j% d! d" d# d d$ d% d d& e$ j% d' d d( d# d d) e& d* d+ d d, e$ j'   Z( e( j) r3e  Z* n e Z* e! d- e* d' e( j+ d. e( j,  d S)/z0.6
HTTPServerBaseHTTPRequestHandlerSimpleHTTPRequestHandlerCGIHTTPRequestHandler    N)
HTTPStatusa  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        <title>Error response</title>
    </head>
    <body>
        <h1>Error response</h1>
        <p>Error code: %(code)d</p>
        <p>Message: %(message)s.</p>
        <p>Error code explanation: %(code)s - %(explain)s.</p>
    </body>
</html>
ztext/html;charset=utf-8c             C   s(   |  j  d d  j  d d  j  d d  S)N&z&amp;<z&lt;>z&gt;)replace)html r   +/opt/alt/python35/lib64/python3.5/server.py_quote_html   s    r   c               @   s"   e  Z d  Z d Z d d   Z d S)r      c             C   sN   t  j j |   |  j j   d  d  \ } } t j |  |  _ | |  _ d  S)N   )socketserver	TCPServerserver_bindsocketgetsocknamegetfqdnserver_nameserver_port)selfhostportr   r   r   r      s    zHTTPServer.server_bindN)__name__
__module____qualname__Zallow_reuse_addressr   r   r   r   r   r      s   c               @   s  e  Z d  Z d e j j   d Z d e Z e	 Z
 e Z d Z d d   Z d d   Z d	 d
   Z d d   Z d d d d  Z d d d  Z d d d  Z d d   Z d d   Z d d   Z d d d d  Z d d   Z d d    Z d! d"   Z d d# d$  Z d% d&   Z d' d( d) d* d+ d, d- g Z d d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 g Z d: d;   Z  d< Z! e" j# j$ Z% d= d>   e& j' j(   D Z) d S)?r   zPython/r   z	BaseHTTP/zHTTP/0.9c             C   sy  d  |  _  |  j |  _ } d |  _ t |  j d  } | j d  } | |  _ | j   } t	 |  d k r| \ } } } | d  d  d k r |  j
 t j d |  d Sya | j d	 d
  d
 } | j d  } t	 |  d k r t  t | d  t | d
  f } Wn3 t t f k
 r@|  j
 t j d |  d SYn X| d k re|  j d k red |  _ | d k r|  j
 t j d |  d Snv t	 |  d k r| \ } } d |  _ | d k r|  j
 t j d |  d Sn% | sd S|  j
 t j d |  d S| | | |  _  |  _ |  _ y% t j j |  j d |  j |  _ Wny t j j k
 rx|  j
 t j d  d SYnK t j j k
 r} z% |  j
 t j d t |   d SWYd  d  } ~ Xn X|  j j d d  }	 |	 j   d k rd |  _ n* |	 j   d k r |  j d k r d |  _ |  j j d d  }
 |
 j   d k ru|  j d k ru|  j d k ru|  j   sud Sd S)NTz
iso-8859-1z
      zHTTP/zBad request version (%r)F/r   .r   r   zHTTP/1.1zInvalid HTTP Version (%s)GETzBad HTTP/0.9 request type (%r)zBad request syntax (%r)Z_classzLine too longzToo many headers
Connection closez
keep-aliveZExpectz100-continue)r   r   )r   r   )commanddefault_request_versionrequest_versionclose_connectionstrraw_requestlinerstriprequestlinesplitlen
send_errorr   ZBAD_REQUEST
ValueErrorint
IndexErrorprotocol_versionZHTTP_VERSION_NOT_SUPPORTEDpathhttpclientZparse_headersrfileMessageClassheadersZLineTooLongZHTTPExceptionZREQUEST_HEADER_FIELDS_TOO_LARGEgetlowerhandle_expect_100)r   versionr.   wordsr'   r6   Zbase_version_numberZversion_numbererrZconntypeexpectr   r   r   parse_request	  s    			$				z$BaseHTTPRequestHandler.parse_requestc             C   s   |  j  t j  |  j   d S)NT)send_response_onlyr   ZCONTINUEend_headers)r   r   r   r   r>   k  s    
z(BaseHTTPRequestHandler.handle_expect_100c             C   s,  y |  j  j d  |  _ t |  j  d k r\ d |  _ d |  _ d |  _ |  j t j	  d  S|  j sr d |  _
 d  S|  j   s d  Sd |  j } t |  |  s |  j t j d |  j  d  St |  |  } |   |  j j   WnE t j k
 r'} z" |  j d |  d |  _
 d  SWYd  d  } ~ Xn Xd  S)Ni  i   r%   TZdo_zUnsupported method (%r)zRequest timed out: %r)r9   readliner,   r0   r.   r)   r'   r1   r   ZREQUEST_URI_TOO_LONGr*   rC   hasattrNOT_IMPLEMENTEDgetattrwfileflushr   timeout	log_error)r   Zmnamemethoder   r   r   handle_one_request}  s4    						z)BaseHTTPRequestHandler.handle_one_requestc             C   s1   d |  _  |  j   x |  j  s, |  j   q Wd  S)NT)r*   rP   )r   r   r   r   handle  s    	
zBaseHTTPRequestHandler.handleNc             C   s^  y |  j  | \ } } Wn t k
 r7 d \ } } Yn X| d  k rJ | } | d  k r\ | } |  j d | |  |  j | |  |  j d d  d  } | d k r+| t j t j t j f k r+|  j	 d | d t
 |  d t
 |  i } | j d	 d
  } |  j d |  j  |  j d t t |    |  j   |  j d k rZ| rZ|  j j |  d  S)N???zcode %d, message %sr$   r&      codemessageexplainzUTF-8r
   zContent-TypezContent-LengthZHEAD)rR   rR   )	responsesKeyErrorrM   send_responsesend_headerr   Z
NO_CONTENTZRESET_CONTENTZNOT_MODIFIEDerror_message_formatr   encodeerror_content_typer3   r0   rE   r'   rJ   write)r   rT   rU   rV   ZshortmsgZlongmsgZbodyZcontentr   r   r   r1     s4    	
z!BaseHTTPRequestHandler.send_errorc             C   sM   |  j  |  |  j | |  |  j d |  j    |  j d |  j    d  S)NZServerZDate)log_requestrD   rZ   version_stringdate_time_string)r   rT   rU   r   r   r   rY     s    z$BaseHTTPRequestHandler.send_responsec             C   s   | d  k r5 | |  j  k r/ |  j  | d } n d } |  j d k r t |  d  s\ g  |  _ |  j j d |  j | | f j d d   d  S)Nr   r%   zHTTP/0.9_headers_bufferz
%s %d %s
zlatin-1strict)rW   r)   rG   rb   appendr5   r\   )r   rT   rU   r   r   r   rD     s    	z)BaseHTTPRequestHandler.send_response_onlyc             C   s   |  j  d k rM t |  d  s' g  |  _ |  j j d | | f j d d   | j   d k r | j   d k r} d |  _ n | j   d	 k r d
 |  _ d  S)NzHTTP/0.9rb   z%s: %s
zlatin-1rc   
connectionr&   Tz
keep-aliveF)r)   rG   rb   rd   r\   r=   r*   )r   keywordvaluer   r   r   rZ     s    		z"BaseHTTPRequestHandler.send_headerc             C   s-   |  j  d k r) |  j j d  |  j   d  S)NzHTTP/0.9s   
)r)   rb   rd   flush_headers)r   r   r   r   rE     s    z"BaseHTTPRequestHandler.end_headersc             C   s8   t  |  d  r4 |  j j d j |  j   g  |  _ d  S)Nrb       )rG   rJ   r^   joinrb   )r   r   r   r   rh     s    z$BaseHTTPRequestHandler.flush_headers-c             C   sA   t  | t  r | j } |  j d |  j t |  t |   d  S)Nz
"%s" %s %s)
isinstancer   rg   log_messager.   r+   )r   rT   sizer   r   r   r_     s    		z"BaseHTTPRequestHandler.log_requestc             G   s   |  j  | |  d  S)N)rm   )r   formatargsr   r   r   rM     s    z BaseHTTPRequestHandler.log_errorc             G   s1   t  j j d |  j   |  j   | | f  d  S)Nz%s - - [%s] %s
)sysstderrr^   address_stringlog_date_time_string)r   ro   rp   r   r   r   rm   ,  s    		z"BaseHTTPRequestHandler.log_messagec             C   s   |  j  d |  j S)N )server_versionsys_version)r   r   r   r   r`   B  s    z%BaseHTTPRequestHandler.version_stringc          	   C   ss   | d  k r t  j    } t  j |  \	 } } } } } } } }	 }
 d |  j | | |  j | | | | | f } | S)Nz#%s, %02d %3s %4d %02d:%02d:%02d GMT)timegmtimeweekdayname	monthname)r   Z	timestampyearmonthdayhhmmssZwdyzsr   r   r   ra   F  s    *
z'BaseHTTPRequestHandler.date_time_stringc          	   C   s]   t  j    } t  j |  \	 } } } } } } } }	 }
 d | |  j | | | | | f } | S)Nz%02d/%3s/%04d %02d:%02d:%02d)rx   	localtimer{   )r   Znowr|   r}   r~   r   r   r   xr   r   r   r   r   r   rt   Q  s
    * z+BaseHTTPRequestHandler.log_date_time_stringZMonZTueZWedZThuZFriZSatZSunZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecc             C   s   |  j  d S)Nr   )client_address)r   r   r   r   rs   _  s    z%BaseHTTPRequestHandler.address_stringzHTTP/1.0c             C   s%   i  |  ] } | j  | j f |  q Sr   )phrasedescription).0vr   r   r   
<dictcomp>n  s   	z!BaseHTTPRequestHandler.<dictcomp>)*r   r   r   rq   r?   r/   rw   __version__rv   DEFAULT_ERROR_MESSAGEr[   DEFAULT_ERROR_CONTENT_TYPEr]   r(   rC   r>   rP   rQ   r1   rY   rD   rZ   rE   rh   r_   rM   rm   r`   ra   rt   rz   r{   rs   r5   r7   r8   ZHTTPMessager:   r   __members__valuesrW   r   r   r   r   r      s<   i
b%5		c            	   @   s   e  Z d  Z d e Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z	 d d   Z
 d d   Z e j s} e j   e j j   Z e j d d d d d d d d i  d S)r   zSimpleHTTP/c          
   C   s;   |  j    } | r7 z |  j | |  j  Wd  | j   Xd  S)N)	send_headcopyfilerJ   r&   )r   fr   r   r   do_GET  s
    zSimpleHTTPRequestHandler.do_GETc             C   s    |  j    } | r | j   d  S)N)r   r&   )r   r   r   r   r   do_HEAD  s    z SimpleHTTPRequestHandler.do_HEADc       	      C   s  |  j  |  j  } d  } t j j |  r
t j j |  j  } | j j d  s |  j t	 j
  | d | d | d d | d | d f } t j j |  } |  j d |  |  j   d  SxI d D]4 } t j j | |  } t j j |  r | } Pq W|  j |  S|  j |  } y t | d
  } Wn) t k
 rW|  j t	 j d  d  SYn Xy} |  j t	 j  |  j d |  t j | j    } |  j d t | d   |  j d |  j | j   |  j   | SWn | j     Yn Xd  S)Nr!   r   r   r   r      ZLocation
index.html	index.htmrbzFile not foundzContent-typezContent-Length   zLast-Modified)r   r   )translate_pathr6   osisdirurllibparseZurlsplitendswithrY   r   ZMOVED_PERMANENTLYZ
urlunsplitrZ   rE   rj   existslist_directory
guess_typeopenOSErrorr1   	NOT_FOUNDOKfstatfilenor+   ra   st_mtimer&   )	r   r6   r   partsZ	new_partsZnew_urlindexZctypefsr   r   r   r     sF    
	

z"SimpleHTTPRequestHandler.send_headc             C   s`  y t  j |  } Wn) t k
 r> |  j t j d  d  SYn X| j d d d    g  } y t j j	 |  j
 d d } Wn$ t k
 r t j j	 |  } Yn Xt j |  } t j   } d | } | j d  | j d	  | j d
 |  | j d |  | j d |  | j d  x | D] } t  j
 j | |  } | }	 }
 t  j
 j |  rr| d }	 | d }
 t  j
 j |  r| d }	 | j d t j j |
 d d t j |	  f  q'W| j d  d j |  j | d  } t j   } | j |  | j d  |  j t j  |  j d d |  |  j d t t |    |  j   | S)NzNo permission to list directorykeyc             S   s
   |  j    S)N)r=   )ar   r   r   <lambda>  s    z9SimpleHTTPRequestHandler.list_directory.<locals>.<lambda>errorssurrogatepasszDirectory listing for %szZ<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">z<html>
<head>z@<meta http-equiv="Content-Type" content="text/html; charset=%s">z<title>%s</title>
</head>z<body>
<h1>%s</h1>z	<hr>
<ul>r!   @z<li><a href="%s">%s</a></li>z</ul>
<hr>
</body>
</html>

surrogateescaper   zContent-typeztext/html; charset=%szContent-Length) r   listdirr   r1   r   r   sortr   r   unquoter6   UnicodeDecodeErrorr   escaperq   getfilesystemencodingrd   rj   r   islinkquoter\   ioBytesIOr^   seekrY   r   rZ   r+   r0   rE   )r   r6   listrZdisplaypathenctitlenamefullnameZdisplaynameZlinknameencodedr   r   r   r   r     s\    	
	



	
z'SimpleHTTPRequestHandler.list_directoryc             C   s$  | j  d d  d } | j  d d  d } | j   j d  } y t j j | d d } Wn$ t k
 r t j j |  } Yn Xt j |  } | j  d  } t	 d  |  } t
 j   } xP | D]H } t
 j j |  s | t
 j t
 j f k r q t
 j j | |  } q W| r | d 7} | S)N?r   r   #r!   r   r   )r/   r-   r   r   r   r   r   	posixpathnormpathfilterr   getcwdr6   dirnamecurdirpardirrj   )r   r6   Ztrailing_slashr@   Zwordr   r   r   r     s$    	*
z'SimpleHTTPRequestHandler.translate_pathc             C   s   t  j | |  d  S)N)shutilcopyfileobj)r   sourceZ
outputfiler   r   r   r     s    z!SimpleHTTPRequestHandler.copyfilec             C   sd   t  j |  \ } } | |  j k r/ |  j | S| j   } | |  j k rU |  j | S|  j d Sd  S)Nr%   )r   splitextextensions_mapr=   )r   r6   baseextr   r   r   r   +  s    z#SimpleHTTPRequestHandler.guess_typer%   zapplication/octet-streamz.pyz
text/plainz.cz.hN)r   r   r   r   rv   r   r   r   r   r   r   r   	mimetypesZinitedZinitZ	types_mapcopyr   updater   r   r   r   r   t  s    
	1:	
c       	      C   s+  |  j  d  \ }  } } t j j |   }  |  j d  } g  } xP | d  d  D]> } | d k ro | j   qP | rP | d k rP | j |  qP W| r | j   } | r | d k r | j   d } q | d k r d } n d } | r d j | | f  } d d j |  | f } d j |  } | S)Nr   r!   r   z..r"   r%   )	partitionr   r   r   r/   poprd   rj   )	r6   _query
path_partsZ
head_partspartZ	tail_partZ	splitpathcollapsed_pathr   r   r   _url_collapse_pathP  s.    
		r   c              C   s   t  r
 t  Sy d d  l }  Wn t k
 r2 d SYn Xy |  j d  d a  Wn5 t k
 r d t d d   |  j   D  a  Yn Xt  S)Nr   r   nobodyr   c             s   s   |  ] } | d  Vq d S)r   Nr   )r   r   r   r   r   	<genexpr>  s    znobody_uid.<locals>.<genexpr>r   )r   pwdImportErrorgetpwnamrX   maxgetpwall)r   r   r   r   
nobody_uid  s    	(r   c             C   s   t  j |  t  j  S)N)r   accessX_OK)r6   r   r   r   
executable  s    r   c               @   sy   e  Z d  Z e e d  Z d Z d d   Z d d   Z d d   Z	 d	 d
 g Z
 d d   Z d d   Z d d   Z d S)r   forkr   c             C   s0   |  j    r |  j   n |  j t j d  d  S)NzCan only POST to CGI scripts)is_cgirun_cgir1   r   rH   )r   r   r   r   do_POST  s
    zCGIHTTPRequestHandler.do_POSTc             C   s'   |  j    r |  j   St j |   Sd  S)N)r   r   r   r   )r   r   r   r   r     s    
zCGIHTTPRequestHandler.send_headc             C   sl   t  |  j  } | j d d  } | d  |  | | d d   } } | |  j k rh | | f |  _ d Sd S)Nr!   r   TF)r   r6   findcgi_directoriescgi_info)r   r   Zdir_sepheadtailr   r   r   r     s    %zCGIHTTPRequestHandler.is_cgiz/cgi-binz/htbinc             C   s
   t  |  S)N)r   )r   r6   r   r   r   is_executable  s    z#CGIHTTPRequestHandler.is_executablec             C   s(   t  j j |  \ } } | j   d k S)N.py.pyw)r   r   )r   r6   r   r=   )r   r6   r   r   r   r   r   	is_python  s    zCGIHTTPRequestHandler.is_pythonc       )      C   s  |  j  \ } } | d | } | j d t |  d  } x | d k r | d  |  } | | d d   } |  j |  } t j j |  r | | } } | j d t |  d  } q< Pq< W| j d  \ } } }	 | j d  } | d k r| d  |  | | d   }
 } n | d }
 } | d |
 } |  j |  } t j j |  sl|  j	 t
 j d |  d  St j j |  s|  j	 t
 j d |  d  S|  j |  } |  j s| r|  j |  s|  j	 t
 j d |  d  St j t j  } |  j   | d	 <|  j j | d
 <d | d <|  j | d <t |  j j  | d <|  j | d <t j j |  } | | d <|  j |  | d <| | d <|	 r|	 | d <|  j d | d <|  j j  d  } | r| j!   } t |  d k rd d  l" } d d  l# } | d | d <| d j$   d k ry/ | d j% d  } | j& |  j' d  } Wn | j( t) f k
 rfYn0 X| j! d  } t |  d k r| d | d <|  j j  d  d  k r|  j j*   | d <n |  j d | d <|  j j  d  } | r| | d <|  j j  d   } | r| | d! <g  } xc |  j j+ d"  D]O } | d  d  d# k rd| j, | j-    q2| | d$ d   j! d%  } q2Wd% j. |  | d& <|  j j  d'  } | r| | d( <t/ d  |  j j0 d) g    } d* j. |  } | r| | d+ <x d? D] } | j1 | d  qW|  j2 t
 j3 d-  |  j4   |	 j5 d. d/  } |  j r|
 g } d0 | k rr| j, |  t6   } |  j7 j8   t j9   } | d k rt j: | d  \ } } x9 t; j; |  j< g g  g  d  d r|  j< j= d  sPqW| r
|  j> d1 |  d  Syo y t j? |  Wn t@ k
 r6Yn Xt jA |  j< jB   d  t jA |  j7 jB   d  t jC | | |  Wq|  j jD |  jE |  j  t jF d2  YqXnd d  lG }  | g }! |  j |  r!tH jI }" |" j$   jJ d3  r|" d  d@  |" dA d   }" |" d6 g |! }! d0 |	 k r:|! j, |	  |  jK d7 |  jL |!   y tM |  }# Wn tN tO f k
 rd }# Yn X|  jP |! d8 |  jQ d9 |  jQ d: |  jQ d; | }$ |  j j$   d< k r|# d k r|  j< j= |#  }% n d  }% x? t; j; |  j< jR g g  g  d  d r1|  j< jR jS d  sPqW|$ jT |%  \ }& }' |  j7 jU |&  |' rm|  j> d= |'  |$ jV jW   |$ jX jW   |$ jY }( |( r|  j> d1 |(  n |  jK d>  d  S)BNr!   r   r   r   r%   zNo such CGI script (%r)z#CGI script is not a plain file (%r)z!CGI script is not executable (%r)ZSERVER_SOFTWAREZSERVER_NAMEzCGI/1.1ZGATEWAY_INTERFACEZSERVER_PROTOCOLZSERVER_PORTZREQUEST_METHODZ	PATH_INFOZPATH_TRANSLATEDZSCRIPT_NAMEQUERY_STRINGZREMOTE_ADDRauthorizationr   Z	AUTH_TYPEZbasicascii:ZREMOTE_USERzcontent-typeZCONTENT_TYPEzcontent-lengthCONTENT_LENGTHrefererHTTP_REFERERacceptz	
    ,ZHTTP_ACCEPTz
user-agentHTTP_USER_AGENTZcookiez, HTTP_COOKIEREMOTE_HOSTzScript output follows+ru   =zCGI script exit status %#x   zw.exer    r   z-uzcommand: %sstdinstdoutrr   envZpostz%szCGI script exited OK)r   r	  r  r  r  r  )Zr   r   r0   r   r   r6   r   r   r   r1   r   r   isfileZ	FORBIDDENr   	have_forkr   r   deepcopyenvironr`   Zserverr   r5   r+   r   r'   r   r   r   r   r;   r<   r/   base64binasciir=   r\   ZdecodebytesdecodeErrorUnicodeErrorZget_content_typeZgetallmatchingheadersrd   striprj   r   Zget_all
setdefaultrY   r   rh   r
   r   rJ   rK   r   waitpidselectr9   readrM   setuidr   dup2r   execveZhandle_errorZrequest_exit
subprocessrq   r   r   rm   list2cmdliner3   	TypeErrorr2   PopenPIPE_sockrecvcommunicater^   rr   r&   r  
returncode))r   dirrestr6   iZnextdirZnextrestZ	scriptdirr   r   ZscriptZ
scriptnameZ
scriptfileZispyr  Zuqrestr   r  r  lengthr  r  lineZuacoZ
cookie_strkZdecoded_queryrp   r   pidstsr$  ZcmdlineZinterpnbytespdatar  rr   statusr   r   r   r     s4   $





!



			%						!(	zCGIHTTPRequestHandler.run_cgiN)r   r   r   rG   r   r  Zrbufsizer   r   r   r   r   r   r   r   r   r   r   r     s   zHTTP/1.0i@  r%   c             C   s   | | f } | |  _  | | |   } | j j   } t d | d d | d d  y | j   Wn3 t k
 r t d  | j   t j d  Yn Xd  S)NzServing HTTP onr   r   r   z...z&
Keyboard interrupt received, exiting.)	r5   r   r   printZserve_foreverKeyboardInterruptZserver_closerq   exit)HandlerClassZServerClassprotocolr   bindZserver_addressZhttpdsar   r   r   test  s    	

rA  __main__z--cgiaction
store_truehelpzRun as CGI Serverz--bindz-bdefaultmetavarZADDRESSz8Specify alternate bind address [default: all interfaces]r   storetypenargsr   z&Specify alternate port [default: 8000]r=  r?  )-r   __all__r   Zhttp.clientr7   r   r   r   r   r  r   r   r   rq   rx   Zurllib.parser   r   argparser   r   r   r   r   r   ZStreamRequestHandlerr   r   r   r   r   r   r   rA  r   ArgumentParserparseradd_argumentr3   
parse_argsrp   ZcgiZhandler_classr   r?  r   r   r   r   <module>S   s`    0 
		