
    Xho              
       	   d 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dlmZ ddlmZ ddlmZ 	 ddlmZ 	 ddlmZ  e ej$                  d	            Z e       Zg d
Zej.                  dk(  Zej.                  dk(  Zej4                  j7                  d      Zej4                  j7                  d      ZeZej4                  j7                  d      Zej4                  j7                  d      Z ej4                  j7                  d      Z!exs e xs e!Z"ej4                  j7                  d      Z#ej4                  j7                  d      Z$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0d Z1d!Z2d"Z3d#Z4d$Z5d%Z6d&Z7d'Z8d(Z9d)Z:d*Z;d+Z<d,Z=d-Z> G d. d/ej~                        Z@ eA       j                  e@j                          G d0 d1ej~                        ZD eA       j                  eDj                          ej                         ZF ej                         ZH e
d2g d3      ZI e
d4g d5      ZJ e
d6g d7      ZK e
d8g d9      ZL e
d:g d;      ZM e
d<g d=      ZN e
d>g d?      ZO e
d@g dA      ZP e
dBg dC      ZQ e
dDg dE      ZR e
dFg dG      ZS e
dHg dI      ZT e
dJg dK      ZU e
dLdMdNg      ZV e
dOg dP      ZW e
dQdRdSg      ZX e
dTg dU      ZY e
dVg dW      ZZ e
dXg dW      Z[ e
dYg dZ      Z\ e
d[d\d]g      Z] e
d^d_d`g      Z^ e
dag db      Z_ e
dcdddeg      Z`eeegeegfeegegfegegfeegegfegegfeegeegfegeegfegeegfdfZaeeaj                  egegfegegfdg       ee#seaj                  dhegeegfi        G di djeb      Zc G dk dlec      Zd G dm dned      Ze G do dpec      Zf G dq drec      ZgddsZhdt Zidu Zjdv Zkdw Zleidx        Zmdy Zndz Zod{ Zpdd|Zqd} Zrd~ Zs G d d      Ztd Zu et       Zvevj                  eu_w        evj                  eu_x        dZyd Zzd Z{ee{fdZ|efdZ}ddZ~d Zd Zeiej                  fd       ZddZddej                  fdZd Zy# e$ r dZY 5w xY w# e$ r dZY <w xY w)zCommon objects shared by __init__.py and _ps*.py modules.

Note: this module is imported by setup.py, so it should not import
psutil or third-party modules.
    N)
namedtuple)AF_INET)
SOCK_DGRAM)SOCK_STREAM)AF_INET6)AF_UNIXPSUTIL_DEBUG)RFREEBSDBSDLINUXNETBSDOPENBSDMACOSOSXPOSIXSUNOSWINDOWS
CONN_CLOSECONN_CLOSE_WAITCONN_CLOSINGCONN_ESTABLISHEDCONN_FIN_WAIT1CONN_FIN_WAIT2CONN_LAST_ACKCONN_LISTEN	CONN_NONECONN_SYN_RECVCONN_SYN_SENTCONN_TIME_WAITNIC_DUPLEX_FULLNIC_DUPLEX_HALFNIC_DUPLEX_UNKNOWNSTATUS_DEADSTATUS_DISK_SLEEPSTATUS_IDLESTATUS_LOCKEDSTATUS_RUNNINGSTATUS_SLEEPINGSTATUS_STOPPEDSTATUS_SUSPENDEDSTATUS_TRACING_STOPSTATUS_WAITINGSTATUS_WAKE_KILLSTATUS_WAKINGSTATUS_ZOMBIESTATUS_PARKEDENCODINGENCODING_ERRSr   pconn	pcputimespctxswpgidspiopionice	popenfilepthreadpuidssconn	scpustatssdiskio	sdiskpart
sdiskusagesnetiosnicaddr	snicstatssswapsuser	conn_tmapdeprecated_methodisfile_strictmemoizeparse_environ_blockpath_exists_strictusage_percentsupports_ipv6sockfam_to_enumsocktype_to_enumwrap_numbers	open_textopen_binarycatbcatbytes2humanconn_to_ntupledebughiliteterm_supports_colorsprint_colorposixntlinuxdarwin)freebsdmidnightbsdopenbsdnetbsd)sunossolarisaixrunningsleepingz
disk-sleepstoppedztracing-stopzombiedeadz	wake-killwakingidlelockedwaiting	suspendedparkedESTABLISHEDSYN_SENTSYN_RECV	FIN_WAIT1	FIN_WAIT2	TIME_WAITCLOSE
CLOSE_WAITLAST_ACKLISTENCLOSINGNONEc                       e Zd ZdZdZdZy)	NicDuplex      r   N)__name__
__module____qualname__r    r!   r"        Z/var/www/html/cjf29f/d23bf782/d32178f2/venv/lib/python3.12/site-packages/psutil/_common.pyr~   r~      s    OOr   r~   c                       e Zd ZdZdZy)BatteryTimeN)r   r   r   POWER_TIME_UNKNOWNPOWER_TIME_UNLIMITEDr   r   r   r   r      s    r   r   rD   )totalusedfreepercentsinsoutr@   )r   r   r   r   r>   )
read_countwrite_count
read_byteswrite_bytes	read_time
write_timer?   )device
mountpointfstypeoptsrA   )
bytes_sent
bytes_recvpackets_sentpackets_recverrinerroutdropindropoutrE   )nameterminalhoststartedpidr<   )fdfamilytypeladdrraddrstatusr   rB   )r   addressnetmask	broadcastptprC   )isupduplexspeedmtuflagsr=   )ctx_switches
interruptssoft_interruptssyscallsscpufreq)currentminmaxshwtemp)labelr   highcriticalsbattery)r   secsleftpower_pluggedsfanr   r   r4   )usersystemchildren_userchildren_systemr9   pathr   r:   )id	user_timesystem_timer;   )real	effectivesavedr6   r7   )r   r   r   r   r8   ioclassvaluer5   	voluntaryinvoluntaryr3   )r   r   r   r   r   r   addripport)alltcptcp4udpudp4inetinet4inet6)tcp6udp6unixc                   &    e Zd ZdZdZd Zd Zd Zy)ErrorzQBase exception class. All other psutil exceptions inherit
    from this one.
    psutilc                 |    t        j                         }|D ]"  }t        | |d       }|s|dk(  s|dk(  s|||<   $ |S )Nr   r   )collectionsOrderedDictgetattr)selfattrsinfor   r   s        r   	_infodictzError._infodict  sL    &&( 	#DD$-E5A:"T
	# r   c                 .   | j                  d      }|rGdj                  dj                  |j                         D cg c]  \  }}| d| c}}            }nd }dj                  t	        | dd      |fD cg c]  }|s|	 c}      S c c}}w c c}w )N)r   ppidr   z({}), = msg )r   formatjoinitemsr   )r   r   kvdetailsxs         r   __str__zError.__str__  s    ~~56mm		DJJLADAqaS!<ABG GxxWT5"%=w$GMq1MNN	 B Ns   B9BBc           	          | j                  d      }dj                  |j                         D cg c]  \  }}| d| c}}      }d| j                  j                   d| dS c c}}w )N)r   r   r   secondsr   r   r   zpsutil.())r   r   r   	__class__r   )r   r   r   r   r   s        r   __repr__zError.__repr__  sd    ~~GH))djjlCdas!A5\CD0017)1== Ds   A&
N)r   r   r   __doc__r   r   r  r   r   r   r   r     s     J	O>r   r   c                   "    e Zd ZdZdZddZd Zy)NoSuchProcesszXException raised when a process with a certain PID doesn't
    or no longer exists.
    r   Nc                 `    t         j                  |        || _        || _        |xs d| _        y )Nzprocess no longer existsr   __init__r   r   r   r   r   r   r   s       r   r  zNoSuchProcess.__init__-  s)    t	44r   c                 `    | j                   | j                  | j                  | j                  ffS Nr  r   r   r   r   s    r   
__reduce__zNoSuchProcess.__reduce__3  $    499dhh ?@@r   NNr   r   r   r  r  r  r   r   r   r  r  &  s     J5Ar   r  c                   "    e Zd ZdZdZddZd Zy)ZombieProcessa1  Exception raised when querying a zombie process. This is
    raised on macOS, BSD and Solaris only, and not always: depending
    on the query the OS may be able to succeed anyway.
    On Linux all zombie processes are querable (hence this is never
    raised). Windows doesn't have zombie processes.
    r   Nc                 X    t         j                  | |||       || _        |xs d| _        y )Nz"PID still exists but it's a zombie)r  r  r   r   )r   r   r   r   r   s        r   r  zZombieProcess.__init__A  s*    tS$4	>>r   c                 v    | j                   | j                  | j                  | j                  | j                  ffS r  )r  r   r   r   r   r  s    r   r  zZombieProcess.__reduce__F  s*    499dii JKKr   NNNr  r   r   r   r  r  7  s     J?
Lr   r  c                   "    e Zd ZdZdZddZd Zy)AccessDeniedz@Exception raised when permission to perform an action is denied.r   Nc                 `    t         j                  |        || _        || _        |xs d| _        y )Nr   r
  r  s       r   r  zAccessDenied.__init__O  s'    t	9"r   c                 `    | j                   | j                  | j                  | j                  ffS r  r  r  s    r   r  zAccessDenied.__reduce__U  r  r   r  r  r   r   r   r  r  J  s    JJAr   r  c                   "    e Zd ZdZdZddZd Zy)TimeoutExpiredzWRaised on Process.wait(timeout) if timeout expires and process
    is still alive.
    r   Nc                 n    t         j                  |        || _        || _        || _        d| d| _        y )Nztimeout after z seconds)r   r  r  r   r   r   )r   r  r   r   s       r   r  zTimeoutExpired.__init__`  s3    t	#G9H5r   c                 `    | j                   | j                  | j                  | j                  ffS r  )r  r  r   r   r  s    r   r  zTimeoutExpired.__reduce__g  s$    txx CDDr   r  r  r   r   r   r  r  Y  s     J6Er   r  c                 d    	 t        |       |z  dz  }|t        ||      }|S # t        $ r Y yw xY w)z5Calculate percentage usage of 'used' against 'total'.d   g        )floatroundZeroDivisionError)r   r   round_rets       r   rL   rL   p  sG    T{U"c) V$C
  s   # 	//c                 b     t        j                          fd       }fd}i ||_        |S )a  A simple memoize decorator for functions supporting (hashable)
    positional arguments.
    It also provides a cache_clear() function for clearing the cache:

    >>> @memoize
    ... def foo()
    ...     return 1
        ...
    >>> foo()
    1
    >>> foo.cache_clear()
    >>>

    It supports:
     - functions
     - classes (acts as a @singleton)
     - staticmethods
     - classmethods

    It does NOT support:
     - methods
    c                      | t        t        |j                                     f}	 |   S # t        $ r( 	  | i |x}|<   n# t        $ r}|d d }~ww xY w|cY S w xY wr  )	frozensetsortedr   KeyError	Exception)argskwargskeyr(  errcachefuns        r   wrapperzmemoize.<locals>.wrapper  su    Yvflln567	: 	$#&#7#77eCj $t#$J	s2   , 	AAA	AAAAAc                  &     j                          y)zClear cache.N)clear)r3  s   r   cache_clearzmemoize.<locals>.cache_clear  s    r   )	functoolswrapsr8  )r4  r5  r8  r3  s   `  @r   rI   rI   |  s9    0 __S	 	 E%GNr   c                 j     t        j                          fd       }d }d }||_        ||_        |S )a  A memoize decorator which is disabled by default. It can be
    activated and deactivated on request.
    For efficiency reasons it can be used only against class methods
    accepting no arguments.

    >>> class Foo:
    ...     @memoize
    ...     def foo()
    ...         print(1)
    ...
    >>> f = Foo()
    >>> # deactivated (default)
    >>> foo()
    1
    >>> foo()
    1
    >>>
    >>> # activated
    >>> foo.cache_activate(self)
    >>> foo()
    1
    >>> foo()
    >>> foo()
    >>>
    c                    	 | j                      }|S # t        $ r  	  |       cY S # t        $ r}|d d }~ww xY wt        $ rC 	  |       }n# t        $ r}|d d }~ww xY w	 || j                   <   Y |S # t        $ r Y Y |S w xY ww xY wr  )_cacheAttributeErrorr.  r-  )r   r(  r2  r4  s      r   r5  z'memoize_when_activated.<locals>.wrapper  s    	++c"C( 
'  	$$4y  $t#$ 	$$i $t#$#&C 
 
	 "  
		se    	B(B	949BAB	AAAB#A55	B>BBBc                     i | _         y)zsActivate cache. Expects a Process instance. Cache will be
        stored as a "_cache" instance attribute.
        N)r=  procs    r   cache_activatez.memoize_when_activated.<locals>.cache_activate  s     r   c                 (    	 | ` y# t        $ r Y yw xY w)zDeactivate and clear cache.N)r=  r>  r@  s    r   cache_deactivatez0memoize_when_activated.<locals>.cache_deactivate  s    	 		s    	)r9  r:  rB  rD  )r4  r5  rB  rD  s   `   r   memoize_when_activatedrE    sA    6 __S 2 ,G/GNr   c                     	 t        j                  |       }t        j                  |j                        S # t        $ r  t
        $ r Y yw xY w)zSame as os.path.isfile() but does not swallow EACCES / EPERM
    exceptions, see:
    http://mail.python.org/pipermail/python-dev/2012-June/120787.html.
    F)osstatS_ISREGst_modePermissionErrorOSError)r   sts     r   rH   rH     sH    
(WWT] ||BJJ''   s   6 A
Ac                 `    	 t        j                  |        y# t        $ r  t        $ r Y yw xY w)zSame as os.path.exists() but does not swallow EACCES / EPERM
    exceptions. See:
    http://mail.python.org/pipermail/python-dev/2012-June/120787.html.
    TF)rG  rH  rK  rL  )r   s    r   rK   rK     s6    

    s    --c                      t         j                  rt        y	 t        j                   t        t         j                        5 } | j	                  d       ddd       y# 1 sw Y   yxY w# t
        $ r Y yw xY w)z2Return True if IPv6 is supported on this platform.NF)z::1r   T)sockethas_ipv6r   r   bindrL  )socks    r   rM   rM     sa     ??h.]]8V%7%78 	"DIIj!	"	" s/   (A( AA( A%!A( %A( (	A43A4c                     i }d}t         }	 | j                  d|      }||k  r	 |S | j                  d||      }||kD  r$| || }| |dz   | }|r|j                         }|||<   |dz   }\)zCParse a C environ block of environment variables into a dictionary.r    r   r   )r   findupper)datar(  posWINDOWS_next_pos	equal_posr1  r   s           r   rJ   rJ     s     C
C H
99T3's? J IIc31	s?s9%CQ2EiikCHl r   c                 P    	 t        j                  |       S # t        $ r | cY S w xY w)zConvert a numeric socket family value to an IntEnum member.
    If it's not a known member, return the numeric value itself.
    )rP  AddressFamily
ValueErrornums    r   rN   rN   7  s,    ##C(( 
    %%c                 P    	 t        j                  |       S # t        $ r | cY S w xY w)zConvert a numeric socket type value to an IntEnum member.
    If it's not a known member, return the numeric value itself.
    )rP  
SocketKindr_  r`  s    r   rO   rO   A  s,      %% 
rb  c           	      H   |t         j                  t        hv r|rt        | }|rt        | }|t         j                  k(  r%|t        t        hv r|j                  |t              }nt        }t        |      }t        |      }|t        | |||||      S t        | ||||||      S )z2Convert a raw connection tuple to a proper ntuple.)rP  r   r   r   r   getr   rN   rO   r3   r<   )r   famtype_r   r   r   
status_mapr   s           r   rV   rV   K  s    
v~~x((%LE%LE"""sw.A'A	2
#
CU#E
{ReUE6::ReUE63??r   c                    ddl }| j                  r| j                  sy| j                  t        j
                  k(  r?t        |j                  | j                   d| j                   d      j                        S | j                  t        j                  k(  r?t        |j                  | j                   d| j                   d      j                        S y)zbGiven the address ntuple returned by ``net_if_addrs()``
    calculates the broadcast address.
    r   N/F)strict)	ipaddressr   r   r   rP  r   strIPv4Networkbroadcast_addressr   IPv6Network)r   rm  s     r   broadcast_addrrr  ^  s     <<t||{{fnn$!!<<.$,,0 " 
 	

 {{foo%!!<<.$,,0 " 
 	
 &r   c                       fd}|S )zA decorator which can be used to mark a method as deprecated
    'replcement' is the method name which will be called instead.
    c                     | j                    d d| j                  | _        t        j                  |       fd       }|S )Nz*() is deprecated and will be removed; use z
() insteadc                 `    t        j                  t        d        t        |       |i |S )Nr   )category
stacklevel)warningswarnDeprecationWarningr   )r   r/  r0  r   replacements      r   innerz/deprecated_method.<locals>.outer.<locals>.inner  s-    MM#(:qI-74-t>v>>r   )r   r  r9  r:  )r4  r|  r   r{  s     @r   outerz deprecated_method.<locals>.outery  sW    ||n }J( 	 ;;CK			? 
	? r   r   )r{  r}  s   ` r   rG   rG   t  s    
 Lr   c                   6    e Zd ZdZd Zd Zd Zd Zd	dZd Z	y)
_WrapNumberszNWatches numbers so that they don't overflow and wrap
    (reset to zero).
    c                 `    t        j                         | _        i | _        i | _        i | _        y r  )	threadingLocklockr3  	remindersreminder_keysr  s    r   r  z_WrapNumbers.__init__  s&    NN$	
r   c                    || j                   vsJ || j                  vsJ || j                  vsJ || j                   |<   t        j                  t
              | j                  |<   t        j                  t              | j                  |<   y r  )r3  r  r  r   defaultdictintset)r   
input_dictr   s      r   	_add_dictz_WrapNumbers._add_dict  s|    4::%%%4>>)))4-----%

4*66s;t#.#:#:3#?4 r   c                    | j                   |   }t        |j                               t        |j                               z
  }|D ]9  }| j                  |   |   D ]  }| j                  |   |=  | j                  |   |= ; y)zIn case the number of keys changed between calls (e.g. a
        disk disappears) this removes the entry from self.reminders.
        N)r3  r  keysr  r  )r   r  r   old_dict	gone_keysgone_keyremkeys          r   _remove_dead_remindersz#_WrapNumbers._remove_dead_reminders  s     ::d#(3z/@+AA	! 	3H,,T28< 1NN4(01""4(2	3r   c                 0   || j                   vr| j                  ||       |S | j                  ||       | j                   |   }i }|D ]  }||   }	 ||   }g }t	        t        |            D ]t  }	||	   }
||	   }||	f}|
|k  r;| j                  |   |xx   |z  cc<   | j                  |   |   j                  |       |j                  |
| j                  |   |   z          v t        |      ||<    || j                   |<   |S # t        $ r |||<   Y w xY w)zlCache dict and sum numbers which overflow and wrap.
        Return an updated copy of `input_dict`.
        )r3  r  r  r-  rangelenr  r  addappendtuple)r   r  r   r  new_dictr1  input_tuple	old_tuplebitsiinput_value	old_valuer  s                r   runz_WrapNumbers.run  sK    tzz!NN:t,##J5::d# 	(C$S/K$SM	 D3{+, H)!n%aL	q*NN4(0I=0&&t,S155f=K$..*>v*FFGH "$KHSM+	(. &

4)   !,	s   DDDNc                    | j                   5  |O| j                  j                          | j                  j                          | j                  j                          nT| j                  j                  |d       | j                  j                  |d       | j                  j                  |d       ddd       y# 1 sw Y   yxY w)z>Clear the internal cache, optionally only for function 'name'.N)r  r3  r7  r  r  pop)r   r   s     r   r8  z_WrapNumbers.cache_clear  s    YY 	3|

  "$$&""((*

tT*""4.""&&tT2	3 	3 	3s   B&B<<Cc                     | j                   5  | j                  | j                  | j                  fcddd       S # 1 sw Y   yxY w)z5Return internal cache dicts as a tuple of 3 elements.N)r  r3  r  r  r  s    r   
cache_infoz_WrapNumbers.cache_info  s:    YY 	DJJ0B0BC	D 	D 	Ds	   #:Ar  )
r   r   r   r  r  r  r  r  r8  r  r   r   r   r  r    s(     @	3%N
3Dr   r  c                 z    t         j                  5  t         j                  | |      cddd       S # 1 sw Y   yxY w)zGiven an `input_dict` and a function `name`, adjust the numbers
    which "wrap" (restart from zero) across different calls by adding
    "old value" to "new value" and return an updated dict.
    N)_wnr  r  )r  r   s     r   rP   rP     s.    
 
 )wwz4() ) )s   1:i   c                 &    t        | dt              S )Nrb)	buffering)openFILE_READ_BUFFER_SIZE)fnames    r   rR   rR     s    t'<==r   c                     t        | t        t        t              }	 t        |_        |S # t
        $ r Y |S t        $ r |j                           w xY w)zaOpen a file in text mode by using the proper FS encoding and
    en/decoding error handlers.
    )r  encodingerrors)r  r  r1   r2   _CHUNK_SIZEr>  r.  close)r  fobjs     r   rQ   rQ     sa     '	D 1 K  
 K	  

s   * 	AAc                     |t         u r" ||       5 }|j                         cddd       S 	  ||       5 }|j                         cddd       S # 1 sw Y   yxY w# 1 sw Y   yxY w# t        $ r |cY S w xY w)zRead entire file content and return it as a string. File is
    opened in text mode. If specified, `fallback` is the value
    returned in case of error, either if the file does not exist or
    it can't be read().
    N)_DEFAULTreadrL  )r  fallback_openfs       r   rS   rS     s|     85\ 	Q668	 		u  vvx   		 	    	O	s9   AA& A	A& AA#A& #A& &A43A4c                 &    t        | |t              S )z,Same as above but opens file in binary mode.)r  r  )rS   rR   )r  r  s     r   rT   rT   ,  s    ux{;;r   c                     d}i }t        |dd       D ]  \  }}d|dz   dz  z  ||<    t        |dd       D ]3  }t        |       ||   k\  st        |       ||   z  }|t	               z  c S  |t        |d   |       z  S )zUsed by various scripts. See: https://code.activestate.com/recipes/578019-bytes-to-human-human-to-bytes-converter/?in=user-4178764.

    >>> bytes2human(10000)
    '9.8K'
    >>> bytes2human(100001221)
    '95.4M'
    )	BKMGTPEZYr   N
   r   )symbolr   )	enumeratereversedabsr$  localsdict)nr   symbolsprefixr  sr  r   s           r   rU   rU   1  s     <GF'!"+& &1!a%2%q	&712;' %q6VF^#!Hvf~-EFH$$% D
!444r   c                  <    t         j                  d   j                  S )z+Return updated psutil.PROCFS_PATH constant.r   )sysmodulesPROCFS_PATHr   r   r   get_procfs_pathr  D  s    ;;x ,,,r   c                 8    | j                  t        t              S )N)r  r  )decoder1   r2   )r  s    r   r  r  I  s    88Xm8<<r   c                     t         j                  dk(  ry	 dd l}| j                         sJ |j	                          |j                  d      dkD  sJ 	 y# t        $ r Y yw xY w)Nr\   Tr   colorsF)rG  r   cursesisatty	setuptermtigetnumr.  )filer  s     r   rY   rY   R  sb    	ww$	{{}}x(1,,,   s   <A 	A A Fc                 D   t               s| S g }t        ddddddddd	
	      }d|d<   	 ||   }|j                  |       |r|j                  d       ddj                  |       d|  dS # t        $ r, d|dt        |j	                                }t        |      dw xY w)z*Return an highlighted version of 'string'.343330323736913593)	bluebrowndarkgreygreengrey	lightblueredvioletyellow29Ninvalid color z; choose amongst 1z[;mz[0m)rY   r  r-  listr  r_  r  r   )r  colorboldattrr  r   s         r   rX   rX   b  s    !D
F F4L(u 	KKC388D>"!A3g..  (ui'8fkkm9L8MNo4'(s   A* *5Bc                 t   t               st        | |       yt        rt        t        | ||      |       yddl}d}|j
                  j                  j                  }|j
                  j                  j                  }t        dddd      }||d<   	 ||   }|r
|dk  r|dz  }|t        j                  u rdnd}
|j                   |_         ||
      } |||       	 t        | |        |||       y# t        $ r, d	|d
t        |j                               }	t        |	      dw xY w#  |||       w xY w)z$Print a colorized version of string.r  r   N   r         )r  r  r  r  r  z; choose between    ii)rY   printr   rX   ctypeswindllKernel32GetStdHandleSetConsoleTextAttributer  r-  r  r  r_  r  stderrc_ulongrestype)r  r  r  r  r   DEFAULT_COLORr  r  r  r   	handle_idhandles               r   rZ   rZ   ~  s:     !ad	fQt$40}}--::MM"":: 	  A1Aa8$t	,5ME EQJQJE3::-C3	%~~i(.	;!$#FM:!  	, 	 *'*,  S/t+	,  $FM:s   C4 D, 45D),D7c                    t         rddl}|j                  |j                         j                        \  }}}}}t        | t              rt        | t              rd|  } nd| } t        d| d| d|  t        j                         yy)z@If PSUTIL_DEBUG env var is set, print a debug message to stderr.r   Nz	ignoring zpsutil-debug [:z]> r  )r	   inspectgetframeinfocurrentframef_back
isinstancer.  rL  r  r  r  )r   r  r  lineno__lines_indexs          r   rW   rW     s    +2+?+?  ")),
(vq&& c9%#w'!#'!#)UG1VHCu5CJJ	
 r   r  )z%(value).1f%(symbol)s)NF)r  r   enumr9  rG  rP  rH  r  r  rx  r   r   r   r   r   ImportErrorr   boolgetenvr	   objectr  __all__r   r   r   platform
startswithr   r   r   r
   r   r   r   r   AIXr'   r(   r$   r)   r+   r/   r#   r-   r.   r%   r&   r,   r*   r0   r   r   r   r   r   r   r   r   r   r   r   r   IntEnumr~   globalsupdate__members__r   getfilesystemencodingr1   getfilesystemencodeerrorsr2   rD   r@   r>   r?   rA   rE   r<   rB   rC   r=   r   r   r   r   r4   r9   r:   r;   r6   r7   r8   r5   r3   r   rF   r.  r   r  r  r  r  rL   rI   rE  rH   rK   rM   rJ   rN   rO   rV   rr  rG   r  rP   r  r8  r  r  rR   rQ   rS   rT   rU   r  r  stdoutrY   rX   rZ   rW   r   r   r   <module>r&     s  
    	   
   "   
 IBIIn-.8L 	7
''T/()
,,
!
!"<
=
,,
!
!)
,		 	 	*""F 45	lle$   $    ! 
	  	  && '$,, 
 	  (( ) %3$$&---/ 	7 % 	& &JK

Y !< = {$NO		H 4 
5
 	7JK7 . 	/ jJL {BD	 NP	 j";<
79 j"JK&7I./ G	 {VTN3	
Y B
C7:;7:;	E YG 4
5	H{M:	;A	
 &4.) h(;
*CDh+/Y&h*.Y%x ;
";<i+z23j;
34		 k]+j\* 
 ufy;
*CDEF>I >BAE A"LM L&A5 AEU E.	*ZDN( 		 		8@&
,.TD TDn) n?? ..  " >4 !	 " " <
5&-
= 	!jj  	/: CJJ%;P
U  H  Gs$    Q1 Q? 1Q<;Q<?R
	R
