
    9iI                    8   S r SR                  \  V s/ s H  n \" U 5      PM     sn 5      rSSKrSSKrSSKrSSKrSSKrSr	Sq
 " S S\5      r " S S\5      rS	 rS;S
 jrS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S r#0 4S jr$ " S  S!\5      r% " S" S#\5      r&S$ r'S% r(S& r)S' r*S( r+S) r,S* r-S+ r.S, r/S- r0S. r1S/ r2S0 r3S1 r4S2 r5S3 r6S4 r7S5 r8S6 r9S7 r:S8 r;\<S9:X  a  \;" 5         g\" S:S:5      q
\" 5         gs  sn f )<)	       r   .r   NTc                   J    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rSrg)Trace*   c                 0   Xl         U R                   (       d  g SSKJn  SSKJn  U(       a  U" 5       U l        O?UR                  5       R                  S5      n[        SR                  U5      S5      U l        U" 5       U l	        U" 5       U l
        S U l        g )Nr   )datetimeStringIOz%Y-%m-%d_%H-%M-%S-%fzcpuinfo_trace_{0}.tracew)
_is_activer	   ior   _outputnowstrftimeopenformat_stdout_stderr_err)self	is_activeis_stored_in_stringr	   r   dates         O/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/cpuinfo/cpuinfo.py__init__Trace.__init__+   sm    /		*4<
,,.
!
!"8
94077=sC4<$,$,$)    c                     U R                   (       d  g SSKJn  U" 5       S   nUS   nUS   nU R                  R	                  SR                  XU5      5        U R                  R                  5         g )Nr   stack      z{0} ({1} {2})
r   inspectr!   r   writer   flushr   msgr!   framefilelines         r   headerTrace.header=   s[    	&
'!*%	q$	q$,,&--c>?,,r   c                     U R                   (       d  g SSKJn  U" 5       S   nUS   nUS   nU R                  R	                  SR                  X45      5        U R                  R                  5         g )Nr   r    r"   r#   zSuccess ... ({0} {1})

r$   )r   r!   r*   r+   r,   s        r   successTrace.successG   sY    	&
'!*%	q$	q$,,077CD,,r   c           
      P   U R                   (       d  g SSKJn  U" 5       S   nUS   nUS   n[        U[        5      (       a  SR                  UR                  S5       Vs/ s H  nSU-   PM
     sn5      S-   nU R                  R                  U5        U R                  R                  SR                  UW5      5        U R                  R                  5         g [        U[        5      (       a  SS	KJn  U" 5       nU R                  R                  S
R                  XE5      5        U R                  R                  SR                  UR                  S5       Vs/ s H  nSR                  U5      PM     sn5      S-   5        U R                  R                  5         g g s  snf s  snf )Nr   r    r"   r#    
	zFailed ... ({0} {1})


format_excz	Failed ... ({0} {1})
		{0}
)r   r%   r!   
isinstancestrjoinsplitr   r&   r   r'   	Exception	tracebackr7   )	r   r)   r!   r*   r+   r,   r7   
err_stringns	            r   fail
Trace.failR   sE   	&
'!*%	q$	q$S	#))D/:/$$+/:	;d	B3<<c<<077dCD<<#y!!#:<<077CD<<bggj>N>Nt>TU>T{11!4>TUVY]]^<< " ; Vs    FF#c                     U R                   (       d  g SSKJn  U" 5       S   nUS   nUS   nU R                  R	                  SR                  XU5      5        U R                  R                  5         g )Nr   r       r"   r#   z	{0} ({1} {2})
r$   r(   s         r   command_headerTrace.command_headerg   s[    	&
'!*%	q$	q$,,(//4@A,,r   c           
      r   U R                   (       d  g U R                  R                  SR                  U5      5        U R                  R                  SR	                  UR                  S5       Vs/ s H  nSR                  U5      PM     sn5      S-   5        U R                  R                  5         g s  snf )Nr8   r3   r4   z			{0}
)r   r   r&   r   r;   r<   r'   )r   r)   outputr@   s       r   command_outputTrace.command_outputq   s    	&,,['',-,,RWWv||D?QR?Q!m2215?QRSVZZ[,, Ss   0B4c           	         U R                   (       d  g SSKJn  U" 5       S   nUS   nUS   nU R                  R	                  SR                  Xg5      5        U Vs/ s H  oU;   d  M
  X;   d  M  X(   X8   :w  d  M  UPM!     n	nU	(       a:  U	 H3  nU R                  R	                  SR                  XU   X8   5      5        M5     OU R                  R	                  S5        U R                  R	                  SR                  Xg5      5        U Vs/ s H  oU;   d  M
  X;  d  M  UPM     n
nU
(       a7  U
 H0  nU R                  R	                  S	R                  XU   5      5        M2     OU R                  R	                  S5        U R                  R	                  S
5        U R                  R                  5         g s  snf s  snf )Nr   r    r#   r"   z	Changed keys ({0} {1})
z		{0}: {1} to {2}
z		None
z	New keys ({0} {1})
z		{0}: {1}
r4   r$   )r   keysinfonew_infor!   r*   r+   r,   keychanged_keysnew_keyss              r   rL   
Trace.keysx   sn   	&
'!*%	q$	q$ ,,188DE!%h###TYZbZgMg#,hsLL.55c9hmTU  <<l# ,,-44T@A!ITcH_ccT(IsLL'..sSMBC  <<l#,,T,,# i Js*   	F8(F8/F8;F8	F=F=!F=c                     U R                   (       d  g U R                  R                  US-   5        U R                  R                  5         g )Nr4   )r   r   r&   r'   )r   r)   s     r   r&   Trace.write   s1    	&,,S4Z ,,r   c                     U R                   R                  5       U R                  R                  5       U R                  R                  5       UU R                  US.$ )N)rH   stdoutstderrrM   erris_fail)r   getvaluer   r   r   )r   rM   rY   s      r   to_dictTrace.to_dict   sI    \\""$\\""$\\""$
))
 r   )r   r   r   r   r   N)__name__
__module____qualname____firstlineno__r   r-   r0   rA   rE   rI   rL   r&   r[   __static_attributes__ r   r   r   r   *   s/    $	*:r   r   c                      \ rS rSr\R
                  " 5       S   r\R                  " 5       r\R                  " 5       R                  5       S:H  r\R                  " 5       r\R                  " 5       S   rSr\S 5       r\S 5       r\S 5       r\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r \S 5       r!\S 5       r"\S 5       r#\S 5       r$\S 5       r%\S 5       r&\S 5       r'\S 5       r(\S 5       r)\S 5       r*\S 5       r+\S  5       r,\S! 5       r-\S" 5       r.S#r/g$)%
DataSource   r   windows   Tc                  @    [         R                  R                  S5      $ )N/proc/cpuinfo)ospathexistsrb   r   r   has_proc_cpuinfoDataSource.has_proc_cpuinfo   s    		((r   c                  0    [        [        S5      5      S:  $ )Ndmesgr   len_program_pathsrb   r   r   	has_dmesgDataSource.has_dmesg       	^G$	%	))r   c                     [         R                  " 5       R                  5       R                  S5      R                  S5      R                  5       R                  5       n SU ;   =(       a    [        R
                  R                  S5      $ )N"'linux/var/run/dmesg.boot)platformsystemstriplowerrj   rk   rl   )unames    r   has_var_run_dmesg_boot!DataSource.has_var_run_dmesg_boot   s]    
//

!
!
#
)
)#
.
4
4S
9
?
?
A
G
G
I%	E		Cbggnn-BCCr   c                  0    [        [        S5      5      S:  $ )Ncpufreq-infor   rq   rb   r   r   has_cpufreq_infoDataSource.has_cpufreq_info   s    	^N+	,q	00r   c                  0    [        [        S5      5      S:  $ )Nsestatusr   rq   rb   r   r   has_sestatusDataSource.has_sestatus   s    	^J'	(1	,,r   c                  0    [        [        S5      5      S:  $ )Nsysctlr   rq   rb   r   r   
has_sysctlDataSource.has_sysctl       	^H%	&	**r   c                  0    [        [        S5      5      S:  $ )Nisainfor   rq   rb   r   r   has_isainfoDataSource.has_isainfo   s    	^I&	'!	++r   c                  0    [        [        S5      5      S:  $ )Nkstatr   rq   rb   r   r   	has_kstatDataSource.has_kstat   rv   r   c                     [         R                  " 5       R                  5       R                  S5      R                  S5      R                  5       R                  5       n SU ;   =(       d    SU ;   nU=(       a    [	        [        S5      5      S:  $ )Nrx   ry   beoshaikusysinfor   )r|   r}   r~   r   rr   rs   )r   is_beoss     r   has_sysinfoDataSource.has_sysinfo   sl    
//

!
!
#
)
)#
.
4
4S
9
?
?
A
G
G
I%eO/w%/'		7S	23a77r   c                  0    [        [        S5      5      S:  $ )Nlscpur   rq   rb   r   r   	has_lscpuDataSource.has_lscpu   rv   r   c                  0    [        [        S5      5      S:  $ )Nlspropr   rq   rb   r   r   has_ibm_pa_featuresDataSource.has_ibm_pa_features   r   r   c                  T    [        / SQ5      u  pU S:H  =(       a    [        U5      S:  $ )N)wmicrj   getVersionr   )_run_and_get_stdoutrr   )
returncoderH   s     r   has_wmicDataSource.has_wmic   s'    *+KL*	q	,S[1_,r   c                      [        SS/5      $ )Ncatri   r   rb   r   r   cat_proc_cpuinfoDataSource.cat_proc_cpuinfo   s    	e_5	66r   c                      [        S/5      $ )Nr   r   rb   r   r   cpufreq_infoDataSource.cpufreq_info   s    	n-	..r   c                      [        SS/5      $ )Nr   z-br   rb   r   r   
sestatus_bDataSource.sestatus_b   s    	j$/	00r   c                      [        SS/5      $ )Nrp   z-ar   rb   r   r   dmesg_aDataSource.dmesg_a   s    	gt_	--r   c                      [        SS/5      $ )Nr   r{   r   rb   r   r   cat_var_run_dmesg_boot!DataSource.cat_var_run_dmesg_boot   s    	e%:;	<<r   c                      [        / SQ5      $ )N)r   zmachdep.cpuhw.cpufrequencyr   rb   r   r   "sysctl_machdep_cpu_hw_cpufrequency-DataSource.sysctl_machdep_cpu_hw_cpufrequency   s    	I	JJr   c                      [        SS/5      $ )Nr   z-vbr   rb   r   r   
isainfo_vbDataSource.isainfo_vb   s    	i/	00r   c                      [        / SQ5      $ )N)r   z-mcpu_infor   rb   r   r   kstat_m_cpu_infoDataSource.kstat_m_cpu_info   s    	8	99r   c                      [        SS/5      $ )Nr   z-cpur   rb   r   r   sysinfo_cpuDataSource.sysinfo_cpu  s    	i0	11r   c                      [        S/5      $ )Nr   r   rb   r   r   r   DataSource.lscpu  s    	gY	''r   c                  \    SS K n U R                  S5      nU(       a  [        SUS   /5      $ g )Nr   z(/proc/device-tree/cpus/*/ibm,pa-featuresr   )globr   )r   ibm_featuress     r   ibm_pa_featuresDataSource.ibm_pa_features	  s0    EF,
xa9
:: r   c                      [        / SQ5      $ )N)r   cpur   zOName,CurrentClockSpeed,L2CacheSize,L3CacheSize,Description,Caption,Manufacturerz/format:listr   rb   r   r   wmic_cpuDataSource.wmic_cpu  s    	  W  
X  Xr   c                  :    [        SS5      n U R                  5       $ )N.Hardware\Description\System\CentralProcessor\0ProcessorNameString)_read_windows_registry_keyr~   )processor_brands    r   winreg_processor_brand!DataSource.winreg_processor_brand  s    ./`bwx/				  r   c                      [        SS5      n U $ )Nr   VendorIdentifierr   )vendor_id_raws    r   winreg_vendor_id_rawDataSource.winreg_vendor_id_raw  s    ,-^`rs-	r   c                      [        SS5      n U $ )Nz<SYSTEM\CurrentControlSet\Control\Session Manager\EnvironmentPROCESSOR_ARCHITECTUREr   )arch_string_raws    r   winreg_arch_string_raw!DataSource.winreg_arch_string_raw  s    ./n  qI  J/	r   c                  4    [        SS5      n [        U 5      n U $ )Nr   z~Mhz)r   _to_decimal_string)	hz_actuals    r   winreg_hz_actualDataSource.winreg_hz_actual$  s     ()Z\bc) +)	r   c                      [        SS5      n U $ )Nr   
FeatureSetr   )feature_bitss    r   winreg_feature_bitsDataSource.winreg_feature_bits*  s    +,]_kl,	r   rb   N)0r]   r^   r_   r`   r|   architecturebitsmultiprocessing	cpu_countr}   r   
is_windowsmachiner   r   uname_string_raw	can_cpuidstaticmethodrm   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   r   r   rd   rd      s   "&&(oo%%'94##%NN$Q') ) * * D D 1 1 - - + + , , * * 8 8
 * * + + - - 7 7 / / 1 1 . . = = K K 1 1 : : 2 2 ( ( ; ; X X ! !      
  r   rd   c                 N   / n[        S [        R                  R                  SS5      R	                  [        R
                  5      5      n[        R                  S   R	                  [        R
                  5       H  n[        R                  R                  X05      n[        R                  " U[        R                  5      (       a  UR                  U5        U HD  nX4-   n[        R                  " U[        R                  5      (       d  M3  UR                  U5        MF     M     U$ )NPATHEXTr3   PATH)filterrj   environr   r<   pathseprk   r;   accessX_OKappend)program_namepathsextspepexts         r   rs   rs   0  s    	tRZZ^^Ir288DE
**V

"
"2::
.Qggll1#!YYq"''<<?a
%4iibgg	LL 	 / 	r   c                    SSK JnJn  [        R	                  SSR                  U 5      -   S-   5        U(       d  U" XX3S9nO2U" XX3S9nU" XR                  X3S9nUR                  R                  5         UR                  5       u  pgUR                  SS	9nUR                  SS	9n[        R                  S
[        UR                  5      5        [        R                  SU5        UR                  U4$ )Nr   PopenPIPEzRunning command " z" ...rV   rW   stdin)r  rV   rW   UTF-8encodingzreturn code:zstdout:)
subprocessr  r  g_tracerE   r;   rV   closecommunicatedecoderI   r:   r   )commandpipe_commandr  r  p1p2stdout_outputstderr_outputs           r   r   r   =  s    #+chhw.??'IJ 	W$;" W$;"\4E"))// !# 0%%w%7%%w%7 	BMM(:;	=1 	}$$r   c                    [         R                  SR                  X5      5         SS KnWR                  UR                  U 5      nUR                  XA5      S   nUR                  U5        [         R                  S[        U5      5        U$ ! [         a*  n SS Kn S nANv! [         a  n S nA S nANS nAff = fS nAff = f)Nz*Reading Registry key "{0}" field "{1}" ...r   zvalue:)r  rE   r   _winregImportErrorwinregOpenKeyHKEY_LOCAL_MACHINEQueryValueExCloseKeyrI   r:   )key_name
field_namer%  rX   rO   values         r   r   r   W  s    DKKHab ~~f//:			S	-a	0#e*- 	 =	 4s/   B 
C B  
B8*B;3B88B;;C c                  \    [        [        R                  5      u  pU S;  a  [        S5      eg )N)
X86_32X86_64ARM_7ARM_8PPC_64S390XMIPS_32MIPS_64RISCV_32RISCV_64zNpy-cpuinfo currently only works on X86 and some ARM/PPC/S390X/MIPS/RISCV CPUs.)_parse_archrd   r   r=   )archr   s     r   _check_archr:  i  s:    *445  	 	 < 	= =	r   c                     SS K nSS KnU nUR                  U5      nUR                  U5      nUR	                  S5      nU$ )Nr   utf8)picklebase64dumps	b64encoder  )thingr=  r>  abcds          r   _obj_to_b64rF  q  s=    
\\!_aXXf	r   c                     SS K nSS Kn UR                  U 5      nUR                  U5      nU$ ! [         a    0 s $ f = fNr   )r=  r>  	b64decodeloadsr=   )rA  r=  r>  rB  rC  s        r   _b64_to_objrK  {  sC    u!ll1o!	
( 	)s   #. ==c                    [        U [        5      (       a  U  Vs/ s H  n[        U5      PM     sn$ [        U [        5      (       a8  U R	                  5        VVs0 s H  u  p#[        U5      [        U5      _M     snn$ U $ s  snf s  snnf N)r9   list_utf_to_strdictitems)inputelementrO   r,  s       r   rO  rO    s~    ud.3	4e7+g
e	44[[]
$"zs c
K.
."
$ $ 
, 
5
$s   B!Bc                 p   / SQn[         R                  X U5        U H  nUR                  US 5      (       a  U R                  US 5      (       d  X   X'   M9  US:X  d  MA  UR                  S5      (       d  MY  US    H!  nX@S   ;  d  M  U S   R                  U5        M#     U S   R	                  5         M     g )N)r   hardware_raw	brand_rawhz_advertised_friendlyhz_actual_friendlyhz_advertisedr   r9  r   countr   r   l2_cache_sizel2_cache_line_sizel2_cache_associativitysteppingmodelfamilyprocessor_typeflagsl3_cache_sizel1_data_cache_sizel1_instruction_cache_sizerb  )r  rL   r   r  sort)rM   rN   rL   rO   fs        r   _copy_new_fieldsrh    s    	 	d(# S\\#tTXXc4%8%8}49
g~(,,w//WqWtG}33A6 = r   c                 x   UR                  5        H  nU H  nUR                  5       nSU;   d  M  UR                  SS5      u  pVUR                  5       R                  5       nUR                  5       nXT:X  d  Md  [	        U5      S:  d  Mu  U (       a  UR                  5       (       d  Us  s  $ M  Us  s  $    M     g )N:r"   r   )
splitlinesr   r<   r~   rr   isdigit)cant_be_number
raw_stringfield_namesr,   r+  leftrights          r   _get_field_actualrr    s    ""$Tj  ":	Tk**S!$KD::<DKKMEc%j1n]]__|  l   % 	r   c                 z    [        XU5      nU(       a  U(       a	   U" U5      nUc  UnU$ ! [         a    Un Nf = frM  )rr  r=   )rm  rn  
convert_todefault_valuero  retvals         r   
_get_fieldrw    sK    
N
D zv6
 N& 
 6s   + ::c                     SR                  U 5      n U R                  SS5      n SR                  S U  5       5      R                  5       n U S:X  a  Sn SU ;  a  SR                  U 5      n U R	                  S5      n U R                  S5      (       a  SR                  U 5      n [        U 5      n SR                  U 5      n U $ ! [         a     g	f = f)
N{0},r   r3   c              3   ^   #    U  H#  oR                  5       (       d  US :X  d  M  Uv   M%     g7fr   Nrl  .0r@   s     r   	<genexpr>%_to_decimal_string.<locals>.<genexpr>  s      <UiikkQV!!U   -	-0z{0}.0z{0}00.0)r   replacer;   r~   rstripendswithfloatr=   )tickss    r   r   r     s    
,,u
%
--S
!% ''<U<
<
B
B
D%
b[5 	>>% 5 ,,s
% ^^C==5 ,%
,,u
%	, 	s   B=C   
CCc                 ~    [        U 5      n SR                  U 5      n U R                  S5      nUR                  S5      nUR	                  SS5      nUR                  X-   S-   S5      nX1-   nSR                  US U X$S  5      nUR                  S5      u  pV[        U5      [        U5      peXV4$ ! [         a     gf = f)Nry  r  r   r3   r"   {0}.{1}r   r   )	r  r   lstripindexr  ljustr<   intr=   )r  scalehz	old_index	new_indexrp  rq  s          r   _hz_short_to_fullr    s    
,%
,,u
% ||C"hhsm)	zz#r"	xx!!#S)"):I:7"+$D	3u:
 	   B,B/ /
B<;B<c                 ~    U R                  5       R                  5       n Su  pU R                  S5      (       a  SnO1U R                  S5      (       a  SnOU R                  S5      (       a  SnSR                  S	 U  5       5      R                  5       nS
U;  a  US-  n[	        X5      u  pX4$ ! [
         a     gf = f)NNNghzr   mhz   r  r   r3   c              3   ^   #    U  H#  oR                  5       (       d  US :X  d  M  Uv   M%     g7fr|  r}  r~  s     r   r  '_hz_friendly_to_full.<locals>.<genexpr>  s      =)Qyy{{afqq)r  r   z.0r  )r~   r   r  r;   r  r=   )	hz_stringr  r  s      r   _hz_friendly_to_fullr    s    oo%%'))"5%  5$5	ww=)==CCE"	:2*)"
 	r  c                     [        X5      u  p#SR                  X#5      nUR                  S5      nUR                  SS5      nSnSnUS:  a  SnSnOUS:  a  S	nSnO
US
:  a  SnS
nSR                  US U* S-
   XA* S-
  S  5      nSR                  [	        U5      U5      nUR                  S5      nU$ ! [         a     gf = f)Nr  r   r3   Hzr   r   GHzr  MHzrD   KHzr"   z{0:.4f} {1}r  z	0.0000 Hz)r  r   r  r  r  r  r=   )r  r  rp  rq  result	dot_indexsymbols          r   _hz_short_to_friendlyr    s    !%/+$D(& ll3)>>#r"& &
%]651}651}65 F9UF1H-vfQhi/@A& fv6&==&	- 	s   B1B4 4
C Cc                     SS K nU (       d  U $ SR                  U 5      n SSSSS.nUR                  5        H@  u  p4UR                  X05      (       d  M  SR                  U S S	 R	                  5       U5      s  $    U $ )
Nr   ry  BKBMBGB)z	^[0-9]+B$z	^[0-9]+K$z	^[0-9]+M$z	^[0-9]+G$z{0} {1})rer   rQ  matchr~   )rR  r  formatspatternfriendly_sizes        r   _to_friendly_bytesr  /  s}    
	,	e	 	  '}}WXXg


5$B<--/
??  / 	r   c                    U R                  5       nSS0SS0SS0SS0SS0S	S0S
S0SS0SS0SS0/
n U H  n[        UR                  5       5      S   n[        UR                  5       5      S   nUR	                  U5      (       d  MS  [        UR                  U5      S   R                  5       5      U-  s  $    U $ ! [         a  n S nAU $ S nAff = f)Ngibi   @mibi   kib   gbmbkbgmkrC  r"   r   )	r   rN  rL   valuesr  r  r<   r~   r=   )friendly_bytesrR  r  entryr  
multiplierrX   s          r   _friendly_bytes_to_intr  C  s    				 	;4.
+$-	,)e%**,"7U\\^$Q':nnWu{{7#A&,,./*<<	  	 	 s   AB; /B; 7B; ;
CCc                    SU R                  5       ;  a  gU R                  5       nSnUR                  S5      (       a  SnOUR                  S5      (       a  SnSU;   a  UR                  S5      S	   nOUR                  S S	5      S	   nUR	                  S5      R	                  S5      R                  5       n[        U5      nX4$ )
Nr  r  r   r   r  r  r  r   @r"   )r   r  r<   rsplitr  r~   r   )
cpu_stringr  r  s      r   _parse_cpu_brand_stringr  a  s    
  ""		
KK
%kk%
%2I	xx}Q"	yyq!"iie$**,	r   c           	      ,   SS K nUR                  SU 5       Vs/ s H  o"R                  5       PM     nnUR                  SU 5       Vs/ s H  o"R                  5       PM     nn[        X45       VVs0 s H  u  pVXV_M	     nnnUR	                  5        VV	s/ s H  u  pXS-   U	 PM     nnn	Su  ppU H  nUR                  S5       H  nUR                  S5       Vs/ s H  nUR                  5       PM     nn[        U5      S:  d  MC  US   US   nnUS:X  a  UR                  S	5      n
Mf  US
:X  a  [        UR                  S5      S5      nM  US:X  a  [        UR                  S5      S5      nM  US;   d  M  [        UR                  S5      S5      nM     M     U R                  5       nSnU(       a\  SnU HK  nSR                  U5      nUR                  U5      (       d  M,  US [        U5      *  R                  5       nSnMM     U(       a  M\  [        U5      u  nnUS:X  aN  U HH  nUnS H=  nUU;   d  M  SUS UR                  U5      [        U5      -    -   n[        U5      u  nn  MF     MJ     UUUXX4$ s  snf s  snf s  snnf s  sn	nf s  snf )Nr   z\(z\)r"   )NNNNrz  rj  originrx   r^  0x   r_  famr`  TFz({0})r  )r  r  r  zCPU @ )r  finditerstartziprQ  r<   r~   rr   r  r  r   r  r  find)r  r  r  startsendsr  vinsidesr  end	vendor_idr^  r_  r`  insidepairr@   namer,  brand
is_workingfullhz_brandr  r  r  s                             r   _parse_cpu_brand_string_dxr  w  si   
 !kk%<
=<779<
=KKz:;:q:; ./.TQAD./8?H*%JQw%H '?#eVll3d"jjo
.o1779o4
.	$i!mq'47%DxS!Y		ELL&+X	d#R(U	"	"%,,t$b)V     
			*f
..
 4nnT;SYJ%%'EJ	  z +515 f2$u{
R62775>CJ67
7R.r2_Xu
	 %  
5%eDD] >;/H /s   I;J 1JJJc                     U R                  S5      SS  U R                  S5      SS  -   U R                  S5      SS  -   U R                  S5      SS  -   U R                  S5      SS  -   U R                  S5      SS  -   nU Vs/ s H$  o"R                  S5      S	   R                  5       PM&     nnU Vs/ s H  n[        U5      PM     nnS nS	nU H+  n[        U Vs/ s H  owS LPM     sn5      nX:  d  M'  UnUnM-     U(       d  0 $ Uu  pppnS
U ;   Gaw  X R	                  S
5      S  R                  S5      S	   nUR                  5       R                  5       nU Vs/ s H!  owR                  5       R                  S5      PM#     nnU Vs/ s H6  owS	   R                  5       R                  5       US   R                  5       0PM8     nnU H  n[        UR                  5       5      S	   n[        UR                  5       5      S	   nUS:X  a  UR                  S5      nMT  US:X  a  [        UR                  S5      S5      nMw  US:X  a  [        UR                  S5      S5      nM  US;   d  M  [        UR                  S5      S5      nM     / nS H@  nUU ;   d  M  UR                  U R                  U5      S   R                  S5      S	   5        MB     / nU H`  nUR                  S5      S   R                  S5      S	   R                  5       nUR                  S5       H  nUR                  U5        M     Mb     UR                  5         [        U5      u  nn
US:X  a  Sn
[        U	5      nUUUUUUS.nU(       a#  US:w  a  [        UU
5      US'   [        X5      US'   U(       a#  US:w  a  [!        UU
5      US'   [!        X5      US'   UR#                  5        VVs0 s H  u  nnU(       d  M  UU_M     snn$ s  snf s  snf s  snf s  snf s  snf s  snnf ! [$         a   n[&        R)                  U5         S nA0 $ S nAff = f)Nz CPU0:r"   z CPU1:z CPU:z
CPU0:z
CPU1:z
CPU:r4   r   z	  Origin==r  rx   r^  r  r  r_  r  )z  Features=z  Features2=z  AMD Features=z  AMD Features2=<>rz  r  r  )r   rV  r^  r_  r`  rb  rW  rX  rY  r   )r<   r~   r  sumr  r   rN  rL   r  r  r  r  rf  r  r   r  r  rQ  r=   r  rA   )rH   lineslcpu_stringsbest_stringhighest_countr  r@   rZ  r   r  r   r  r^  r_  r`  fieldsfieldr  r,  
flag_linescategoryrb  r,   flagrY  rM   r  r  rX   s                                 r   _parse_dmesg_outputr    s%   Y
,,x
 
$
LL12
LL!" LLAB  LLAB	 
 LL12% .3
3U774=!!#U%
3 9>>1+A.+> +-jz2z!z235MK	   

9JUG)O F;;{+-/55d;A>6LLN  "6+126aWWY__S!662<BCFqdjjl  "QqTZZ\2F6Cu

a D #ExS!Y		ELL&+X	d#R(U	"	"%,,t$b)V  *Xh&fll8,Q/55d;A>? Y %d
**S/!

"
"3
'
*
0
0
24zz#t	LL   **, 1A- e5%i0= 
$ }-$9-$O4 ! 5i G4}-,]EB4(:4::<	-<41a1$!Q$<	--_ 4 ? 3 3Cl 
. 	,,s 		s   BP +O<.P 4P	P P
*
P 8P 	AP (PP =P	B"P /*P EP P1P8P <P 
Q%Q  Qc                 6   SS K nSu  p#U R                  5       n UR                  SU 5      (       a  SnSnX#4$ UR                  SU 5      (       a  SnSnX#4$ UR                  S	U 5      (       a  S
nSnX#4$ UR                  SU 5      (       a  SnSnX#4$ UR                  SU 5      (       a  S
nSnX#4$ UR                  SU 5      (       a  SnSnX#4$ UR                  SU 5      (       a  SnSnX#4$ UR                  SU 5      (       a  SnSnX#4$ UR                  SU 5      (       a  SnSnX#4$ UR                  SU 5      (       a  SnSnX#4$ U S:X  a  SnSnX#4$ U S:X  a  SnSnX#4$ UR                  SU 5      (       a  SnSnX#4$ UR                  SU 5      (       a  SnSnX#4$ ) Nr   r  z4^i\d86$|^x86$|^x86_32$|^i86pc$|^ia32$|^ia-32$|^bepc$r.      z9^x64$|^x86_64$|^x86_64t$|^i686-64$|^amd64$|^ia64$|^ia-64$r/  @   z^armv8-a|aarch64|arm64$r1  z/^armv7$|^armv7[a-z]$|^armv7-[a-z]$|^armv6[a-z]$r0  z"^armv8$|^armv8[a-z]$|^armv8-[a-z]$z ^ppc32$|^prep$|^pmac$|^powermac$PPC_32z^powerpc$|^ppc64$|^ppc64le$r2  z^sparc32$|^sparc$SPARC_32z^sparc64$|^sun4u$|^sun4v$SPARC_64z^s390x$r3  mipsr4  mips64r5  z^riscv$|^riscv32$|^riscv32be$r6  z^riscv64$|^riscv64be$r7  )r  r   r  )r   r  r9  r   s       r   r8  r8  
  s<   
"((* HHDoVV	$	$\ 
[ 	hhK_]]	$	$V 
S 	hh)?;;	$	$N 
M 	hhA?SS	$	$H 
G 	hh4oFF	$	$B 
? 	hh2ODD	$	$: 
9 	hh-??	$	$4 
1 	hh#_55	$	$, 
+ 	hh+_==	$	$& 
# 	hhz?++	$	$ 
 	$	$ 
 !	$	$ 
 	hh/AA	$	$
 
	 	hh'99	$	$	r   c                     SU-  nX-  S:  nU$ )Nr"   r   rb   )regbitmaskis_sets       r   _is_bit_setr   C  s    	S
*q.r   c                 &   [         R                  5       (       d  U R                  S5        g[         R                  5       u  pUS:w  a  U R                  S5        gUR	                  5        HQ  nUR                  5       R                  5       nUR                  S5      (       d  M9  UR                  S5      (       a    g  g   SnSnUR	                  5        H  nUR                  5       R                  5       nUR                  S5      (       a  UR                  S	5      (       a  SnMQ  UR                  S
5      (       d  Mi  UR                  S	5      (       d  M  SnM     U R                  SU5        U R                  SU5        U(       + =(       d    U(       + $ )NzFailed to find sestatus.Fr   z$Failed to run sestatus. Skipping ...zcurrent mode:	enforcingTallow_execheaponallow_execmemzcan_selinux_exec_heap:zcan_selinux_exec_memory:)
rd   r   rA   r   rk  r~   r   
startswithr  rI   )tracer   rH   r,   can_selinux_exec_heapcan_selinux_exec_memorys         r   _is_selinux_enforcingr
  I  sL   !!**'(	 !++-!O**34	  T				$	___%%
mmK   !   T				$	__%&&4==+>+>''DMM$,?,?! ! .0EF02IJ"	"	A*A&ABr   c                     0 nU  Hb  nX   nX1;   a  X   U:X  a  XBU'   M  U(       d  M#  US:X  a  M+  US:X  a  M3  [        U5      [        :X  a  UR                  S5      (       a  M^  XBU'   Md     U$ )Nr  r  r  )typer:   r  )rM   acceptable_valuesfiltered_inforO   r,  s        r   #_filter_dict_keys_with_empty_valuesr  m  s    S
)% 	%# 
 f_ b[ 
%[CE,,U333 6 	r   c                   6    \ rS rSrSS/ 4S jrS rS rS rSrg)	ASMi  Nrb   c                 n    Xl         X l        X0l        S U l        S U l        S U l        S U l        SU l        g rH  )restypeargtypesmachine_code
prochandlemmfuncaddresssize)r   r  r  r  s       r   r   ASM.__init__  s5    ,-"$/$'$)$,$)r   c                 `   [         R                  SU R                  5      n[        R                  " [        U5      5      U l        [        R                  (       Ga  [        U5      nUS:  a  Sn[        R                  " S5      n[        R                  " S5      n[        R                  R                  R                  n[        R                  Ul        U" S [        R                  " U5      X45      U l        U R                  (       d  [!        S5      e[        R"                  " [        R                  [        R                  [        R                  [        R                  5      " [        R$                  5      nU" U R                  X5      S:  a  [!        S5      e[        R                  " S5      n[        R                  " S5      n[        R                  R                  R&                  n	U	" [        R                  " U R                  5      [        R                  " U5      U[        R(                  " U5      5      n
U
(       d  [!        S5      eU R*                  (       dY  [        R                  R                  R,                  n[        R                  Ul        [        R                  " U" 5       5      U l        [        R                  R                  R/                  U R*                  [        R                  " U R                  5      [        R                  " U5      5      n
U
(       d  [!        S	5      eOSS
KJnJnJnJnJnJn  [         R                  SU R                  5      n[        U5      U l        U" SU R                  X-  UU-  U-  S9U l        U R<                  R?                  U5        [        R@                  " [        RB                  RE                  U R<                  5      5      U l        [        R"                  " U R                  /U RF                  Q76 nU" U R                  5      U l$        g )Nr   i      zFailed to VirtualAllocr   zFailed to memmover  zFailed VirtualProtectzFailed FlushInstructionCache)mmapMAP_PRIVATEMAP_ANONYMOUS
PROT_WRITE	PROT_READ	PROT_EXECr  )rb  prot)%bytesr;   r  ctypesc_size_trr   r  rd   r   c_ulongwindllkernel32VirtualAllocc_void_pr  r  r=   	CFUNCTYPE_memmove_addrVirtualProtectbyrefr  GetCurrentProcessFlushInstructionCacher  r  r   r!  r"  r#  r  r&   	addressofc_intfrom_bufferr  r  )r   r  r  
MEM_COMMITPAGE_READWRITEpfnVirtualAllocmemmovePAGE_EXECUTEold_protectpfnVirtualProtectrespfnGetCurrentProcessr  r  r   r!  r"  r#  functypes                      r   compileASM.compile  s   C!2!23,ooc,/0$)
l
4
VmFTv&:NN3'>]]++88?#__?!$(=zZ4<
,,
,
-- foovQWQ`Q`abhbvbvw7dllL/!3
'
(( ..&<";}}--<<	6??4<<8&//$:OQ]_e_k_klw_x	y3

+
,, //!==11CC#)?? oo&:&<=DO				5	5doovW[WcWcGdflfufuvzf{	|3

2
33  WV **S$"3"34<< 49"dii{'BV_I_bkIkl47 77==""6<<#;#;DGG#DE4< dll;T]];(t||$$)r   c                 &    U R                  5       nU$ rM  )r  )r   rv  s     r   runASM.run  s    99;&	-r   c                    [         R                  (       at  [        R                  " S5      n[        R                  R
                  R                  [        R                  " U R                  5      [        R                  " S5      U5        OU R                  R                  5         S U l        S U l
        S U l        S U l        SU l        g )Ni   r   )rd   r   r&  r(  r)  r*  VirtualFreer,  r  r'  r  r  r  r  r  )r   MEM_RELEASEs     r   freeASM.free  s}    ';	==%%foodll&CV__UVEWYde77==?$/$'$)$,$)r   )r  r  r  r  r  r  r  r  )	r]   r^   r_   r`   r   r@  rC  rH  ra   rb   r   r   r  r    s     2B 6%pr   r  c                   d    \ rS rSrSS jrSS/ 4S jrS rS rS rS	 r	S
 r
S rS rS rS rSrg)CPUIDi  Nc                 B    Uc  [        SS5      n[        U5      U l        g )NF)r   r
  is_selinux_enforcing)r   r  s     r   r   CPUID.__init__  s"    
]5 4E:$r   rb   c                 >    [        XU5      nUR                  5         U$ rM  )r  r@  )r   r  r  r  asms        r   	_asm_funcCPUID._asm_func  s    G|,#++-	*r   c                     [        [        R                  SU5      nUR                  5         UR	                  5       nUR                  5         U$ )Nrb   )r  r&  c_uint32r@  rC  rH  )r   r  rP  rv  s       r   _run_asmCPUID._run_asm  s6    FOOR.#++-779&((*	-r   c                     U R                  SS5      nU R                  SS5      nU R                  SS5      n/ nXU4 H+  nS H"  nUR                  [        XV-	  S-  5      5        M$     M-     SR                  U5      nU$ )N   1         ér      r        r3   )rU  r  chrr;   )r   ebxecxedxr  r  r@   s          r   get_vendor_idCPUID.get_vendor_id  s    	# 		# 		# )_cqS#(d*+,   ggi )	r   c                     U R                  SS5      nUS-	  S-  nUS-	  S-  nUS-	  S-  nUS-	  S-  nUS	-	  S-  nUS
-	  S-  nSnUS;   a  Xt-   nOUnUS;   a  US-  U-   nUUUUS.$ )N      s   r      r  r]     rD   r     r_  )rh  )r  rh  )r^  r_  r`  ra  rU  )	r   eaxstepping_idr_  	family_idra  extended_model_idextended_family_idr`  s	            r   get_infoCPUID.get_info  s    	# S +!8s
%ax3)2I$.byC'r	T)&$*66'"e+5 $	
 r   c                 (    U R                  S5      nU$ )Ns      rk  )r   max_extension_supports     r   get_max_extension_supportCPUID.get_max_extension_support=  s    -- 
r   c                    U R                  SS5      nU R                  SS5      n0 S[        US5      _S[        US5      _S[        US	5      _S
[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S [        US!5      _S"[        US#5      _S$[        US%5      _0 S&[        US'5      _S([        US)5      _S*[        US+5      _S,[        US-5      _S.[        US/5      _S0[        US15      _S2[        US35      _S4[        US55      _S6[        US75      _S8[        US95      _S:[        US;5      _S<[        US=5      _S>[        US?5      _S@[        US5      _SA[        US5      _SB[        US	5      _SC[        US5      _E0 SD[        US5      _SE[        US5      _SF[        US5      _SG[        US5      _SH[        US5      _SI[        US5      _SJ[        USK5      _SL[        US5      _SM[        US5      _SN[        US5      _SO[        US!5      _SP[        US%5      _SQ[        US'5      _SR[        US)5      _SS[        UST5      _SU[        US+5      _SV[        US-5      _E[        US/5      [        US15      [        US35      [        US55      [        US75      [        US95      [        US;5      [        US=5      [        US?5      SW.	EnUR                  5        VVs/ s H  u  pVU(       d  M  UPM     nnnUS:  Gan  U R                  SXSY5      nU R                  SXSZ5      n0 S[[        US	5      _S\[        US5      _S][        US5      _S^[        US5      _S_[        US5      _S`[        US5      _Sa[        US5      _Sb[        USK5      _Sc[        US5      _Sd[        US5      _Se[        US5      _Sf[        US!5      _Sg[        US#5      _Sh[        US%5      _Si[        US'5      _Sj[        US)5      _Sk[        UST5      _0 Sl[        US+5      _Sm[        US-5      _Sn[        US/5      _So[        US15      _Sp[        US35      _Sq[        US55      _Sr[        US75      _Ss[        US95      _St[        US;5      _Su[        US=5      _Sv[        US?5      _Sw[        US5      _Sx[        US5      _Sy[        US	5      _Sz[        US5      _S{[        US5      _S|[        US5      _E[        US5      [        US5      [        USK5      [        US5      [        US5      [        US5      [        US-5      [        US=5      S}.EnUR                  5        VVs/ s H  u  pVU(       d  M  UPM     nnnXH-  nUS~:  Ga	  U R                  S5      nU R                  S5      n0 S[        US5      _S[        US5      _S[        US	5      _S
[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S [        US!5      _S"[        US#5      _S$[        US%5      _0 S[        US)5      _S[        UST5      _S[        US-5      _S.[        US/5      _S0[        US15      _S[        US35      _S[        US55      _S[        US75      _S[        US;5      _S[        US=5      _S[        US?5      _S[        US5      _S[        US5      _S[        US	5      _S[        US5      _S[        US5      _S[        US5      _E0 S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        USK5      _S[        US5      _S[        US5      _S[        US5      _S[        US!5      _S[        US#5      _S[        US%5      _S[        US)5      _S[        US+5      _S[        US-5      _S[        US/5      _S[        US15      _S[        US55      _E[        US75      [        US95      S.EnUR                  5        VVs/ s H  u  pVU(       d  M  UPM     nnnXH-  nUR                  5         U$ s  snnf s  snnf s  snnf )Nrg  r[  rZ  fpur   vmer"   der#   pserD   tscr  msrrg   paer  mce   cx8r]  apicr   sep   mtrrri  pge   mca   cmovrh  patr  pse36   pn   clflush   dts   acpi   mmx   fxsrr^  sse   sse2   ss   ht   tm   ia64   pbe   pni	pclmulqdqdtes64monitords_cplvmxsmxesttm2ssse3cid
   fmacx16xtprpdcmpciddcasse4_1sse4_2rj  x2apicmovbe)	popcnttscdeadlineaesxsaveosxsaveavxf16crdrnd
hypervisors   1s
      s
      sgxbmi1hleavx2smepbmi2ermsinvpcidrtmpqmmpxpqeavx512favx512dqrdseedadxsmap
avx512ifmapcommit
clflushoptclwbintel_ptavx512pfavx512eravx512cdshaavx512bwavx512vlprefetchwt1
avx512vbmiumippkuospkeavx512vbmi2)gfnivaes
vpclmulqdq
avx512vnniavx512bitalgavx512vpopcntdqrdpidsgx_lcl       s
     s
     syscallmpnxmmxextfxsr_optpdpe1gprdtscplm3dnowext3dnowlahf_lm
cmp_legacysvmextapic
cr8_legacyabmsse4amisalignsse3dnowprefetchosvwibsxopskinitwdtlwpfma4tce
nodeid_msrtbmtopoextperfctr_core
perfctr_nbdbx)perftscpci_l2i)rU  r   rQ  rf  )	r   rt  rc  rb  rb  r  r  ra  extended_flagss	            r   	get_flagsCPUID.get_flagsH  s3   	# 		#B;sAB;sAB +c1
B 	;sA	B
 	;sAB 	;sAB 	;sAB 	;sAB 	;sAB 
KQB 	;sBB 
KR B 	;sBB 	;sBB  
KR !B" 	;sB#B$ [b!%B& +c2
'B( {3#)B, 	;sB-B. 
KR /B0 	;sB1B2 
KR 3B4 	;sB5B6 
KR 7B8 +c2
9B: +c2
;B< +c2
=B> 
KR ?B@ 	;sBABD 	;sAEBF S!$GBH k#q!IBJ {3"KBL k#q!MBN 	;sAOBP 	;sAQBR 	;sASBT 	;sAUBV [a WBX 	;sBYB\ 	;sB]B^ 
KR _B` 
KR aBb 
KR cBf 
KR gBh 	;sBiBj k#r"kBl k#r"mBn k#r"oBp [b!qBr #r"sB'sBb!3#sBR b!c2&CB%J 
,!1%
, a	
3 

3B 
KQB [a 	B
 
KQB [a B [a B [a B [a B C$B 
KR B 
KR B 
KR B  
KR !B" C$#B$ S"%%B& {3#'B( 
KR )B* [b!+B, ;sB'-B. C$/B0 ;sB'1B2 [b!3B4 S"%5B6 S"%7B8 S"%9B: S"%;B< 
KR =B> S"%?B@ S"%ABD KQ'EBF ;sA&GBH [a IBJ 
KQKBL k#q!MBP KQ'QBT a a sB'sB' b)#C, #r" 3#AB>J $2#7#7#9?#941QQ#9>?5 j(	
3 

3B	KQB	KQB 	;sAB 
KQ	B
 
KQB 
KQB 
KQB 
KQB 
KQB [a B C$B [b!B 
KR B 
KR B  [b!!B" 
KR #B$ k#r"%B( 	;sB)B* 	;sB+B. {3#/B0 
KR 1B2 [b!3B4 S"%5B6 C$7B8 {3#9B< 	;sB=B> S"%?B@ k#r"ABD C#EBF ;sA&GBH 
KQIBJ C#KBL ;sA&MBN 
KQOBP k#q!QBR KQ'SBT k#q)UBV [a WBX 
KR YBZ 
KR [B\ {3#]B^ 
KR _Bb 
KR cBd [b!eBf 
KR gBj ;sB'kBn 
KR oBp C$qBr [b)sBt ;sB'uBx 
KR yBz C$C$}B>J $2#7#7#9?#941QQ#9>?5**,	,w -x @v @s$   ;c,c,,c2=c2<c8c8c                 L   SnUS:  a|  / SQnU Hr  nU R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      nXVXx4 H  n	S H  n
U[        X-	  S	-  5      -  nM     M!     Mt     UR                  S
5      R                  5       nU$ )Nr3   l       )s     s     s     s   rY  rZ  r[  r\  r_   )rU  r`  r~   )r   rt  r   instructionsinstructionrl  ra  rb  rc  r  r@   s              r   get_processor_brandCPUID.get_processor_brand]  s    / j(<
 #{
--C --C --C --C ##ch$.//o  $E #N $))$/557/	r   c                 l    0 nUS:  a  U$ U R                  S5      nUS-  S-  US-	  S-  US-	  S-  S	.nU$ )
Nl       s
     r_  r  ri  rh  r  i  )size_bassociativityline_size_brk  )r   rt  
cache_inforb  s       r   	get_cacheCPUID.get_cache  sa    * Z'
 		# TzT!Ri3&2I'* 
r   c                   ^ S n[         R                  S:X  az  S n[        R                  " [        R                  5      [        R                  " [        R                  5      4nU R                  X#/ SQ5      nUR                  mU4S jnXTl        UnU$ [         R                  S:X  a(  [        R                  nSnU R                  X#/ SQ5      nUnU$ )N32bit)   Us   rX        1s   ]s   Ms   s      ]   c                     > [         R                  " S5      n [         R                  " S5      nT" [         R                  " U 5      [         R                  " U5      5        U R                  S-  S-  UR                  -  nU$ )Nr   r  l        )r&  rT  r0  r,  )highlowrv  old_funcs      r   new_func&CPUID.get_ticks_func.<locals>.new_func  s_    ??1D
//!
CV\\$c!23 zzR#55BFMr   64bitrb   )	   HrX  r&  r'  r1  s    r1  s   	r)  )rd   r   r&  POINTERc_uintrQ  r  c_uint64)r   rv  r  r  get_ticks_x86_32r.  get_ticks_x86_64r-  s          @r   get_ticks_funcCPUID.get_ticks_func  s    &__7~~fmm,fnnV]].KL8nnW" ##8 $6( 
-' '!__78nnW
 6	-r   c                     SSK Jn  U R                  5       nUR                  5       nU" S5        UR                  5       nXC-
  nUR	                  5         U$ )Nr   )sleepr"   )timer:  r7  r  rH  )r   r:  ticks_fnr  r  r  s         r   
get_raw_hzCPUID.get_raw_hz  sE      "(
--/%(#;%
--/	,r   )rM  rM  )r]   r^   r_   r`   r   rQ  rU  rd  rq  ru  r  r  r!  r7  r=  ra   rb   r   r   rK  rK    sH    ; "BR 
 FBRj3l.8tr   rK  c                     SSK Jn   [        SS5      n0 nUR                  [        l        UR                  [        l         [        [        R                  5      u  p4US;  a#  UR                  S5        UR                  US5      $ [        U5      nUR                  (       a#  UR                  S5        UR                  US5      $ UR                  5       nUR!                  U5      nUR#                  5       nUR%                  U5      nUR'                  5       n	[)        U	5      n	[+        U5      u  pUR-                  5       SU[/        X5      [/        U	S5      [1        X5      [1        U	S5      US   US	   US
   US   US   US   US   UR3                  U5      S.n[5        U5      nUR7                  5         UR                  US5      $ ! [8         aw  nSSKJn  U" 5       nSR?                  URA                  S5       Vs/ s H  nSRC                  U5      PM     Os  snf sn5      S-   Ul"        UR                  US5      s SnA$ SnAff = f)z
Warning! This function has the potential to crash the Python runtime.
Do not call it directly. Use the _get_cpu_info_from_cpuid function instead.
It will safely call this function in another process.
r   r
   Tr.  r/  -Not running on X86_32 or X86_64. Skipping ...z"SELinux is enforcing. Skipping ...r3   r  r  r  r^  r_  r`  ra  )r   rU  rV  rW  rX  rY  r   r[  r\  r]  r^  r_  r`  ra  rb  r6   r4   r8   NF)#r   r   r   r   sysrV   r   rW   r8  rd   r   rA   r[   rK  rM  ru  r!  rq  r  r=  r   r  rd  r  r  r  r  r0   r=   r>   r7   r;   r<   r   r   )r   r  rM   r9  r   cpuidrt  r   r   r   rY  r  rX   r7   r?   r@   s                   r   _get_cpu_info_from_cpuid_actualrD    s    	tT	
 mmmm7#:556*$ 
%	%::=>
--d
## ,%
::23
--d
##  99;45*		$--.CD/  ) +) 1A-'')2=H.y!<%m;!)Q/x(#M2'8JM(^*+OO12%
$* 
-T	2$--/ 	dE"" 	 #"|*wwz7G7G7MN7M!**1-7MNORVV%*	tT	""	#s8    AG >G C/G 
I+I 9H
&I :I Ic                     [         R                  n[         R                  n[        5       nU[         l        U[         l        U R	                  [        U5      5        g rM  )rB  rV   rW   rD  putrF  )queueorig_stdoutorig_stderrrH   s       r   +_get_cpu_info_from_cpuid_subprocess_wrapperrJ  =  s;    zzzz
)
+;vr   c                  <   [         R                  S5        SSKJn Jn  [
        R                  (       d  [         R                  S5        0 $ [        [
        R                  5      u  p#US;  a  [         R                  S5        0 $  [        (       Ga  U" 5       nU " [        U4S9nUR                  5         UR                  5       (       a(  UR                  S5        UR                  5       (       a  M(  UR                  S:w  a  [         R                  S5        0 $ UR!                  5       (       a  [         R                  S	5        0 $ [#        UR%                  5       5      nSS
KnUR)                  SS9nSU;   a"  US   (       a  [         R+                  US   5        SU;   aY  US   (       aO  [,        R.                  R+                  SR1                  US   5      5        [,        R.                  R3                  5         SU;   aY  US   (       aO  [,        R4                  R+                  SR1                  US   5      5        [,        R4                  R3                  5         SU;  a  [         R                  S5        0 $ SU;   aN  US   (       aD  [         R                  S5        [         R+                  US   5        [         R+                  S5        0 $ SU;   a!  US   (       a  [         R+                  S5        0 $ SU;  d
  US   (       d  [         R                  S5        0 $ US   $ [,        R.                  n	[,        R4                  n
[7        5       nU	[,        l        U
[,        l        [         R9                  5         US   $ ! [:         a   n[         R                  U5         S
nA0 $ S
nAff = f)z
Returns the CPU info gathered by querying the X86 cpuid register in a new process.
Returns {} on non X86 cpus.
Returns {} if SELinux is in enforcing mode.
z Tying to get info from CPUID ...r   )ProcessQueuezCan't CPUID. Skipping ...r@  rA  )targetargsz,Failed to run CPUID in process. Skipping ...z7Failed to get anything from CPUID process. Skipping ...Nr  )indentrH   rV   z{0}
rW   rY   z6Failed to get is_fail from CPUID process. Skipping ...rX   z
Failed ...rM   z:Failed to get return info from CPUID process. Skipping ...)r  r-   r   rL  rM  rd   r   rA   r8  r   CAN_CALL_CPUID_IN_SUBPROCESSrJ  r  is_aliver;   exitcodeemptyrK  r   pprintPrettyPrinterr&   rB  rV   r   r'   rW   rD  r0   r=   )rL  rM  r9  r   rG  r
  rH   rU  pprH  rI  rX   s               r   _get_cpu_info_from_cpuidrX  H  s    	23+ 		,,+,	) *445 	$$	,,>?	)G!!75AQ1779 
FF1I 
 jjAoLL?@I kkmmLLJKI %F			Q		'B 6fX.]]6(#$6fX.ZZgnnVH%567ZZ6fX.ZZgnnVH%567ZZ\\JKY 6%=\\@A]]6%=!]]< YFvi0]]< YV6&>\\NOY&> ;;+-63:3:
??
. 	,,s 		sL   A*M1 /&M1 +M1 D.M1 1AM1 &M1 ,&M1 M1 AM1 1
N;NNc                  j   [         R                  S5         [        R                  5       (       d  [         R	                  S5        0 $ [        R                  5       u  pU S:w  a  [         R	                  S5        0 $ [        SUSSSS	S
5      n[        SUSSSSSS5      n[        SUSSS5      n[        SU[        SS5      n[        SU[        SS5      n[        SU[        SS5      n[        SUSSS5      n[        SUSSSSS5      n	U	(       a   U	R                  5       n	U	R                  5         U(       d   [        SS5       H  n
SR                  U
5      n[        SUSSU5      nU(       d  M,  UR                  S5       Vs/ s H  oR                  S5      PM     nn[        U5      nSU;   d  Mn  US   S:X  d  My  SU;   d  M  US   n  O    [        SUSSS S!S"S#S$5	      nUR                  5       R                  S%5      R!                  5       n[#        U5      nS&u  nn [%        U5      u  nnUU['        U5      U	UUUUS'.nU(       a  US(:X  a  UnS)nOU(       a  US(:X  a  Un[)        UU5      S*:  a  [+        UU5      US+'   [)        UU5      US,'   [)        UU5      S*:  a  [+        US)5      US-'   [)        US)5      US.'   [-        USSSS/.5      n[         R/                  5         U$ s  snf ! [         a     GN(f = f! [         a     Nf = f! [         a!  n[         R	                  U5        0 s SnA$ SnAff = f)0z]
Returns the CPU info gathered from /proc/cpuinfo.
Returns {} if /proc/cpuinfo is not found.
z(Tying to get info from /proc/cpuinfo ...z*Failed to find /proc/cpuinfo. Skipping ...r   z-Failed to run cat /proc/cpuinfo. Skipping ...FNr3   r  z	vendor idvendorTz
model namer   	processoruarchz
cache sizer  r^  r_  z
cpu familyHardwarerb  FeaturesASEs implementedr  zcache{0}r  r  level3r  zcpu MHzz	cpu speedclockzcpu MHz dynamiczcpu MHz staticr  rH  )rU  rV  rc  rb  r   r^  r_  r`  r  r  r  rW  rY  rX  r   r^  r_  r`  )r  r-   rd   rm   rA   r   rw  r  r<   rf  ranger   rP  r=   r   r  r~   r   r  r  r  r  r  r0   )r   rH   r  r   
cache_sizer^  r_  r`  hardwarerb  ir  r,  r  r   rY  r  rM   rX   s                      r   _get_cpu_info_from_proc_cpuinforh    s>    	:;V		$	$	&	&
<<<=
9!224*1_
<<?@
9 b+{HU)tVT4uk[bc/%r<@*vsB
;(
UFCW
5%eVS"l;&vtR<( UFD$EW
X%
;;=5::< 
	1b\a TvtT48U-2[[-=>-=E{{3-=e>5ke	E	eGn3%&Mz  b)['Sdfvw)oo&&u-335) +) #-1/B=%
 *:6

$ 
-50=5	U*9 }e,v5$9-$O4 !,]EB4y%(61 5i C4(A64	,Tq!VW3X	Y$	//	+c ?
  		 
 B 	 	,,s	)s   /L 2L :B9L 44K& ,K& ?K!K& .K& 9K& K& L K& 
AL K7 *B6L !K& &
K40L 3K44L 7
LL LL 
L2L-'L2-L2c                     [         R                  S5         Su  p[        R                  5       (       d  [         R	                  S5        0 $ [        R                  5       u  p#US:w  a  [         R	                  S5        0 $ UR                  S5      S   R                  S5      S   n U R                  S	5      nUS
:w  d   eU SUS-    R                  5       R                  5       n U R                  S5      (       a  SnOU R                  S5      (       a  SnU R                  S5      R                  S5      R                  5       n [        U 5      n [        X5      [        X5      [        X5      [        X5      S.n[        U5      n[         R!                  5         U$ ! ["         a!  n[         R	                  U5        0 s SnA$ SnAff = f)z[
Returns the CPU info gathered from cpufreq-info.
Returns {} if cpufreq-info is not found.
z'Tying to get info from cpufreq-info ...r  z)Failed to find cpufreq-info. Skipping ...r   z(Failed to run cpufreq-info. Skipping ...zcurrent CPU frequency isr"   r4   r  r  r#   r  r  r  r   )rW  rX  rY  r   N)r  r-   rd   r   rA   r   r<   r  r~   r   r  r  r   r  r  r  r0   r=   )r  r  r   rH   rg  rM   rX   s          r   _get_cpu_info_from_cpufreq_inforj    s    	9:%/(		$	$	&	&
<<;<
9!..0*1_
<<:;
9\\45a8>>tDQG(mmD!	
b/a!A#$$&,,.(u55__U#**51779()( 4HD/@&x7"83	
$ 
-T	2$	//	+ 	,,s	)s*   3F 2F >DF 
G!F=7G=Gc            	         [         R                  S5         [        R                  5       (       d  [         R	                  S5        0 $ [        R                  5       u  pU S:w  a  [         R	                  S5        0 $ 0 n[        SUSSSS5      nU(       aE  [        U5      nS	n[        X45      US
'   [        X45      US'   [        X45      US'   [        X45      US'   [        SUSSSS5      nU(       aE  [        U5      nS	n[        X45      US
'   [        X45      US'   [        X45      US'   [        X45      US'   [        SUSSS5      nU(       a  XRS'   [        SUSSS5      nU(       a  XbS'   O/[        SUSSS5      nU(       a  UR                  5       (       d  XbS'   [        SUSSS5      nU(       a#  UR                  5       (       a  [        U5      US'   [        SUSSS5      nU(       a#  UR                  5       (       a  [        U5      US'   [        SUSSS5      n	U	(       a#  U	R                  5       (       a  [        U	5      US'   [        SUSSS5      n
U
(       a0  U
R                  S5      S   R                  5       n
[        U
5      US'   [        SUSSS5      nU(       a0  UR                  S5      S   R                  5       n[        U5      US'   [        SUSSSS 5      nU(       a0  UR                  S5      S   R                  5       n[        U5      US!'   [        SUSSS"5      nU(       a0  UR                  S5      S   R                  5       n[        U5      US#'   [        SUSSS$S%S&5      nU(       a$  UR                  5       nUR                  5         XS$'   [!        USSSS'.5      n[         R#                  5         U$ ! [$         a!  n[         R	                  U5        0 s SnA$ SnAff = f)(zM
Returns the CPU info gathered from lscpu.
Returns {} if lscpu is not found.
z Tying to get info from lscpu ...z"Failed to find lscpu. Skipping ...r   z!Failed to run lscpu. Skipping ...FNzCPU max MHzzCPU MHzr  rW  rX  rY  r   zCPU dynamic MHzzCPU static MHzz	Vendor IDr   z
Model namerV  Modelz
CPU familyr`  Steppingr^  r_  z	L1d cache(rd  z	L1i cachere  zL2 cachez	L2d cacher[  zL3 cacherc  rb  r^  r_  rc  )r  r-   rd   r   rA   r   rw  r   r  r  rl  r  r<   r~   r  rf  r  r0   r=   )r   rH   rM   new_hzr  r  r  r`  r^  r_  rd  re  r[  rc  rb  rX   s                   r   _get_cpu_info_from_lscpurp  ;  s    	23W					
<<45
9!'')*1_
<<34
9	$eVT4	J&v&65$9&$H4 ! 5f D4,V;4(74eVT41BDTU&v&65$9&$H4 ! 5f D4,V;4(74dK@)$
UFD$
=%
eVT495EMMOOeVT4>&  K4>vtT:>((""$$(m4

UFD$
8%
u}}u:4=!%t[I*005a8>>@ 67I J4(dKP8>>sCAFLLN'=>W'X4#$UFD$
KP- &&s+A.446=1-@4UFD$
C- &&s+A.446=1-@4 UFD$EW
X%
;;=5::<=	,Tq!VW3X	Y$	//	+ 	,,s	)s*   /N> 2N> :MN> >
O)O$O)$O)c                     [         R                  S5        [        [        R                  5      u  pU S;   a  [         R                  S5        0 $ [        R                  5       (       d  [         R                  S5        0 $ [        R                  5       u  p#Ub  US:w  a  [         R                  S5        0 $ [        U5      n[         R                  5         U$ )zo
Returns the CPU info gathered from dmesg.
Returns {} if dmesg is not found or does not have the desired info.
z$Tying to get info from the dmesg ...)r3  zRunning on S390X. Skipping ...z"Failed to find dmesg. Skipping ...r   z&Failed to run "dmesg -a". Skipping ...)
r  r-   r8  rd   r   rA   rt   r   r  r0   )r9  r   r   rH   rM   s        r   _get_cpu_info_from_dmesgrr    s     	67 *445I	,,/0	) 		,,34	) !((*
NjAo	,,9:	)F#r   c                     [         R                  S5         [        R                  5       (       d  [         R	                  S5        0 $ [        R                  5       u  pUb  U S:w  a  [         R	                  S5        0 $ UR                  S5      S   R                  5       nU Vs/ s H  o3[        S5      ;   d  M  UPM     nnS	R                  U5      n[        USS
 S5      n[        US
S S5      n0 S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US
5      _S[        US5      _S[        US5      _S[        US5      _S[        US 5      _S![        US"5      _S#[        US$5      _S%[        US&5      _S'[        US5      _S([        US)5      _[        US*5      [        US+5      [        US,5      [        US-5      [        US.5      [        US/5      [        US5      [        US
5      [        US5      [        US5      [        US5      [        US5      S0.EnUR                  5        VVs/ s H  u  pxU(       d  M  UPM     nnnUR                  5         S1U0n	[        U	5      n	[         R                  5         U	$ s  snf s  snnf ! [          a!  n
[         R	                  U
5        0 s Sn
A
$ Sn
A
ff = f)2z
Returns the CPU info gathered from lsprop /proc/device-tree/cpus/*/ibm,pa-features
Returns {} if lsprop is not found or ibm,pa-features does not have the desired info.
z!Tying to get info from lsprop ...z#Failed to find lsprop. Skipping ...Nr   zEFailed to glob /proc/device-tree/cpus/*/ibm,pa-features. Skipping ...zibm,pa-featuresr"   0123456789abcfedr3   r]  r  mmurx  slbr#   rC  rD   dabrrg   ner  wtrr  mcrdsisrr   lpr  rir  dabrxri  sprg3r  rislbr  rW  rh  vpmzdss_2.05r  r  r  r  r  r^  r  )darpprzdss_2.02zdss_2.06lsd_in_dscrugr_in_dscrzsso_2.06lecfarebzlsq_2.07zdss_2.07rb  )r  r-   rd   r   rA   r   r<   r   rN  r;   r  r   rQ  rf  r  r0   r=   )r   rH   r,  srp  rq  rb  r  r  rM   rX   s              r   "_get_cpu_info_from_ibm_pa_featuresr    s>    	34t		'	'	)	)
<<56
9 "113*^zQ
<<WX
9 ,,(
)!
,
2
2
4%
=eD);$<<1e%
=
''%.% 
U1q\2	$
eAmR
 %P;tQP 	;tQP 	;tQ	P
 	;tQP 
Ka P +dA
P 	;tQP 	;tQP [q!P +dB
P +dB
P  [r"!P" [r"#P$ [r"%P& +dB
'P, 	;tR -P. D"%/P2 tR tR D"%D"% tR(tR( E1% eQ
q!
eR
 E2& E2&}P%f 
,!1%
,**, U
$ 
-T	2$	//	+G >v - 	 	,,s	)sT   /K 5K =&K #J89J8?F*K )J=:J= 7K 8K 
K.K)#K.)K.c                  :   [         R                  S5        [        R                  5       (       d  [         R	                  S5        0 $ [        R                  5       u  pUb  U S:w  a  [         R	                  S5        0 $ [        U5      n[         R                  5         U$ )z}
Returns the CPU info gathered from /var/run/dmesg.boot.
Returns {} if dmesg is not found or does not have the desired info.
z6Tying to get info from the /var/run/dmesg.boot log ...z5Failed to find /var/run/dmesg.boot file. Skipping ...r   z5Failed to run "cat /var/run/dmesg.boot". Skipping ...)r  r-   rd   r   rA   r   r  r0   )r   rH   rM   s      r   )_get_cpu_info_from_cat_var_run_dmesg_bootr  ;  s}     	HI 	))++	,,FG	) !779
NjAo	,,HI	)F#r   c                     [         R                  S5         [        R                  5       (       d  [         R	                  S5        0 $ [        R                  5       u  pUb  U S:w  a  [         R	                  S5        0 $ [        SUSSS5      n[        SUSSS	5      n[        SU[        SS
5      n[        SU[        SS5      n[        SU[        SS5      n[        SU[        SS5      n[        SUSSS5      R                  5       R                  5       nUR                  [        SUSSS5      R                  5       R                  5       5        UR                  [        SUSSS5      R                  5       R                  5       5        UR                  5         [        U5      u  p[        SUSSS5      n[        U5      nUU[        X5      [        US5      [        X5      [        US5      [        U5      S-  UUUUS.n[!        U5      n[         R#                  5         U$ ! [$         a!  n[         R	                  U5        0 s SnA$ SnAff = f)zO
Returns the CPU info gathered from sysctl.
Returns {} if sysctl is not found.
z!Tying to get info from sysctl ...z#Failed to find sysctl. Skipping ...Nr   z@Failed to run "sysctl machdep.cpu hw.cpufrequency". Skipping ...Fzmachdep.cpu.vendorTzmachdep.cpu.brand_stringzmachdep.cpu.cache.sizezmachdep.cpu.steppingzmachdep.cpu.modelzmachdep.cpu.familyr3   zmachdep.cpu.featureszmachdep.cpu.leaf7_featureszmachdep.cpu.extfeaturesr   r  r   rV  rW  rX  rY  r   r[  r^  r_  r`  rb  )r  r-   rd   r   rA   r   rw  r  r   r<   extendrf  r  r   r  r  r  r0   r=   )r   rH   r  r   re  r^  r_  r`  rb  rY  r  r   rM   rX   s                 r   _get_cpu_info_from_sysctlr  S  s    	345				 	 
<<56
9 "DDF*^zQ
<<TU
9 d4HI)tVT49ST/%a1IJ*vsA/EF(
UFC,?
@%eVS!-AB& UFD".D
E
K
K
M
S
S
U%,,z%r3OPVVX^^`a,,z%r3LMSSU[[]^**, 1A-d4EF) +) 2=H.y!<%m;!)Q/
Od*
$" 
-T	2$	//	+ 	,,s	)s*   /H 5H =F H 
I	(I>I	I	c                  L    [        5       n U R                  [        5       5        U $ )Q
Returns the CPU info gathered from sysinfo.
Returns {} if sysinfo is not found.
)_get_cpu_info_from_sysinfo_v1update_get_cpu_info_from_sysinfo_v2)rM   s    r   _get_cpu_info_from_sysinfor    s!     	&'*,-r   c                     [         R                  S5         [        R                  5       (       d  [         R	                  S5        0 $ [        R                  5       u  pUb  U S:w  a  [         R	                  S5        0 $ SnUR                  S5      S   R                  S	5      S   R                  5       nSn[        UR                  S
5      S   R                  S5      S   R                  5       5      n[        UR                  S5      S   R                  S5      S   R                  5       5      n[        UR                  S5      S   R                  S5      S   R                  5       5      n/ nUR                  S5       H_  n	U	R                  S5      (       d  M  U	R                  5       R                  5       R                  5        H  n
UR                  U
5        M     Ma     UR                  5         [        U5      u  pUnUU[        X5      [        X5      [        X5      [        X5      [!        U5      UUUUS.n[#        U5      n[         R%                  5         U$ ! [&         a!  n[         R	                  U5        0 s SnA$ SnAff = f)r  z,Tying to get info from sysinfo version 1 ...$Failed to find sysinfo. Skipping ...Nr   *Failed to run "sysinfo -cpu". Skipping ...r3   	CPU #0: "r"   "
z, stepping rz  z, model z	, family r4   		r  )r  r-   rd   r   rA   r   r<   r~   r  r  r   r  rf  r  r  r  r  r  r0   r=   )r   rH   r  r   re  r^  r_  r`  rb  r,   r  rY  r  r   rM   rX   s                   r   r  r    s'    	>?7				!	!
<<67
9 "--/*^zQ
<<>?
9 )LL-a066u=a@FFH/*m,Q/55c:1=CCEF(
fll:&q)//4Q7==?
@%v||K(+11#6q9??AB& %ll4 d
oof

""$**,
\\$ - ! **, 1A-) 2=H.y@%m;!)3&z2
$" 
-T	2$	//	+ 	,,s	)s1   /I 5I =DI CI 
J'J=JJc                     [         R                  S5         [        R                  5       (       d  [         R	                  S5        0 $ [        R                  5       u  pUb  U S:w  a  [         R	                  S5        0 $ SnUR                  S5      S   R                  S	5      S   R                  5       nSnUR                  S
5      S   R                  S5      S   R                  5       n[        UR                  S5      S   R                  S5      S   R                  5       5      n[        UR                  S5      S   R                  S5      S   R                  5       5      n[        UR                  S5      S   R                  S5      S   R                  5       5      nS n	U	" UR                  S5      S   5      U	" UR                  S5      S   5      -   U	" UR                  S5      S   5      -   n
U
R                  5         UR                  S5       Vs/ s H  o(       d  M  UPM     nnUS   R                  S5      S   R                  5       R                  5       nUR                  S5      R                  S5      R                  5       n[        U5      nUnSnUR                  S5      (       a  SnOUR                  S5      (       a  SnUU[        UU5      [        UU5      [        UU5      [        UU5      [!        U5      UUUU
S.n[#        U5      n[         R%                  5         U$ s  snf ! [&         a!  n[         R	                  U5        0 s SnA$ SnAff = f)r  z,Tying to get info from sysinfo version 2 ...r  Nr   r  r3   r  r"   r  z
Signature:r4   z	stepping rz  zmodel zfamily c                 (   / nU R                  S5      SS   Hw  nUR                  S5      (       d  UR                  S5      (       d    U$ UR                  5       R                  5       R                  S5       H  nUR	                  U5        M     My     U$ )Nr4   r"   z                r  r  )r<   r  r~   r   r  )rH   rv  r,   r  s       r   get_subsection_flags;_get_cpu_info_from_sysinfo_v2.<locals>.get_subsection_flags  s    6||D!!"%t??-..tt7L7Le = ##%++C0]]5 1 & =r   z
Features: z Extended Features (0x00000001): z Extended Features (0x80000001): zrunning at r  r  r  r   r  )r  r-   rd   r   rA   r   r<   r~   r  rf  r   r  r   r  r  r  r  r  r0   r=   )r   rH   r  r   re  	signaturer^  r_  r`  r  rb  r@   r  raw_hzrY  r   r  rM   rX   s                      r   r  r    s    	>?H				!	!
<<67
9 "--/*^zQ
<<>?
9 )LL-a066u=a@FFH/*ll<(+11$7:@@B)-a066s;A>DDFG(
iooh'*005a8>>@
A%yy)!,2237:@@BC& v||L9!<
=&HI!LMN&HI!LMN% **, ll4(
.(A1(%
.8>>-(+11399;&--&--e4::<-$]3-)
%__U5u5 2=%H.y%@%mU;!)U3&z2
$" 
-T	2$	//	+? /@ 	 	,,s	)sC   /L2 5L2 =FL2 
L-$L-*DL2 -L2 2
M<MMMc                  z   [         R                  S5         [        R                  (       a  [        R	                  5       (       d  [         R                  S5        0 $ [        R                  5       u  pUb  U S:w  a  [         R                  S5        0 $ UR                  S5      nU Vs/ s H*  nSU;   d  M  UR                  5       R                  S5      PM,     nnU VVs0 s H  u  pEU(       d  M  XE_M     nnnUR                  S5      n[        U5      u  pxUR                  S	5      n	S
n
U	(       a  [        U	5      n	UR                  S5      nU(       a  [        U5      S-  nUR                  S5      nU(       a  [        U5      S-  nSu  pnUR                  S5      =(       d    UR                  S5      nUR                  S5      nSU;   aC  UR                  S5      [        U5      S-
  :  a"  UR                  S5      n[        UUS-      5      nSU;   aC  UR                  S5      [        U5      S-
  :  a"  UR                  S5      n[        UUS-      5      nSU;   aC  UR                  S5      [        U5      S-
  :  a"  UR                  S5      n[        UUS-      5      nUR                  S5      U[        Xx5      [        X5      [!        Xx5      [!        X5      UUUUUS.n[#        U5      n[         R%                  5         U$ s  snf s  snnf ! [&         a!  n[         R                  U5        0 s SnA$ SnAff = f)za
Returns the CPU info gathered from WMI.
Returns {} if not on Windows, or wmic is not installed.
zTying to get info from wmic ...z4Failed to find WMIC, or not on Windows. Skipping ...Nr   z Failed to run wmic. Skipping ...r4   r  NameCurrentClockSpeedr  L2CacheSizer  L3CacheSize)r3   r3   r3   DescriptionCaptionr  Familyr"   rl  rm  Manufacturer)r   rV  rW  rX  rY  r   r[  rc  r^  r_  r`  )r  r-   rd   r   r   rA   r   r<   r  r   r  r   r  r  rr   r  r  r  r0   r=   )r   rH   r,  r  r  r  r   rY  scale_advertisedr   scale_actualr[  rc  r`  r_  r^  descriptionentriesrg  rM   rX   s                        r   _get_cpu_info_from_wmicr  0	  s   
 	12K			j&9&9&;&;
<<FG
9!**,*^zQ
<<23
9 ,,t
%*/
<%Q3!8 188:C %%
<!
'EDAQ414E%
' IIf%/$;O$L!- ii+,),!),9 ))M*-}%,=))M*-}%,= '&		-(@EIIi,@+c"'W]]84s7|A~E}}X1A6GMM'2S\!^C}}W1wq1u~57w}}Z83w<>I}}Z 1'!a%.!8 YY~. 3MT/	H&}G"9;""
$" 
-T	2$	//	+u =
't 	 	,,s	)sU   AL 5L L '
L5#LL L	0L	6HL L 
L:L5/L:5L:c                  ^  ^ [         R                  S5         [        R                  (       d  [         R	                  S5        0 $ [        R                  5       R                  5       n [        R                  5       n[        R                  5       n[        U5      u  p4[        R                  5       n[        U5      n[        U 5      u  pgUS:X  a  Sn[        U5      n[        R                  5       mU4S jn0 SU" S5      _SU" S	5      _S
U" S5      _SU" S5      _SU" S5      _SU" S5      _SU" S5      _SU" S5      _SU" S5      _SU" S5      _SU" S5      _SU" S5      _SU" S5      _SU" S 5      _S!U" S"5      _S#U" S$5      _S%U" S&5      _U" S'5      U" S(5      U" S)5      U" S*5      U" S+5      U" S,5      U" S-5      U" S.5      U" S/5      U" S05      U" S15      U" S25      U" S35      S4.En	U	R                  5        V
Vs/ s H  u  pU(       d  M  U
PM     n	n
nU	R                  5         UU [!        Xg5      [!        US5      [#        Xg5      [#        US5      U	S5.n[%        U5      n[         R'                  5         U$ s  snn
f ! [(         a!  n[         R	                  U5        0 s S6nA$ S6nAff = f)7zX
Returns the CPU info gathered from the Windows Registry.
Returns {} if not on Windows.
z+Tying to get info from Windows registry ...z$Not running on Windows. Skipping ...r  r  c                 "   > SU -	  nUT-  S:  nU$ )Nl        r   rb   )r  r  rv  r   s      r   r  +_get_cpu_info_from_registry.<locals>.is_set	  s!    

4<!#6
=r   rx  r   ry  r"   rz  r#   r{  rD   r|  r  r}  rg   r~  r  r  r  r]  r  r   sepamdr  r  r  r  ri  r  r  r  r  r  rh  r  r  r  r  r  r  r  r  r^  r  r  r  r  r  r  )r  serialr  r  r  r  r  r  r  r  r  r  r  )r   rV  rW  rX  rY  r   rb  N)r  r-   rd   r   rA   r   r~   r   r   r8  r   r   r  r   rQ  rf  r  r  r  r0   r=   )r   r  r   r9  r   r   rY  r  r  rb  r  r  rM   rX   r   s                 @r   _get_cpu_info_from_registryr  	  s    	=>_			
<<67
9 557==?/ --/) 557/?+*$ ))+) +) 1A- e5%i0= //1,!6!9!6!9! &)! 	6!9	!
 	6!9! 	6!9! 	6!9! 	6!9! 	6!9! 
F1I! fRj! 	6":! 
F2J! 	6":! 	6":!  
F2J!!" 	6":#!$ BZRjbz":2J":2J":2J
*
*2JBZA!%H 
,!1%
,**, 2=H.y!<%m;!)Q/

$ 
-T	2$	//	+# -$ 	 	,,s	)s=   +J F<J  I;I;A#J ;J 
J,J'!J,'J,c                     [         R                  S5         [        R                  5       (       a  [        R	                  5       (       d  [         R                  S5        0 $ [        R                  5       u  pUb  U S:w  a  [         R                  S5        0 $ [        R                  5       u  pUb  U S:w  a  [         R                  S5        0 $ UR                  S5      S   R                  S	5      S   R                  5       nUR                  S
5      S   R                  S	5      S   R                  5       n[        UR                  S5      S   R                  S	5      S   R                  5       5      n[        UR                  S5      S   R                  S	5      S   R                  5       5      n[        UR                  S5      S   R                  S	5      S   R                  5       5      nUR                  5       R                  S	5      S   R                  5       R                  5       R                  5       nUR                  5         Sn	UR                  S5      S   R                  S	5      S   R                  5       n
[        U
5      n
UR                  S5      S   R                  S	5      S   R                  5       n[        U5      nUU[        X5      [        US5      [        X5      [        US5      UUUUS.
n[!        U5      n[         R#                  5         U$ ! [$         a!  n[         R                  U5        0 s SnA$ SnAff = f)ze
Returns the CPU info gathered from isainfo and kstat.
Returns {} if isainfo or kstat are not found.
z Tying to get info from kstat ...z,Failed to find isinfo or kstat. Skipping ...Nr   z)Failed to run "isainfo -vb". Skipping ...z/Failed to run "kstat -m cpu_info". Skipping ...z	vendor_id r"   r4   z	brand z
	stepping z	model z	family r  r  z	clock_MHz z	current_clock_Hz )
r   rV  rW  rX  rY  r   r^  r_  r`  rb  )r  r-   rd   r   r   rA   r   r   r<   r~   r  r   rf  r   r  r  r  r0   r=   )r   flag_outputr   r  r   r^  r_  r`  rb  r  rY  r   rM   rX   s                 r   _get_cpu_info_from_kstatr  	  s    	23:				!	!)=)=)?)?
<<>?
9 '113*J!O
<<=>
9 !113*
]jAo
<<CD
9 kk.)!,2248;AAC)KK
+A.44T:1=CCE/]+A.44T:1=CCEF(
ekk*%a(..t4Q7==?
@%u{{;'*006q9??AB& 



#
#D
)"
-
3
3
5
;
;
=
C
C
E%**, %++n-a066t<Q?EEG-$]3- kk/0399$?BHHJ) +) 2=H.y!<%m;!)Q/
$ 
-T	2$	//	+ 	,,s	)s1   AL  5L 5L IL 
M%M;MMc                     [         R                  S5         [        R                  R	                  S5      S   n Su  pnU R	                  S5      nSU;   aB  UR                  S5      [        U5      S-
  :  a!  UR                  S5      n[        XES-      5      nSU;   aB  UR                  S5      [        U5      S-
  :  a!  UR                  S5      n[        XES-      5      nS	U;   aB  UR                  S	5      [        U5      S-
  :  a!  UR                  S	5      n[        XES-      5      nUUUS
.n[        U5      n[         R                  5         U$ ! [         a!  n[         R                  U5        0 s S nA$ S nAff = f)Nz)Tying to get info from platform.uname ...rz  r   )NNNr  r  r"   rl  rm  )r`  r_  r^  )r  r-   rd   r   r<   r  rr   r  r  r0   r=   rA   )r   r`  r_  r^  r  rg  rM   rX   s           r   !_get_cpu_info_from_platform_unamer  1
  sO   ;<

%
%
+
+C
0
3%.&KK'W]]84s7|A~E}}X1A6GMM'2S\!^C}}W1w1u~57w}}Z83w<>I}}Z 1'a%.!8 
$
 
-T	2$	//	+ 	,,s	)s   D6E 
E9E4.E94E9c                  z   [         R                  S5        [        [        R                  5      u  pSSS.R                  [        R                  5      =(       d    SnSR                  " [        R                  6 nSR                  X25      nU[        [        U U[        R                  [        R                  S.n[         R                  S	R                  US
   5      5        [         R                  SR                  US   5      5        [         R                  SR                  US   5      5        [         R                  SR                  US   5      5        [         R                  SR                  US   5      5        [         R                  SR                  US   5      5        [        U[        5       5        [        U[        5       5        [        U[!        5       5        [        U[#        5       5        [        U[%        5       5        [        U['        5       5        [        U[)        5       5        [        U[+        5       5        [        U[-        5       5        [        U[/        5       5        [        U[1        5       5        [        U[3        5       5        [        U[5        5       5        [         R                  S5        U$ )zl
Returns the CPU info by using the best sources of information for your OS.
Returns {} if nothing is found.
zP!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!z32 bitz64 bit)il    zunknown bitsz{0}.{1}.{2}.{3}.{4}z	{0} ({1}))python_versioncpuinfo_versioncpuinfo_version_stringr9  r   rZ  r   zpython_version: {0}r  zcpuinfo_version: {0}r  z	arch: {0}r9  z	bits: {0}r   z
count: {0}rZ  zarch_string_raw: {0}r   )r  r&   r8  rd   r   r   rB  maxsizer   version_infoCPUINFO_VERSIONCPUINFO_VERSION_STRINGr   rh  r  r  rh  rj  rp  r  r  rr  r  r  r  rX  r  )r9  r   friendly_maxsizefriendly_versionPYTHON_VERSIONrM   s         r   _get_cpu_info_internalr  S
  s$    	x *445'(<@@M_Q_)00#2B2BC$$%5H $%3   00	 	$++D1A,BCD%,,T2C-DEF{!!$v,/0{!!$v,/0|""4=12%,,T2C-DEF $/12 $356 $79: $79: $023 $134 $023 $023 $ACD $:<= $245 $023 $9;<xr   c                  L   SSK n Sn[        [        SS5      (       a.  [        5       nU R	                  U5      nSR                  U5      nU$ SSKJnJn  [        R                  [        S/nU" XTXDS9nUR                  5       S   nUR                  S:w  a  g	UR                  S
S9nU$ )zp
Returns the CPU info by using the best sources of information for your OS.
Returns the result in a json string
r   NfrozenFry  r  --jsonr  z{}r  r  )jsongetattrrB  r  r?  r   r  r  r  
executable__file__r  r   r  )r  rH   rM   r  r  r  r  s          r   get_cpu_info_jsonr  
  s     
 C5!!		!$::d&<<&  	 %^^Xx0'W$;">>A&]]a
=='=*&r   c                  J    SSK n [        5       nU R                  U[        S9nU$ )zi
Returns the CPU info by using the best sources of information for your OS.
Returns the result in a dict
r   N)object_hook)r  r  rJ  rO  )r  rH   s     r   get_cpu_infor  
  s(     

 **V;*
7r   c            
      
   SSK Jn   SS KnU " SS9nUR                  SSSS9  UR                  S	SS
S9  UR                  SSSS9  UR	                  5       n[        UR                  S5      q [        5         [        5       nU(       d5  [        R                  R                  S5        [        R                  " S5        UR                  (       a  [!        UR#                  U5      5        g UR$                  (       a  [!        [&        5        g [!        SR)                  UR+                  SS5      5      5        [!        SR)                  UR+                  SS5      5      5        [!        SR)                  UR+                  SS5      5      5        [!        SR)                  UR+                  SS5      5      5        [!        SR)                  UR+                  SS5      5      5        [!        SR)                  UR+                  SS5      5      5        [!        SR)                  UR+                  SS5      5      5        [!        S R)                  UR+                  S!S5      5      5        [!        S"R)                  UR+                  S#S5      5      5        [!        S$R)                  UR+                  S%S5      5      5        [!        S&R)                  UR+                  S'S5      5      5        [!        S(R)                  UR+                  S)S5      5      5        [!        S*R)                  UR+                  S+S5      5      5        [!        S,R)                  UR+                  S-S5      5      5        [!        S.R)                  UR+                  S/S5      5      5        [!        S0R)                  UR+                  S1S5      5      5        [!        S2R)                  UR+                  S3S5      5      5        [!        S4R)                  UR+                  S5S5      5      5        [!        S6R)                  UR+                  S7S5      5      5        [!        S8R)                  UR+                  S9S5      5      5        [!        S:R)                  UR+                  S;S5      5      5        [!        S<R)                  UR+                  S=S5      5      5        [!        S>R)                  UR+                  S?S5      5      5        [!        S@R)                  SAR-                  UR+                  SBS5      5      5      5        g ! [         aL  n[        R                  R                  [        U5      S-   5        [        R                  " S5         S nAGNS nAff = f)CNr   )ArgumentParserzGets CPU info with pure Python)r  r  
store_truezReturn the info in JSON format)actionhelpz	--versionz Return the version of py-cpuinfoz--tracez/Traces code paths used to find CPU info to fileFr4   r"   zFailed to find cpu info
zPython Version: {0}r  r3   zCpuinfo Version: {0}r  zVendor ID Raw: {0}r   zHardware Raw: {0}rU  zBrand Raw: {0}rV  zHz Advertised Friendly: {0}rW  zHz Actual Friendly: {0}rX  zHz Advertised: {0}rY  zHz Actual: {0}r   z	Arch: {0}r9  z	Bits: {0}r   z
Count: {0}rZ  zArch String Raw: {0}r   zL1 Data Cache Size: {0}rd  zL1 Instruction Cache Size: {0}re  zL2 Cache Size: {0}r[  zL2 Cache Line Size: {0}r\  zL2 Cache Associativity: {0}r]  zL3 Cache Size: {0}rc  zStepping: {0}r^  z
Model: {0}r_  zFamily: {0}r`  zProcessor Type: {0}ra  z
Flags: {0}z, rb  )argparser  r  add_argument
parse_argsr   r  r  r:  r=   rB  rW   r&   r:   exitr  printr?  versionr  r   r   r;   )r  r  parserrO  rX   rM   s         r   mainr  
  s   $ %E
FXl9YZ[<^_Y|:kl U#-
 	 **./((1+II

4
ll$$TXX.>%CDE%%dhh/G&LMN##DHH_b$ABC""488NB#?@Ab 9:;%,,TXX6NPR-STU!((2F)KLM##DHH_b$ABCb 9:;488FB/01488FB/01DHHWb123%%dhh/@"&EFG!((2F)KLM(//9TVX0YZ[##DHH_b$ABC!((2F)KLM%,,TXX6NPR-STU##DHH_b$ABCtxx
B789DHHWb123TXXh345$$TXX.>%CDEDIIdhhw&;<=>M 	 **3s8d?#((1++s   +
T 
UAUU__main__FrM  )=r  r;   r:   r  rj   rB  r|   r   r&  rQ  r  objectr   rd   rs   r   r   r:  rF  rK  rO  rh  rr  rw  r   r  r  r  r  r  r  r  r  r8  r   r
  r  r  rK  rD  rJ  rX  rh  rj  rp  rr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r]   )r@   s   0r   <module>r     s  8 ?"C?a3q6?"CD       $ 
yF yvH HV%4$=
	," <&, D(<,2Eh]~7r"CH CE >U& UpLF L\I#V	 bH^@-^_B@|~0=@?BPdRhgRBH DJX@6?r z]W #Ds   D