
    qimh                        S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJ	r	  SSK
Jr  SSKrSSKJrJr  SSKJrJr  SSKJr  SSKJr  SS	KJr   SS
KJr  SrSr\R@                  " S5      r!S r" " S S\RF                  5      r$S r%S r&S r'S r(S r)S r*S r+S r,S r-S r.\(\)\*\+\,\-\.S.r/S r0\1S:X  a  SSK2J3r3  \3" 5         \0" 5         gg! \ a	    SS
KJr   Nf = f)a:  
server_cli
==========

:Author: Martin Wendt
:Copyright: Licensed under the MIT license, see LICENSE file in this package.

Standalone server that runs WsgiDAV.

These tasks are performed:

    - Set up the configuration from defaults, configuration file, and command line
      options.
    - Instantiate the WsgiDAVApp object (which is a WSGI application)
    - Start a WSGI server for this WsgiDAVApp object

Configuration is defined like this:

    1. Get the name of a configuration file from command line option
       ``--config-file=FILENAME`` (or short ``-cFILENAME``).
       If this option is omitted, we use ``wsgidav.yaml`` in the current
       directory.
    2. Set reasonable default settings.
    3. If configuration file exists: read and use it to overwrite defaults.
    4. If command line options are passed, use them to override settings:

       ``--host`` option overrides ``hostname`` setting.

       ``--port`` option overrides ``port`` setting.

       ``--root=FOLDER`` option creates a FilesystemProvider that publishes
       FOLDER on the '/' share.
    N)pformat)Timer)__version__util)DEFAULT_CONFIGDEFAULT_VERBOSE)FilesystemProvider)
WsgiDAVApp)use_lxml)loadreStructuredText)zwsgidav.yamlzwsgidav.jsonwsgidavc                    [         R                  " U R                  S5      U 5      n[         R                  " U R                  S5      U 5      n[         R                  " U R                  S5      U 5      nU R                  SS5      nSnU(       a
  U(       a  SnOU(       d  U(       a  [        S5      eU(       a  S	OS
nU SU S    SU S    3nUUUUUUUS.nU$ )zCalculate some common info.ssl_certificatessl_private_keyssl_certificate_chainssl_adapterbuiltinFTzEOption 'ssl_certificate' and 'ssl_private_key' must be used together.httpshttpz://host:port)use_sslssl_certssl_pkr   	ssl_chainprotocolurl)r   fix_pathgetRuntimeError)	configr   r   r   r   r   r   r   infos	            N/home/kali/flask_env/lib/python3.13/site-packages/wsgidav/server/server_cli.py_get_common_infor&   D   s     mmFJJ/@$A6JOmmFJJ/@$A6JO MM&**5L*MvV**]I6KG?	OS
 	
 "wvHJc&.)6&>*:
;C#!"*D K    c                   "    \ rS rSrSrSS jrSrg)FullExpandedPathb   zExpand user- and relative-pathsNc                     [         R                  R                  [         R                  R                  U5      5      n[	        X R
                  U5        g N)ospathabspath
expandusersetattrdest)selfparser	namespacevaluesoption_stringnew_vals         r%   __call__FullExpandedPath.__call__e   s1    ''//"''"4"4V"<=	99g.r'    r,   )__name__
__module____qualname____firstlineno____doc__r9   __static_attributes__r;   r'   r%   r)   r)   b   s
    )/r'   r)   c            	         Sn Sn[         R                  " SU US[         R                  S9nUR                  SS[        SS	9  UR                  S
SSS9  UR                  SSS[
        SS9  UR                  SSSS9  UR                  S[        R                  5       SS9  UR                  SSSS9  UR                  5       nUR                  SSSSS S!9  UR                  S"S#S$SS%S&9  UR                  5       nUR                  S'S(S)[
        S*[         S+3S9  UR                  S,S-S.[         3S/9  UR                  S0S-S1S/9  UR                  S2S3S-S4S/9  UR                  5       nU=R                  UR                  -  sl        U?UR                  (       aN  [        R                  R!                  UR                  5      (       d   UR                   S53nUR#                  U5        UR$                  (       a  UR                  S6:  ae  S7R'                  [(        [*        R,                  [.        R0                  S8:  a  S9OS:[2        R2                  " S;S<95      nUS=[.        R4                   3-  nO[(         n[7        U5        [.        R8                  " 5         UR:                  (       a  OUR<                  cw  [         Hl  n[        R                  R?                  U5      n[        R                  RA                  U5      (       d  MH  UR                  S:  a  [7        S>U 35        Xl          O}   Oz[        R                  R?                  UR<                  5      Ul        [        R                  RC                  UR<                  5      (       d  UR#                  S?UR<                   35        URD                  RG                  5       n	UR                  S@:  a6  [7        SA5        U	RI                  5        H  u  p[7        SBU
SC SDU 35        M     X4$ )Ez-Parse command line options into a dictionary.a5  
Run a WEBDAV server to share file system folders.

Examples:

  Share filesystem folder '/temp' for anonymous access (no config file used):
    wsgidav --port=80 --host=0.0.0.0 --root=/temp --auth=anonymous

  Run using a specific configuration file:
    wsgidav --port=80 --host=0.0.0.0 --config=~/my_wsgidav.yaml

  If no config file is specified, the application will look for a file named
  'wsgidav.yaml' in the current directory.
  See
    http://wsgidav.readthedocs.io/en/latest/run-configure.html
  for some explanation of the configuration file format.
  zbLicensed under the MIT license.
See https://github.com/mar10/wsgidav for additional information.

r   F)progdescriptionepilogallow_abbrevformatter_classz-pz--portz port to serve on (default: 8080))typehelpz-Hz--hostzhost to serve from (default: localhost). 'localhost' is only accessible from the local computer. Use 0.0.0.0 to make your application public)rI   z-rz--root	root_pathz<path to a file system folder to publish for RW as share '/'.)r2   actionrI   z--auth)	anonymousnt	pam-loginzFquick configuration of a domain controller when no config file is used)choicesrI   z--serverz<type of pre-installed WSGI server to use (default: cheroot).z--ssl-adapter)r   	pyopensslzOused by 'cheroot' server if SSL certificates are configured (default: builtin).z-vz	--verbosecount   z>increment verbosity by one (default: %(default)s, range: 0..5))rK   defaultrI   z-qz--quietr   zdecrement verbosity by one)rS   rK   rI   z-cz--configconfig_filezconfiguration file (default: z in current directory)z--no-config
store_truezdo not try to load default )rK   rI   z--browsezopen browser on startz-Vz	--versionz<print version info and exit (may be combined with --verbose)z is not a directory   zWsgiDAV/{} Python/{}({} bit) {}l        6432T)aliasedz
Python from: z"Using default configuration file: z-Could not find specified configuration file:    zCommand line args:z    z>12z: )%argparseArgumentParserRawTextHelpFormatteradd_argumentintr)   SUPPORTED_SERVERSkeysadd_mutually_exclusive_groupDEFAULT_CONFIG_FILES
parse_argsverbosequietrJ   r-   r.   isdirerrorversionformatr   r   PYTHON_VERSIONsysmaxsizeplatform
executableprintexit	no_configrT   r/   existsisfile__dict__copyitems)rD   rE   r4   qv_groupargsmsgversion_infofilenamedefPathcmdLineOptskvs               r%   _init_command_line_optionsr   j   s   K&F $$ 55F /   !	   K   0   !&&(K	   (	   224HM   i79U   224H+,@+AAWX   *+?*@A   $   K	   DLLDJJL
~~bggmmDNN;;  34S||<<1<CC##e+!!$/	L ocnn-=>>L)]Ll
~~				!,Hggooh/Gww~~g&&<<1$>wiHI#*  - 77??4+;+;<ww~~d..//LL?@P@P?QR
 --$$&K||q"#%%'DAD3r!%& (r'   c                 D   [         R                  R                  U 5      n [         R                  R                  U 5      (       d  [	        SU < S35      eU R                  S5      (       a  [        U SS9 n[        U5      nSSS5        ONU R                  S5      (       a*  [        U SS9 n[        R                  " U5      nSSS5        O[	        SU  35      eU WS	'   [         R                  R                  U 5      US
'   U$ ! , (       d  f       N7= f! , (       d  f       NH= f)z2Read configuration file options into a dictionary.z!Couldn't open configuration file .z.jsonz	utf-8-sig)encodingNz.yamlz8Unsupported config file format (expected yaml or json): _config_file_config_root)r-   r.   r/   rs   r"   endswithopen	json_loadyaml	safe_loaddirname)rT   _verbosefpconfs       r%   _read_config_filer     s     ''//+.K77>>+&&>{oQOPPG$$+4R=D 54 
		g	&	&+4>>"%D 54 F{mT
 	
 'D77??;7DK 54 54s   4D )D 
D
Dc                     [        5       u  pU S   n[        R                  " [        5      nSUS'   [        R
                  " 5       US'   U R                  S5      nU(       aZ  [        XB5      n[        R                  " X55        U[        :w  a.  SU;   a(  US:  a  [        SR                  US   U5      5        X#S'   OUS:  a  [        S5        U R                  S	5      (       a  U R                  S	5      US	'   U R                  S
5      (       a  U R                  S
5      US
'   U R                  S5      b  SUS'   U R                  S5      b  U R                  S5      US'   U R                  S5      b  U R                  S5      US'   U R                  S5      [        :w  a  U R                  S5      US'   U R                  S5      (       aM  [        R                  R                  U R                  S5      5      n[        UUR                  S5      S9US   S'   US   S:  a=  [        R                   " U5      n[        SR                  U S   [#        U5      5      5        US   (       d  UR%                  S5        U R                  S5      n[        R&                  " USSS9n	U(       a'  U	R                  S5      (       a  UR%                  S5        US:X  a?  US   S   (       a  UR%                  S5        U	R)                  S SSSS!.5        S"S0US   S'   OUS#:X  aC  UR                  S$5      (       a  UR%                  S%5        U	R)                  S&SS'S'S!.5        0 US$'   OJUS(:X  aD  UR                  S)5      (       a  UR%                  S*5        U	R)                  S+SS'S'S!.5        S,S-0US)'   US.   (       a*  S/[        l        S0[,        R.                  S1    3[        l        X4$ )2zQSetup configuration dictionary from default, command line and configuration file.re   Nr   r   rT      zHConfig file defines 'verbose: {}' but is overridden by command line: {}.z#Running without configuration file.r   r   profileTserverr   rJ   fs_dav_provider)fs_optsprovider_mapping/rZ   zConfiguration({}):
{}zNo DAV provider defined.authhttp_authenticatoras_dictdomain_controllerzF--auth option can only be used when no domain_controller is configuredrL   	simple_dcuser_mappingzD--auth=anonymous can only be used when no user_mapping is configuredz+wsgidav.dc.simple_dc.SimpleDomainController)r   accept_basicaccept_digestdefault_to_digest*rM   nt_dcz@--auth=nt can only be used when no nt_dc settings are configuredz#wsgidav.dc.nt_dc.NTDomainControllerFrN   pam_dczH--auth=pam-login can only be used when no pam_dc settings are configuredz%wsgidav.dc.pam_dc.PAMDomainControllerserviceloginsuppress_version_infoWsgiDAVzPython/r   )r   rv   deepcopyr   r-   getcwdr!   r   r   deep_updater   rp   rj   r.   r/   r	   purge_passwordsr   rh   get_dict_valueupdatepublic_wsgidav_inforl   r{   public_python_info)
cli_optsr4   cli_verboser#   rT   	file_optsrJ   config_cleanedr   	auth_confs
             r%   _init_configr   /  s   13H9%K ]]>*F!F>YY[F> ,,}-K%k?	+/)i9.Da^ee!),k
 !,9!78 ||F!f-v||F!f-v||I* y||H)#<<1x||M". (] ;} ||I/1$LL3y||K  GGOOHLL$=>	*<JJ01+
!"3'
 iA--f5$++')@	
 $%/0 <<D##F,@$OI	122T	
 {+~.LLV 	%R $!%%)		
 03Dk{N+	::gLLR 	%J $!&%*		
 w		::hLLZ 	%L $!&%*		
 &w/x %&#, $+C,<,<Q,?+@"Ar'   c                   ^  SSK JnJn  [        R                   SUR                  R                   S[        R                   3n[        U5      nUS   (       aP  US   nUR                  U5      nU" US	   US
   US   5      UR                  l        [        R                  SU 35        [        R                  SU 35        [        R                  SUS    S35        US   US   4U USS.n[        R                   " USSS9n	UR#                  U	5         " U4S jSUR                  5      n
UR%                  S5      mT(       a	  U
" S0 UD6nOUR                  " S0 UD6n UR'                  5         UR-                  5         g! [         a-    [        R                  S5        [        R                  S5         gf = f! [(         a    [        R+                  S5         Nlf = f! UR-                  5         f = f)zARun WsgiDAV using cheroot.server (https://cheroot.cherrypy.dev/).r   )r   wsgiz9Could not import Cheroot (https://cheroot.cherrypy.dev/).zTry `pip install cheroot`.F r   r   r   r   r   zSSL / HTTPS enabled. Adapter: Running Serving on r    ...r   r   2   )	bind_addrwsgi_appserver_name
numthreadsserver_argsTr   c                   0   >^  \ rS rSrSrU U4S jrSrU =r$ )#_run_cheroot.<locals>.PatchedServeri  g      ?c                   > [         R                  S5        T(       aX  TR                  5       (       dC  [        U R                  TR
                  5      R                  5         [         R                  S5        [        TU ]   " U0 UD6$ )Nzwsgi.Server.servezwsgi.Server is ready)	_loggerrh   is_setr   STARTUP_NOTIFICATION_DELAYsetstartsuperserve)r3   ry   kwargs	__class__startup_events      r%   r   )_run_cheroot.<locals>.PatchedServer.serve  sa    MM-.]%9%9%;%;d55}7H7HIOOQ457=$1&11r'   r;   )r<   r=   r>   r?   r   r   rA   __classcell__)r   r   s   @r%   PatchedServerr     s    %("	2 	2r'   r   r   Caught Ctrl-C, shutting down...Nr;   )cherootr   r   ImportErrorr   	exceptionrh   r   r   Serverri   r   r&   get_ssl_adapter_classr   r$   r   r   r!   r   KeyboardInterruptwarningstop)appr#   _serverr   r   ri   r$   r   r   custom_argsr   r   s              @r%   _run_cherootr     s   ( ##
$Adkk&9&9%:!D<S<S;TU 
 F#D I=)22;?"-d8nd;.?#
 	5k]CDLL8G9%&LL;tE{m401 VnfVn5K %%fmTJK{#2 2 JJ/M--+{+ 	
y  UV23n  ;9:; 	s5   F  F; 4F87F8;GG  GG   G2c                     SSK Jn  [        R                  S5         UR	                  X5        g! [
         a    [        R                  S5         gf = f)z@Run WsgiDAV using ext_wsgiutils_server from the wsgidav package.r   )ext_wsgiutils_serverzQWARNING: This single threaded server (ext-wsgiutils) is not meant for production.r   N)wsgidav.serverr   r   r   r   r   )r   r#   r   r   s       r%   _run_ext_wsgiutilsr     sM    3OO[;""6/   ;9:
;s   / AAc                 j  ^
^^  SSK nSSKnSSKJn  UR                  R                  5         [        U5      nSUR                   3n[        R                   SU S[        R                   3nU US	   US
   4S.n[        R                  " USSS9nUR!                  U5        US   (       a  U" US   U US   US   US   S9m
OU" US   U 5      m
UR#                  S5      mT(       a  U
UU4S jn	T
R$                  mU	T
l        [
        R'                  SU 35        [
        R'                  SUS    S35         UR)                  T
R+                  5       5        g! [         a-    [
        R                  S5        [
        R                  S5         gf = f! [,         a    [
        R/                  S5         gf = f)zRun WsgiDAV using gevent if gevent (https://www.gevent.org).

See
  https://github.com/gevent/gevent/blob/master/src/gevent/pywsgi.py#L1356
  https://github.com/gevent/gevent/blob/master/src/gevent/server.py#L38
for more options.
r   N)
WSGIServerz0Could not import gevent (http://www.gevent.org).zTry `pip install gevent`.Fzgevent/r   r   r   )r   r   r   Tr   r   r   r   r   r   keyfilecertfileca_certsr   c                  l   > TT l         T" 5         [        R                  S5        TR                  5         g )Nzgevent is ready)start_acceptingr   r$   r   )
dav_server	org_startr   s   r%   _patched_start#_run_gevent.<locals>._patched_start3  s)    )2J&KLL*+r'   r   r   r   r   r   )geventgevent.monkeygevent.pywsgir   r   r   r   rh   monkey	patch_allr&   r   r   r   r   r   r   r!   r   r$   spawnserve_foreverr   r   )r   r#   r   r   r   r$   ri   r   r   r   r   r   r   s             @@@r%   _run_geventr     s   , MMF#D**+,G))*!G9Ad6M6M5NOG VnfVn5K %%fmTJK{#I$N*%+&

  K 8#>
 JJ/M	  ..	%3
"LL8G9%&LL;tE{m401;Z--/0 e  LM12`  ;9:
;s#   E 6F 4FFF21F2c                     SSK n[        U5      n " S SUR                  R                  R                  5      nSR                  US	   US
   5      SSS.nUS   (       a  UR                  US   US   US   S.5        [        R                  " USSS9nUR                  U5        SUR                   3n[        R                   SU S[        R                   3n[        R!                  SU S35        U" X5      R#                  5         g! [         a-    [        R                  S5        [        R	                  S5         gf = f)z2Run WsgiDAV using Gunicorn (https://gunicorn.org).r   Nz1Could not import Gunicorn (https://gunicorn.org).z'Try `pip install gunicorn` (UNIX only).Fc                   8   ^  \ rS rSrSU 4S jjrS rS rSrU =r$ )*_run_gunicorn.<locals>.GunicornApplicationiP  c                 N   > U=(       d    0 U l         Xl        [        TU ]  5         g r,   )optionsapplicationr   __init__)r3   r   r   r   s      r%   r   3_run_gunicorn.<locals>.GunicornApplication.__init__Q  s    "=bDL"Gr'   c                 2   U R                   R                  5        VVs0 s H'  u  pXR                  R                  ;   d  M   Uc  M%  X_M)     nnnUR                  5        H/  u  pU R                  R	                  UR                  5       U5        M1     g s  snnf r,   )r   rw   cfgsettingsr   lower)r3   keyvaluer#   s       r%   load_config6_run_gunicorn.<locals>.GunicornApplication.load_configV  s     #',,"4"4"6"6JC((+++ 05 
"6  
 %lln
SYY[%0 -s   BBBc                     U R                   $ r,   )r   )r3   s    r%   r   /_run_gunicorn.<locals>.GunicornApplication.load_  s    ###r'   )r   r   r,   )	r<   r=   r>   r?   r   r  r   rA   r   )r   s   @r%   GunicornApplicationr   P  s    	
	1	$ 	$r'   r  z{}:{}r   r   r   i  )bindthreadstimeoutr   r   r   r   r   r   Tr   z	gunicorn/r   r   r   )gunicorn.app.baser   r   r   rh   r&   r   baseBaseApplicationrj   r   r   r   r   r   r   r$   run)	r   r#   r   gunicornr$   r  r   r   ri   s	            r%   _run_gunicornr  E  s<     F#D$hll//?? $( vf~vf~>K
 I> , -		
 %%fmTJK{#(../0G))*!G9Ad6M6M5NOGLL8G9D)*)--/e  MN?@s   D
 
4E Ec           	        ^	  SSK Jn  [        U5      nUR                  R                  n[        R                   SU S[        R                   3nUR                  U US   US   US	SS
9nUS   S:  a,  UR                  R                  m	U	4S jnXbR                  l        [        R                  SU S35        UR                   u  pxUS:X  a  [        R                  SU SU 35        O[        R                  SUS    35         UR#                  5         g! [         a-    [        R	                  S5        [        R                  S5         gf = f! [$         a    [        R'                  S5         gf = f)zRun WsgiDAV using paste.httpserver, if Paste is installed.

See http://pythonpaste.org/modules/httpserver.html for more options
r   )
httpserverzCCould not import paste.httpserver (https://github.com/cdent/paste).zTry `pip install paste`.Fr   r   r   zHTTP/1.1)r   r   server_versionprotocol_version
start_loopre   rZ   c                    > T" U 5        U R                   S:X  a  [        R                  S5        g [        R                  S5        g )N   zHTTP Connection : closezHTTP Connection : continue)close_connectionr   debug)r3   __handle_one_requests    r%   handle_one_request&_run_paste.<locals>.handle_one_request  s3     &$$)78:;r'   r   r   0.0.0.0zServing on 0.0.0.0:z view at http://127.0.0.1:r   r   r   N)paster  r   r   r   rh   r&   WSGIHandlerr  r   r   r   r   RequestHandlerClassr  r$   server_addressr   r   r   )
r   r#   r   r  r$   ri   r  r   r   r  s
            @r%   
_run_paster&  ~  sz   
$ F#D$$33G))*!G9Ad6M6M5NOG F^F^#  F iA%99LL	< 9K""5LL8G9D)*&&JDy*4&0J4&QR{4;-01; ]  Q	
 	01X  ;9:
;s#   D E 4EEE10E1c                     SSK n[        U5      nSUS   US   S	.nUS
   (       a  UR                  US   US   US   S.5        [        R                  " USSS9nUR                  U5        SUR                   3n[        R                   SU S[        R                   3n[        R                  SU S35        UR                  " U 40 UD6  g! [         a-    [        R                  S5        [        R	                  S5         gf = f)z4Run WsgiDAV using Uvicorn (https://www.uvicorn.org).r   Nz3Could not import Uvicorn (https://www.uvicorn.org).zTry `pip install uvicorn`.Fr   r   r   )	interfacer   r   r   r   r   r   )ssl_keyfilessl_certfilessl_ca_certsr   Tr   zuvicorn/r   r   r   )uvicornr   r   r   rh   r&   r   r   r   r   r   r   r$   r  )r   r#   r   r,  r$   r   r   ri   s           r%   _run_uvicornr-    s    F#D vvK I#H~ $Z 0 $[ 1
	
 %%fmTJK{#,,-.G))*!G9Ad6M6M5NOGLL8G9D)*KK#{#E  OP23s   C 4DDc                 J   SSK JnJn  UR                  n[        R
                   SU 3n[        R                  SU S35        [        R                  S5        XSl        U" US   US   U 5      n UR                  5         g
! [         a    [        R                  S	5         g
f = f)zYRun WsgiDAV using wsgiref.simple_server (https://docs.python.org/3/library/wsgiref.html).r   )WSGIRequestHandlermake_serverr   r   r   zKWARNING: This single threaded server (wsgiref) is not meant for production.r   r   r   N)wsgiref.simple_serverr/  r0  r  r   r   r   r$   r   r   r   )r   r#   r   r/  r0  ri   httpds          r%   _run_wsgirefr3    s    E //G))*!G95GLL8G9D)*OOU )0%vv<E;   ;9:
;s   /B   B"!B")r   zext-wsgiutilsr   r  r"  r,  wsgirefc            	        ^ [        5       u  pSUS   S'   [        U5      m[        U5      nUS   n[        R	                  U5      nU(       d<  [        SR                  USR                  [        R                  5       5      5      5      e[        (       d  US   S:  a  [        R                  S	5        U S
   (       a!  SnU4S jn[        XV5      R                  5         U" X!U5        g )NTloggingenabler   z,Unsupported server type {!r} (expected {!r})z', 're   rR   zCould not import lxml: using xml instead (up to 10% slower). Consider `pip install lxml`(see https://pypi.python.org/pypi/lxml).browseg       @c                     > TS   n U R                  SS5      n [        R                  SU  S35        [        R                  " U 5        g )Nr   r!  z	127.0.0.1zStarting browser on r   )replacer   r$   
webbrowserr   )r   r$   s    r%   _workerrun.<locals>._worker  s>    u+C++i5CLL/uD9:OOC r'   )r   r&   r
   r`   r!   r"   rj   joinra   r   r   r   r   r   )r   r#   r   r   handlerBROWSE_DELAYr<  r$   s          @r%   r  r    s    #~H #'F9hF#D
V
CHF##F+G:AA$5$:$:$<=
 	
 8y)Q.R	

 	! 	l$**,C 
r'   __main__)freeze_support)4r@   r[   rv   r6  r-   rn   rl   r;  pprintr   	threadingr   r   r   r   r   wsgidav.default_confr   r   wsgidav.fs_dav_providerr	   wsgidav.wsgidav_appr
   wsgidav.xml_toolsr   pyjson5r   r   r   json5__docformat__rc   	getLoggerr   r&   Actionr)   r   r   r   r   r   r   r  r&  r-  r3  r`   r  r<   multiprocessingrB  r;   r'   r%   <module>rO     s	   D    	  
     % @ 6 * &()
 # 8 


I
&</x /hV4AH@F>B60r5p&$R, ' %P z.E _  ('(s   C CC