§
    xÅj¤I ã                   óF  — d Z d                     d„ e D ¦   «         ¦  «        ZddlZddlZddlZddlZddlZdZda	 G d„ de
¦  «        Z G d„ d	e
¦  «        Zd
„ Zd<d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"i fd „Z# G d!„ d"e
¦  «        Z$ G d#„ d$e
¦  «        Z%d%„ Z&d&„ Z'd'„ Z(d(„ Z)d)„ Z*d*„ Z+d+„ Z,d,„ Z-d-„ Z.d.„ Z/d/„ Z0d0„ Z1d1„ Z2d2„ Z3d3„ Z4d4„ Z5d5„ Z6d6„ Z7d7„ Z8d8„ Z9d9„ Z:e;d:k    r e:¦   «          dS  ed;d;¦  «        a	 e¦   «          dS )=)é	   é    r   ú.c                 ó,   — g | ]}t          |¦  «        ‘ŒS © )Ústr©Ú.0Úns     ú@C:\Projects\Historical\venv\Lib\site-packages\cpuinfo/cpuinfo.pyú
<listcomp>r      s   € Ð"CÐ"CÐ"C¨a¥3 q¡6¤6Ð"CÐ"CÐ"Có    r   NTc                   óD   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
S )ÚTracec                 óJ  — || _         | j         sd S ddlm} ddlm} |r |¦   «         | _        nO|                     ¦   «                              d¦  «        }t          d                     |¦  «        d¦  «        | _         |¦   «         | _	         |¦   «         | _
        d | _        d S )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         r   Ú__init__zTrace.__init__+   sµ   € Ø€$„/Ø	Œð 
Ø	€6àÐÐÐÐÐØÐÐÐÐÐàð DØ�(‘*”*€4„<€<à
�,Š,‰.Œ.×
!Ò
!Ð"8Ñ
9Ô
9€4ÝÐ0×7Ò7¸Ñ=Ô=¸sÑCÔC€4„<à�‘”€$„,Ø�‘”€$„,Ø€$„)€)€)r   c                 óô   — | j         sd S ddlm}  |¦   «         d         }|d         }|d         }| j                             d                     |||¦  «        ¦  «         | j                             ¦   «          d S )Nr   ©Ústacké   é   z{0} ({1} {2})
©r   Úinspectr&   r   Úwriter   Úflush©r   Úmsgr&   ÚframeÚfileÚlines         r   ÚheaderzTrace.header=   s„   € Ø	ŒÐ ˜&˜&àÐÐÐÐÐØ
ˆ%‰'Œ'�!Œ*€%Ø	ˆqŒ€$Ø	ˆqŒ€$Ø„,×ÒÐ&×-Ò-¨c°4¸Ñ>Ô>Ñ?Ô?Ð?Ø„,×ÒÑÔÐÐÐr   c                 óò   — | j         sd S ddlm}  |¦   «         d         }|d         }|d         }| j                             d                     ||¦  «        ¦  «         | j                             ¦   «          d S )Nr   r%   r'   r(   zSuccess ... ({0} {1})

r)   )r   r&   r/   r0   r1   s        r   ÚsuccesszTrace.successG   s‚   € Ø	ŒÐ ˜&˜&àÐÐÐÐÐØ
ˆ%‰'Œ'�!Œ*€%Ø	ˆqŒ€$Ø	ˆqŒ€$à„,×ÒÐ0×7Ò7¸¸dÑCÔCÑDÔDÐDØ„,×ÒÑÔÐÐÐr   c                 ó4  — | j         sd S ddlm}  |¦   «         d         }|d         }|d         }t          |t          ¦  «        r˜d                     d„ |                     d¦  «        D ¦   «         ¦  «        dz   }| j                             |¦  «         | j                             d 	                    ||¦  «        ¦  «         | j         
                    ¦   «          d S t          |t          ¦  «        r¦dd	lm}  |¦   «         }| j                             d
 	                    ||¦  «        ¦  «         | j                             d                     d„ |                     d¦  «        D ¦   «         ¦  «        dz   ¦  «         | j         
                    ¦   «          d S d S )Nr   r%   r'   r(   Ú c                 ó   — g | ]}d |z   ‘ŒS )ú	r   )r	   r1   s     r   r   zTrace.fail.<locals>.<listcomp>[   s   € Ð:Ð:Ð: $�$˜‘+Ð:Ð:Ð:r   ú
zFailed ... ({0} {1})

©Ú
format_excz	Failed ... ({0} {1})
c                 ó8   — g | ]}d                       |¦  «        ‘ŒS ©ú		{0}
©r   r   s     r   r   zTrace.fail.<locals>.<listcomp>d   s&   € ÐUÐUÐU¸˜{×1Ò1°!Ñ4Ô4ÐUÐUÐUr   )r   r*   r&   Ú
isinstancer   ÚjoinÚsplitr   r+   r   r,   Ú	ExceptionÚ	tracebackr;   )r   r.   r&   r/   r0   r1   r;   Ú
err_strings           r   Úfailz
Trace.failR   s˜  € Ø	ŒÐ ˜&˜&àÐÐÐÐÐØ
ˆ%‰'Œ'�!Œ*€%Ø	ˆqŒ€$Ø	ˆqŒ€$å�•SÑÔð Ø	�ŠÐ:Ð:¨#¯)ª)°D©/¬/Ð:Ñ:Ô:Ñ	;Ô	;¸dÑ	B€3à„<×Ò�cÑÔÐØ„<×ÒÐ0×7Ò7¸¸dÑCÔCÑDÔDÐDØ„<×ÒÑÔÐÐÐÝ�#•yÑ!Ô!ð Ø#Ð#Ð#Ð#Ð#Ð#Ø�
‘”€:Ø„<×ÒÐ0×7Ò7¸¸dÑCÔCÑDÔDÐDØ„<×Ò�b—g’gÐUÐU¸j×>NÒ>NÈtÑ>TÔ>TÐUÑUÔUÑVÔVÐY]Ñ]Ñ^Ô^Ð^Ø„<×ÒÑÔÐÐÐðð r   c                 óô   — | j         sd S ddlm}  |¦   «         d         }|d         }|d         }| j                             d                     |||¦  «        ¦  «         | j                             ¦   «          d S )Nr   r%   é   r'   r(   z	{0} ({1} {2})
r)   r-   s         r   Úcommand_headerzTrace.command_headerg   s„   € Ø	ŒÐ ˜&˜&àÐÐÐÐÐØ
ˆ%‰'Œ'�!Œ*€%Ø	ˆqŒ€$Ø	ˆqŒ€$Ø„,×ÒÐ(×/Ò/°°T¸4Ñ@Ô@ÑAÔAÐAØ„,×ÒÑÔÐÐÐr   c                 ó>  — | j         sd S | j                             d                     |¦  «        ¦  «         | j                             d                     d„ |                     d¦  «        D ¦   «         ¦  «        dz   ¦  «         | j                             ¦   «          d S )Nr>   r6   c                 ó8   — g | ]}d                       |¦  «        ‘ŒS )z			{0}
r?   r   s     r   r   z(Trace.command_output.<locals>.<listcomp>u   s&   € ÐRÐRÐR¸!˜m×2Ò2°1Ñ5Ô5ÐRÐRÐRr   r9   )r   r   r+   r   rA   rB   r,   )r   r.   Úoutputs      r   Úcommand_outputzTrace.command_outputq   s�   € Ø	ŒÐ ˜&˜&à„,×Ò�[×'Ò'¨Ñ,Ô,Ñ-Ô-Ð-Ø„,×Ò�R—W’WÐRÐR¸v¿|º|ÈDÑ?QÔ?QÐRÑRÔRÑSÔSÐVZÑZÑ[Ô[Ð[Ø„,×ÒÑÔÐÐÐr   c           	      ó(  ‡‡— | j         sd S ddlm}  |¦   «         d         }|d         }|d         }| j                             d                     ||¦  «        ¦  «         ˆˆfd„|D ¦   «         }|rA|D ]=}	| j                             d                     |	‰|	         ‰|	         ¦  «        ¦  «         Œ>n| j                             d¦  «         | j                             d	                     ||¦  «        ¦  «         ˆˆfd
„|D ¦   «         }
|
r:|
D ]6}	| j                             d                     |	‰|	         ¦  «        ¦  «         Œ7n| j                             d¦  «         | j                             d¦  «         | j                             ¦   «          d S )Nr   r%   r(   r'   z	Changed keys ({0} {1})
c                 óH   •— g | ]}|‰v ¯|‰v ¯
‰|         ‰|         k    ¯|‘ŒS r   r   ©r	   ÚkeyÚinfoÚnew_infos     €€r   r   zTrace.keys.<locals>.<listcomp>‚   s?   ø€ ÐhÐhÐh˜#¨°¨¨¸À¸¸ÈTÐRUÌYÐZbÐcfÔZgÒMgÐMg�#ÐMgÐMgÐMgr   z		{0}: {1} to {2}
z		None
z	New keys ({0} {1})
c                 ó$   •— g | ]}|‰v ¯|‰v¯
|‘ŒS r   r   rP   s     €€r   r   zTrace.keys.<locals>.<listcomp>‹   s&   ø€ ÐIÐIÐI�c S¨H _ _¸ÀD¸¸ˆc¸¸¸r   z		{0}: {1}
r9   r)   )r   ÚkeysrR   rS   r&   r/   r0   r1   Úchanged_keysrQ   Únew_keyss     ``       r   rU   z
Trace.keysx   sÍ  øø€ Ø	ŒÐ ˜&˜&àÐÐÐÐÐØ
ˆ%‰'Œ'�!Œ*€%Ø	ˆqŒ€$Ø	ˆqŒ€$ð „,×ÒÐ1×8Ò8¸¸tÑDÔDÑEÔEÐEØhÐhÐhÐhÐh ÐhÑhÔh€,Øð $Øð Vð V€sØ„L×ÒÐ.×5Ò5°c¸4À¼9ÀhÈsÄmÑTÔTÑUÔUÐUÐUðVð „<×Ò�lÑ#Ô#Ð#ð „,×ÒÐ-×4Ò4°T¸4Ñ@Ô@ÑAÔAÐAØIÐIÐIÐIÐI˜TÐIÑIÔI€(Øð $Øð Dð D€sØ„L×ÒÐ'×.Ò.¨s°H¸S´MÑBÔBÑCÔCÐCÐCðDð „<×Ò�lÑ#Ô#Ð#à„,×Ò�TÑÔÐØ„,×ÒÑÔÐÐÐr   c                 ó„   — | j         sd S | j                             |dz   ¦  «         | j                             ¦   «          d S )Nr9   )r   r   r+   r,   )r   r.   s     r   r+   zTrace.write•   sB   € Ø	ŒÐ ˜&˜&à„,×Ò�S˜4‘ZÑ Ô Ð Ø„,×ÒÑÔÐÐÐr   c                 ó¨   — | j                              ¦   «         | j                             ¦   «         | j                             ¦   «         || j        |dœS )N)rL   ÚstdoutÚstderrrR   ÚerrÚis_fail)r   Úgetvaluer   r   r   )r   rR   r]   s      r   Úto_dictzTrace.to_dict›   sO   € àŒ\×"Ò"Ñ$Ô$ØŒ\×"Ò"Ñ$Ô$ØŒ\×"Ò"Ñ$Ô$ØØ
Œ)Øð
ð 
ð r   N)Ú__name__Ú
__module__Ú__qualname__r#   r2   r4   rF   rI   rM   rU   r+   r_   r   r   r   r   r   *   s›   € € € € € ðð ð ð$ð ð ð	ð 	ð 	ðð ð ð*ð ð ðð ð ðð ð ð:ð ð ðð ð ð ð r   r   c                   ój  — e Zd Z ej        ¦   «         d         Z ej        ¦   «         Z ej        ¦   «          	                    ¦   «         dk    Z
 ej        ¦   «         Z ej        ¦   «         d         ZdZed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed	„ ¦   «         Zed
„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z ed„ ¦   «         Z!ed„ ¦   «         Z"ed„ ¦   «         Z#ed„ ¦   «         Z$ed„ ¦   «         Z%ed„ ¦   «         Z&ed„ ¦   «         Z'ed„ ¦   «         Z(ed„ ¦   «         Z)ed„ ¦   «         Z*ed„ ¦   «         Z+ed „ ¦   «         Z,ed!„ ¦   «         Z-d"S )#Ú
DataSourcer   Úwindowsé   Tc                  ó@   — t           j                             d¦  «        S )Nú/proc/cpuinfo)ÚosÚpathÚexistsr   r   r   Úhas_proc_cpuinfozDataSource.has_proc_cpuinfo­   s   € å	Œ�Š˜Ñ	(Ô	(Ð(r   c                  óB   — t          t          d¦  «        ¦  «        dk    S )NÚdmesgr   ©ÚlenÚ_program_pathsr   r   r   Ú	has_dmesgzDataSource.has_dmesg±   ó   € å	�^˜GÑ$Ô$Ñ	%Ô	%¨Ò	)Ð)r   c                  ó&  — t          j        ¦   «                              ¦   «                              d¦  «                             d¦  «                             ¦   «                              ¦   «         } d| v ot          j                             d¦  «        S )Nú"ú'Úlinuxú/var/run/dmesg.boot)ÚplatformÚsystemÚstripÚlowerri   rj   rk   )Úunames    r   Úhas_var_run_dmesg_bootz!DataSource.has_var_run_dmesg_bootµ   sn   € å
Œ/Ñ
Ô
×
!Ò
!Ñ
#Ô
#×
)Ò
)¨#Ñ
.Ô
.×
4Ò
4°SÑ
9Ô
9×
?Ò
?Ñ
AÔ
A×
GÒ
GÑ
IÔ
I€%Ø	�EÐ	Ð	C�bœgŸnšnÐ-BÑCÔCÐCr   c                  óB   — t          t          d¦  «        ¦  «        dk    S )Núcpufreq-infor   ro   r   r   r   Úhas_cpufreq_infozDataSource.has_cpufreq_infoº   s   € å	�^˜NÑ+Ô+Ñ	,Ô	,¨qÒ	0Ð0r   c                  óB   — t          t          d¦  «        ¦  «        dk    S )NÚsestatusr   ro   r   r   r   Úhas_sestatuszDataSource.has_sestatus¾   s   € å	�^˜JÑ'Ô'Ñ	(Ô	(¨1Ò	,Ð,r   c                  óB   — t          t          d¦  «        ¦  «        dk    S )NÚsysctlr   ro   r   r   r   Ú
has_sysctlzDataSource.has_sysctlÂ   ó   € å	�^˜HÑ%Ô%Ñ	&Ô	&¨Ò	*Ð*r   c                  óB   — t          t          d¦  «        ¦  «        dk    S )NÚisainfor   ro   r   r   r   Úhas_isainfozDataSource.has_isainfoÆ   s   € å	�^˜IÑ&Ô&Ñ	'Ô	'¨!Ò	+Ð+r   c                  óB   — t          t          d¦  «        ¦  «        dk    S )NÚkstatr   ro   r   r   r   Ú	has_kstatzDataSource.has_kstatÊ   rs   r   c                  ó4  — t          j        ¦   «                              ¦   «                              d¦  «                             d¦  «                             ¦   «                              ¦   «         } d| v pd| v }|ot	          t          d¦  «        ¦  «        dk    S )Nru   rv   ÚbeosÚhaikuÚsysinfor   )ry   rz   r{   r|   rp   rq   )r}   Úis_beoss     r   Úhas_sysinfozDataSource.has_sysinfoÎ   s‚   € å
Œ/Ñ
Ô
×
!Ò
!Ñ
#Ô
#×
)Ò
)¨#Ñ
.Ô
.×
4Ò
4°SÑ
9Ô
9×
?Ò
?Ñ
AÔ
A×
GÒ
GÑ
IÔ
I€%Ø�eˆOÐ/˜w¨%Ð/€'Ø	Ð	7•S�¨	Ñ2Ô2Ñ3Ô3°aÒ7Ð7r   c                  óB   — t          t          d¦  «        ¦  «        dk    S )NÚlscpur   ro   r   r   r   Ú	has_lscpuzDataSource.has_lscpuÔ   rs   r   c                  óB   — t          t          d¦  «        ¦  «        dk    S )NÚlspropr   ro   r   r   r   Úhas_ibm_pa_featureszDataSource.has_ibm_pa_featuresØ   rˆ   r   c                  ó\   — t          g d¢¦  «        \  } }| dk    ot          |¦  «        dk    S )N)Úwmicri   ÚgetÚVersionr   )Ú_run_and_get_stdoutrp   )Ú
returncoderL   s     r   Úhas_wmiczDataSource.has_wmicÜ   s4   € å*Ð+KÐ+KÐ+KÑLÔLÑ€*ˆfØ	�qŠÐ	,�S ™[œ[¨1š_Ð,r   c                  ó$   — t          ddg¦  «        S )NÚcatrh   ©rŸ   r   r   r   Úcat_proc_cpuinfozDataSource.cat_proc_cpuinfoá   s   € å	˜e _Ð5Ñ	6Ô	6Ð6r   c                  ó"   — t          dg¦  «        S )Nr€   r¤   r   r   r   Úcpufreq_infozDataSource.cpufreq_infoå   s   € å	˜nÐ-Ñ	.Ô	.Ð.r   c                  ó$   — t          ddg¦  «        S )Nrƒ   z-br¤   r   r   r   Ú
sestatus_bzDataSource.sestatus_bé   s   € å	˜j¨$Ð/Ñ	0Ô	0Ð0r   c                  ó$   — t          ddg¦  «        S )Nrn   z-ar¤   r   r   r   Údmesg_azDataSource.dmesg_aí   s   € å	˜g t˜_Ñ	-Ô	-Ð-r   c                  ó$   — t          ddg¦  «        S )Nr£   rx   r¤   r   r   r   Úcat_var_run_dmesg_bootz!DataSource.cat_var_run_dmesg_bootñ   s   € å	˜eÐ%:Ð;Ñ	<Ô	<Ð<r   c                  ó$   — t          g d¢¦  «        S )N)r†   zmachdep.cpuúhw.cpufrequencyr¤   r   r   r   Ú"sysctl_machdep_cpu_hw_cpufrequencyz-DataSource.sysctl_machdep_cpu_hw_cpufrequencyõ   s   € å	ÐIÐIÐIÑ	JÔ	JÐJr   c                  ó$   — t          ddg¦  «        S )NrŠ   z-vbr¤   r   r   r   Ú
isainfo_vbzDataSource.isainfo_vbù   s   € å	˜i¨Ð/Ñ	0Ô	0Ð0r   c                  ó$   — t          g d¢¦  «        S )N)r�   z-mÚcpu_infor¤   r   r   r   Úkstat_m_cpu_infozDataSource.kstat_m_cpu_infoý   s   € å	Ð8Ð8Ð8Ñ	9Ô	9Ð9r   c                  ó$   — t          ddg¦  «        S )Nr’   z-cpur¤   r   r   r   Úsysinfo_cpuzDataSource.sysinfo_cpu  s   € å	˜i¨Ð0Ñ	1Ô	1Ð1r   c                  ó"   — t          dg¦  «        S )Nr–   r¤   r   r   r   r–   zDataSource.lscpu  s   € å	˜g˜YÑ	'Ô	'Ð'r   c                  ój   — dd l } |                       d¦  «        }|rt          d|d         g¦  «        S d S )Nr   z(/proc/device-tree/cpus/*/ibm,pa-featuresr™   )ÚglobrŸ   )rº   Úibm_featuress     r   Úibm_pa_featureszDataSource.ibm_pa_features	  sF   € à€+€+€+à—’ÐEÑFÔF€,Øð ;Ý
˜x¨°a¬Ð9Ñ
:Ô
:Ð:ð;ð ;r   c                  ó$   — t          g d¢¦  «        S )N)rœ   Úcpur�   zOName,CurrentClockSpeed,L2CacheSize,L3CacheSize,Description,Caption,Manufacturerz/format:listr¤   r   r   r   Úwmic_cpuzDataSource.wmic_cpu  s)   € å	ð  Wð  Wð  Wñ  
Xô  
Xð  Xr   c                  óJ   — t          dd¦  «        } |                      ¦   «         S )Nú.Hardware\Description\System\CentralProcessor\0ÚProcessorNameString)Ú_read_windows_registry_keyr{   )Úprocessor_brands    r   Úwinreg_processor_brandz!DataSource.winreg_processor_brand  s%   € å.Ð/`ÐbwÑxÔx€/Ø	×	Ò	Ñ	 Ô	 Ð r   c                  ó&   — t          dd¦  «        } | S )NrÁ   ÚVendorIdentifier©rÃ   )Úvendor_id_raws    r   Úwinreg_vendor_id_rawzDataSource.winreg_vendor_id_raw  s   € å,Ð-^Ð`rÑsÔs€-Ø	Ðr   c                  ó&   — t          dd¦  «        } | S )Nz<SYSTEM\CurrentControlSet\Control\Session Manager\EnvironmentÚPROCESSOR_ARCHITECTURErÈ   )Úarch_string_raws    r   Úwinreg_arch_string_rawz!DataSource.winreg_arch_string_raw  s#   € å.Ð/nð  qIñ  Jô  J€/Ø	Ðr   c                  óD   — t          dd¦  «        } t          | ¦  «        } | S )NrÁ   z~Mhz)rÃ   Ú_to_decimal_string)Ú	hz_actuals    r   Úwinreg_hz_actualzDataSource.winreg_hz_actual$  s&   € å(Ð)ZÐ\bÑcÔc€)Ý  Ñ+Ô+€)Ø	Ðr   c                  ó&   — t          dd¦  «        } | S )NrÁ   Ú
FeatureSetrÈ   )Úfeature_bitss    r   Úwinreg_feature_bitszDataSource.winreg_feature_bits*  s   € å+Ð,]Ð_kÑlÔl€,Ø	Ðr   N).r`   ra   rb   ry   ÚarchitectureÚbitsÚmultiprocessingÚ	cpu_countrz   r|   Ú
is_windowsÚmachinerÍ   r}   Úuname_string_rawÚ	can_cpuidÚstaticmethodrl   rr   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Ö   r   r   r   rd   rd   ¥   s™  € € € € € ØˆÔÑÔ Ô"€Ø&ˆ_Ô&Ñ(Ô(€ØˆhŒoÑÔ×%Ò%Ñ'Ô'¨9Ò4€Ø#�8Ô#Ñ%Ô%€Ø"�H”NÑ$Ô$ QÔ'ÐØ€àð)ð )ñ „,ð)ð ð*ð *ñ „,ð*ð ðDð Dñ „,ðDð ð1ð 1ñ „,ð1ð ð-ð -ñ „,ð-ð ð+ð +ñ „,ð+ð ð,ð ,ñ „,ð,ð ð*ð *ñ „,ð*ð ð8ð 8ñ „,ð8ð
 ð*ð *ñ „,ð*ð ð+ð +ñ „,ð+ð ð-ð -ñ „,ð-ð ð7ð 7ñ „,ð7ð ð/ð /ñ „,ð/ð ð1ð 1ñ „,ð1ð ð.ð .ñ „,ð.ð ð=ð =ñ „,ð=ð ðKð Kñ „,ðKð ð1ð 1ñ „,ð1ð ð:ð :ñ „,ð:ð ð2ð 2ñ „,ð2ð ð(ð (ñ „,ð(ð ð;ð ;ñ „,ð;ð ðXð Xñ „,ðXð ð!ð !ñ „,ð!ð ðð ñ „,ðð ðð ñ „,ðð ðð ñ „,ðð
 ðð ñ „,ðð ð r   rd   c                 ó(  — g }t          d t          j                             dd¦  «                             t          j        ¦  «        ¦  «        }t          j        d                              t          j        ¦  «        D ]”}t          j                             || ¦  «        }t          j        |t          j	        ¦  «        r| 
                    |¦  «         |D ];}||z   }t          j        |t          j	        ¦  «        r| 
                    |¦  «         Œ<Œ•|S )NÚPATHEXTr6   ÚPATH)Úfilterri   Úenvironr�   rB   Úpathseprj   rA   ÚaccessÚX_OKÚappend)Úprogram_nameÚpathsÚextsÚpÚeÚpexts         r   rq   rq   0  sã   € Ø	€Ýˆt•R”Z—^’^ I¨rÑ2Ô2×8Ò8½¼ÑDÔDÑEÔE€Ý
Œ*�VÔ
×
"Ò
"¥2¤:Ñ
.Ô
.ð ð €QÝ„g‡l‚l�1�lÑ#Ô#€!Ý„Yˆq•"”'ÑÔð Ø‡<‚<��?„?€?Øð ð €aØ
ˆa‰%€4Ý„i�•b”gÑÔð Ø	‡L‚L�ÑÔÐøðð 	€r   c                 ó<  — ddl m}m} t                               dd                     | ¦  «        z   dz   ¦  «         |s || |||¬¦  «        }n< || |||¬¦  «        } |||j        ||¬¦  «        }|j                             ¦   «          |                     ¦   «         \  }}| 	                    d¬	¦  «        }| 	                    d¬	¦  «        }t           
                    d
t          |j        ¦  «        ¦  «         t           
                    d|¦  «         |j        |fS )Nr   ©ÚPopenÚPIPEzRunning command "ú z" ...©rZ   r[   Ústdin)rõ   rZ   r[   úUTF-8©Úencodingzreturn code:zstdout:)Ú
subprocessrñ   rò   Úg_tracerI   rA   rZ   ÚcloseÚcommunicateÚdecoderM   r   r    )ÚcommandÚpipe_commandrñ   rò   Úp1Úp2Ústdout_outputÚstderr_outputs           r   rŸ   rŸ   =  s8  € Ø#Ð#Ð#Ð#Ð#Ð#Ð#Ð#å×ÒÐ+¨c¯hªh°wÑ.?Ô.?Ñ?À'ÑIÑJÔJÐJð 	ð Ø€uˆW˜T¨$°dÐ;Ñ;Ô;€"€"ð €uˆW˜T¨$°dÐ;Ñ;Ô;€"Ø€uˆ\ ¤°4ÀÐEÑEÔE€"Ø„)‡/‚/ÑÔÐð !#§¢Ñ 0Ô 0Ñ€�Ø×%Ò%¨wÐ%Ñ7Ô7€Ø×%Ò%¨wÐ%Ñ7Ô7€õ 	×Ò˜­¨B¬MÑ(:Ô(:Ñ;Ô;Ð;Ý×Ò˜	 =Ñ1Ô1Ð1ð 	Œ�}Ð$Ð$r   c                 ó¾  — t                                d                     | |¦  «        ¦  «         	 dd l}n4# t          $ r'}	 dd l}n# t          $ r
}Y d }~nd }~ww xY wY d }~nd }~ww xY w|                     |j        | ¦  «        }|                     ||¦  «        d         }| 	                    |¦  «         t            
                    dt          |¦  «        ¦  «         |S )Nz*Reading Registry key "{0}" field "{1}" ...r   zvalue:)rú   rI   r   Ú_winregÚImportErrorÚwinregÚOpenKeyÚHKEY_LOCAL_MACHINEÚQueryValueExÚCloseKeyrM   r   )Úkey_nameÚ
field_namer  r\   rQ   Úvalues         r   rÃ   rÃ   W  sÿ   € Ý×ÒÐD×KÒKÈHÐV`ÑaÔaÑbÔbÐbðØÐÐÐÐøÝð ð ð ðØ€=€=€=€=øÝ	ð ð ð Ø€4€4€4€4øøøøðøøøøøøøøøøøøðøøøð ‡~‚~�fÔ/°Ñ:Ô:€Ø	×	Ò	˜S *Ñ	-Ô	-¨aÔ	0€Ø‡‚�ÑÔÐÝ×Ò˜¥# e¡*¤*Ñ-Ô-Ð-Ø€s3   °5 µ
A&Á AÁA!Á
AÁA!ÁAÁA!Á!A&c                  ód   — t          t          j        ¦  «        \  } }| dvrt          d¦  «        ‚d S )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Í   rC   )ÚarchrØ   s     r   Ú_check_archr  i  sK   € Ý�*Ô4Ñ5Ô5�€€tØð ð 	ð 	õ 	ð <ñ 	=ô 	=ð =ð	ð 	r   c                 ó˜   — dd l }dd l}| }|                     |¦  «        }|                     |¦  «        }|                     d¦  «        }|S )Nr   Úutf8)ÚpickleÚbase64ÚdumpsÚ	b64encoderý   )Úthingr  r   ÚaÚbÚcÚds          r   Ú_obj_to_b64r(  q  sQ   € Ø€€€Ø€€€à
€Ø‡\‚\�!�_„_€Ø×Ò�aÑÔ€Ø‡X‚XˆfÑÔ€Ø	€r   c                 ó�   — dd l }dd l}	 |                     | ¦  «        }|                     |¦  «        }|S # t          $ r i cY S w xY w©Nr   )r  r   Ú	b64decodeÚloadsrC   )r#  r  r   r$  r%  s        r   Ú_b64_to_objr-  {  sd   € Ø€€€Ø€€€ðØ×Ò�uÑÔ€!Ø‡l‚l�1�o„o€!Ø	
€(øÝð ð ð Ø	€)€)€)ðøøøs   Š+6 ¶AÁAc                 ó®   — t          | t          ¦  «        rd„ | D ¦   «         S t          | t          ¦  «        rd„ |                      ¦   «         D ¦   «         S | S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r   ©Ú_utf_to_str)r	   Úelements     r   r   z_utf_to_str.<locals>.<listcomp>ˆ  s    € Ð	4Ð	4Ð	4 7�+�gÑ
Ô
Ð	4Ð	4Ð	4r   c                 óN   — i | ]"\  }}t          |¦  «        t          |¦  «        “Œ#S r   r0  )r	   rQ   r  s      r   ú
<dictcomp>z_utf_to_str.<locals>.<dictcomp>Š  s>   € ð 
$ð 
$ð 
$Ù€sˆEõ �cÑ
Ô
�K¨Ñ.Ô.ð 
$ð 
$ð 
$r   )r@   ÚlistÚdictÚitems)Úinputs    r   r1  r1  †  sj   € Ýˆu•dÑÔð Ø	4Ð	4¨eÐ	4Ñ	4Ô	4Ð4Ý��ÑÔð ð
$ð 
$Ø—[’[‘]”]ð
$ñ 
$ô 
$ð $ð 
€,r   c                 óŠ  — g d¢}t                                || |¦  «         |D ]Ÿ}|                     |d ¦  «        r"|                      |d ¦  «        s||         | |<   Œ:|dk    r_|                     d¦  «        rJ|d         D ]'}|| d         vr| d                              |¦  «         Œ(| d                              ¦   «          Œ d S )N)rÉ   Úhardware_rawÚ	brand_rawÚhz_advertised_friendlyÚhz_actual_friendlyÚhz_advertisedrÑ   r  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_sizerG  )rú   rU   r�   rè   Úsort)rR   rS   rU   rQ   Úfs        r   Ú_copy_new_fieldsrM  �  së   € ð	ð 	ð 	€õ 	‡‚ˆd�D˜(Ñ#Ô#Ð#ð ð ð €SØ‡\‚\�#�tÑÔð  T§X¢X¨c°4Ñ%8Ô%8ð Ø˜Œ}€4ˆ�9€9Ø
ˆg‚~€~˜(Ÿ,š, wÑ/Ô/€~Ø�WÔð 7ð 7€qØ��W”ÐÐ˜t Gœ}×3Ò3°AÑ6Ô6Ð6øØˆ„=×ÒÑÔÐøðð r   c                 óŒ  — |                      ¦   «         D ]®}|D ]©}|                     ¦   «         }d|v r�|                     dd¦  «        \  }}|                     ¦   «                              ¦   «         }|                     ¦   «         }||k    r6t	          |¦  «        dk    r#| r|                     ¦   «         s|c c S Œ£|c c S ŒªŒ¯d S )Nú:r'   r   )Ú
splitlinesr|   rB   r{   rp   Úisdigit)Úcant_be_numberÚ
raw_stringÚfield_namesr1   r  ÚleftÚrights          r   Ú_get_field_actualrW  ¥  sâ   € Ø×"Ò"Ñ$Ô$ð ð €TØð ð €jØ× Ò Ñ"Ô"€:Ø	ˆT€k€kØ—*’*˜S !Ñ$Ô$�K€Dˆ%Ø�:Š:‰<Œ<×ÒÑÔ€DØ�KŠK‰MŒM€EØˆzÒÐ�c %™jœj¨1šn˜nØð Ø�]Š]‰_Œ_ð Ø€|€|€|€|€|ðð €l€l€l€l€løðð 	ˆr   c                 óv   — t          | ||¦  «        }|r!|r	  ||¦  «        }n# t          $ r |}Y nw xY w|€|}|S ©N)rW  rC   )rR  rS  Ú
convert_toÚdefault_valuerT  Úretvals         r   Ú
_get_fieldr]  ¶  so   € Ý
˜N¨J¸Ñ
DÔ
D€ð ð ˆzð ðØˆJ�vÑÔ€6€6øÝ	ð ð ð Ø€6€6€6ðøøøð €NØ€&à€s   —# £2±2c                 óê  — 	 d                      | ¦  «        } |                      dd¦  «        } d                     d„ | D ¦   «         ¦  «                             ¦   «         } | dk    rd} d| vrd                      | ¦  «        } |                      d¦  «        } |                      d¦  «        rd                      | ¦  «        } t          | ¦  «        } d                      | ¦  «        } | S # t          $ r Y d	S w xY w)
Nú{0}ú,r   r6   c              3   óN   K  — | ] }|                      ¦   «         s|d k    ¯|V — Œ!dS ©r   N©rQ  r   s     r   ú	<genexpr>z%_to_decimal_string.<locals>.<genexpr>Î  s3   è è € Ð<Ð<˜ a§i¢i¡k¤kÐ<°Q¸²V°V�!°V°V°V°VÐ<Ð<r   Ú0z{0}.0z{0}0ú0.0)r   ÚreplacerA   r{   ÚrstripÚendswithÚfloatrC   )Útickss    r   rÐ   rÐ   Æ  s  € ðà
�,Š,�uÑ
Ô
€%à
�-Š-˜˜SÑ
!Ô
!€%ð �'Š'Ð<Ð<˜UÐ<Ñ<Ô<Ñ
<Ô
<×
BÒ
BÑ
DÔ
D€%Ø
ˆb‚[€[Ø€5ð 	�ÐÐØ�>Š>˜%Ñ Ô €5ð �,Š,�sÑ
Ô
€%ð ‡^‚^�CÑÔð  Ø�=Š=˜ÑÔ€5õ �‰,Œ,€%Ø
�,Š,�uÑ
Ô
€%Ø	€,øÝð ð ð Ø	ˆˆðøøøs   ‚C!C$ Ã$
C2Ã1C2c                 óð  — 	 t          | ¦  «        } d                     | ¦  «        } |                      d¦  «        }|                     d¦  «        }|                     dd¦  «        }|                     ||z   dz   d¦  «        }||z   }d                     |d |…         ||d …         ¦  «        }|                     d¦  «        \  }}t          |¦  «        t          |¦  «        }}||fS # t          $ r Y dS w xY w)Nr_  re  r   r6   r'   ú{0}.{1}©r   r   )	rj  r   ÚlstripÚindexrg  ÚljustrB   ÚintrC   )rk  ÚscaleÚhzÚ	old_indexÚ	new_indexrU  rV  s          r   Ú_hz_short_to_fullrw  ä  sø   € ðå
�‰,Œ,€%Ø
�,Š,�uÑ
Ô
€%ð ‡|‚|�CÑÔ€"Ø�hŠh�s‰mŒm€)Ø	‡z‚z�#�rÑÔ€"Ø	‡x‚x�˜	Ñ! !Ñ# SÑ)Ô)€"Ø˜%Ñ€)Ø×Ò˜˜:˜I˜:œ¨¨9¨:¨:¬Ñ7Ô7€"Ø—’˜‘”�+€$ˆÝ�D‘	”	�3˜u™:œ:ˆ€$Ø
�ˆÐøÝð ð ð Ø	ˆˆðøøøs   ‚C$C' Ã'
C5Ã4C5c                 ó¬  — 	 |                       ¦   «                              ¦   «         } d\  }}|                      d¦  «        rd}n/|                      d¦  «        rd}n|                      d¦  «        rd}d                     d	„ | D ¦   «         ¦  «                              ¦   «         }d
|vr|dz  }t	          ||¦  «        \  }}||fS # t
          $ r Y dS w xY w)N©NNÚghzr   Úmhzé   rt  r   r6   c              3   óN   K  — | ] }|                      ¦   «         s|d k    ¯|V — Œ!dS rb  rc  r   s     r   rd  z'_hz_friendly_to_full.<locals>.<genexpr>  s3   è è € Ð=Ð=�Q q§y¢y¡{¤{Ð=°a¸²f°fˆq°f°f°f°fÐ=Ð=r   r   z.0rn  )r{   r|   ri  rA   rw  rC   )Ú	hz_stringrt  rs  s      r   Ú_hz_friendly_to_fullr  ÷  sý   € ðØ�oŠoÑÔ×%Ò%Ñ'Ô'€)Ø�)€"€eà×Ò˜ÑÔð Ø€5€5Ø×Ò˜%Ñ Ô ð Ø€5€5Ø×Ò˜$ÑÔð Ø€5à	‡w‚wÐ=Ð=˜)Ð=Ñ=Ô=Ñ=Ô=×CÒCÑEÔE€"Ø	�ˆˆØˆ�:€2å  EÑ*Ô*�)€"€eà
ˆeˆÐøÝð ð ð Ø	ˆˆðøøøs   ‚CC Ã
CÃCc                 óæ  — 	 t          | |¦  «        \  }}d                     ||¦  «        }|                     d¦  «        }|                     dd¦  «        }d}d}|dk    rd}d}n|dk    rd	}d}n
|d
k    rd}d
}d                     |d | dz
  …         || dz
  d …         ¦  «        }d                     t	          |¦  «        |¦  «        }|                     d¦  «        }|S # t          $ r Y dS w xY w)Nrm  r   r6   ÚHzr   r   ÚGHzr|  ÚMHzrH   ÚKHzr'   z{0:.4f} {1}re  z	0.0000 Hz)rw  r   rp  rg  rj  rh  rC   )rk  rs  rU  rV  ÚresultÚ	dot_indexÚsymbols          r   Ú_hz_short_to_friendlyrˆ    s(  € ðå! %¨Ñ/Ô/�+€$ˆØ×Ò˜D %Ñ(Ô(€&ð �lŠl˜3ÑÔ€)Ø�>Š>˜#˜rÑ"Ô"€&ð €&Ø
€%Ø�‚]€]Ø€6Ø€5€5Ø�1‚}€}Ø€6Ø€5€5Ø�1‚}€}Ø€6Ø€5ð ×Ò˜F 9 U F¨1¡H 9Ô-¨v°u°f¸Q±h°i°iÔ/@ÑAÔA€&ð ×Ò¥ f¡¤¨vÑ6Ô6€&Ø�=Š=˜ÑÔ€&Ø	€-øÝð ð ð Ø	ˆˆðøøøs   ‚CC" Ã"
C0Ã/C0c                 ó  — dd l }| s| S d                     | ¦  «        } dddddœ}|                     ¦   «         D ]M\  }}|                     || ¦  «        r2d                     | d d	…                              ¦   «         |¦  «        c S ŒN| S )
Nr   r_  ÚBÚKBÚMBÚGB)z	^[0-9]+B$z	^[0-9]+K$z	^[0-9]+M$z	^[0-9]+G$z{0} {1}éÿÿÿÿ)Úrer   r7  Úmatchr{   )r8  r�  ÚformatsÚpatternÚfriendly_sizes        r   Ú_to_friendly_bytesr”  /  s·   € Ø
€€€àð Ø	€,Ø	�Š�eÑ	Ô	€ð ØØØð	ð €ð  'Ÿ}š}™œð @ð @Ñ€WˆmØ‡X‚Xˆg�uÑÔð @Ø
×
Ò
˜5 $ B $œ<×-Ò-Ñ/Ô/°Ñ
?Ô
?Ð?Ð?Ð?ð@ð 	€r   c                 óî  — |                       ¦   «         }ddiddiddiddiddid	did
diddiddiddig
}	 |D ]¤}t          |                     ¦   «         ¦  «        d         }t          |                     ¦   «         ¦  «        d         }|                     |¦  «        r?t          |                     |¦  «        d                              ¦   «         ¦  «        |z  c S Œ¥n# t          $ r
}Y d }~nd }~ww xY w| S )NÚgibi   @Úmibi   Úkibé   ÚgbÚmbÚkbÚgÚmÚkr%  r'   r   )	r|   r5  rU   Úvaluesri  rr  rB   r{   rC   )Úfriendly_bytesr8  r‘  Úentryr’  Ú
multiplierr\   s          r   Ú_friendly_bytes_to_intr¤  C  s;  € Ø	×	Ò	Ñ	Ô	€ð 	ÐÐØˆ;ÐØˆ4€.àÐ
ÐØˆ+ÐØˆ$€-àÐ	ÐØˆÐØˆ€,Øˆ€)ð€ðØð =ð =€eÝ�%—*’*‘,”,ÑÔ Ô"€7Ý�U—\’\‘^”^Ñ$Ô$ QÔ'€:Ø‡n‚n�WÑÔð =Ýˆu�{Š{˜7Ñ#Ô# AÔ&×,Ò,Ñ.Ô.Ñ/Ô/°*Ñ<Ð<Ð<Ð<ð=ð=øõ 	ð ð ð Ø€$€$€$€$øøøøðøøøð 	Ðs   ¶B%C ÃC Ã
C2Ã-C2c                 óÎ  — d|                       ¦   «         vrdS |                       ¦   «         }d}|                     d¦  «        rd}n|                     d¦  «        rd}d|v r|                     d¦  «        d	         }n|                     d d	¦  «        d	         }|                     d¦  «                             d¦  «                             ¦   «         }t          |¦  «        }||fS )
Nrt  ©rf  r   r   r{  r|  rz  r   ú@r'   )r|   ri  rB   Úrsplitrh  r{   rÐ   )Ú
cpu_stringrt  rs  s      r   Ú_parse_cpu_brand_stringrª  a  sá   € à�
× Ò Ñ"Ô"Ð"Ð"Ø	ˆà×ÒÑÔ€Ø	
€à‡K‚K�ÑÔð Ø
€%€%Ø‡k‚k�%ÑÔð Ø
€%Øˆ2€I€IØ	‡x‚x��}„}�QÔ€"€"à	‡y‚y��qÑÔ˜!Ô€"à‡i‚i�ÑÔ×Ò˜eÑ$Ô$×*Ò*Ñ,Ô,€Ý˜ÑÔ€à	ˆUˆÐr   c           	      óÒ  ‡ — dd l }d„ |                     d‰ ¦  «        D ¦   «         }d„ |                     d‰ ¦  «        D ¦   «         }d„ t          ||¦  «        D ¦   «         }ˆ fd„|                     ¦   «         D ¦   «         }d\  }}}}|D ]ó}	|	                     d	¦  «        D ]Û}
d
„ |
                     d¦  «        D ¦   «         }
t          |
¦  «        dk    r§|
d         |
d         }}|dk    r|                     d¦  «        }Œ`|dk    r$t          |                     d¦  «        d¦  «        }ŒŠ|dk    r$t          |                     d¦  «        d¦  «        }Œ´|dv r#t          |                     d¦  «        d¦  «        }ŒÜŒô‰                      ¦   «         }d}|r_d}|D ]X}	d 	                    |	¦  «        }| 
                    |¦  «        r,|d t          |¦  «         …                              ¦   «         }d}ŒY|°_t          |¦  «        \  }}|dk    rT|D ]Q}	|	}dD ]J}||v rDd|d |                     |¦  «        t          |¦  «        z   …         z   }t          |¦  «        \  }} nŒKŒR|||||||fS )Nr   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   ©Ústart©r	   rž  s     r   r   z._parse_cpu_brand_string_dx.<locals>.<listcomp>{  s    € Ð
=Ð
=Ð
=˜ˆ1�7Š7‰9Œ9Ð
=Ð
=Ð
=r   z\(c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   r­  r¯  s     r   r   z._parse_cpu_brand_string_dx.<locals>.<listcomp>|  s    € Ð;Ð;Ð;�qˆ�Š‰ŒÐ;Ð;Ð;r   z\)c                 ó   — i | ]\  }}||“Œ	S r   r   ©r	   rŸ  Úvs      r   r4  z._parse_cpu_brand_string_dx.<locals>.<dictcomp>}  s   € Ð/Ð/Ð/‘T�Q˜ˆAˆqÐ/Ð/Ð/r   c                 ó0   •— g | ]\  }}‰|d z   |…         ‘ŒS )r'   r   )r	   r®  Úendr©  s      €r   r   z._parse_cpu_brand_string_dx.<locals>.<listcomp>~  s*   ø€ ÐHÐHÐH©*¨%°ˆJ�u˜Q‘w �}Ô%ÐHÐHÐHr   )NNNNr`  c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   )r{   r   s     r   r   z._parse_cpu_brand_string_dx.<locals>.<listcomp>„  s    € Ð
.Ð
.Ð
.˜ˆ1�7Š7‰9Œ9Ð
.Ð
.Ð
.r   rO  r'   Úoriginru   rC  Ú0xé   rD  ©ÚfamrE  TFz({0})rf  )r‚  rƒ  r�  zCPU @ )r�  ÚfinditerÚzipr7  rB   rp   r{   rr  ro  r   ri  rª  Úfind)r©  r�  ÚstartsÚendsÚinsidesÚ	vendor_idrC  rD  rE  ÚinsideÚpairÚnamer  ÚbrandÚ
is_workingÚfullÚhz_brandrs  rt  r¢  s   `                   r   Ú_parse_cpu_brand_string_dxrÊ  w  sÒ  ø€ Ø
€€€ð >Ð
=˜bŸkšk¨%°Ñ<Ô<Ð
=Ñ
=Ô
=€Ø;Ð;˜BŸKšK¨¨zÑ:Ô:Ð;Ñ;Ô;€Ø/Ð/�S ¨Ñ.Ô.Ð/Ñ/Ô/€ØHÐHÐHÐH¸¿º¹¼ÐHÑHÔH€ð '?Ñ#€ˆH�e˜VØð *ð *€VØ�lŠl˜3ÑÔð *ð *€dØ
.Ð
.˜dŸjšj¨™oœoÐ
.Ñ
.Ô
.€4Ý	ˆ$�i„i�!‚m€mØ�q”'˜4 œ7ˆ%€DØˆxÒÐØ—’˜SÑ!Ô!€Y€YØ	�Ò	Ð	Ý�E—L’L Ñ&Ô&¨Ñ+Ô+€X€XØ	�ŠˆÝ�—’˜dÑ#Ô# RÑ(Ô(€U€UØ	Ð"Ð	"Ð	"Ý�%—,’,˜tÑ$Ô$ bÑ)Ô)€Vøð*ð 
×	Ò	Ñ	Ô	€Ø€Øð Ø€*Øð ð €fØ
�.Š.˜Ñ
 Ô
 €4Ø‡n‚n�TÑÔð Ø�;•S˜‘Y”Y�J�;Ô×%Ò%Ñ'Ô'€EØ€Jøð ð õ +¨5Ñ1Ô1�€ˆ5ð �ÒÐØð ð €fØ€2Ø$ð ð €uØ�€{€{Ø
�RÐ6˜2Ÿ7š7 5™>œ>­C°©J¬JÑ6Ð6Ô7Ñ
7€RÝ.¨rÑ2Ô2�_€XˆuØ
€Uð øð
 
�5˜% ¨H°e¸VÐDÐDr   c                 óR  — 	 |                       d¦  «        dd …         |                       d¦  «        dd …         z   |                       d¦  «        dd …         z   |                       d¦  «        dd …         z   |                       d¦  «        dd …         z   |                       d¦  «        dd …         z   }d„ |D ¦   «         }d	„ |D ¦   «         }d }d
}|D ]%}t          d„ |D ¦   «         ¦  «        }||k    r|}|}Œ&|si S |\  }}}	}
}}}d| v �r^| |                      d¦  «        d …                               d¦  «        d
         }|                     ¦   «                               ¦   «         }d„ |D ¦   «         }d„ |D ¦   «         }|D ]ç}t	          |                     ¦   «         ¦  «        d
         }t	          |                     ¦   «         ¦  «        d
         }|dk    r|                     d¦  «        }
Œl|dk    r$t          |                     d¦  «        d¦  «        }Œ–|dk    r$t          |                     d¦  «        d¦  «        }ŒÀ|dv r#t          |                     d¦  «        d¦  «        }Œèg }dD ]M}|| v rG| 	                    |                       |¦  «        d                               d¦  «        d
         ¦  «         ŒNg }|D ]u}|                      d¦  «        d                               d¦  «        d
          
                    ¦   «         }|                      d¦  «        D ]}| 	                    |¦  «         ŒŒv|                     ¦   «          t          |	¦  «        \  }}|dk    rd}t          |¦  «        }|
|	||||dœ}|r,|dk    r&t          ||¦  «        |d<   t          ||¦  «        |d<   |r,|dk    r&t          ||¦  «        |d <   t          ||¦  «        |d!<   d"„ |                     ¦   «         D ¦   «         S # t"          $ r$}t$                               |¦  «         Y d }~nd }~ww xY wi S )#Nz CPU0:r'   z CPU1:z CPU:z
CPU0:z
CPU1:z
CPU:c                 óh   — g | ]/}|                      d ¦  «        d                              ¦   «         ‘Œ0S )r9   r   )rB   r{   ©r	   Úls     r   r   z'_parse_dmesg_output.<locals>.<listcomp>´  s3   € Ð
3Ð
3Ð
3¨ˆ1�7Š7�4‰=Œ=˜Ô×!Ò!Ñ#Ô#Ð
3Ð
3Ð
3r   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   )rÊ  rÍ  s     r   r   z'_parse_dmesg_output.<locals>.<listcomp>·  s!   € Ð>Ð>Ð>°1Õ+¨AÑ.Ô.Ð>Ð>Ð>r   r   c                 ó   — g | ]}|d u‘ŒS rY  r   r   s     r   r   z'_parse_dmesg_output.<locals>.<listcomp>½  s   € Ð2Ð2Ð2 !�˜�Ð2Ð2Ð2r   z	  Origin=r9   c                 ó\   — g | ])}|                      ¦   «                              d ¦  «        ‘Œ*S ©ú=)r{   rB   r   s     r   r   z'_parse_dmesg_output.<locals>.<listcomp>Ì  s,   € Ð2Ð2Ð2 aˆQ�WŠW‰YŒY�_Š_˜SÑ!Ô!Ð2Ð2Ð2r   c                 óš   — g | ]H}|d                                ¦   «                              ¦   «         |d                               ¦   «         i‘ŒIS )r   r'   )r{   r|   r   s     r   r   z'_parse_dmesg_output.<locals>.<listcomp>Í  sA   € ÐCÐCÐC°qˆa�Œd�jŠj‰lŒl× Ò Ñ"Ô" Q q¤T§Z¢Z¡\¤\Ð2ÐCÐCÐCr   r·  ru   rC  r¸  r¹  rD  rº  )z  Features=z  Features2=z  AMD Features=z  AMD Features2=ú<ú>r`  rf  r|  )rÉ   r;  rC  rD  rE  rG  r<  r=  r>  rÑ   c                 ó   — i | ]
\  }}|¯||“ŒS r   r   r²  s      r   r4  z'_parse_dmesg_output.<locals>.<dictcomp>  s#   € Ð	-Ð	-Ð	-‘4�1�a¨1Ð	-ˆ!ˆQÐ	-Ð	-Ð	-r   )rB   Úsumr¾  r{   r5  rU   r   rr  ro  rè   r|   rK  rª  rÐ   rˆ  rw  r7  rC   rú   rF   )rL   ÚlinesÚcpu_stringsÚbest_stringÚhighest_countr©  r?  rÑ   rs  rÄ   rÂ  rC  rD  rE  ÚfieldsÚfieldrÅ  r  Ú
flag_linesÚcategoryrG  r1   Úflagr>  rR   r\   s                             r   Ú_parse_dmesg_outputrâ  «  s·  € ðYà
�,Š,�xÑ
 Ô
    Ô
$Ø
‡L‚L�ÑÔ˜1˜2˜2Ôñà
‡L‚L�ÑÔ˜!˜"˜"Ôñð ‡L‚L�ÑÔ˜A˜B˜BÔñ ð ‡L‚L�ÑÔ˜A˜B˜BÔñ	 ð
 ‡L‚L�ÑÔ˜1˜2˜2Ôñ€%ð 4Ð
3¨UÐ
3Ñ
3Ô
3€%ð ?Ð>¸Ð>Ñ>Ô>€+ð €+Ø€-Øð ð €jÝÐ2Ð2 zÐ2Ñ2Ô2Ñ3Ô3€5ØˆmÒÐØ€MØ€Køð 
ð Ø
€9àJUÑG€)ˆU�O Y°¸%Àð �FÐÑØ�6—;’;˜{Ñ+Ô+Ð-Ð-Ô/×5Ò5°dÑ;Ô;¸AÔ>€6Ø�LŠL‰NŒN× Ò Ñ"Ô"€6Ø2Ð2¨6Ð2Ñ2Ô2€6ØCÐC¸FÐCÑCÔC€6àð *ð *€uÝ�—
’
‘”ÑÔ˜aÔ €DÝ�—’‘”Ñ Ô  Ô#€EàˆxÒÐØ—’˜SÑ!Ô!€Y€YØ	�Ò	Ð	Ý�E—L’L Ñ&Ô&¨Ñ+Ô+€X€XØ	�ŠˆÝ�—’˜dÑ#Ô# RÑ(Ô(€U€UØ	Ð"Ð	"Ð	"Ý�%—,’,˜tÑ$Ô$ bÑ)Ô)€Vøð €*ØXð @ð @€hØ�&ÐÐØ×Ò�f—l’l 8Ñ,Ô,¨QÔ/×5Ò5°dÑ;Ô;¸AÔ>Ñ?Ô?Ð?øà
€%Øð ð €dØ
�*Š*�S‰/Œ/˜!Ô
×
"Ò
" 3Ñ
'Ô
'¨Ô
*×
0Ò
0Ñ
2Ô
2€4Ø�zŠz˜#‰Œð ð €tØ	‡L‚L�ÑÔÐÐðà‡*‚*�,„,€,õ 1°ÑAÔAÑ€-�ð �eÒÐØ€5Ý% iÑ0Ô0€=ð ØàØØØð
ð 
€$ð ð H�}¨Ò-Ð-Ý$9¸-ÈÑ$OÔ$O€4Ð Ñ!Ý 5°iÀÑ GÔ G€4ÐÑàð ;�}¨Ò-Ð-Ý,¨]¸EÑBÔB€4ˆÑÝ(¨°EÑ:Ô:€4ˆÑà	-Ð	-˜4Ÿ:š:™<œ<Ð	-Ñ	-Ô	-Ð-øÝð ð ð Ý	‡,‚,ˆsÑÔÐÐÐÐÐÐøøøøðøøøð 	€s   ‚C:O6 Ã=K8O6 Ï6
P$Ð PÐP$c                 óü  — dd l }d\  }}|                      ¦   «         } |                     d| ¦  «        rd}d}�n@|                     d| ¦  «        rd}d}�n$|                     d	| ¦  «        rd
}d}�n|                     d| ¦  «        rd}d}ní|                     d| ¦  «        rd
}d}nÒ|                     d| ¦  «        rd}d}n·|                     d| ¦  «        rd}d}nœ|                     d| ¦  «        rd}d}n�|                     d| ¦  «        rd}d}nf|                     d| ¦  «        rd}d}nK| dk    rd}d}n@| dk    rd}d}n5|                     d| ¦  «        rd}d}n|                     d| ¦  «        rd}d}||fS ) Nr   ry  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$r  z/^armv7$|^armv7[a-z]$|^armv7-[a-z]$|^armv6[a-z]$r  z"^armv8$|^armv8[a-z]$|^armv8-[a-z]$z ^ppc32$|^prep$|^pmac$|^powermac$ÚPPC_32z^powerpc$|^ppc64$|^ppc64le$r  z^sparc32$|^sparc$ÚSPARC_32z^sparc64$|^sun4u$|^sun4v$ÚSPARC_64z^s390x$r  Úmipsr  Úmips64r  z^riscv$|^riscv32$|^riscv32be$r  z^riscv64$|^riscv64be$r  )r�  r|   r�  )rÍ   r�  r  rØ   s       r   r  r  
  s   € Ø
€€€à�€€tØ"×(Ò(Ñ*Ô*€ð ‡H‚HÐDÀoÑVÔVð .Ø	€$Ø	€$�$Ø‡h‚hÐKÈ_Ñ]Ô]ð +Ø	€$Ø	€$�$à‡h‚hÐ)¨?Ñ;Ô;ð 'Ø	€$Ø	€$�$Ø‡h‚hÐAÀ?ÑSÔSð $Ø	€$Ø	€$€$Ø‡h‚hÐ4°oÑFÔFð !Ø	€$Ø	€$€$à‡h‚hÐ2°OÑDÔDð Ø	€$Ø	€$€$Ø‡h‚hÐ-¨Ñ?Ô?ð Ø	€$Ø	€$€$à‡h‚hÐ# _Ñ5Ô5ð Ø	€$Ø	€$€$Ø‡h‚hÐ+¨_Ñ=Ô=ð Ø	€$Ø	€$€$à‡h‚hˆz˜?Ñ+Ô+ð Ø	€$Ø	€$€$Ø˜ÒÐØ	€$Ø	€$€$Ø˜Ò!Ð!Ø	€$Ø	€$€$à‡h‚hÐ/°ÑAÔAð Ø	€$Ø	€$€$Ø‡h‚hÐ'¨Ñ9Ô9ð Ø	€$Ø	€$à	ˆtˆÐr   c                 ó"   — d|z  }| |z  dk    }|S )Nr'   r   r   )ÚregÚbitÚmaskÚis_sets       r   Ú_is_bit_setrð  C  s   € Ø	ˆS‰€Ø
�‰*�qŠ.€Ø€r   c                 óF  — t                                ¦   «         s|                      d¦  «         dS t                                ¦   «         \  }}|dk    r|                      d¦  «         dS |                     ¦   «         D ]X}|                     ¦   «                              ¦   «         }|                     d¦  «        r|                     d¦  «        r dS  dS ŒYd}d}|                     ¦   «         D ]�}|                     ¦   «                              ¦   «         }|                     d¦  «        r|                     d	¦  «        rd}ŒU|                     d
¦  «        r|                     d	¦  «        rd}Œ‚|  	                    d|¦  «         |  	                    d|¦  «         | p| S )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„   rF   r©   rP  r{   r|   Ú
startswithri  rM   )Útracer    rL   r1   Úcan_selinux_exec_heapÚcan_selinux_exec_memorys         r   Ú_is_selinux_enforcingrú  I  s»  € å×ÒÑ!Ô!ð Ø‡*‚*Ð'Ñ(Ô(Ð(Ø	ˆõ !×+Ò+Ñ-Ô-Ñ€ˆVØ�!‚O€OØ‡*‚*Ð3Ñ4Ô4Ð4Ø	ˆð ×ÒÑ Ô ð ð €TØ	�Š‰Œ×	Ò	Ñ	Ô	€$Ø	‡_‚_�_Ñ%Ô%ð Ø
‡m‚m�KÑ Ô ð Øˆ4ˆ4àˆ5ˆ5ð	ð ÐØ ÐØ×ÒÑ Ô ð "ð "€TØ	�Š‰Œ×	Ò	Ñ	Ô	€$Ø	‡_‚_Ð%Ñ&Ô&ð "¨4¯=ª=¸Ñ+>Ô+>ð "ØÐÐØ‡‚�Ñ'Ô'ð "¨D¯MªM¸$Ñ,?Ô,?ð "Ø!Ðøà×ÒÐ.Ð0EÑFÔFÐFØ×ÒÐ0Ð2IÑJÔJÐJà"Ð	"Ð	AÐ*AÐ&AÐBr   c                 óØ   — i }| D ]d}| |         }||v r||         |k    r|||<   Œ |sŒ#|dk    rŒ*|dk    rŒ1t          |¦  «        t          k    r|                     d¦  «        rŒ_|||<   Œe|S )Nrn  rŽ  rf  )Útyper   rö  )rR   Úacceptable_valuesÚfiltered_inforQ   r  s        r   Ú#_filter_dict_keys_with_empty_valuesrÿ  m  s¯   € Ø€Øð ð €SØ
ˆsŒ)€%ð 	ÐÐÐØ˜Ô Ò%Ð%Ø€M�#ÑØð 
ð Øð ˆf‚_€_Øð ˆb‚[€[Øõ 
ˆ%�[„[•CÒÐ˜E×,Ò,¨UÑ3Ô3ÐØà€-�ÑÐàÐr   c                   ó.   — e Zd Zddg fd„Zd„ Zd„ Zd„ ZdS )ÚASMNr   c                 óv   — || _         || _        || _        d | _        d | _        d | _        d | _        d| _        d S r*  )ÚrestypeÚargtypesÚmachine_codeÚ
prochandleÚmmÚfuncÚaddressÚsize)r   r  r  r  s       r   r#   zASM.__init__�  s?   € Ø€$„,Ø€$„-Ø"€$ÔØ€$„/Ø€$„'Ø€$„)Ø€$„,Ø€$„)€)€)r   c                 óN  — t                                d| j        ¦  «        }t          j        t          |¦  «        ¦  «        | _        t          j        �ret          |¦  «        }|dk     rd}t          j	        d¦  «        }t          j	        d¦  «        }t          j
        j        j        }t          j        |_         |d t          j        |¦  «        ||¦  «        | _        | j        st!          d¦  «        ‚ t          j        t          j        t          j        t          j        t          j        ¦  «        t          j        ¦  «        } || j        ||¦  «        dk     rt!          d¦  «        ‚t          j	        d¦  «        }t          j	        d¦  «        }t          j
        j        j        }	 |	t          j        | j        ¦  «        t          j        |¦  «        |t          j        |¦  «        ¦  «        }
|
st!          d¦  «        ‚| j        sHt          j
        j        j        }t          j        |_        t          j         |¦   «         ¦  «        | _        t          j
        j                             | j        t          j        | j        ¦  «        t          j        |¦  «        ¦  «        }
|
st!          d	¦  «        ‚n»dd
lm}m}m}m}m}m} t                                d| j        ¦  «        }t          |¦  «        | _         |d| j        ||z  ||z  |z  ¬¦  «        | _        | j                             |¦  «         t          j         t          j!         "                    | j        ¦  «        ¦  «        | _        t          j        | j        g| j#        ¢R Ž } || j        ¦  «        | _$        d S )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Ž  )rG  Úprot)%ÚbytesrA   r  ÚctypesÚc_size_trp   r
  rd   rÛ   Úc_ulongÚwindllÚkernel32ÚVirtualAllocÚc_void_pr  r	  rC   Ú	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   ÚcompilezASM.compile—  s+  € Ý—’˜C Ô!2Ñ3Ô3€,ÝŒo�c ,Ñ/Ô/Ñ0Ô0€$„)åÔñ .Få
ˆlÑ
Ô
€4à
ˆV‚m€m˜F�TÝ”˜vÑ&Ô&€:Ý”N 3Ñ'Ô'€>Ý”]Ô+Ô8€?Ý#œ_€?ÔØ!�/ $­¬¸Ñ(=Ô(=¸zÈ>ÑZÔZ€4„<Ø
Œ,ð .Ý
Ð,Ñ
-Ô
-Ð-ð b�VÔ�fœo­v¬ÅÄÕQWÔQ`ÑaÔaÕbhÔbvÑwÔw€7Ø€gˆdŒl˜L¨$Ñ/Ô/°!Ò3Ð3Ý
Ð'Ñ
(Ô
(Ð(õ ”. Ñ&Ô&€<Ý” Ñ"Ô"€;Ý”}Ô-Ô<ÐØ	Ð	�6œ?¨4¬<Ñ8Ô8½&¼/È$Ñ:OÔ:OÐQ]Õ_eÔ_kÐlwÑ_xÔ_xÑ	yÔ	y€3Ø
ð -Ý
Ð+Ñ
,Ô
,Ð,ð Œ/ð >Ý!œ=Ô1ÔCÐÝ#)¤?ÐÔ Ý”oÐ&:Ð&:Ñ&<Ô&<Ñ=Ô=€D„Oå	ŒÔ	×	5Ò	5°d´oÅvÄÐW[ÔWcÑGdÔGdÕflÔfuÐvzÑf{Ôf{Ñ	|Ô	|€3Ø
ð 4Ý
Ð2Ñ
3Ô
3Ð3ð4ð WÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVõ —*’*˜S $Ô"3Ñ4Ô4€<Ý�<Ñ Ô €4„9ØˆT�"�d”i {°]Ñ'BÈÐV_ÑI_ÐbkÑIkÐlÑlÔl€4„7ð „7‡=‚=�ÑÔÐÝÔ"¥6¤<×#;Ò#;¸D¼GÑ#DÔ#DÑEÔE€4„<õ Ô˜dœlÐ;¨T¬]Ð;Ð;Ð;€(Øˆh�t”|Ñ$Ô$€$„)€)€)r   c                 ó.   — |                       ¦   «         }|S rY  )r  )r   r\  s     r   ÚrunzASM.runÏ  s   € à�9Š9‰;Œ;€&à	€-r   c                 ó^  — t           j        rdt          j        d¦  «        }t          j        j                             t          j        | j        ¦  «        t          j	        d¦  «        |¦  «         n| j
                             ¦   «          d | _        d | _
        d | _        d | _        d| _        d S )Ni €  r   )rd   rÛ   r  r  r  r  ÚVirtualFreer  r	  r  r  rû   r  r  r
  )r   ÚMEM_RELEASEs     r   ÚfreezASM.freeÕ  sŠ   € åÔð Ý” Ñ'Ô'€;Ý	„=Ô×%Ò%¥f¤o°d´lÑ&CÔ&CÅVÄ_ÐUVÑEWÔEWÐYdÑeÔeÐeÐeà„7‡=‚=�?„?€?à€$„/Ø€$„'Ø€$„)Ø€$„,Ø€$„)€)€)r   )r`   ra   rb   r#   r/  r1  r5  r   r   r   r  r  Œ  s]   € € € € € Ø ¨2¸Bð ð ð ð ð6%ð 6%ð 6%ðpð ð ðð ð ð ð r   r  c                   óZ   — e Zd Zdd„Zddg fd„Zd„ Zd„ Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zd„ Zd„ ZdS )ÚCPUIDNc                 óR   — |€t          dd¦  «        }t          |¦  «        | _        d S )NF)r   rú  Úis_selinux_enforcing)r   r÷  s     r   r#   zCPUID.__init__å  s.   € Ø
€]Ý�˜ÑÔ€5õ 4°EÑ:Ô:€$ÔÐÐr   r   c                 óP   — t          |||¦  «        }|                     ¦   «          |S rY  )r  r/  )r   r  r  r  Úasms        r   Ú	_asm_funczCPUID._asm_funcì  s%   € ÝˆG�X˜|Ñ,Ô,€#Ø‡+‚+�-„-€-Ø	€*r   c                 ó´   — t          t          j        d|¦  «        }|                     ¦   «          |                     ¦   «         }|                     ¦   «          |S )Nr   )r  r  Úc_uint32r/  r1  r5  )r   r  r;  r\  s       r   Ú_run_asmzCPUID._run_asmñ  sA   € Ý�FŒO˜R Ñ.Ô.€#Ø‡+‚+�-„-€-Ø�7Š7‰9Œ9€&Ø‡(‚(�*„*€*Ø	€-r   c                 ó"  — |                       dd¦  «        }|                       dd¦  «        }|                       dd¦  «        }g }|||fD ]/}dD ]*}|                     t          ||z	  dz  ¦  «        ¦  «         Œ+Œ0d                     |¦  «        }|S )Nó   1Àó   ¢‰ØÃó   ¢‰ÈÃó   ¢‰ÐÃ©r   é   r¹  é   éÿ   r6   )r?  rè   ÚchrrA   )r   ÚebxÚecxÚedxrÂ  rì  r
   s          r   Úget_vendor_idzCPUID.get_vendor_idù  sÆ   € à�ŠØðñ	ô 	€#ð 	�ŠØðñ	ô 	€#ð 	�ŠØðñ	ô 	€#ð €)Ø�3˜ˆ_ð -ð -€cØð -ð -€qØ×Ò•S˜# ™( dÑ*Ñ+Ô+Ñ,Ô,Ð,Ð,ð-à�gŠg�iÑ Ô €)à	Ðr   c                 óÐ   — |                       dd¦  «        }|dz	  dz  }|dz	  dz  }|dz	  dz  }|dz	  dz  }|d	z	  dz  }|d
z	  dz  }d}|dv r||z   }n|}|dv r|dz  |z   }||||dœS )Nó   ¸   s   ¢Ãr   é   r  rF  é   rH   r¹  é   rH  )rP  )r|  rP  )rC  rD  rE  rF  ©r?  )	r   ÚeaxÚstepping_idrD  Ú	family_idrF  Úextended_model_idÚextended_family_idrE  s	            r   Úget_infozCPUID.get_info  sÍ   € à�ŠØðñ	ô 	€#ð ˜‘˜SÑ €+Ø�!‰8�sÑ
€%Ø�a‰x˜3Ñ€)Ø˜2‘I Ñ$€.Ø˜b‘y CÑ'ÐØ˜r™	 TÑ)ÐØ€&à�$ÐÐØ Ñ*€6€6à€6à�'ÐÐØ Ñ" eÑ+€5ð ØØØ$ð	
ð 
ð r   c                 ó0   — |                       d¦  «        }|S )Ns   ¸   €¢ÃrS  )r   Úmax_extension_supports     r   Úget_max_extension_supportzCPUID.get_max_extension_support=  s#   € àŸ-š-ðñô Ðð 
Ðr   c                 ó’  — |                       dd¦  «        }|                       dd¦  «        }i dt          |d¦  «        “dt          |d¦  «        “dt          |d	¦  «        “d
t          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “d t          |d!¦  «        “d"t          |d#¦  «        “d$t          |d%¦  «        “i d&t          |d'¦  «        “d(t          |d)¦  «        “d*t          |d+¦  «        “d,t          |d-¦  «        “d.t          |d/¦  «        “d0t          |d1¦  «        “d2t          |d3¦  «        “d4t          |d5¦  «        “d6t          |d7¦  «        “d8t          |d9¦  «        “d:t          |d;¦  «        “d<t          |d=¦  «        “d>t          |d?¦  «        “d@t          |d¦  «        “dAt          |d¦  «        “dBt          |d	¦  «        “dCt          |d¦  «        “¥i dDt          |d¦  «        “dEt          |d¦  «        “dFt          |d¦  «        “dGt          |d¦  «        “dHt          |d¦  «        “dIt          |d¦  «        “dJt          |dK¦  «        “dLt          |d¦  «        “dMt          |d¦  «        “dNt          |d¦  «        “dOt          |d!¦  «        “dPt          |d%¦  «        “dQt          |d'¦  «        “dRt          |d)¦  «        “dSt          |dT¦  «        “dUt          |d+¦  «        “dVt          |d-¦  «        “¥t          |d/¦  «        t          |d1¦  «        t          |d3¦  «        t          |d5¦  «        t          |d7¦  «        t          |d9¦  «        t          |d;¦  «        t          |d=¦  «        t          |d?¦  «        dWœ	¥}dX„ |                     ¦   «         D ¦   «         }|dk    �r|                       dYdZ¦  «        }|                       dYd[¦  «        }i d\t          |d	¦  «        “d]t          |d¦  «        “d^t          |d¦  «        “d_t          |d¦  «        “d`t          |d¦  «        “dat          |d¦  «        “dbt          |d¦  «        “dct          |dK¦  «        “ddt          |d¦  «        “det          |d¦  «        “dft          |d¦  «        “dgt          |d!¦  «        “dht          |d#¦  «        “dit          |d%¦  «        “djt          |d'¦  «        “dkt          |d)¦  «        “dlt          |dT¦  «        “i dmt          |d+¦  «        “dnt          |d-¦  «        “dot          |d/¦  «        “dpt          |d1¦  «        “dqt          |d3¦  «        “drt          |d5¦  «        “dst          |d7¦  «        “dtt          |d9¦  «        “dut          |d;¦  «        “dvt          |d=¦  «        “dwt          |d?¦  «        “dxt          |d¦  «        “dyt          |d¦  «        “dzt          |d	¦  «        “d{t          |d¦  «        “d|t          |d¦  «        “d}t          |d¦  «        “¥t          |d¦  «        t          |d¦  «        t          |dK¦  «        t          |d¦  «        t          |d¦  «        t          |d¦  «        t          |d-¦  «        t          |d=¦  «        d~œ¥}d„ |                     ¦   «         D ¦   «         }||z  }|d€k    �r×|                       d�¦  «        }|                       d‚¦  «        }i dt          |d¦  «        “dt          |d¦  «        “dt          |d	¦  «        “d
t          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dƒt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “d t          |d!¦  «        “d"t          |d#¦  «        “d$t          |d%¦  «        “i d„t          |d)¦  «        “d…t          |dT¦  «        “d†t          |d-¦  «        “d.t          |d/¦  «        “d0t          |d1¦  «        “d‡t          |d3¦  «        “dˆt          |d5¦  «        “d‰t          |d7¦  «        “dŠt          |d;¦  «        “d‹t          |d=¦  «        “dŒt          |d?¦  «        “d�t          |d¦  «        “dŽt          |d¦  «        “d�t          |d	¦  «        “d�t          |d¦  «        “d‘t          |d¦  «        “d’t          |d¦  «        “¥i d“t          |d¦  «        “d”t          |d¦  «        “d•t          |d¦  «        “d–t          |d¦  «        “d—t          |dK¦  «        “d˜t          |d¦  «        “d™t          |d¦  «        “dšt          |d¦  «        “d›t          |d!¦  «        “dœt          |d#¦  «        “d�t          |d%¦  «        “džt          |d)¦  «        “dŸt          |d+¦  «        “d t          |d-¦  «        “d¡t          |d/¦  «        “d¢t          |d1¦  «        “d£t          |d5¦  «        “¥t          |d7¦  «        t          |d9¦  «        d¤œ¥}d¥„ |                     ¦   «         D ¦   «         }||z  }|                     ¦   «          |S )¦NrO  rD  rC  Úfpur   Úvmer'   Úder(   ÚpserH   Útscr  Úmsrrf   Úpaer|  Úmceé   Úcx8rF  Úapicr   Úsepé   ÚmtrrrQ  Úpgeé   Úmcaé   ÚcmovrP  Úpatr¹  Úpse36é   Úpné   Úclflushé   Údtsé   Úacpié   Úmmxé   ÚfxsrrG  Ú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_2rR  Úx2apicÚmovbe)	ÚpopcntÚtscdeadlineÚaesÚxsaveÚosxsaveÚavxÚf16cÚrdrndÚ
hypervisorc                 ó   — g | ]	\  }}|¯|‘Œ
S r   r   r²  s      r   r   z#CPUID.get_flags.<locals>.<listcomp>Ÿ  ó!   € Ð
,Ð
,Ð
,‘��A¨!Ð
,ˆ1Ð
,Ð
,Ð
,r   s   1És
   ¸   ¢‰ØÃ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_lcc                 ó   — g | ]	\  }}|¯|‘Œ
S r   r   r²  s      r   r   z#CPUID.get_flags.<locals>.<listcomp>û  ó!   € Ð?Ð?Ð?™4˜1˜a¸QÐ?�QÐ?Ð?Ð?r   l       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_l2ic                 ó   — g | ]	\  }}|¯|‘Œ
S r   r   r²  s      r   r   z#CPUID.get_flags.<locals>.<listcomp>V  rÙ  r   )r?  rð  r7  rK  )r   r[  rL  rK  rG  rJ  Úextended_flagss          r   Ú	get_flagszCPUID.get_flagsH  ss  € à�ŠØðñ	ô 	€#ð 	�ŠØðñ	ô 	€#ðBØ�;�s˜AÑÔðBà�;�s˜AÑÔðBð �+�c˜1Ñ
Ô
ðBð 	�;�s˜AÑÔð	Bð
 	�;�s˜AÑÔðBð 	�;�s˜AÑÔðBð 	�;�s˜AÑÔðBð 	�;�s˜AÑÔðBð 	�;�s˜AÑÔðBð 
�K˜˜QÑÔðBð 	�;�s˜BÑÔðBð 
�K˜˜RÑ Ô ðBð 	�;�s˜BÑÔðBð 	�;�s˜BÑÔðBð  
�K˜˜RÑ Ô ð!Bð" 	�;�s˜BÑÔð#Bð$ �[˜˜bÑ!Ô!ð%Bð Bð& �+�c˜2Ñ
Ô
ð'Bð( �{˜3 Ñ#Ô#ð)Bð, 	�;�s˜BÑÔð-Bð. 
�K˜˜RÑ Ô ð/Bð0 	�;�s˜BÑÔð1Bð2 
�K˜˜RÑ Ô ð3Bð4 	�;�s˜BÑÔð5Bð6 
�K˜˜RÑ Ô ð7Bð8 �+�c˜2Ñ
Ô
ð9Bð: �+�c˜2Ñ
Ô
ð;Bð< �+�c˜2Ñ
Ô
ð=Bð> 
�K˜˜RÑ Ô ð?Bð@ 	�;�s˜BÑÔðABðD 	�;�s˜AÑÔðEBðF •˜S !Ñ$Ô$ðGBðH �k˜#˜qÑ!Ô!ðIBðJ �{˜3 Ñ"Ô"ðKBð Bð BðL �k˜#˜qÑ!Ô!ðMBðN 	�;�s˜AÑÔðOBðP 	�;�s˜AÑÔðQBðR 	�;�s˜AÑÔðSBðT 	�;�s˜AÑÔðUBðV �[˜˜aÑ Ô ðWBðX 	�;�s˜BÑÔðYBð\ 	�;�s˜BÑÔð]Bð^ 
�K˜˜RÑ Ô ð_Bð` 
�K˜˜RÑ Ô ðaBðb 
�K˜˜RÑ Ô ðcBðf 
�K˜˜RÑ Ô ðgBðh 	�;�s˜BÑÔðiBðj �k˜#˜rÑ"Ô"ðkBðl �k˜#˜rÑ"Ô"ðmBðn �k˜#˜rÑ"Ô"ðoBðp �[˜˜bÑ!Ô!ðqBð Bõr ˜#˜rÑ"Ô"Ý˜s BÑ'Ô'Ý�s˜BÑÔÝ˜˜bÑ!Ô!Ý˜3 Ñ#Ô#Ý�s˜BÑÔÝ˜˜RÑ Ô Ý˜˜bÑ!Ô!Ý˜c 2Ñ&Ô&ðCBð Bð B€%ðJ -Ð
,˜Ÿš™œÐ
,Ñ
,Ô
,€%ð ˜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ð Bð, •;˜s BÑ'Ô'ð-Bð. •˜C Ñ$Ô$ð/Bð0 •;˜s BÑ'Ô'ð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 •;˜s AÑ&Ô&ðGBðH �[˜˜aÑ Ô ðIBðJ 
�K˜˜QÑÔðKBðL �k˜#˜qÑ!Ô!ðMBðP •K  QÑ'Ô'ðQBð BõT ˜˜aÑ Ô Ý˜˜aÑ Ô Ý˜s BÑ'Ô'Ý˜s BÑ'Ô'Ý   bÑ)Ô)å# C¨Ñ,Ô,õ ˜#˜rÑ"Ô"õ ˜3 Ñ#Ô#ðABð Bð B€>ðJ @Ð? >×#7Ò#7Ñ#9Ô#9Ð?Ñ?Ô?€>ØˆNÑ€5ð ˜jÒ(Ñ(à	�Šðñ
ô 
€3ð 
�Šðñ
ô 
€3ðBØ	�K˜˜QÑÔðBà	�K˜˜QÑÔðBð 	�;�s˜AÑÔð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ð Bð( 	�;�s˜BÑÔð)Bð* 	�;�s˜BÑÔð+Bð. �{˜3 Ñ#Ô#ð/Bð0 
�K˜˜RÑ Ô ð1Bð2 �[˜˜bÑ!Ô!ð3Bð4 •˜S "Ñ%Ô%ð5Bð6 •˜C Ñ$Ô$ð7Bð8 �{˜3 Ñ#Ô#ð9Bð< 	�;�s˜BÑÔð=Bð> •˜S "Ñ%Ô%ð?Bð@ �k˜#˜rÑ"Ô"ðABðD •˜C Ñ#Ô#ðEBðF •;˜s AÑ&Ô&ðGBðH 
�K˜˜QÑÔðIBðJ •˜C Ñ#Ô#ðKBðL •;˜s AÑ&Ô&ðMBðN 
�K˜˜QÑÔðOBð Bð 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 •;˜s BÑ'Ô'ðkBðn 
�K˜˜RÑ Ô ðoBðp •˜C Ñ$Ô$ðqBðr •[  bÑ)Ô)ðsBðt •;˜s BÑ'Ô'ðuBðx 
�K˜˜RÑ Ô ðyBð Bõz ˜C Ñ$Ô$Ý˜C Ñ$Ô$ð}Bð Bð B€>ðJ @Ð? >×#7Ò#7Ñ#9Ô#9Ð?Ñ?Ô?€>ØˆNÑ€5à‡*‚*�,„,€,Ø	€,r   c                 ór  — d}|dk    r‡g d¢}|D ]€}|                       |d¦  «        }|                       |d¦  «        }|                       |d¦  «        }|                       |d¦  «        }||||fD ]}	dD ]}
|t          |	|
z	  d	z  ¦  «        z  }ŒŒ Œ�|                     d
¦  «                             ¦   «         }|S )Nr6   l       )s   ¸  €s   ¸  €s   ¸  €s   ¢‰ÀÃrB  rC  rD  rE  rH  ú )r?  rI  r{   )r   r[  rÄ   ÚinstructionsÚinstructionrT  rJ  rK  rL  rì  r
   s              r   Úget_processor_brandzCPUID.get_processor_brand]  s  € Ø€/ð ˜jÒ(Ð(ðð ð €<ð
 #ð $0ð $0€{à
�-Š-Øðñô €Cð �-Š-Øðñô €Cð �-Š-Øðñô €Cð �-Š-Øðñô €Cð �S˜#˜sÐ#ð 0ð 0ˆØð 0ð 0ˆØ�˜c Q™h¨$Ñ.Ñ/Ô/Ñ/€o€oð0ð0ð
 $×)Ò)¨$Ñ/Ô/×5Ò5Ñ7Ô7€/à	Ðr   c                 ót   — i }|dk     r|S |                       d¦  «        }|dz  dz  |dz	  dz  |dz	  dz  d	œ}|S )
Nl       s
   ¸  €¢‰ÈÃrH  r™  rQ  rP  r¹  iÿÿ  )Úsize_bÚassociativityÚline_size_brS  )r   r[  Ú
cache_inforK  s       r   Ú	get_cachezCPUID.get_cache“  sn   € Ø€*ð ˜ZÒ'Ð'Ø
Ðð 	�Šðñ	ô 	€#ð �T‰z˜TÑ!Ø˜R‘i 3Ñ&Ø˜2‘I Ñ'ðð €*ð 
Ðr   c                 óx  ‡— d }t           j        dk    rmd }t          j        t          j        ¦  «        t          j        t          j        ¦  «        f}|                      ||g d¢¦  «        }|j        Šˆfd„}||_        |}n9t           j        dk    r)t          j        }d}|                      ||g d¢¦  «        }|}|S )NÚ32bit)ó   Us   ‰årA  ó   ¢ó   1s   ‹]s   ‹Ms   ‰s   ‰ó   ]ó   Ãc                  óâ   •— t          j        d¦  «        } t          j        d¦  «        } ‰t          j        | ¦  «        t          j        |¦  «        ¦  «         | j        dz  dz  |j        z  }|S )Nr   rä  l       üÿ )r  r>  r  r  )ÚhighÚlowr\  Úold_funcs      €r   Únew_funcz&CPUID.get_ticks_func.<locals>.new_funcÃ  sg   ø€ åŒ?˜1ÑÔ€DÝ
Œ/˜!Ñ
Ô
€CØ€H�VŒ\˜$ÑÔ¥¤¨cÑ!2Ô!2Ñ3Ô3Ð3ð Œz˜RÑÐ#5Ñ5¸¼ÑB€FØ€Mr   Ú64bitr   )	ó   HrA  r  r  r  s   Áâ r  s   	Ðr  )rd   rØ   r  ÚPOINTERÚc_uintr<  r  Úc_uint64)r   r\  r  r  Úget_ticks_x86_32r  Úget_ticks_x86_64r  s          @r   Úget_ticks_funczCPUID.get_ticks_funcª  sä   ø€ Ø€&å„_˜ÒÐà€7ÝŒ~�fœmÑ,Ô,­f¬n½V¼]Ñ.KÔ.KÐL€8Ø—n’n W¨hðð ð ñô Ðð" Ô#€8ðð ð ð ð ð $ÐÔà€6€6Ý„˜'Ò!Ð!åŒ_€7Ø€8Ø—n’n W¨hð
ð 
ð 
ñô Ðð €6Ø	€-r   c                 óÒ   — ddl m} |                      ¦   «         }|                     ¦   «         } |d¦  «         |                     ¦   «         }||z
  }|                     ¦   «          |S )Nr   )Úsleepr'   )Útimer   r  r  r5  )r   r   Úticks_fnr®  rµ  rk  s         r   Ú
get_raw_hzzCPUID.get_raw_hzä  sg   € ØÐÐÐÐÐà× Ò Ñ"Ô"€(à
�-Š-‰/Œ/€%Ø€%ˆ�(„(€(Ø�Š‰Œ€#à�‰;€%Ø
‡-‚-�/„/€/à	€,r   rY  )r`   ra   rb   r#   r<  r?  rM  rY  r\  rÿ  r  r
  r  r#  r   r   r   r7  r7  ä  sÔ   € € € € € ð;ð ;ð ;ð ;ð "¨B¸Rð ð ð ð ð
ð ð ð ð  ð  ðFð ð ðBð ð ðRð Rð Rðj3ð 3ð 3ðlð ð ð.8ð 8ð 8ðtð ð ð ð r   r7  c                  ó2  — ddl m}  t          dd¦  «        }i }|j        t          _        |j        t          _        	 t          t          j
        ¦  «        \  }}|dvr+|                     d¦  «         |                     |d¦  «        S t          |¦  «        }|j        r+|                     d¦  «         |                     |d¦  «        S |                     ¦   «         }|                     |¦  «        }|                     ¦   «         }|                     |¦  «        }|                     ¦   «         }	t)          |	¦  «        }	t+          |¦  «        \  }
}|                     ¦   «         d|t/          |
|¦  «        t/          |	d¦  «        t1          |
|¦  «        t1          |	d¦  «        |d         |d	         |d
         |d         |d         |d         |d         |                     |¦  «        dœ}t5          |¦  «        }|                     ¦   «          nw# t8          $ rj}ddlm}  |¦   «         }d                     d„ |                      d¦  «        D ¦   «         ¦  «        dz   |_!        |                     |d¦  «        cY d}~S d}~ww xY w|                     |d¦  «        S )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 ...r6   r  r  r  rC  rD  rE  rF  )rÉ   r:  r;  r<  r=  r>  rÑ   r@  rA  rB  rC  rD  rE  rF  rG  r:   c                 ó8   — g | ]}d                       |¦  «        ‘ŒS r=   r?   r   s     r   r   z3_get_cpu_info_from_cpuid_actual.<locals>.<listcomp>8  s&   € ÐNÐNÐN°!˜×*Ò*¨1Ñ-Ô-ÐNÐNÐNr   r9   NF)"r   r   r   r   ÚsysrZ   r   r[   r  rd   rÍ   rF   r_   r7  r9  r\  r
  rY  r  r#  rÐ   rª  rM  rˆ  rw  rÿ  rÿ  r4   rC   rD   r;   rA   rB   r   )r   r÷  rR   r  rØ   Úcpuidr[  r	  rÄ   rÑ   r>  rs  r\   r;   rE   s                  r   Ú_get_cpu_info_from_cpuid_actualr*  ò  s­  € ð ÐÐÐÐÐå	ˆt�TÑ	Ô	€Ø
€ð Œm…„ØŒm…„ð7#å�:Ô5Ñ6Ô6�*€$ˆð 
Ð%Ð	%Ð	%Ø‡:‚:Ð=Ñ>Ô>Ð>Ø
�-Š-˜˜dÑ
#Ô
#Ð#õ �‰,Œ,€%Ø
Ôð $Ø‡:‚:Ð2Ñ3Ô3Ð3Ø
�-Š-˜˜dÑ
#Ô
#Ð#ð  ×9Ò9Ñ;Ô;ÐØ�ŠÐ4Ñ5Ô5€*Ø	�ŠÑ	Ô	€$à×-Ò-Ð.CÑDÔD€/ð ×ÒÑ Ô €)Ý  Ñ+Ô+€)õ 1°ÑAÔAÑ€-�à×'Ò'Ñ)Ô)ØØå2°=À%ÑHÔHÝ.¨y¸!Ñ<Ô<Ý% m°UÑ;Ô;Ý! )¨QÑ/Ô/à˜xÔ(Ø# MÔ2Ø'¨Ô8à�JÔØ�ŒMØ�(Œ^ØÐ*Ô+Ø�OŠOÐ1Ñ2Ô2ð%
ð 
€$õ* 
-¨TÑ	2Ô	2€$Ø‡-‚-�/„/€/€/øÝð #ð #ð #Ø"Ð"Ð"Ð"Ð"Ð"Øˆz‰|Œ|€*Ø�wŠwÐNÐN°z×7GÒ7GÈÑ7MÔ7MÐNÑNÔNÑOÔOÐRVÑV€%„*Ø	�Š�t˜TÑ	"Ô	"Ð"Ð"Ð"Ð"Ð"Ð"øøøøð	#øøøð 	�Š�d˜EÑ"Ô"Ð"s-   ¼A
H ÂA H ÃEH È
J ÈAI;É5J É;J c                 óÆ   — t           j        }t           j        }t          ¦   «         }|t           _        |t           _        |                      t          |¦  «        ¦  «         d S rY  )r(  rZ   r[   r*  Úputr(  )ÚqueueÚorig_stdoutÚorig_stderrrL   s       r   Ú+_get_cpu_info_from_cpuid_subprocess_wrapperr0  =  sI   € ÝŒz€ÝŒz€å
)Ñ
+Ô
+€à…„Ø…„à‡‚�;�vÑÔÑÔÐÐÐr   c                  óØ  — t                                d¦  «         ddlm} m} t
          j        st                                d¦  «         i S t          t
          j	        ¦  «        \  }}|dvrt                                d¦  «         i S 	 t          �rÊ |¦   «         } | t          |f¬¦  «        }|                     ¦   «          |                     ¦   «         r)|                     d¦  «         |                     ¦   «         °)|j        dk    rt                                d¦  «         i S |                     ¦   «         rt                                d	¦  «         i S t#          |                     ¦   «         ¦  «        }dd
l}|                     d¬¦  «        }d|v r(|d         r t                                |d         ¦  «         d|v r^|d         rVt,          j                             d                     |d         ¦  «        ¦  «         t,          j                             ¦   «          d|v r^|d         rVt,          j                             d                     |d         ¦  «        ¦  «         t,          j                             ¦   «          d|vrt                                d¦  «         i S d|v r^|d         rVt                                d¦  «         t                                |d         ¦  «         t                                d¦  «         i S d|v r$|d         rt                                d¦  «         i S d|vs|d         st                                d¦  «         i S |d         S t,          j        }	t,          j        }
t7          ¦   «         }|	t,          _        |
t,          _        t                                ¦   «          |d         S # t:          $ r$}t                                |¦  «         Y d
}~nd
}~ww xY wi S )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%  r&  )ÚtargetÚargsz,Failed to run CPUID in process. Skipping ...z7Failed to get anything from CPUID process. Skipping ...Nr  )ÚindentrL   rZ   z{0}
r[   r]   z6Failed to get is_fail from CPUID process. Skipping ...r\   z
Failed ...rR   z:Failed to get return info from CPUID process. Skipping ...)rú   r2   rÙ   r2  r3  rd   rÞ   rF   r  rÍ   ÚCAN_CALL_CPUID_IN_SUBPROCESSr0  r®  Úis_aliverA   ÚexitcodeÚemptyr-  r�   ÚpprintÚPrettyPrinterr+   r(  rZ   r   r,   r[   r*  r4   rC   )r2  r3  r  rØ   r-  rì   rL   r;  Úppr.  r/  r\   s               r   Ú_get_cpu_info_from_cpuidr>  H  s¶  € õ 	‡‚Ð2Ñ3Ô3Ð3à+Ð+Ð+Ð+Ð+Ð+Ð+Ð+õ 	Ôð Ý	‡,‚,Ð+Ñ,Ô,Ð,Ø	€)õ �*Ô4Ñ5Ô5�€€tð 	Ð$Ð$Ð$Ý	‡,‚,Ð>Ñ?Ô?Ð?Ø	€)ðGÝ!ñ Dàˆ5‰7Œ7€5Ø€wÕAÈÈÐQÑQÔQ€1Ø‡7‚7�9„9€9ð 
�Š‰Œð Ø‡F‚Fˆ1�I„I€Ið 
�Š‰Œð ð „j�A‚o€oÝ‡L‚LÐ?Ñ@Ô@Ð@Ø€Ið ‡k‚k�m„mð (Ý‡L‚LÐJÑKÔKÐKØ€Iõ ˜Ÿš™œÑ%Ô%€FØ€M€M€MØ	×	Ò	 QÐ	Ñ	'Ô	'€Bð �6ÐÐ˜f XÔ.ÐÝ‡]‚]�6˜(Ô#Ñ$Ô$Ð$à�6ÐÐ˜f XÔ.ÐÝ„Z×Ò�g—n’n V¨HÔ%5Ñ6Ô6Ñ7Ô7Ð7Ý„Z×ÒÑÔÐà�6ÐÐ˜f XÔ.ÐÝ„Z×Ò�g—n’n V¨HÔ%5Ñ6Ô6Ñ7Ô7Ð7Ý„Z×ÒÑÔÐà˜ÐÐÝ‡\‚\ÐJÑKÔKÐKØ€Yð �€€˜6 %œ=€Ý‡\‚\Ð@ÑAÔAÐAÝ‡]‚]�6˜%”=Ñ!Ô!Ð!Ý‡]‚]�<Ñ Ô Ð Ø€Yà�FÐÐ˜v iÔ0ÐÝ‡]‚]�<Ñ Ô Ð Ø€Yà�VÐÐ 6¨&¤>ÐÝ‡\‚\ÐNÑOÔOÐOØ€Yà�&Œ>Ðõ ”€;Ý”€;å+Ñ-Ô-€6à…3„:Ø…3„:å
‡?‚?ÑÔÐØ
�Œ.ÐøÝð ð ð Ý	‡,‚,ˆsÑÔÐÐÐÐÐÐøøøøðøøøð 	€sF   ÂBN9 Ä%/N9 ÅE
N9 Ê A!N9 Ì'N9 Ì*'N9 ÍN9 ÍAN9 Î9
O'ÏO"Ï"O'c                  ó"  — t                                d¦  «         	 t                               ¦   «         st                                d¦  «         i S t                               ¦   «         \  } }| dk    rt                                d¦  «         i S t          d|dddd	d
¦  «        }t          d|dddddd¦  «        }t          d|ddd¦  «        }t          d|t          dd¦  «        }t          d|t          dd¦  «        }t          d|t          dd¦  «        }t          d|ddd¦  «        }t          d|ddddd¦  «        }	|	r(|	                     ¦   «         }	|	 	                    ¦   «          |s›	 t          dd¦  «        D ]x}
d                     |
¦  «        }t          d|dd|¦  «        }|rLd„ |                     d¦  «        D ¦   «         }t          |¦  «        }d|v r|d         dk    rd|v r
|d         } nŒyn# t          $ r Y nw xY wt          d|ddd d!d"d#d$¦	  «	        }|                     ¦   «                              d%¦  «                             ¦   «         }t#          |¦  «        }d&\  }}	 t%          |¦  «        \  }}n# t          $ r Y nw xY w||t'          |¦  «        |	||||d'œ}|r|d(k    r|}d)}n
|r|d(k    r|}t)          ||¦  «        d*k    r&t+          ||¦  «        |d+<   t)          ||¦  «        |d,<   t)          ||¦  «        d*k    r&t+          |d)¦  «        |d-<   t)          |d)¦  «        |d.<   t-          |dddd/œ¦  «        }t                                ¦   «          |S # t          $ r&}t                                |¦  «         i cY d}~S d}~ww xY w)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 ...FNr6   rÂ  z	vendor idÚvendorTz
model namer¾   Ú	processorÚuarchz
cache sizerŽ  rC  rD  z
cpu familyÚHardwarerG  ÚFeaturesúASEs implementedr˜  zcache{0}c                 ó8   — g | ]}|                      d ¦  «        ‘ŒS rÒ  )rB   )r	   r¢  s     r   r   z3_get_cpu_info_from_proc_cpuinfo.<locals>.<listcomp>Õ  s$   € Ð>Ð>Ð> Eˆu�{Š{˜3ÑÔÐ>Ð>Ð>r   ró   ÚlevelÚ3r
  zcpu MHzz	cpu speedÚclockzcpu MHz dynamiczcpu MHz staticr{  r*  )r:  r;  rH  rG  rÉ   rC  rD  rE  rf  r|  rn  r<  r>  r=  rÑ   ©rC  rD  rE  )rú   r2   rd   rl   rF   r¥   r]  rr  rB   rK  Úranger   r6  rC   r|   rh  r{   rÐ   rª  r¤  rw  rˆ  rÿ  r4   )r    rL   rÂ  rÄ   Ú
cache_sizerC  rD  rE  ÚhardwarerG  ÚirÅ  r  rÑ   r>  rs  rR   r\   s                     r   Ú_get_cpu_info_from_proc_cpuinforO  ¬  s  € õ 	‡‚Ð:Ñ;Ô;Ð;ðVå	×	$Ò	$Ñ	&Ô	&ð Ý
‡<‚<Ð<Ñ=Ô=Ð=Ø
€9å!×2Ò2Ñ4Ô4Ñ€*ˆfØ�1‚_€_Ý
‡<‚<Ð?Ñ@Ô@Ð@Ø
€9õ ˜ ¨¨b°+¸{ÈHÑUÔU€)Ý˜t V¨T°4¸ÀuÈkÐ[bÑcÔc€/Ý˜% ¨¨r°<Ñ@Ô@€*Ý˜˜v¥s¨B°
Ñ;Ô;€(Ý
�U˜F¥C¨¨WÑ
5Ô
5€%Ý�e˜V¥S¨"¨lÑ;Ô;€&Ý˜˜v t¨R°Ñ<Ô<€(õ �U˜F D¨$°¸ÐEWÑ
XÔ
X€%Ø
ð Ø�;Š;‰=Œ=€5Ø‡:‚:�<„<€<ð 
ð 	ð	Ý�1�b‰\Œ\ð ð ˆØ×Ò˜aÑ Ô €TÝ˜˜v t¨T°4Ñ8Ô8€UØð Ø>Ð>¨U¯[ª[¸Ñ-=Ô-=Ð>Ñ>Ô>€eÝ�5‰kŒk€eØ	�EÐ	Ð	˜e Gœn°Ò3Ð3¸À%¸¸Ø˜&”M€zØ€uøøøÝ
ð 	ð 	ð 	Ø€Dð	øøøõ ˜ ¨¨b°)¸[È'ÐSdÐfvÑwÔw€)Ø�oŠoÑÔ×&Ò& uÑ-Ô-×3Ò3Ñ5Ô5€)Ý  Ñ+Ô+€)ð #Ñ€-�ðÝ1°/ÑBÔBÑ€=�%�%øÝ	ð ð ð Ø€4ðøøøð Øå*¨:Ñ6Ô6ØØØØØð

ð 

€$ð 
ð ˜-¨5Ò0Ð0Ø€=Ø€5€5Øð ˜	 UÒ*Ð*Ø€9õ �} eÑ,Ô,¨vÒ5Ð5Ý$9¸-ÈÑ$OÔ$O€4Ð Ñ!Ý,¨]¸EÑBÔB€4ˆÑÝ�y %Ñ(Ô(¨6Ò1Ð1Ý 5°iÀÑ CÔ C€4ÐÑÝ(¨°AÑ6Ô6€4ˆÑå	,¨T¸qÈ!ÐVWÐ3XÐ3XÑ	YÔ	Y€$Ý	‡/‚/ÑÔÐØ	€+øÝð ð ð Ý	‡,‚,ˆsÑÔÐà	€)€)€)€)€)€)øøøøðøøøsu   œ4M Á=M ÂCM Å*B	G4 Ç3M Ç4
HÇ>M È HÈA'M É)I< É;M É<
J	ÊM ÊJ	Ê	CM Í
NÍ(N	ÎNÎ	Nc                  óT  — t                                d¦  «         	 d\  } }t                               ¦   «         st                                d¦  «         i S t                               ¦   «         \  }}|dk    rt                                d¦  «         i S |                     d¦  «        d                              d¦  «        d         } |                      d	¦  «        }|d
k    sJ ‚| d|dz   …                              ¦   «          	                    ¦   «         } |  
                    d¦  «        rd}n|  
                    d¦  «        rd}|                      d¦  «                             d¦  «                             ¦   «         } t          | ¦  «        } t          | |¦  «        t          | |¦  «        t          | |¦  «        t          | |¦  «        dœ}t          |¦  «        }t                                ¦   «          |S # t"          $ r&}t                                |¦  «         i cY d}~S d}~ww xY w)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'   r9   r�  rŽ  r(   r{  r|  rz  r   )r<  r=  r>  rÑ   N)rú   r2   rd   r�   rF   r§   rB   r¾  r{   r|   ri  rh  rÐ   rˆ  rw  rÿ  r4   rC   )rÉ  rs  r    rL   rN  rR   r\   s          r   Ú_get_cpu_info_from_cpufreq_inforQ    s  € õ 	‡‚Ð9Ñ:Ô:Ð:ð%Ø�/€(ˆEå	×	$Ò	$Ñ	&Ô	&ð Ý
‡<‚<Ð;Ñ<Ô<Ð<Ø
€9å!×.Ò.Ñ0Ô0Ñ€*ˆfØ�1‚_€_Ý
‡<‚<Ð:Ñ;Ô;Ð;Ø
€9à�\Š\Ð4Ñ5Ô5°aÔ8×>Ò>¸tÑDÔDÀQÔG€(Ø‡m‚m�DÑÔ€!Ø	
ˆbŠˆˆˆØ�a˜!˜A™#�gÔ×$Ò$Ñ&Ô&×,Ò,Ñ.Ô.€(à×Ò�uÑÔð Ø€5€5Ø×Ò˜ÑÔð Ø€5Ø�_Š_˜UÑ#Ô#×*Ò*¨5Ñ1Ô1×7Ò7Ñ9Ô9€(Ý Ñ)Ô)€(õ 4°H¸eÑDÔDÝ/°¸%Ñ@Ô@Ý& x°Ñ7Ô7Ý" 8¨UÑ3Ô3ð	
ð 
€$õ 
-¨TÑ	2Ô	2€$Ý	‡/‚/ÑÔÐØ	€+øÝð ð ð Ý	‡,‚,ˆsÑÔÐà	€)€)€)€)€)€)øøøøðøøøs*   œ9G7 Á=G7 ÂE"G7 Ç7
H'ÈH"ÈH'È"H'c            	      ó	  — t                                d¦  «         	 t                               ¦   «         st                                d¦  «         i S t                               ¦   «         \  } }| dk    rt                                d¦  «         i S i }t          d|dddd¦  «        }|r]t          |¦  «        }d	}t          ||¦  «        |d
<   t          ||¦  «        |d<   t          ||¦  «        |d<   t          ||¦  «        |d<   t          d|dddd¦  «        }|r]t          |¦  «        }d	}t          ||¦  «        |d
<   t          ||¦  «        |d<   t          ||¦  «        |d<   t          ||¦  «        |d<   t          d|ddd¦  «        }|r||d<   t          d|ddd¦  «        }|r||d<   n.t          d|ddd¦  «        }|r| 
                    ¦   «         s||d<   t          d|ddd¦  «        }|r&| 
                    ¦   «         rt          |¦  «        |d<   t          d|ddd¦  «        }|r&| 
                    ¦   «         rt          |¦  «        |d<   t          d|ddd¦  «        }	|	r&|	 
                    ¦   «         rt          |	¦  «        |d<   t          d|ddd¦  «        }
|
r?|
                     d¦  «        d                              ¦   «         }
t          |
¦  «        |d<   t          d|ddd¦  «        }|r?|                     d¦  «        d                              ¦   «         }t          |¦  «        |d<   t          d|dddd ¦  «        }|r?|                     d¦  «        d                              ¦   «         }t          |¦  «        |d!<   t          d|ddd"¦  «        }|r?|                     d¦  «        d                              ¦   «         }t          |¦  «        |d#<   t          d|ddd$d%d&¦  «        }|r-|                     ¦   «         }|                     ¦   «          ||d$<   t!          |dddd'œ¦  «        }t                                ¦   «          |S # t$          $ r&}t                                |¦  «         i cY d}~S d}~ww xY w)(zP
	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|  r<  r=  r>  rÑ   zCPU dynamic MHzzCPU static MHzz	Vendor IDrÉ   z
Model namer;  ÚModelz
CPU familyrE  ÚSteppingrC  rD  z	L1d cacheú(rI  z	L1i cacherJ  zL2 cachez	L2d cacher@  zL3 cacherH  rG  rD  rE  rJ  )rú   r2   rd   r—   rF   r–   r]  rÐ   rˆ  rw  rQ  rr  rB   r{   r¤  rK  rÿ  r4   rC   )r    rL   rR   Únew_hzrs  rÂ  rÆ  rE  rC  rD  rI  rJ  r@  rH  rG  r\   s                   r   Ú_get_cpu_info_from_lscpurW  ;  sÜ  € õ 	‡‚Ð2Ñ3Ô3Ð3ðWÝ	×	Ò	Ñ	Ô	ð Ý
‡<‚<Ð4Ñ5Ô5Ð5Ø
€9å!×'Ò'Ñ)Ô)Ñ€*ˆfØ�1‚_€_Ý
‡<‚<Ð3Ñ4Ô4Ð4Ø
€9à	€$å�e˜V T¨4°À	ÑJÔJ€&Øð 8Ý˜vÑ&Ô&€6Ø€5Ý$9¸&À%Ñ$HÔ$H€4Ð Ñ!Ý 5°f¸eÑ DÔ D€4ÐÑÝ,¨V°UÑ;Ô;€4ˆÑÝ(¨°Ñ7Ô7€4ˆÑå�e˜V T¨4Ð1BÐDTÑUÔU€&Øð 8Ý˜vÑ&Ô&€6Ø€5Ý$9¸&À%Ñ$HÔ$H€4Ð Ñ!Ý 5°f¸eÑ DÔ D€4ÐÑÝ,¨V°UÑ;Ô;€4ˆÑÝ(¨°Ñ7Ô7€4ˆÑå˜ ¨¨d°KÑ@Ô@€)Øð %Ø$€4ˆÑå
�U˜F D¨$°Ñ
=Ô
=€%Ø
ð Ø€4ˆÑÐå�e˜V T¨4°Ñ9Ô9€5Øð �E—M’M‘O”Oð Ø€DˆÑå�e˜V T¨4°Ñ>Ô>€&Øð  �—’Ñ Ô ð  Ý˜‘K”K€4ˆ�>å˜˜v t¨T°:Ñ>Ô>€(Øð $�(×"Ò"Ñ$Ô$ð $Ý˜(‘m”m€4ˆ
Ñå
�U˜F D¨$°Ñ
8Ô
8€%Ø
ð ˆu�}Š}‰Œð Ý�u‘:”:€4ˆ�=å! %¨°°t¸[ÑIÔIÐØð KØ*×0Ò0°Ñ5Ô5°aÔ8×>Ò>Ñ@Ô@ÐÝ 6Ð7IÑ JÔ J€4ÐÑå(¨°¸¸dÀKÑPÔPÐØð YØ8×>Ò>¸sÑCÔCÀAÔF×LÒLÑNÔNÐÝ'=Ð>WÑ'XÔ'X€4Ð#Ñ$å˜U F¨D°$¸
ÀKÑPÔP€-Øð AØ ×&Ò& sÑ+Ô+¨AÔ.×4Ò4Ñ6Ô6€=Ý1°-Ñ@Ô@€4ˆÑå˜U F¨D°$¸
ÑCÔC€-Øð AØ ×&Ò& sÑ+Ô+¨AÔ.×4Ò4Ñ6Ô6€=Ý1°-Ñ@Ô@€4ˆÑõ �U˜F D¨$°¸ÐEWÑ
XÔ
X€%Ø
ð Ø�;Š;‰=Œ=€5Ø‡:‚:�<„<€<Ø€4ˆ�=å	,¨T¸qÈ!ÐVWÐ3XÐ3XÑ	YÔ	Y€$Ý	‡/‚/ÑÔÐØ	€+øÝð ð ð Ý	‡,‚,ˆsÑÔÐà	€)€)€)€)€)€)øøøøðøøøs*   œ4Q Á=Q ÂN?Q Ñ
Q?ÑQ:Ñ4Q?Ñ:Q?c                  óì  — t                                d¦  «         t          t          j        ¦  «        \  } }| dv rt                                d¦  «         i S t                               ¦   «         st                                d¦  «         i S t                               ¦   «         \  }}|�|dk    rt                                d¦  «         i S t          |¦  «        }t            	                    ¦   «          |S )zr
	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 ...)r  zRunning on S390X. Skipping ...z"Failed to find dmesg. Skipping ...Nr   z&Failed to run "dmesg -a". Skipping ...)
rú   r2   r  rd   rÍ   rF   rr   r«   râ  r4   )r  rØ   r    rL   rR   s        r   Ú_get_cpu_info_from_dmesgrY  œ  sÝ   € õ 	‡‚Ð6Ñ7Ô7Ð7õ �*Ô4Ñ5Ô5�€€tØˆIÐÐÝ	‡,‚,Ð/Ñ0Ô0Ð0Ø	€)õ 	×ÒÑÔð Ý	‡,‚,Ð3Ñ4Ô4Ð4Ø	€)õ !×(Ò(Ñ*Ô*Ñ€ˆVØ
€N�j A’o�oÝ	‡,‚,Ð9Ñ:Ô:Ð:Ø	€)å˜FÑ#Ô#€Ý‡‚ÑÔÐØ€r   c                  óø  — t                                d¦  «         	 t                               ¦   «         st                                d¦  «         i S t                               ¦   «         \  } }|�| dk    rt                                d¦  «         i S |                     d¦  «        d                              ¦   «         }d„ |D ¦   «         }d	                     |¦  «        }t          |dd
…         d¦  «        }t          |d
d…         d¦  «        }i dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d
¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d ¦  «        “d!t          |d"¦  «        “d#t          |d$¦  «        “d%t          |d&¦  «        “d't          |d¦  «        “d(t          |d)¦  «        “t          |d*¦  «        t          |d+¦  «        t          |d,¦  «        t          |d-¦  «        t          |d.¦  «        t          |d/¦  «        t          |d¦  «        t          |d
¦  «        t          |d¦  «        t          |d¦  «        t          |d¦  «        t          |d¦  «        d0œ¥}d1„ |                     ¦   «         D ¦   «         }|                     ¦   «          d2|i}t          |¦  «        }t                                ¦   «          |S # t          $ r&}t                                |¦  «         i cY d}~S d}~ww xY w)3z¬
	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'   c                 ó4   — g | ]}|t          d ¦  «        v ¯|‘ŒS )Ú0123456789abcfed)r5  ©r	   Úss     r   r   z6_get_cpu_info_from_ibm_pa_features.<locals>.<listcomp>Ò  s+   € Ð
=Ð
=Ð
=�˜q¥DÐ);Ñ$<Ô$<Ð<Ð<ˆ1Ð<Ð<Ð<r   r6   rF  r¹  Úmmur^  Úslbr(   r1  rH   Údabrrf   Úner|  Úwtrrf  ÚmcrÚdsisrr   Úlpr˜  Úrirj  ÚdabrxrQ  Úsprg3rm  Úrislbro  r=  rP  Úvpmzdss_2.05rs  rw  ry  r{  r}  rG  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.07c                 ó   — g | ]	\  }}|¯|‘Œ
S r   r   r²  s      r   r   z6_get_cpu_info_from_ibm_pa_features.<locals>.<listcomp>-  r­  r   rG  )rú   r2   rd   rš   rF   r¼   rB   r|   rA   rr  rð  r7  rK  rÿ  r4   rC   )r    rL   r  rU  rV  rG  rR   r\   s           r   Ú"_get_cpu_info_from_ibm_pa_featuresrt  ¼  sà  € õ 	‡‚Ð3Ñ4Ô4Ð4ðtå	×	'Ò	'Ñ	)Ô	)ð Ý
‡<‚<Ð5Ñ6Ô6Ð6Ø
€9õ "×1Ò1Ñ3Ô3Ñ€*ˆfØ€^�z Q’�Ý
‡<‚<ÐWÑXÔXÐXØ
€9ð �,Š,Ð(Ñ
)Ô
)¨!Ô
,×
2Ò
2Ñ
4Ô
4€%Ø
=Ð
=�eÐ
=Ñ
=Ô
=€%Ø
�'Š'�%‰.Œ.€%õ 
ˆU�1�q�5Œ\˜2Ñ	Ô	€$Ý
ˆe�A˜�FŒm˜RÑ
 Ô
 €%ðPà�;�t˜QÑÔðPð 	�;�t˜QÑÔðPð 	�;�t˜QÑÔð	Pð
 	�;�t˜QÑÔðPð 
�K˜˜aÑ Ô ðPð �+�d˜AÑ
Ô
ðPð 	�;�t˜QÑÔðPð 	�;�t˜QÑÔðPð �[˜˜qÑ!Ô!ðPð �+�d˜BÑ
Ô
ðPð �+�d˜BÑ
Ô
ðPð  �[˜˜rÑ"Ô"ð!Pð" �[˜˜rÑ"Ô"ð#Pð$ �[˜˜rÑ"Ô"ð%Pð& �+�d˜BÑ
Ô
ð'Pð, 	�;�t˜RÑ Ô ð-Pð. •˜D "Ñ%Ô%ð/Põ2 �t˜RÑ Ô å�t˜RÑ Ô Ý˜D "Ñ%Ô%Ý˜D "Ñ%Ô%õ ˜t RÑ(Ô(Ý˜t RÑ(Ô(õ ˜E 1Ñ%Ô%õ �e˜QÑ
Ô
Ý˜˜qÑ!Ô!Ý
�e˜RÑ
 Ô
 Ý˜E 2Ñ&Ô&õ ˜E 2Ñ&Ô&ð}Pð Pð P€%ðf -Ð
,˜Ÿš™œÐ
,Ñ
,Ô
,€%Ø‡*‚*�,„,€,ð ˆUð
€$õ 
-¨TÑ	2Ô	2€$Ý	‡/‚/ÑÔÐØ	€+øÝð ð ð Ý	‡,‚,ˆsÑÔÐØ	€)€)€)€)€)€)øøøøðøøøs*   œ4M	 Á?M	 ÂJ7M	 Í	
M9ÍM4Í.M9Í4M9c                  ót  — t                                d¦  «         t                               ¦   «         st                                d¦  «         i S t                               ¦   «         \  } }|�| dk    rt                                d¦  «         i S t          |¦  «        }t                                ¦   «          |S )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 ...Nr   z5Failed to run "cat /var/run/dmesg.boot". Skipping ...)rú   r2   rd   r~   rF   r­   râ  r4   )r    rL   rR   s      r   Ú)_get_cpu_info_from_cat_var_run_dmesg_bootrv  ;  s¤   € õ 	‡‚ÐHÑIÔIÐIõ 	×)Ò)Ñ+Ô+ð Ý	‡,‚,ÐFÑGÔGÐGØ	€)õ !×7Ò7Ñ9Ô9Ñ€ˆVØ
€N�j A’o�oÝ	‡,‚,ÐHÑIÔIÐIØ	€)å˜FÑ#Ô#€Ý‡‚ÑÔÐØ€r   c                  óº  — t                                d¦  «         	 t                               ¦   «         st                                d¦  «         i S t                               ¦   «         \  } }|�| dk    rt                                d¦  «         i S t          d|ddd¦  «        }t          d|ddd	¦  «        }t          d|t          dd
¦  «        }t          d|t          dd¦  «        }t          d|t          dd¦  «        }t          d|t          dd¦  «        }t          d|ddd¦  «                             ¦   «          	                    ¦   «         }| 
                    t          d|ddd¦  «                             ¦   «          	                    ¦   «         ¦  «         | 
                    t          d|ddd¦  «                             ¦   «          	                    ¦   «         ¦  «         |                     ¦   «          t          |¦  «        \  }	}
t          d|ddd¦  «        }t          |¦  «        }||t          |	|
¦  «        t          |d¦  «        t          |	|
¦  «        t          |d¦  «        t          |¦  «        dz  ||||dœ}t!          |¦  «        }t                                ¦   «          |S # t$          $ r&}t                                |¦  «         i cY d}~S d}~ww xY w)zR
	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.familyr6   zmachdep.cpu.featureszmachdep.cpu.leaf7_featureszmachdep.cpu.extfeaturesr¯   r™  ©rÉ   r;  r<  r=  r>  rÑ   r@  rC  rD  rE  rG  )rú   r2   rd   r‡   rF   r°   r]  rr  r|   rB   ÚextendrK  rª  rÐ   rˆ  rw  rÿ  r4   rC   )r    rL   rÂ  rÄ   rL  rC  rD  rE  rG  r>  rs  rÑ   rR   r\   s                 r   Ú_get_cpu_info_from_sysctlrz  S  s»  € õ 	‡‚Ð3Ñ4Ô4Ð4ð5å	×	Ò	Ñ	 Ô	 ð Ý
‡<‚<Ð5Ñ6Ô6Ð6Ø
€9õ "×DÒDÑFÔFÑ€*ˆfØ€^�z Q’�Ý
‡<‚<ÐTÑUÔUÐUØ
€9õ ˜ ¨¨dÐ4HÑIÔI€)Ý˜t V¨T°4Ð9SÑTÔT€/Ý˜% ­¨aÐ1IÑJÔJ€*Ý˜˜v¥s¨AÐ/EÑFÔF€(Ý
�U˜F¥C¨Ð,?Ñ
@Ô
@€%Ý�e˜V¥S¨!Ð-AÑBÔB€&õ �U˜F D¨"Ð.DÑ
EÔ
E×
KÒ
KÑ
MÔ
M×
SÒ
SÑ
UÔ
U€%Ø‡,‚,�z˜% ¨¨rÐ3OÑPÔP×VÒVÑXÔX×^Ò^Ñ`Ô`ÑaÔaÐaØ‡,‚,�z˜% ¨¨rÐ3LÑMÔM×SÒSÑUÔU×[Ò[Ñ]Ô]Ñ^Ô^Ð^Ø‡*‚*�,„,€,õ 1°ÑAÔAÑ€-�Ý˜ ¨¨dÐ4EÑFÔF€)Ý  Ñ+Ô+€)ð Øå2°=À%ÑHÔHÝ.¨y¸!Ñ<Ô<Ý% m°UÑ;Ô;Ý! )¨QÑ/Ô/å˜
‘O”O dÑ*àØØØð
ð 
€$õ" 
-¨TÑ	2Ô	2€$Ý	‡/‚/ÑÔÐØ	€+øÝð ð ð Ý	‡,‚,ˆsÑÔÐØ	€)€)€)€)€)€)øøøøðøøøs*   œ4J* Á?J* ÂHJ* Ê*
KÊ4KËKËKc                  ód   — t          ¦   «         } |                      t          ¦   «         ¦  «         | S )úT
	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)rR   s    r   Ú_get_cpu_info_from_sysinfor€  “  s-   € õ 	&Ñ'Ô'€Ø‡‚Õ*Ñ,Ô,Ñ-Ô-Ð-Ø€r   c                  óV  — t                                d¦  «         	 t                               ¦   «         st                                d¦  «         i S t                               ¦   «         \  } }|�| dk    rt                                d¦  «         i S d}|                     d¦  «        d                              d	¦  «        d                              ¦   «         }d}t          |                     d
¦  «        d                              d¦  «        d                              ¦   «         ¦  «        }t          |                     d¦  «        d                              d¦  «        d                              ¦   «         ¦  «        }t          |                     d¦  «        d                              d¦  «        d                              ¦   «         ¦  «        }g }|                     d¦  «        D ]g}	|	 	                    d¦  «        rP|	                     ¦   «          
                    ¦   «                              ¦   «         D ]}
|                     |
¦  «         ŒŒh|                     ¦   «          t          |¦  «        \  }}|}||t          ||¦  «        t          ||¦  «        t          ||¦  «        t          ||¦  «        t!          |¦  «        ||||dœ}t#          |¦  «        }t                                ¦   «          |S # t&          $ r&}t                                |¦  «         i cY d}~S d}~ww xY w)r|  z,Tying to get info from sysinfo version 1 ...ú$Failed to find sysinfo. Skipping ...Nr   ú*Failed to run "sysinfo -cpu". Skipping ...r6   ú	CPU #0: "r'   ú"
z, stepping r`  z, model z	, family r9   ú		rx  )rú   r2   rd   r”   rF   r·   rB   r{   rr  rö  r|   rè   rK  rª  rˆ  rw  r”  rÿ  r4   rC   )r    rL   rÂ  rÄ   rL  rC  rD  rE  rG  r1   rá  r>  rs  rÑ   rR   r\   s                   r   r}  r}  �  sá  € õ 	‡‚Ð>Ñ?Ô?Ð?ð7å	×	Ò	Ñ	!Ô	!ð Ý
‡<‚<Ð6Ñ7Ô7Ð7Ø
€9õ "×-Ò-Ñ/Ô/Ñ€*ˆfØ€^�z Q’�Ý
‡<‚<Ð>Ñ?Ô?Ð?Ø
€9ð €)Ø—L’L Ñ-Ô-¨aÔ0×6Ò6°uÑ=Ô=¸aÔ@×FÒFÑHÔH€/Ø€*Ý�—’˜mÑ,Ô,¨QÔ/×5Ò5°cÑ:Ô:¸1Ô=×CÒCÑEÔEÑFÔF€(Ý
ˆf�lŠl˜:Ñ&Ô& qÔ)×/Ò/°Ñ4Ô4°QÔ7×=Ò=Ñ?Ô?Ñ
@Ô
@€%Ýˆv�|Š|˜KÑ(Ô(¨Ô+×1Ò1°#Ñ6Ô6°qÔ9×?Ò?ÑAÔAÑBÔB€&ð €%Ø�lŠl˜4Ñ Ô ð ð €dØ
‡o‚o�fÑÔð Ø—
’
‘”×"Ò"Ñ$Ô$×*Ò*Ñ,Ô,ð ð ˆØ
‡\‚\�$ÑÔÐÐøØ‡*‚*�,„,€,õ 1°ÑAÔAÑ€-�Ø€)ð Øå2°=À%ÑHÔHÝ.¨y¸%Ñ@Ô@Ý% m°UÑ;Ô;Ý! )¨UÑ3Ô3å& zÑ2Ô2àØØØð
ð 
€$õ" 
-¨TÑ	2Ô	2€$Ý	‡/‚/ÑÔÐØ	€+øÝð ð ð Ý	‡,‚,ˆsÑÔÐà	€)€)€)€)€)€)øøøøðøøøs*   œ4K8 Á?K8 ÂI&K8 Ë8
L(ÌL#ÌL(Ì#L(c                  ó^  — t                                d¦  «         	 t                               ¦   «         st                                d¦  «         i S t                               ¦   «         \  } }|�| dk    rt                                d¦  «         i S d}|                     d¦  «        d                              d	¦  «        d                              ¦   «         }d}|                     d
¦  «        d                              d¦  «        d                              ¦   «         }t          |                     d¦  «        d                              d¦  «        d                              ¦   «         ¦  «        }t          |                     d¦  «        d                              d¦  «        d                              ¦   «         ¦  «        }t          |                     d¦  «        d                              d¦  «        d                              ¦   «         ¦  «        }d„ }	 |	|                     d¦  «        d         ¦  «         |	|                     d¦  «        d         ¦  «        z    |	|                     d¦  «        d         ¦  «        z   }
|
 	                    ¦   «          d„ |                     d¦  «        D ¦   «         }|d                              d¦  «        d                              ¦   «          
                    ¦   «         }|                     d¦  «                             d¦  «                             ¦   «         }t          |¦  «        }|}d}|                     d¦  «        rd}n|                     d¦  «        rd}||t          ||¦  «        t          ||¦  «        t          ||¦  «        t          ||¦  «        t!          |¦  «        ||||
dœ}t#          |¦  «        }t                                ¦   «          |S # t&          $ r&}t                                |¦  «         i cY d}~S d}~ww xY w)r|  z,Tying to get info from sysinfo version 2 ...r‚  Nr   rƒ  r6   r„  r'   r…  z
Signature:r9   z	stepping r`  zmodel zfamily c                 óD  — g }|                       d¦  «        dd …         D ]}|                     d¦  «        s|                     d¦  «        s nR|                     ¦   «                              ¦   «                               d¦  «        D ]}|                     |¦  «         ŒŒ€|S )Nr9   r'   z                r†  ró   )rB   rö  r{   r|   rè   )rL   r\  r1   r¢  s       r   Úget_subsection_flagsz;_get_cpu_info_from_sysinfo_v2.<locals>.get_subsection_flagsý  s£   € Ø€6Ø�|Š|˜DÑ!Ô! ! " "Ô%ð ð €tØ�?Š?Ð-Ñ.Ô.ÐS°t·²ÀtÑ7LÔ7LÐSÈeÈeØ—’‘”×#Ò#Ñ%Ô%×+Ò+¨CÑ0Ô0ð ð ˆØ‡]‚]�5ÑÔÐÐðà
€=r   z
Features: z Extended Features (0x00000001): z Extended Features (0x80000001): c                 ó   — g | ]}|¯|‘ŒS r   r   r   s     r   r   z1_get_cpu_info_from_sysinfo_v2.<locals>.<listcomp>	  s   € Ð
.Ð
.Ð
.�¨AÐ
.ˆ1Ð
.Ð
.Ð
.r   zrunning at r{  rz  r|  r   rx  )rú   r2   rd   r”   rF   r·   rB   r{   rr  rK  r|   rh  rÐ   ri  rˆ  rw  r”  rÿ  r4   rC   )r    rL   rÂ  rÄ   rL  Ú	signaturerC  rD  rE  r‰  rG  rÙ  Úraw_hzr>  rÑ   rs  rR   r\   s                     r   r  r  Þ  sÌ  € õ 	‡‚Ð>Ñ?Ô?Ð?ðHå	×	Ò	Ñ	!Ô	!ð Ý
‡<‚<Ð6Ñ7Ô7Ð7Ø
€9õ "×-Ò-Ñ/Ô/Ñ€*ˆfØ€^�z Q’�Ý
‡<‚<Ð>Ñ?Ô?Ð?Ø
€9ð €)Ø—L’L Ñ-Ô-¨aÔ0×6Ò6°uÑ=Ô=¸aÔ@×FÒFÑHÔH€/Ø€*Ø�lŠl˜<Ñ(Ô(¨Ô+×1Ò1°$Ñ7Ô7¸Ô:×@Ò@ÑBÔB€)å�—’ Ñ-Ô-¨aÔ0×6Ò6°sÑ;Ô;¸AÔ>×DÒDÑFÔFÑGÔG€(Ý
ˆi�oŠo˜hÑ'Ô'¨Ô*×0Ò0°Ñ5Ô5°aÔ8×>Ò>Ñ@Ô@Ñ
AÔ
A€%Ýˆy�Š˜yÑ)Ô)¨!Ô,×2Ò2°3Ñ7Ô7¸Ô:×@Ò@ÑBÔBÑCÔC€&ðð ð ð Ð
˜vŸ|š|¨LÑ9Ô9¸!Ô<Ñ
=Ô
=ØÐ˜ŸšÐ&HÑIÔIÈ!ÔLÑMÔMñNàÐ˜ŸšÐ&HÑIÔIÈ!ÔLÑMÔMñN€%ð ‡*‚*�,„,€,ð /Ð
.�f—l’l 4Ñ(Ô(Ð
.Ñ
.Ô
.€%Ø�Œ8�>Š>˜-Ñ(Ô(¨Ô+×1Ò1Ñ3Ô3×9Ò9Ñ;Ô;€&Ø—-’- Ñ&Ô&×-Ò-¨eÑ4Ô4×:Ò:Ñ<Ô<€-Ý$ ]Ñ3Ô3€-Ø€)à
€%Ø‡_‚_�UÑÔð Ø€5€5Ø‡‚�uÑÔð Ø€5ð Øå2°=À%ÑHÔHÝ.¨y¸%Ñ@Ô@Ý% m°UÑ;Ô;Ý! )¨UÑ3Ô3å& zÑ2Ô2àØØØð
ð 
€$õ" 
-¨TÑ	2Ô	2€$Ý	‡/‚/ÑÔÐØ	€+øÝð ð ð Ý	‡,‚,ˆsÑÔÐà	€)€)€)€)€)€)øøøøðøøøs*   œ4O< Á?O< ÂM*O< Ï<
P,ÐP'Ð!P,Ð'P,c                  óè  — t                                d¦  «         	 t          j        rt                               ¦   «         st                                d¦  «         i S t                               ¦   «         \  } }|�| dk    rt                                d¦  «         i S |                     d¦  «        }d„ |D ¦   «         }d„ |D ¦   «         }|                     d	¦  «        }t          |¦  «        \  }}|                     d
¦  «        }d}|rt          |¦  «        }|                     d¦  «        }|rt          |¦  «        dz  }|                     d¦  «        }	|	rt          |	¦  «        dz  }	d\  }
}}|                     d¦  «        p|                     d¦  «        }|                     d¦  «        }d|v rV|                     d¦  «        t          |¦  «        dz
  k     r-|                     d¦  «        }t          ||dz            ¦  «        }
d|v rV|                     d¦  «        t          |¦  «        dz
  k     r-|                     d¦  «        }t          ||dz            ¦  «        }d|v rV|                     d¦  «        t          |¦  «        dz
  k     r-|                     d¦  «        }t          ||dz            ¦  «        }|                     d¦  «        |t          ||¦  «        t          ||¦  «        t          ||¦  «        t          ||¦  «        ||	|||
dœ}t!          |¦  «        }t                                ¦   «          |S # t$          $ r&}t                                |¦  «         i cY d}~S d}~ww xY w)zd
	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 ...r9   c                 ód   — g | ]-}d |v ¯|                      ¦   «                              d ¦  «        ‘Œ.S rÒ  )rh  rB   r]  s     r   r   z+_get_cpu_info_from_wmic.<locals>.<listcomp>D	  s3   € Ð
<Ð
<Ð
< Q°3¸!°8°8ˆ1�8Š8‰:Œ:×Ò˜CÑ Ô °8°8°8r   c                 ó   — i | ]
\  }}|¯||“ŒS r   r   r²  s      r   r4  z+_get_cpu_info_from_wmic.<locals>.<dictcomp>E	  s#   € Ð
'Ð
'Ð
'‘D�A�q QÐ
'ˆ1ˆaÐ
'Ð
'Ð
'r   ÚNameÚCurrentClockSpeedr|  ÚL2CacheSizer™  ÚL3CacheSize)r6   r6   r6   ÚDescriptionÚCaptionró   ÚFamilyr'   rS  rT  ÚManufacturer)rÉ   r;  r<  r=  r>  rÑ   r@  rH  rC  rD  rE  )rú   r2   rd   rÛ   r¡   rF   r¿   rB   r�   rª  rÐ   rr  rp  rp   rˆ  rw  rÿ  r4   rC   )r    rL   r  rÄ   r>  Úscale_advertisedrÑ   Úscale_actualr@  rH  rE  rD  rC  ÚdescriptionÚentriesrN  rR   r\   s                     r   Ú_get_cpu_info_from_wmicrœ  0	  sr  € õ
 	‡‚Ð1Ñ2Ô2Ð2ðKå	Ô	ð ¥j×&9Ò&9Ñ&;Ô&;ð Ý
‡<‚<ÐFÑGÔGÐGØ
€9å!×*Ò*Ñ,Ô,Ñ€*ˆfØ€^�z Q’�Ý
‡<‚<Ð2Ñ3Ô3Ð3Ø
€9ð �,Š,�tÑ
Ô
€%Ø
<Ð
<¨%Ð
<Ñ
<Ô
<€%Ø
'Ð
'˜EÐ
'Ñ
'Ô
'€%ð —I’I˜fÑ%Ô%€/Ý$;¸OÑ$LÔ$LÑ!€-Ð!ð �iŠiÐ+Ñ,Ô,€)Ø€,Øð -Ý! )Ñ,Ô,€9ð —)’)˜MÑ*Ô*€-Øð -Ý�}Ñ%Ô%¨Ñ,€=à—)’)˜MÑ*Ô*€-Øð -Ý�}Ñ%Ô%¨Ñ,€=ð 'Ñ€&ˆ%�Ø—	’	˜-Ñ(Ô(Ð@¨E¯IªI°iÑ,@Ô,@€+Ø×Ò˜cÑ"Ô"€'à�ÐÐ˜WŸ]š]¨8Ñ4Ô4µs¸7±|´|ÀA±~ÒEÐEØ‡}‚}�XÑÔ€1Ý�˜˜A™”ÑÔ€6à�ÐÐ˜GŸMšM¨'Ñ2Ô2µS¸±\´\À!±^ÒCÐCØ‡}‚}�WÑÔ€1Ýˆw�q˜1‘uŒ~ÑÔ€5à�7ÐÐ˜wŸ}š}¨ZÑ8Ô8½3¸w¹<¼<È¹>ÒIÐIØ‡}‚}�ZÑ Ô €1Ý�'˜!˜a™%”.Ñ!Ô!€8ð —Y’Y˜~Ñ.Ô.Ø å3°MÐCSÑTÔTÝ/°	¸<ÑHÔHÝ& }Ð6FÑGÔGÝ" 9¨lÑ;Ô;à"Ø"àØØð
ð 
€$õ" 
-¨TÑ	2Ô	2€$Ý	‡/‚/ÑÔÐØ	€+øÝð ð ð Ý	‡,‚,ˆsÑÔÐà	€)€)€)€)€)€)øøøøðøøøs+   œA M Á?M ÂJ#M Í
M1ÍM,Í&M1Í,M1c                  óŽ  ‡— t                                d¦  «         	 t          j        st                                d¦  «         i S t                               ¦   «                              ¦   «         } t                               ¦   «         }t                               ¦   «         }t          |¦  «        \  }}t           
                    ¦   «         }t          |¦  «        }t          | ¦  «        \  }}|dk    rd}t          |¦  «        }t                               ¦   «         Šˆfd„}i d |d¦  «        “d |d	¦  «        “d
 |d¦  «        “d |d¦  «        “d |d¦  «        “d |d¦  «        “d |d¦  «        “d |d¦  «        “d |d¦  «        “d |d¦  «        “d |d¦  «        “d |d¦  «        “d |d¦  «        “d |d ¦  «        “d! |d"¦  «        “d# |d$¦  «        “d% |d&¦  «        “ |d'¦  «         |d(¦  «         |d)¦  «         |d*¦  «         |d+¦  «         |d,¦  «         |d-¦  «         |d.¦  «         |d/¦  «         |d0¦  «         |d1¦  «         |d2¦  «         |d3¦  «        d4œ¥}	d5„ |	                     ¦   «         D ¦   «         }	|	                     ¦   «          || t!          ||¦  «        t!          |d¦  «        t#          ||¦  «        t#          |d¦  «        |	d6œ}
t%          |
¦  «        }
t                                ¦   «          |
S # t(          $ r&}t                                |¦  «         i cY d7}~S d7}~ww xY w)8z[
	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 ...rf  r|  c                 ó$   •— d| z	  }|‰z  dk    }|S )Nl        r   r   )rí  rî  r\  rÕ   s      €r   rï  z+_get_cpu_info_from_registry.<locals>.is_set«	  s!   ø€ Ø
˜Ñ
€4Ø�<Ñ !Ò#€6Ø
€=r   r^  r   r_  r'   r`  r(   ra  rH   rb  r  rc  rf   rd  re  rf  rg  rF  rh  r   Úsepamdr˜  ri  rj  rk  rQ  rl  rm  rn  ro  rp  rP  rq  r¹  rs  ru  rw  ry  r{  r}  rG  r€  r‚  r„  rˆ  rŠ  rŒ  )rr  Úserialrv  rx  rz  r|  r~  r  r�  rƒ  r‡  r‰  rã  c                 ó   — g | ]	\  }}|¯|‘Œ
S r   r   r²  s      r   r   z/_get_cpu_info_from_registry.<locals>.<listcomp>×	  r­  r   )rÉ   r;  r<  r=  r>  rÑ   rG  N)rú   r2   rd   rÛ   rF   rÅ   r{   rÊ   rÎ   r  rÒ   rÐ   rª  rÖ   r7  rK  rˆ  rw  rÿ  r4   rC   )rÄ   rÂ  rÍ   r  rØ   rÑ   r>  rs  rï  rG  rR   r\   rÕ   s               @r   Ú_get_cpu_info_from_registryr¢  „	  sè  ø€ õ 	‡‚Ð=Ñ>Ô>Ð>ð_å	Ô	ð Ý
‡<‚<Ð6Ñ7Ô7Ð7Ø
€9õ ×5Ò5Ñ7Ô7×=Ò=Ñ?Ô?€/õ ×-Ò-Ñ/Ô/€)õ ×5Ò5Ñ7Ô7€/Ý˜?Ñ+Ô+�*€$ˆõ ×)Ò)Ñ+Ô+€)Ý  Ñ+Ô+€)õ 1°ÑAÔAÑ€-�ð �eÒÐØ€5Ý% iÑ0Ô0€=õ ×/Ò/Ñ1Ô1€,ðð ð ð ð ð!Øˆ6ˆ6�!‰9Œ9ð!àˆ6ˆ6�!‰9Œ9ð!ð ˆ&ˆ&�‰)Œ)ð!ð 	ˆ6ˆ6�!‰9Œ9ð	!ð
 	ˆ6ˆ6�!‰9Œ9ð!ð 	ˆ6ˆ6�!‰9Œ9ð!ð 	ˆ6ˆ6�!‰9Œ9ð!ð 	ˆ6ˆ6�!‰9Œ9ð!ð 	ˆ6ˆ6�!‰9Œ9ð!ð 
ˆFˆF�1‰IŒIð!ð ˆfˆf�R‰jŒjð!ð 	ˆ6ˆ6�"‰:Œ:ð!ð 
ˆFˆF�2‰JŒJð!ð 	ˆ6ˆ6�"‰:Œ:ð!ð 	ˆ6ˆ6�"‰:Œ:ð!ð  
ˆFˆF�2‰JŒJð!!ð" 	ˆ6ˆ6�"‰:Œ:ð#!ð$ ˆV�B‰ZŒZØˆf�R‰jŒjØˆv�b‰zŒzàˆ6�"‰:Œ:ØˆF�2‰JŒJØˆ6�"‰:Œ:ØˆF�2‰JŒJØˆ6�"‰:Œ:ØˆF�2‰JŒJØ
ˆ&�‰*Œ*à
ˆ&�‰*Œ*ØˆF�2‰JŒJØˆV�B‰ZŒZðA!ð !ð !€%ðH -Ð
,˜Ÿš™œÐ
,Ñ
,Ô
,€%Ø‡*‚*�,„,€,ð Øå2°=À%ÑHÔHÝ.¨y¸!Ñ<Ô<Ý% m°UÑ;Ô;Ý! )¨QÑ/Ô/àð

ð 

€$õ 
-¨TÑ	2Ô	2€$Ý	‡/‚/ÑÔÐØ	€+øÝð ð ð Ý	‡,‚,ˆsÑÔÐØ	€)€)€)€)€)€)øøøøðøøøs$   �'L ÁKL Ì
MÌL?Ì9MÌ?Mc                  óh  — t                                d¦  «         	 t                               ¦   «         rt                               ¦   «         st                                d¦  «         i S t                               ¦   «         \  } }|�| dk    rt                                d¦  «         i S t                               ¦   «         \  } }|�| dk    rt                                d¦  «         i S |                     d¦  «        d                              d	¦  «        d          	                    ¦   «         }|                     d
¦  «        d                              d	¦  «        d          	                    ¦   «         }t          |                     d¦  «        d                              d	¦  «        d          	                    ¦   «         ¦  «        }t          |                     d¦  «        d                              d	¦  «        d          	                    ¦   «         ¦  «        }t          |                     d¦  «        d                              d	¦  «        d          	                    ¦   «         ¦  «        }| 	                    ¦   «                              d	¦  «        d          	                    ¦   «                              ¦   «                              ¦   «         }|                     ¦   «          d}	|                     d¦  «        d                              d	¦  «        d          	                    ¦   «         }
t          |
¦  «        }
|                     d¦  «        d                              d	¦  «        d          	                    ¦   «         }t          |¦  «        }||t          |
|	¦  «        t          |d¦  «        t          |
|	¦  «        t          |d¦  «        ||||dœ
}t!          |¦  «        }t                                ¦   «          |S # t$          $ r&}t                                |¦  «         i cY d}~S d}~ww xY w)zh
	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'   r9   z	brand z
	stepping z	model z	family rŽ  r|  z	clock_MHz z	current_clock_Hz )
rÉ   r;  r<  r=  r>  rÑ   rC  rD  rE  rG  )rú   r2   rd   r‹   rŽ   rF   r²   rµ   rB   r{   rr  r|   rK  rÐ   rˆ  rw  rÿ  r4   rC   )r    Úflag_outputr�   rÂ  rÄ   rC  rD  rE  rG  rs  r>  rÑ   rR   r\   s                 r   Ú_get_cpu_info_from_kstatr¥  í	  s–  € õ 	‡‚Ð2Ñ3Ô3Ð3ð:å	×	Ò	Ñ	!Ô	!ð ­×)=Ò)=Ñ)?Ô)?ð Ý
‡<‚<Ð>Ñ?Ô?Ð?Ø
€9õ '×1Ò1Ñ3Ô3Ñ€*ˆkØÐ˜J¨!šO˜OÝ
‡<‚<Ð=Ñ>Ô>Ð>Ø
€9õ !×1Ò1Ñ3Ô3Ñ€*ˆeØ
€]�j A’o�oÝ
‡<‚<ÐCÑDÔDÐDØ
€9ð �kŠk˜.Ñ)Ô)¨!Ô,×2Ò2°4Ñ8Ô8¸Ô;×AÒAÑCÔC€)Ø—K’K 
Ñ+Ô+¨AÔ.×4Ò4°TÑ:Ô:¸1Ô=×CÒCÑEÔE€/Ý�—’˜]Ñ+Ô+¨AÔ.×4Ò4°TÑ:Ô:¸1Ô=×CÒCÑEÔEÑFÔF€(Ý
ˆe�kŠk˜*Ñ%Ô% aÔ(×.Ò.¨tÑ4Ô4°QÔ7×=Ò=Ñ?Ô?Ñ
@Ô
@€%Ýˆu�{Š{˜;Ñ'Ô'¨Ô*×0Ò0°Ñ6Ô6°qÔ9×?Ò?ÑAÔAÑBÔB€&ð ×
Ò
Ñ
Ô
×
#Ò
# DÑ
)Ô
)¨"Ô
-×
3Ò
3Ñ
5Ô
5×
;Ò
;Ñ
=Ô
=×
CÒ
CÑ
EÔ
E€%Ø‡*‚*�,„,€,ð €%Ø—+’+˜nÑ-Ô-¨aÔ0×6Ò6°tÑ<Ô<¸QÔ?×EÒEÑGÔG€-Ý$ ]Ñ3Ô3€-ð �kŠkÐ/Ñ0Ô0°Ô3×9Ò9¸$Ñ?Ô?ÀÔB×HÒHÑJÔJ€)Ý  Ñ+Ô+€)ð Øå2°=À%ÑHÔHÝ.¨y¸!Ñ<Ô<Ý% m°UÑ;Ô;Ý! )¨QÑ/Ô/àØØØð
ð 
€$õ 
-¨TÑ	2Ô	2€$Ý	‡/‚/ÑÔÐØ	€+øÝð ð ð Ý	‡,‚,ˆsÑÔÐØ	€)€)€)€)€)€)øøøøðøøøs1   œAP Á*?P Â*?P Ã*LP Ð
P1ÐP,Ð&P1Ð,P1c                  óš  — t                                d¦  «         	 t          j                             d¦  «        d         } d\  }}}|                      d¦  «        }d|v rV|                     d¦  «        t          |¦  «        dz
  k     r-|                     d¦  «        }t          ||dz            ¦  «        }d|v rV|                     d¦  «        t          |¦  «        dz
  k     r-|                     d¦  «        }t          ||dz            ¦  «        }d	|v rV|                     d	¦  «        t          |¦  «        dz
  k     r-|                     d	¦  «        }t          ||dz            ¦  «        }|||d
œ}t          |¦  «        }t            	                    ¦   «          |S # t          $ r&}t                                |¦  «         i cY d }~S d }~ww xY w)Nz)Tying to get info from platform.uname ...r`  r   )NNNró   r–  r'   rS  rT  )rE  rD  rC  )rú   r2   rd   rÝ   rB   rp  rp   rr  rÿ  r4   rC   rF   )r}   rE  rD  rC  r›  rN  rR   r\   s           r   Ú!_get_cpu_info_from_platform_unamer§  1
  sÀ  € å‡‚Ð;Ñ<Ô<Ð<ðÝ
Ô
%×
+Ò
+¨CÑ
0Ô
0°Ô
3€%à.Ñ€&ˆ%�Ø�KŠK˜ÑÔ€'à�ÐÐ˜WŸ]š]¨8Ñ4Ô4µs¸7±|´|ÀA±~ÒEÐEØ‡}‚}�XÑÔ€1Ý�˜˜A™”ÑÔ€6à�ÐÐ˜GŸMšM¨'Ñ2Ô2µS¸±\´\À!±^ÒCÐCØ‡}‚}�WÑÔ€1Ýˆw�q˜1‘uŒ~ÑÔ€5à�7ÐÐ˜wŸ}š}¨ZÑ8Ô8½3¸w¹<¼<È¹>ÒIÐIØ‡}‚}�ZÑ Ô €1Ý�'˜!˜a™%”.Ñ!Ô!€8ð ØØð
ð 
€$õ
 
-¨TÑ	2Ô	2€$Ý	‡/‚/ÑÔÐØ	€+øÝð ð ð Ý	‡,‚,ˆsÑÔÐØ	€)€)€)€)€)€)øøøøðøøøs   œE=F Æ
G
Æ$GÆ?G
ÇG
c                  óÎ  — t                                d¦  «         t          t          j        ¦  «        \  } }dddœ                     t          j        ¦  «        pd} dj        t          j	        Ž }d                     ||¦  «        }|t          t          | |t          j        t          j        dœ}t                                d	                     |d
         ¦  «        ¦  «         t                                d                     |d         ¦  «        ¦  «         t                                d                     |d         ¦  «        ¦  «         t                                d                     |d         ¦  «        ¦  «         t                                d                     |d         ¦  «        ¦  «         t                                d                     |d         ¦  «        ¦  «         t          |t          ¦   «         ¦  «         t          |t          ¦   «         ¦  «         t          |t!          ¦   «         ¦  «         t          |t#          ¦   «         ¦  «         t          |t%          ¦   «         ¦  «         t          |t'          ¦   «         ¦  «         t          |t)          ¦   «         ¦  «         t          |t+          ¦   «         ¦  «         t          |t-          ¦   «         ¦  «         t          |t/          ¦   «         ¦  «         t          |t1          ¦   «         ¦  «         t          |t3          ¦   «         ¦  «         t          |t5          ¦   «         ¦  «         t                                d¦  «         |S )zo
	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_stringr  rØ   r?  rÍ   zpython_version: {0}r©  zcpuinfo_version: {0}rª  z	arch: {0}r  z	bits: {0}rØ   z
count: {0}r?  zarch_string_raw: {0}rÍ   )rú   r+   r  rd   rÍ   r�   r(  Úmaxsizer   Úversion_infoÚCPUINFO_VERSIONÚCPUINFO_VERSION_STRINGrÚ   rM  rœ  r¢  rO  rQ  rW  rz  r¥  rY  rv  rt  r€  r>  r§  )r  rØ   Úfriendly_maxsizeÚfriendly_versionÚPYTHON_VERSIONrR   s         r   Ú_get_cpu_info_internalr³  S
  sã  € õ 	‡‚ˆxÑÔÐõ �*Ô4Ñ5Ô5�€€tà'°(Ð<Ð<×@Ò@ÅÄÑMÔMÐ_ÐQ_ÐØ0Ð)Ô0µ#Ô2BÐCÐØ×$Ò$Ð%5Ð7GÑHÔH€ð $Ý%Ý3ØØÝÔ Ý Ô0ð	ð 	€õ 	‡‚Ð$×+Ò+¨DÐ1AÔ,BÑCÔCÑDÔDÐDÝ‡‚Ð%×,Ò,¨TÐ2CÔ-DÑEÔEÑFÔFÐFÝ‡‚ˆ{×!Ò! $ v¤,Ñ/Ô/Ñ0Ô0Ð0Ý‡‚ˆ{×!Ò! $ v¤,Ñ/Ô/Ñ0Ô0Ð0Ý‡‚ˆ|×"Ò" 4¨¤=Ñ1Ô1Ñ2Ô2Ð2Ý‡‚Ð%×,Ò,¨TÐ2CÔ-DÑEÔEÑFÔFÐFõ �$Õ/Ñ1Ô1Ñ2Ô2Ð2õ �$Õ3Ñ5Ô5Ñ6Ô6Ð6õ �$Õ7Ñ9Ô9Ñ:Ô:Ð:õ �$Õ7Ñ9Ô9Ñ:Ô:Ð:õ �$Õ0Ñ2Ô2Ñ3Ô3Ð3õ �$Õ1Ñ3Ô3Ñ4Ô4Ð4õ �$Õ0Ñ2Ô2Ñ3Ô3Ð3õ �$Õ0Ñ2Ô2Ñ3Ô3Ð3õ �$ÕAÑCÔCÑDÔDÐDõ �$Õ:Ñ<Ô<Ñ=Ô=Ð=õ �$Õ2Ñ4Ô4Ñ5Ô5Ð5õ �$Õ0Ñ2Ô2Ñ3Ô3Ð3õ �$Õ9Ñ;Ô;Ñ<Ô<Ð<å‡‚ˆxÑÔÐà€r   c                  ó€  — ddl } d}t          t          dd¦  «        r9t          ¦   «         }|                      |¦  «        }d                     |¦  «        }nhddlm}m} t          j	        t          dg} |||||¬¦  «        }|                     ¦   «         d         }|j        dk    rd	S |                     d
¬¦  «        }|S )zs
	Returns the CPU info by using the best sources of information for your OS.
	Returns the result in a json string
	r   NÚfrozenFr_  rð   ú--jsonrô   z{}rö   r÷   )ÚjsonÚgetattrr(  r³  r!  r   rù   rñ   rò   Ú
executableÚ__file__rü   r    rý   )r·  rL   rR   rñ   rò   rþ   r   s          r   Úget_cpu_info_jsonr»  Ÿ
  sÕ   € ð €€€à
€õ �C�˜5Ñ!Ô!ð +Ý	Ñ	!Ô	!€$Ø�:Š:�dÑÔ€&Ø�<Š<˜ÑÔ€&€&ð
 %Ð$Ð$Ð$Ð$Ð$Ð$Ð$åŒ^�X xÐ0€'Ø€uˆW˜T¨$°dÐ;Ñ;Ô;€"Ø�>Š>ÑÔ˜AÔ€&à„]�aÒÐØ
ˆ$à�=Š= 'ˆ=Ñ*Ô*€&à€r   c                  ób   — ddl } t          ¦   «         }|                      |t          ¬¦  «        }|S )zl
	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»  r,  r1  )r·  rL   s     r   Úget_cpu_infor¾  ¿
  s4   € ð €€€å
Ñ
Ô
€ð �*Š*�V­;ˆ*Ñ
7Ô
7€à€r   c            
      óD  — ddl m}  dd l} | d¬¦  «        }|                     ddd¬¦  «         |                     d	dd
¬¦  «         |                     ddd¬¦  «         |                     ¦   «         }t          |j        d¦  «        a	 t          ¦   «          nZ# t          $ rM}t          j                             t          |¦  «        dz   ¦  «         t          j        d¦  «         Y d }~nd }~ww xY wt          ¦   «         }|s3t          j                             d¦  «         t          j        d¦  «         |j        r$t!          |                     |¦  «        ¦  «         d S |j        rt!          t&          ¦  «         d S t!          d                     |                     dd¦  «        ¦  «        ¦  «         t!          d                     |                     dd¦  «        ¦  «        ¦  «         t!          d                     |                     dd¦  «        ¦  «        ¦  «         t!          d                     |                     dd¦  «        ¦  «        ¦  «         t!          d                     |                     dd¦  «        ¦  «        ¦  «         t!          d                     |                     dd¦  «        ¦  «        ¦  «         t!          d                     |                     dd¦  «        ¦  «        ¦  «         t!          d                      |                     d!d¦  «        ¦  «        ¦  «         t!          d"                     |                     d#d¦  «        ¦  «        ¦  «         t!          d$                     |                     d%d¦  «        ¦  «        ¦  «         t!          d&                     |                     d'd¦  «        ¦  «        ¦  «         t!          d(                     |                     d)d¦  «        ¦  «        ¦  «         t!          d*                     |                     d+d¦  «        ¦  «        ¦  «         t!          d,                     |                     d-d¦  «        ¦  «        ¦  «         t!          d.                     |                     d/d¦  «        ¦  «        ¦  «         t!          d0                     |                     d1d¦  «        ¦  «        ¦  «         t!          d2                     |                     d3d¦  «        ¦  «        ¦  «         t!          d4                     |                     d5d¦  «        ¦  «        ¦  «         t!          d6                     |                     d7d¦  «        ¦  «        ¦  «         t!          d8                     |                     d9d¦  «        ¦  «        ¦  «         t!          d:                     |                     d;d¦  «        ¦  «        ¦  «         t!          d<                     |                     d=d¦  «        ¦  «        ¦  «         t!          d>                     |                     d?d¦  «        ¦  «        ¦  «         t!          d@                     dA                     |                     dBd¦  «        ¦  «        ¦  «        ¦  «         d S )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 fileFr9   r'   zFailed to find cpu info
zPython Version: {0}r©  r6   zCpuinfo Version: {0}r«  zVendor ID Raw: {0}rÉ   zHardware Raw: {0}r:  zBrand Raw: {0}r;  zHz Advertised Friendly: {0}r<  zHz Actual Friendly: {0}r=  zHz Advertised: {0}r>  zHz Actual: {0}rÑ   z	Arch: {0}r  z	Bits: {0}rØ   z
Count: {0}r?  zArch String Raw: {0}rÍ   zL1 Data Cache Size: {0}rI  zL1 Instruction Cache Size: {0}rJ  zL2 Cache Size: {0}r@  zL2 Cache Line Size: {0}rA  zL2 Cache Associativity: {0}rB  zL3 Cache Size: {0}rH  zStepping: {0}rC  z
Model: {0}rD  zFamily: {0}rE  zProcessor Type: {0}rF  z
Flags: {0}z, rG  )ÚargparserÀ  r·  Úadd_argumentÚ
parse_argsr   r÷  rú   r  rC   r(  r[   r+   r   Úexitr³  Úprintr!  Úversionr¯  r   r�   rA   )rÀ  r·  Úparserr5  r\   rR   s         r   ÚmainrË  Î
  s²  € Ø$Ð$Ð$Ð$Ð$Ð$Ø€€€ð ˆ.Ð%EÐ
FÑ
FÔ
F€Ø×Ò�X lÐ9YÐÑZÔZÐZØ×Ò�[¨Ð<^ÐÑ_Ô_Ð_Ø×Ò�Y |Ð:kÐÑlÔlÐlØ×ÒÑÔ€õ �”˜UÑ#Ô#€ðÝ�-„-€-€-øÝð ð ð Ý„*×Ò•3�s‘8”8˜d‘?Ñ#Ô#Ð#Ý„(ˆ1�+„+€+€+€+€+€+€+øøøøðøøøõ 	Ñ Ô €àð Ý„*×ÒÐ.Ñ/Ô/Ð/Ý„(ˆ1�+„+€+à„Ið ?Ýˆ�
Š
�4ÑÔÑÔÐÐÐØ
„lð ?ÝÕÑÔÐÐÐåÐ×$Ò$ T§X¢XÐ.>ÀÑ%CÔ%CÑDÔDÑEÔEÐEÝÐ×%Ò% d§h¢hÐ/GÈÑ&LÔ&LÑMÔMÑNÔNÐNÝÐ×#Ò# D§H¢H¨_¸bÑ$AÔ$AÑBÔBÑCÔCÐCÝÐ×"Ò" 4§8¢8¨N¸BÑ#?Ô#?Ñ@Ô@ÑAÔAÐAÝÐ×Ò §¢¨°bÑ 9Ô 9Ñ:Ô:Ñ;Ô;Ð;ÝÐ%×,Ò,¨T¯XªXÐ6NÐPRÑ-SÔ-SÑTÔTÑUÔUÐUÝÐ!×(Ò(¨¯ªÐ2FÈÑ)KÔ)KÑLÔLÑMÔMÐMÝÐ×#Ò# D§H¢H¨_¸bÑ$AÔ$AÑBÔBÑCÔCÐCÝÐ×Ò §¢¨°bÑ 9Ô 9Ñ:Ô:Ñ;Ô;Ð;Ýˆ×Ò˜4Ÿ8š8 F¨BÑ/Ô/Ñ0Ô0Ñ1Ô1Ð1Ýˆ×Ò˜4Ÿ8š8 F¨BÑ/Ô/Ñ0Ô0Ñ1Ô1Ð1Ýˆ×Ò˜DŸHšH W¨bÑ1Ô1Ñ2Ô2Ñ3Ô3Ð3ÝÐ×%Ò% d§h¢hÐ/@À"Ñ&EÔ&EÑFÔFÑGÔGÐGÝÐ!×(Ò(¨¯ªÐ2FÈÑ)KÔ)KÑLÔLÑMÔMÐMÝÐ(×/Ò/°·²Ð9TÐVXÑ0YÔ0YÑZÔZÑ[Ô[Ð[ÝÐ×#Ò# D§H¢H¨_¸bÑ$AÔ$AÑBÔBÑCÔCÐCÝÐ!×(Ò(¨¯ªÐ2FÈÑ)KÔ)KÑLÔLÑMÔMÐMÝÐ%×,Ò,¨T¯XªXÐ6NÐPRÑ-SÔ-SÑTÔTÑUÔUÐUÝÐ×#Ò# D§H¢H¨_¸bÑ$AÔ$AÑBÔBÑCÔCÐCÝˆ×Ò˜tŸxšx¨
°BÑ7Ô7Ñ8Ô8Ñ9Ô9Ð9Ýˆ×Ò˜DŸHšH W¨bÑ1Ô1Ñ2Ô2Ñ3Ô3Ð3Ýˆ×Ò˜TŸXšX h°Ñ3Ô3Ñ4Ô4Ñ5Ô5Ð5ÝÐ×$Ò$ T§X¢XÐ.>ÀÑ%CÔ%CÑDÔDÑEÔEÐEÝˆ×Ò˜DŸIšI d§h¢h¨w¸Ñ&;Ô&;Ñ<Ô<Ñ=Ô=Ñ>Ô>Ð>Ð>Ð>s   Â	B Â
C/Â"AC*Ã*C/Ú__main__FrY  )<r®  rA   r¯  ri   r(  ry   rÙ   r  r7  rú   Úobjectr   rd   rq   rŸ   rÃ   r  r(  r-  r1  rM  rW  r]  rÐ   rw  r  rˆ  r”  r¤  rª  rÊ  râ  r  rð  rú  rÿ  r  r7  r*  r0  r>  rO  rQ  rW  rY  rt  rv  rz  r€  r}  r  rœ  r¢  r¥  r§  r³  r»  r¾  rË  r`   r   r   r   ú<module>rÎ     sS  ðð8 €ØŸšÐ"CÐ"C°?Ð"CÑ"CÔ"CÑDÔDÐ à €€€€€€€Ø €€€Ø Ð Ð Ð Ø €€€ð  $Ð à
€ðyð yð yð yð yˆFñ yô yð yðvHð Hð Hð Hð H�ñ Hô Hð HðVð ð ð%ð %ð %ð %ð4ð ð ð$=ð =ð =ð
ð 
ð 
ð	ð 	ð 	ðð ð ðð ð ð,ð ð ð"ð ð ð ð ð ð<ð ð ð&ð ð ð, ð  ð  ðDð ð ð(ð ð ð<ð ð ð,2Eð 2Eð 2Eðh]ð ]ð ]ð~7ð 7ð 7ðrð ð ð"Cð "Cð "CðH CEð ð ð ð ð>Uð Uð Uð Uð Uˆ&ñ Uô Uð UðpLð Lð Lð Lð LˆFñ Lô Lð Lð\I#ð I#ð I#ðV	 ð 	 ð 	 ðbð bð bðH^ð ^ð ^ð@-ð -ð -ð^_ð _ð _ðBð ð ð@|ð |ð |ð~ð ð ð0=ð =ð =ð@ð ð ð?ð ?ð ?ðBPð Pð PðdRð Rð Rðhgð gð gðRBð Bð BðH ð  ð  ðDJð Jð JðXð ð ð@ð ð ð6?ð 6?ð 6?ðr ˆzÒÐØ€�„€€€àˆ5�˜ÑÔ€Ø€�„€€€r   