
    ;^ho              
       P	   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rSSK	r	SSKJ
r
  SSKJr  SSKJr  SSKJr   SSKJr   SSKJr  \" \R$                  " S	5      5      r\" 5       r/ S
Qr\R.                  S:H  r\R.                  S:H  r\R4                  R7                  S5      r\R4                  R7                  S5      r\r\R4                  R7                  S5      r\R4                  R7                  S5      r \R4                  R7                  S5      r!\=(       d    \ =(       d    \!r"\R4                  R7                  S5      r#\R4                  R7                  S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r0S r1S!r2S"r3S#r4S$r5S%r6S&r7S'r8S(r9S)r:S*r;S+r<S,r=S-r> " S. S/\R~                  5      r@\A" 5       R                  \@R                  5         " S0 S1\R~                  5      rD\A" 5       R                  \DR                  5        \R                  " 5       rF\R                  " 5       rH\
" S2/ S3Q5      rI\
" S4/ S5Q5      rJ\
" S6/ S7Q5      rK\
" S8/ S9Q5      rL\
" S:/ S;Q5      rM\
" S</ S=Q5      rN\
" S>/ S?Q5      rO\
" S@/ SAQ5      rP\
" SB/ SCQ5      rQ\
" SD/ SEQ5      rR\
" SF/ SGQ5      rS\
" SH/ SIQ5      rT\
" SJ/ SKQ5      rU\
" SLSMSN/5      rV\
" SO/ SPQ5      rW\
" SQSRSS/5      rX\
" ST/ SUQ5      rY\
" SV/ SWQ5      rZ\
" SX/ SWQ5      r[\
" SY/ SZQ5      r\\
" S[S\S]/5      r]\
" S^S_S`/5      r^\
" Sa/ SbQ5      r_\
" ScSdSe/5      r`\\\/\\/4\\/\/4\/\/4\\/\/4\/\/4\\/\\/4\/\\/4\/\\/4Sf.ra\b  \aR                  \/\/4\/\/4Sg.5        \b  \#(       d  \aR                  Sh\/\\/405         " Si Sj\b5      rc " Sk Sl\c5      rd " Sm Sn\d5      re " So Sp\c5      rf " Sq Sr\c5      rgSSs jrhSt riSu rjSv rkSw rl\iSx 5       rmSy rnSz roS{ rpSS| jrqS} rrS~ rs " S S5      rtS ru\t" 5       rv\vR                  \ulw        \vR                  \ulx        SryS rzS r{\\{4S jr|\4S jr}SS jr~S rS r\i\GR                  4S j5       rSS jrSS\GR                  4S jrS rg! \ a    Sr GNOf = f! \ a    Sr GNWf = f)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                        \ rS rSrSrSrSrSrg)	NicDuplex         r    N)__name__
__module____qualname____firstlineno__r    r!   r"   __static_attributes__r       @/var/www/html/env/lib/python3.13/site-packages/psutil/_common.pyr~   r~      s    OOr   r~   c                       \ rS rSrSrSrSrg)BatteryTime   r   N)r   r   r   r   POWER_TIME_UNKNOWNPOWER_TIME_UNLIMITEDr   r   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                   .    \ rS rSrSrSrS rS rS rSrg)	Errori  zIBase exception class. All other psutil exceptions inherit
from this one.
psutilc                     [         R                  " 5       nU H*  n[        XS 5      nU(       d  US:X  d  M  US:X  d  M&  XBU'   M,     U$ )Nr   r   )collectionsOrderedDictgetattr)selfattrsinfor   r   s        r   	_infodictError._infodict  sC    &&(DD-E5A:"T
  r   c                 N   U R                  S5      nU(       aJ  SR                  SR                  UR                  5        VVs/ s H  u  p#U SU< 3PM     snn5      5      nOS nSR                  [	        U SS5      U4 Vs/ s H  oU(       d  M  UPM     sn5      $ s  snnf s  snf )N)r   ppidr   z({}), = msg )r   formatjoinitemsr   )r   r   kvdetailsxs         r   __str__Error.__str__  s    ~~56mm		DJJLALDAaS!<LABG GxxWT5"%=w$GM$Gq1$GMNN	 B Ns   B
B"B"c           	          U R                  S5      nSR                  UR                  5        VVs/ s H  u  p#U SU< 3PM     snn5      nSU R                  R                   SU S3$ s  snnf )N)r   r   r   secondsr   r   r   zpsutil.())r   r   r   	__class__r   )r   r   r   r  r  s        r   __repr__Error.__repr__  sf    ~~GH))djjlCldas!A5\lCD0017)1== Ds   A)
r   N)	r   r   r   r   __doc__r   r  r  r   r   r   r   r   r     s     J	O>r   r   c                   ,    \ rS rSrSrSrSS jrS rSrg)	NoSuchProcessi&  zPException raised when a process with a certain PID doesn't
or no longer exists.
r   Nc                 f    [         R                  U 5        Xl        X l        U=(       d    SU l        g )Nzprocess no longer existsr   __init__r   r   r   r   r   r   r   s       r   r  NoSuchProcess.__init__-  s%    t	44r   c                 `    U R                   U R                  U R                  U R                  44$ Nr
  r   r   r   r   s    r   
__reduce__NoSuchProcess.__reduce__3  $    499dhh ?@@r   r   r   r   NNr   r   r   r   r  r  r  r   r   r   r   r  r  &  s     J5Ar   r  c                   ,    \ rS rSrSrSrSS jrS rSrg)	ZombieProcessi7  a  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                 \    [         R                  XX$5        X0l        U=(       d    SU l        g )Nz"PID still exists but it's a zombie)r  r  r   r   )r   r   r   r   r   s        r   r  ZombieProcess.__init__A  s$    t$4	>>r   c                 v    U R                   U R                  U R                  U R                  U R                  44$ r  )r
  r   r   r   r   r  s    r   r  ZombieProcess.__reduce__F  s*    499dii JKKr   )r   r   NNNr  r   r   r   r   r   7  s     J?
Lr   r   c                   ,    \ rS rSrSrSrSS jrS rSrg)	AccessDeniediJ  z@Exception raised when permission to perform an action is denied.r   Nc                 f    [         R                  U 5        Xl        X l        U=(       d    SU l        g )Nr   r  r  s       r   r  AccessDenied.__init__O  s#    t	9"r   c                 `    U R                   U R                  U R                  U R                  44$ r  r  r  s    r   r  AccessDenied.__reduce__U  r  r   r  r%  r  r   r   r   r'  r'  J  s    JJAr   r'  c                   ,    \ rS rSrSrSrSS jrS rSrg)	TimeoutExpirediY  zORaised on Process.wait(timeout) if timeout expires and process
is still alive.
r   Nc                 h    [         R                  U 5        Xl        X l        X0l        SU S3U l        g )Nztimeout after z seconds)r   r  r  r   r   r   )r   r  r   r   s       r   r  TimeoutExpired.__init__`  s-    t	#G9H5r   c                 `    U R                   U R                  U R                  U R                  44$ r  )r
  r  r   r   r  s    r   r  TimeoutExpired.__reduce__g  s$    txx CDDr   )r   r   r   r  r  r  r   r   r   r-  r-  Y  s     J6Er   r-  c                 f     [        U 5      U-  S-  nUb  [        X25      nU$ ! [         a     gf = f)z5Calculate percentage usage of 'used' against 'total'.d   g        )floatroundZeroDivisionError)r   r   round_rets       r   rL   rL   p  sE    T{U"c) $C
  s   # 
00c                 f   ^ ^ [         R                  " T 5      UU 4S j5       nU4S jn0 mX!l        U$ )aq  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                     > U [        [        UR                  5       5      5      4n TU   $ ! [         a)     T" U 0 UD6=nTU'   O! [         a  nUS eS nAff = fUs $ f = fr  )	frozensetsortedr   KeyError	Exception)argskwargskeyr8  errcachefuns        r   wrappermemoize.<locals>.wrapper  su    Yvflln567	: 	$#&#7#77eCj $t#$J	s2   , 
AAA
AAAAAc                  &   > T R                  5         g)zClear cache.N)clear)rC  s   r   cache_clearmemoize.<locals>.cache_clear  s    r   )	functoolswrapsrI  )rD  rE  rI  rC  s   `  @r   rI   rI   |  s7    0 __S	 	 E%Nr   c                 j   ^  [         R                  " T 5      U 4S j5       nS nS nX!l        X1l        U$ )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                   >  U R                   T   nU$ ! [         a!     T" U 5      s $ ! [         a  nUS eS nAff = f[         aD     T" U 5      nO! [         a  nUS eS nAff = f XR                   T'    U$ ! [         a      U$ f = ff = fr  )_cacheAttributeErrorr>  r=  )r   r8  rB  rD  s      r   rE  'memoize_when_activated.<locals>.wrapper  s    	++c"C( 
'  	$$4y  $t#$ 	$$i $t#$#&C 
 
	 "  
		se    
B)B
;6;BAB
A#AA##B'A88
BBBBc                     0 U l         g)zcActivate cache. Expects a Process instance. Cache will be
stored as a "_cache" instance attribute.
N)rO  procs    r   cache_activate.memoize_when_activated.<locals>.cache_activate  s     r   c                 *     U ? g! [         a     gf = f)zDeactivate and clear cache.N)rO  rP  rS  s    r   cache_deactivate0memoize_when_activated.<locals>.cache_deactivate  s    	 		s    
)rK  rL  rU  rX  )rD  rE  rU  rX  s   `   r   memoize_when_activatedrZ    s=    6 __S 2 ,/Nr   c                      [         R                  " U 5      n[        R                  " UR                  5      $ ! [         a    e [
         a     gf = f)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   8 AAc                 f     [         R                  " U 5        g! [         a    e [         a     gf = f)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)r\  r]  r`  ra  )r   s    r   rK   rK     s6    

    s    00c                     [         R                  (       a  [        c  g [         R                   " [        [         R                  5       n U R	                  S5        SSS5        g! , (       d  f       g= f! [
         a     gf = f)z2Return True if IPv6 is supported on this platform.NF)z::1r   T)sockethas_ipv6r   r   bindra  )socks    r   rM   rM     s_     ??h.]]8V%7%78DIIj! 9 98 s/   )A4 A#A4 #
A1-A4 1A4 4
B Bc                     0 nSn[         n U R                  SU5      nXB::  a   U$ U R                  SX$5      nXR:  a&  XU nXS-   U nU(       a  UR                  5       nXqU'   US-   nM^  )zCParse a C environ block of environment variables into a dictionary.r    r   r   )r   findupper)datar8  posWINDOWS_next_pos	equal_posrA  r   s           r   rJ   rJ     s     C
C H
99T3'? J IIc31	?9%CQ2EiikHl r   c                 T     [         R                  " U 5      $ ! [         a    U s $ f = f)zyConvert a numeric socket family value to an IntEnum member.
If it's not a known member, return the numeric value itself.
)re  AddressFamily
ValueErrornums    r   rN   rN   7  s,    ##C(( 
    ''c                 T     [         R                  " U 5      $ ! [         a    U s $ f = f)zwConvert a numeric socket type value to an IntEnum member.
If it's not a known member, return the numeric value itself.
)re  
SocketKindrt  ru  s    r   rO   rO   A  s,      %% 
rw  c           	      \   U[         R                  [        1;   a  U(       a  [        U6 nU(       a  [        U6 nU[         R                  :X  a'  U[        [        1;   a  UR                  U[        5      nO[        n[        U5      n[        U5      nUc  [        XX#XE5      $ [        XX#XEU5      $ )z2Convert a raw connection tuple to a proper ntuple.)re  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
{ReE::ReE3??r   c                    SSK nU R                  (       a  U R                  (       d  gU R                  [        R
                  :X  a<  [        UR                  U R                   SU R                   3SS9R                  5      $ U R                  [        R                  :X  a<  [        UR                  U R                   SU R                   3SS9R                  5      $ g)zZGiven the address ntuple returned by ``net_if_addrs()``
calculates the broadcast address.
r   N/F)strict)	ipaddressr   r   r   re  r   strIPv4Networkbroadcast_addressr   IPv6Network)r   r  s     r   broadcast_addrr  ^  s     <<t||{{fnn$!!<<.$,,0 " 
 	

 {{foo%!!<<.$,,0 " 
 	
 &r   c                    ^  U 4S jnU$ )z{A decorator which can be used to mark a method as deprecated
'replcement' is the method name which will be called instead.
c                    >^ U R                    ST S3mU R                  c  TU l        [        R                  " U 5      UU4S j5       nU$ )Nz*() is deprecated and will be removed; use z
() insteadc                 \   > [         R                  " T[        SS9  [        U T5      " U0 UD6$ )Nr   )category
stacklevel)warningswarnDeprecationWarningr   )r   r?  r@  r   replacements      r   inner/deprecated_method.<locals>.outer.<locals>.inner  s+    MM#(:qI4-t>v>>r   )r   r  rK  rL  )rD  r  r   r  s     @r   outer deprecated_method.<locals>.outery  sW    ||n }J( 	 ;;CK			? 
	? r   r   )r  r  s   ` r   rG   rG   t  s    
 Lr   c                   @    \ rS rSrSrS rS rS rS rSS jr	S	 r
S
rg)_WrapNumbersi  zFWatches numbers so that they don't overflow and wrap
(reset to zero).
c                 b    [         R                  " 5       U l        0 U l        0 U l        0 U l        g r  )	threadingLocklockrC  	remindersreminder_keysr  s    r   r  _WrapNumbers.__init__  s&    NN$	
r   c                 "   X R                   ;  d   eX R                  ;  d   eX R                  ;  d   eXR                   U'   [        R                  " [
        5      U R                  U'   [        R                  " [        5      U R                  U'   g r  )rC  r  r  r   defaultdictintset)r   
input_dictr   s      r   	_add_dict_WrapNumbers._add_dict  st    ::%%%>>)))-----%

4*66s;t#.#:#:3#?4 r   c                    U R                   U   n[        UR                  5       5      [        UR                  5       5      -
  nU H<  nU R                  U   U    H  nU R                  U   U	 M     U R                  U   U	 M>     g)zvIn case the number of keys changed between calls (e.g. a
disk disappears) this removes the entry from self.reminders.
N)rC  r  keysr  r  )r   r  r   old_dict	gone_keysgone_keyremkeys          r   _remove_dead_reminders#_WrapNumbers._remove_dead_reminders  s{     ::d#(3z/@+AA	!H,,T28<NN4(0 =""4(2 "r   c                 (   X R                   ;  a  U R                  X5        U$ U R                  X5        U R                   U   n0 nU H  nX   n X5   n/ n[	        [        U5      5       Hq  n	Xi   n
Xy   nXY4nX:  a;  U R                  U   U==   U-  ss'   U R                  U   U   R                  U5        UR                  XR                  U   U   -   5        Ms     [        U5      XE'   M     XR                   U'   U$ ! [         a    XdU'    M  f = f)z\Cache dict and sum numbers which overflow and wrap.
Return an updated copy of `input_dict`.
)rC  r  r  r=  rangelenr  r  addappendtuple)r   r  r   r  new_dictrA  input_tuple	old_tuplebitsiinput_value	old_valuer  s                r   run_WrapNumbers.run  s%    zz!NN:,##J5::d#C$/K$M	 D3{+,)n%L	*NN4(0I=0&&t,S155f=K..*>v*FFG - "$KHM+ . &

4)   !,	s   C??DDNc                    U R                      UcO  U R                  R                  5         U R                  R                  5         U R                  R                  5         OTU R                  R                  US5        U R                  R                  US5        U R                  R                  US5        SSS5        g! , (       d  f       g= f)z>Clear the internal cache, optionally only for function 'name'.N)r  rC  rH  r  r  pop)r   r   s     r   rI  _WrapNumbers.cache_clear  s    YY|

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

tT*""4.""&&tT2 YYs   B'B==
Cc                     U R                      U R                  U R                  U R                  4sSSS5        $ ! , (       d  f       g= f)z5Return internal cache dicts as a tuple of 3 elements.N)r  rC  r  r  r  s    r   
cache_info_WrapNumbers.cache_info  s+    YYJJ0B0BC YYs	   #:
A)rC  r  r  r  r  )r   r   r   r   r  r  r  r  r  rI  r  r   r   r   r   r  r    s(     @	3%N
3Dr   r  c                     [         R                     [         R                  X5      sSSS5        $ ! , (       d  f       g= f)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!    
 
wwz( 
s   0
>i   c                      [        U S[        S9$ )Nrb)	buffering)openFILE_READ_BUFFER_SIZE)fnames    r   rR   rR     s    t'<==r   c                     [        U [        [        [        S9n [        Ul        U$ ! [
         a     U$ [         a    UR                  5         e f = f)zYOpen a file in text mode by using the proper FS encoding and
en/decoding error handlers.
)r  encodingerrors)r  r  r1   r2   _CHUNK_SIZErP  r>  close)r  fobjs     r   rQ   rQ     sa     '	D 1 K  
 K	  

s   ' 
AAc                    U[         L a"  U" U 5       nUR                  5       sSSS5        $  U" U 5       nUR                  5       sSSS5        $ ! , (       d  f       g= f! , (       d  f       g= f! [         a    Us $ f = f)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readra  )r  fallback_openfs       r   rS   rS     sf     85\Q668 \	uvvx 	 \  	O	s9   AA1 A 	A1 
A 
A.*A1 .A1 1B ?B c                     [        X[        S9$ )z,Same as above but opens file in binary mode.)r  r  )rS   rR   )r  r  s     r   rT   rT   ,  s    u{;;r   c                     Sn0 n[        USS 5       H  u  pESUS-   S-  -  X5'   M     [        USS 5       H3  n[        U 5      X6   :  d  M  [        U 5      X6   -  nU[	        5       -  s  $    U[        US   U S9-  $ )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absr4  localsdict)nr   symbolsprefixr  sr  r   s           r   rU   rU   1  s     <GF'!"+&!a%2%	 '712;'q6V^#!Hv~-EFH$$ ( D
!444r   c                  <    [         R                  S   R                  $ )z+Return updated psutil.PROCFS_PATH constant.r   )sysmodulesPROCFS_PATHr   r   r   get_procfs_pathr  D  s    ;;x ,,,r   c                 2    U R                  [        [        S9$ )N)r  r  )decoder1   r2   )r  s    r   r  r  I  s    88Xm8<<r   c                     [         R                  S:X  a  g SS KnU R                  5       (       d   eUR	                  5         UR                  S5      S:  d   e g! [         a     gf = f)Nr\   Tr   colorsF)r\  r   cursesisatty	setuptermtigetnumr>  )filer  s     r   rY   rY   R  sd    	ww$	{{}}}x(1,,,   s   AA 
A('A(Fc                 T   [        5       (       d  U $ / n[        SSSSSSSSS	S
9	nSUS'    XA   nUR                  U5        U(       a  UR                  S5        SSR                  U5       SU  S3$ ! [         a-    SU< S[        UR	                  5       5       3n[        U5      Sef = f)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  rt  r  r   )r  colorboldattrr  r   s         r   rX   rX   b  s    !!D
F F4L( 	KKC388D>"!A3g..  (ui'8fkkm9L8MNo4'(s   A0 07B'c                 t   [        5       (       d
  [        XS9  g[        (       a  [        [        XU5      US9  gSSKnSnUR
                  R                  R                  nUR
                  R                  R                  n[        SSSSS9nXXS'    X   nU(       a  US::  a  US-  nU[        R                  L a  SOSn
UR                   Ul        U" U
5      nU" X5         [        XS9  U" X5        g! [         a.    S	U< S
[        UR                  5       5      < 3n	[        U	5      Sef = f! U" X5        f = f)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  rt  r  stderrc_ulongrestype)r  r  r  r  r  DEFAULT_COLORr   r!  r  r   	handle_idhandles               r   rZ   rZ   ~  s/     !!a	fQt$40}}--::MM"":: 	  A1Aa8$t	,ME EQJQJE3::-C3	%~~i(.	;!#F:!  	, 	 *'*,  S/t+	,  $F:s   C2  	D- 28D*-
D7c                 ,   [         (       a  SSKnUR                  UR                  5       R                  5      u  p#pEn[        U [        5      (       a!  [        U [        5      (       a  SU  3n OSU < 3n [        SU SU SU  3[        R                  S9  gg)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>  ra  r  r  r"  )r   r*  r  lineno__lines_indexs          r   rW   rW     s    |+2+?+?  ")),
(q& c9%%#w''!#'!#)UG1VHCu5CJJ	
 r   r  )z%(value).1f%(symbol)s)NF)r  r   enumrK  r\  re  r]  r  r  r  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   rZ  rH   rK   rM   rJ   rN   rO   rV   r  rG   r  rP   r  rI  r  r  rR   rQ   rS   rT   rU   r  r  stdoutrY   rX   rZ   rW   r   r   r   <module>rC     s  
    	   
   "   
 BIIn-.8L 	7
''T/()
,,
!
!"<
=
,,
!
!)
,		 	 	*""F 45	lle$   $    ! 
	  	  && '$,, 
 	  (( ) $$&--/ 	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$    R
 R 
RRR%$R%