
    dafgq                     n   d Z ddlZddlZddlZddlZddlZd Z G d d      ZdddZd Z	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 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*d* Z+d+ Z,d, Z-d- Z.d. Z/d2d/Z0d0 Z1e2d1k(  r e1        yy)3zK
Collect various information about Python to help debugging test failures.
    Nc                 l    | y t        |       } t        j                  dd|       } | j                         S )Nz\s+ )strresubstrip)texts    */root/Python-3.12.4/Lib/test/pythoninfo.pynormalize_textr      s1    |t9D66&#t$D::<    c                       e Zd Zd Zd Zd Zy)
PythonInfoc                     i | _         y N)info)selfs    r
   __init__zPythonInfo.__init__   s	    	r   c                     || j                   v rt        d|z        |y t        |t              s.t        |t              st	        |      }|j                         }|sy || j                   |<   y )Nzduplicate key: %r)r   
ValueError
isinstanceintr   r   r   keyvalues      r
   addzPythonInfo.add   sb    $))03677=%%eS)E
KKME		#r   c                 |    | j                   j                         D ci c]  \  }}|t        |       c}}S c c}}w )zU
        Get information as a key:value dictionary where values are strings.
        )r   itemsr   r   s      r
   	get_infoszPythonInfo.get_infos)   s/     37))//2CDJCSZDDDs   8N)__name__
__module____qualname__r   r   r    r   r
   r   r      s    $Er   r   	formatterc                d    |D ]+  }t        ||d       }|||z  }|	 |||      } | ||       - y r   )getattr)info_addobjname_fmt
attributesr$   attrr   names           r
   copy_attributesr-   0   sL     T4(=$ dE*Eur   c                 N    	 t        ||      } | ||       y # t        $ r Y y w xY wr   r&   AttributeError)r'   r,   mod	attr_namer   s        r
   	copy_attrr3   ;   s3    Y' T5  s    	$$c                p    	 t        ||      } |       }| ||      } | ||       y # t        $ r Y y w xY wr   r/   )r'   r,   r1   	func_namer$   funcr   s          r
   	call_funcr7   C   sJ    sI& FE% T5  s   ) 	55c                 <   d}t        | t        d|       t        | dt        d       t        | dt        d       t        | dt        d       t        j                         }t	        t        d	      r|d
t        j
                         } | d|       dD ]G  }t        t        |      }|t        |dd       }|s&t        |dd       }|r|d
|} | d|z  |       I t	        t        d      }|rd}nd} | d|       t	        t        d      }|rd}nd} | d|       y )N)_emscripten_info
_frameworkabiflagsapi_versionbuiltin_module_names	byteorderdont_write_bytecode
executableflags
float_infofloat_repr_style	hash_info
hexversionimplementationint_infomaxsize
maxunicodepathplatform
platlibdirprefixthread_infoversionversion_infowinverzsys.%szsys.androidapilevelgetandroidapilevelzsys.windowsversiongetwindowsversionzsys.getrecursionlimitgetrecursionlimitgetfilesystemencodeerrors/zsys.filesystem_encoding)stdinstdoutstderrencodingerrorszsys.%s.encodinggettotalrefcountz$Yes (sys.gettotalrefcount() present)z#No (sys.gettotalrefcount() missing)zbuild.Py_DEBUG
getobjectszYes (sys.getobjects() present)zNo (sys.getobjects() missing)zbuild.Py_TRACE_REFS)r-   sysr7   getfilesystemencodinghasattrrU   r&   )	r'   r*   rZ   r,   streamr[   Py_DEBUGr	   Py_TRACE_REFSs	            r
   collect_sysrd   N   s/   J6 Hc8Z8h-s4HIh,c3FGh/6IJ((*Hs/0&(E(E(GH&1- 
5d#>6:t440"*F3H"T)84
5 s./H54t$ C.M/."D)r   c                    dd l }|j                         }dj                  t        t        |            } | d|        | d|j                                 | d|j                  d             d|j                         z  j                         }|r	 | d	|       	 |j                         }d
D ]  }||vr | d| d||           y # t        $ r Y y w xY w)Nr   r   zplatform.architecturezplatform.python_implementationzplatform.platformT)aliasedz%s %szplatform.libc_ver)IDNAMEPRETTY_NAMEVARIANT
VARIANT_IDVERSIONVERSION_CODENAME
VERSION_IDz platform.freedesktop_os_release[])
rK   architecturejoinfilterboolpython_implementationlibc_verr   freedesktop_os_releaseOSError)r'   rK   archrt   
os_releaser   s         r
   collect_platformry      s      "D88F4&'D$d+-++-/ t,. (++--446H$h/&446
	
 	&C *$7uA>_&	&  s   C 	CCc                 :    dd l } | d|j                                y )Nr   zlocale.getencoding)localegetencoding)r'   r{   s     r
   collect_localer}      s    !6#5#5#78r   c                 t     | dt         j                  d              | dt         j                  d             y )Nzbuiltins.float.float_formatfloatzbuiltins.float.double_formatdouble)r   __getformat__)r'   s    r
   collect_builtinsr      s.    *E,?,?,HI+U-@-@-JKr   c                    dd l }t        |d      r*	 	 |j                  d|j                         d} | d|       y y # t        $ r}d|z  }Y d }~d }~ww xY w# t
        $ r(}|j                  t        j                  k7  r Y d }~y d }~ww xY w)Nr   	getrandom   zready (initialized)znot seeded yet (%s)zos.getrandom)osr`   r   GRND_NONBLOCKBlockingIOErrorrv   errnoENOSYS)r'   r   stateexcs       r
   collect_urandomr      s    r;	4Q 0 01- ^U+   # 4-34  	 yyELL( )	s8   < 	A 	AA
A AA 	B BBc                 p   dd l }d }d}t        | |d||       dD ]  }t        | d|z  ||        d }t        | d|d	|       t        |d
      r	 |j	                         } | d|       t        d      }|j                  j                         D ]Z  \  }}	|j                         }
|
|v s5|
j                  d      s$|
j                  d      s=|
j                  d      sO | d|z  |	       \ t        |d      r/|j                  d      }|j                  |        | dd|z         y y # t
        $ r Y w xY w)Nr   c                 D    | dv rt        t        d |D                    S |S )N)supports_follow_symlinkssupports_fdsupports_effective_idsc              3   4   K   | ]  }|j                     y wr   )r   ).0r6   s     r
   	<genexpr>z2collect_os.<locals>.format_attr.<locals>.<genexpr>   s     >dmm>s   )r   sortedr+   r   s     r
   format_attrzcollect_os.<locals>.format_attr   s*     . .v>>>??Lr   )r,   supports_bytes_environr   r   r   zos.%sr#   )	cpu_countgetcwdgetegidgeteuidgetgid
getloadavg	getresgid	getresuidgetuidprocess_cpu_countunamec                 @    dj                  t        t        |             S )N, )rp   mapr   )groupss    r
   format_groupsz!collect_os.<locals>.format_groups   s    yyS&)**r   zos.getgroups	getgroupsgetloginzos.login)DAPPDATAAR	ARCHFLAGSARFLAGSAUDIODEVBUILDPYTHONCCCFLAGSCOLUMNSCOMPUTERNAMECOMSPECCPPCPPFLAGSDISPLAYDISTUTILS_DEBUGDISTUTILS_USE_SDKDYLD_LIBRARY_PATHENSUREPIP_OPTIONSHISTORY_FILEHOME	HOMEDRIVEHOMEPATHIDLESTARTUPLANGLDFLAGSLDSHAREDLD_LIBRARY_PATHLINESMACOSX_DEPLOYMENT_TARGETMAILCAPS	MAKEFLAGSMIXERDEVMSSDKPATHPATHEXTPIP_CONFIG_FILEPLATPOSIXLY_CORRECTPY_SAX_PARSERProgramFileszProgramFiles(x86)RUNNING_ON_VALGRINDSDK_TOOLS_BINSERVER_SOFTWARESHELLSOURCE_DATE_EPOCH
SYSTEMROOTTEMPTERMTILE_LIBRARYTMPTMPDIRTRAVISTZUSERPROFILEVIRTUAL_ENVWAYLAND_DISPLAYWINDIR_PYTHON_HOSTRUNNER_PYTHON_HOST_PLATFORM_PYTHON_PROJECT_BASE_PYTHON_SYSCONFIGDATA_NAME__PYVENV_LAUNCHER__ASAN_OPTIONSLSAN_OPTIONSMSAN_OPTIONSTSAN_OPTIONSUBSAN_OPTIONS)PYTHONLC_VS	COMNTOOLSzos.environ[%s]umaskzos.umaskz0o%03o)r   r-   r7   r`   r   rv   	frozensetenvironr   upper
startswithendswithr   )r'   r   r   r*   r6   r   loginENV_VARSr,   r   r   masks               r
   
collect_osr      sV   J Hb':M 6 	(GdNB56+ hK=Qr:	(KKME Z'  G GHP zz'') 5e

X 01%%..*E%,e45 r7xx{
X_- {  	 	s   D) )	D54D5c                 v   	 dd l }dd l}|j                         }	 |j	                  |      } | d|z  ||nd       |y t        |d      rO|j                  |j                  |j                        }dj                  t        t        |            } | d|       y y # t        $ r Y y w xY w# t
        $ r d }Y w xY w)Nr   zpwd.getpwuid(%s)z
<KeyError>getgrouplistr   zos.getgrouplist)pwdImportErrorr   r   getpwuidKeyErrorr`   r   pw_namepw_gidrp   r   r   )r'   r   r   uidentryr   s         r
   collect_pwdr  b  s     
))+CS! $'U\; } 	r>"=3sF+,"F+ #%    s"   B B* 	B'&B'*B87B8c                     	 dd l }d }d}t        | |d||       t        |d      s*t	        |dd      }d	|v r
 | d
d	       y d|v r
 | d
d       y y y # t        $ r Y y w xY w)Nr   c                 0    t        |t              rd|z  S |S )Nz%#x)r   r   r   s     r
   r   z%collect_readline.<locals>.format_attr  s    eS!5= Lr   )_READLINE_VERSION_READLINE_RUNTIME_VERSION_READLINE_LIBRARY_VERSIONzreadline.%sr#   r  __doc__ zlibedit readlinezreadline.libraryzGNU readline)readliner   r-   r`   r&   )r'   r  r   r*   docs        r
   collect_readliner  }  s    J
 Hhz)+ 889h	2.$');<s"'8 # :#  s   A 	AAc                     dd l }	 |j                  g d|j                  |j                  d      }|j                         d   }|j                  ry 	 |j                         d   } | d|       y # t
        $ r Y y w xY w)Nr   )gdbz-nx	--versionTrX   rY   universal_newlinesgdb_version)
subprocessPopenPIPEcommunicate
returncoderv   
splitlines)r'   r  procrO   s       r
   collect_gdbr    s    
 ;'1'137   9 ""$Q'??    "1%G]G$  s   A
A/ /	A;:A;c                     	 dd l }d}t        | |d|       	 dd l}|j	                         }|j                  dd      } | d|       y # t        $ r Y <w xY w# t        $ r Y y w xY w)Nr   )
TK_VERSIONTCL_VERSIONz
tkinter.%sr   
patchlevelztkinter.info_patchlevel)_tkinterr-   r   tkinterTclcall)r'   r$  r*   r%  tclr#  s         r
   collect_tkinterr)    sw    F 3
(L*E8 kkmXXfl3
*J7    s"   A A 	AA	A"!A"c                 2   dd l } | d|j                                d}t        | |d|       t        |d      rEdD ]?  }	 t        j                  d      5  |j                  |      }d d d         | d	|z         A y y # 1 sw Y   xY w# t        $ r Y [w xY w)
Nr   z	time.time)altzonedaylighttimezonetznameztime.%sget_clock_info)clock	monotonicperf_counterprocess_timethread_timetimeT)recordztime.get_clock_info(%s))r5  r-   r`   warningscatch_warningsr/  r   )r'   r5  r*   r0  
clock_infos        r
   collect_timer:    s    [$))+&J HdIz:t%&= 
	HEH,,D9 <!%!4!4U!;J< 2U:JG
	H '
< < s)   B
A>&B
>B	B

	BBc                 H    	 dd l }t        | d|d       y # t        $ r Y y w xY w)Nr   zcurses.ncurses_versionncurses_version)cursesr   r3   )r'   r=  s     r
   collect_cursesr>    s0     h0&:KL  s    	!!c                 n    	 dd l } | d|j                   j                                y # t        $ r Y y w xY w)Nr   zdatetime.datetime.now)datetimer   now)r'   r@  s     r
   collect_datetimerB    s:     $h&7&7&;&;&=>  s   ( 	44c                 P   dd l } | d|j                                dD ]2  }|j                  |      }|dk(  r|st        |      } | d|z  |       4 |j                  d      }|xr d|v }|rd}nd	} | d
|       dD ]&  }|j                  |      }|rd}nd} | d| |       ( y )Nr   zsysconfig.is_python_build)ABIFLAGSANDROID_API_LEVELr   CCSHAREDr   CFLAGSFORSHAREDCONFIG_ARGS
HOSTRUNNERHOST_GNU_TYPEMACHDEP	MULTIARCHOPTPGO_PROF_USE_FLAG	PY_CFLAGSPY_CFLAGS_NODISTPY_CORE_LDFLAGS
PY_LDFLAGSPY_LDFLAGS_NODISTPY_STDMODULE_CFLAGSrb   Py_ENABLE_SHAREDPy_NOGILr   SOABIabs_builddir
abs_srcdirrM   srcdirrE  zsysconfig[%s]rO  z-DNDEBUGz!ignore assertions (macro defined)z$build assertions (macro not defined)zbuild.NDEBUG)WITH_DOC_STRINGSWITH_DTRACEWITH_FREELISTSWITH_PYMALLOCWITH_VALGRINDYesNozbuild.)	sysconfigis_python_buildget_config_varr   )r'   rb  r,   r   rO  NDEBUGr	   s          r
   collect_sysconfigrf    s    ()*C*C*EF #0< ((.&&uu%4'/G#0J ((5I3J)3F24^D! ( ((.DD6$$'(r   c                    dd l }	 dd l}	 dd l}d }d}t	        | |d||       d|j                  |j                        fd|j                         fd|j                         ffD ]  \  }}d	}t	        | |d
| d|        ddg}|5t        |d      r)|j                         }	|j                  |	d   |	d   f       |D ]  }	 |j                  |   }
 | d|z  |
         y # t        $ r Y y w xY w# t        $ r d }Y w xY w# t        $ r Y Mw xY w)Nr   c                 2    | j                  d      rd|z  S |S )NOP_z%#8x)r   r   s     r
   r   z collect_ssl.<locals>.format_attr:  s    ??5!E>!Lr   )OPENSSL_VERSIONOPENSSL_VERSION_INFOHAS_SNIOP_ALLOP_NO_TLSv1_1zssl.%sr#   
SSLContextdefault_https_contextstdlib_context)minimum_versionmaximum_versionprotocoloptionsverify_modezssl.z.%sOPENSSL_CONFSSLKEYLOGFILEget_default_verify_paths   zssl.environ[%s])r   sslr   _sslr-   ro  PROTOCOL_TLS_CLIENT_create_default_https_context_create_stdlib_contextr`   ry  extendr   r  )r'   r   r{  r|  r   r*   r,   ctx	env_namespartsr   s              r
   collect_sslr  /  s\   J Hc8Z;O 
s~~c&=&=>?	 #"C"C"EF	35578 E	c


 	#dV3'7DE  1IGD*DE--/%(E!H-. 2	JJt$E 	"T)512S    P  		s4   C C. C?	C+*C+.C<;C<?	D
Dc                     	 dd l }	 |j                         } | d|       y # t        $ r Y y w xY w# t        t        f$ r t
        j                  dk7  r Y y w xY w)Nr   zsocket.hostnamewasi)socketr   gethostnamerv   r0   r^   rK   )r'   r  hostnames      r
   collect_socketr  d  sg    .%%' 	"H-  
 ^$ <<6! "s   ! 0 	--#AAc                 L    	 dd l }d}t        | |d|       y # t        $ r Y y w xY w)Nr   )sqlite_versionz
sqlite3.%s)sqlite3r   r-   )r'   r  r*   s      r
   collect_sqliter  t  s3     %JHg|Z@	      	##c                 L    	 dd l }d}t        | |d|       y # t        $ r Y y w xY w)Nr   )ZLIB_VERSIONZLIB_RUNTIME_VERSIONzzlib.%s)zlibr   r-   )r'   r  r*   s      r
   collect_zlibr  ~  s3     :JHdIz:	  r  c                 P    	 ddl m} d}t        | |d|       y # t        $ r Y y w xY w)Nr   )expat)EXPAT_VERSIONzexpat.%s)xml.parsersr  r   r-   )r'   r  r*   s      r
   collect_expatr    s3    % $JHeZ<	      	%%c                 L    	 dd l }d}t        | |d|       y # t        $ r Y y w xY w)Nr   )__libmpdec_version__z_decimal.%s)_decimalr   r-   )r'   r  r*   s      r
   collect_decimalr    s3     +JHhzB	  r  c                 \    	 dd l }dD ]  }t        | d| ||        y # t        $ r Y y w xY w)Nr   )LONG_MAXPY_SSIZE_T_MAXPy_C_RECURSION_LIMITSIZEOF_TIME_TSIZEOF_WCHAR_Tz
_testcapi.)	_testcapir   r3   )r'   r  r,   s      r
   collect_testcapir    sH     B 	(j/DAB  s    	++c                 x    	 dd l }t        | d|d       dD ]  }t        | d| ||        y # t        $ r Y y w xY w)Nr   zpymem.allocatorpymem_getallocatorsname)SIZEOF_PYGC_HEADSIZEOF_PYOBJECTz_testinternalcapi.)_testinternalcapir   r7   r3   )r'   r  r,   s      r
   collect_testinternalcapir    s]      h)+<>WX R 	(079JDQ	R  s   - 	99c                    	 dd l }t        |      D cg c]  }|j                  d      s| }}|D ]+  }t	        ||      }|j                  |      } | d|z  |       - t        | d|d       y # t        $ r Y y w xY wc c}w )Nr   RLIMIT_zresource.%szresource.pagesizegetpagesize)resourcer   dirr   r&   	getrlimitr7   )r'   r  r+   limitsr,   r   r   s          r
   collect_resourcer    s      #8}Kt	0JdKFK .h%""3'%u-.
 h+X}E   Ls   A/ A>A>/	A;:A;c                     dd l }	 ddlm} t        |      D cg c]  }|j                  d      r| }}t        | |d|       y # t        |j                  f$ r Y y w xY wc c}w )Nr   )test_socketHAVE_ztest_socket.%s)unittesttestr  r   SkipTestr  r   r-   )r'   r  r  r,   r*   s        r
   collect_test_socketr    sn    $
 $'{#3 /4__W-  /J /Hk+;ZH **+ /s   A AAAc                    	 ddl m} d}t        | |d|       t	        | d|d       t	        | d|d        | d	|j                  d
              | d|j                  d
              | d|j                  d
             y # t        $ r Y y w xY w)Nr   )support)	
MS_WINDOWShas_fork_supporthas_socket_supporthas_strftime_extensionshas_subprocess_support
is_androidis_emscripten	is_jythonis_wasiz
support.%szsupport._is_gui_available_is_gui_availablezsupport.python_is_optimizedpython_is_optimizedz%support.check_sanitizer(address=True)T)addressz$support.check_sanitizer(memory=True))memoryz support.check_sanitizer(ub=True))ub)r  r  r   r-   r7   check_sanitizer)r'   r  r*   s      r
   collect_supportr    s     
J Hg|Z@h3W>QRh5w@UV4$$T$243$$D$13/$$$-//  s   B   	BBc                 x    	 ddl m} dD ]  }t        ||      } | d|  |              ! y # t        $ r Y y w xY w)Nr   )	os_helper)can_symlink	can_xattr	can_chmodcan_dac_overridezsupport_os_helper.)test.supportr  r   r&   )r'   r  r,   r6   s       r
   collect_support_os_helperr    sQ    * 6 y$'%dV,df56  s   - 	99c                     	 ddl m} d}t        | |d|       dD ]  }t	        ||      } | d|  |              ! y # t        $ r Y y w xY w)Nr   )socket_helper)IPV6_ENABLEDhas_gethostnamezsupport_socket_helper.%s)tcp_blackholezsupport_socket_helper.)r  r  r   r-   r&   )r'   r  r*   r,   r6   s        r
   collect_support_socket_helperr    si    .J Hm-GT : }d+)$0$&9	:  s   = 	A	A	c                 P    	 ddl m} d}t        | |d|       y # t        $ r Y y w xY w)Nr   )threading_helper)can_start_threadzsupport_threading_helper.%s)r  r  r   r-   )r'   r  r*   s      r
    collect_support_threading_helperr    s7    1J H.0MzZ  r  c                    dd l }dd l}|j                  d      }|sy 	 dd l}|j	                  |      }|j                  d       	 |j                  ||j                  |j                  d      }|j                         d   }|j                  ry |j                         d   }t        |      } | d|       y # t
        $ r |j	                         }Y w xY w# t        $ r Y y w xY w)Nr   r   r  Tr  z
CC.version)r  rb  rd  shlexsplitr   appendr  r  STDOUTrv   r  r  r  r   )	r'   r  rb  r   r  argsr  rX   r	   s	            r
   
collect_ccr  $  s    		!	!$	'B{{2 	KK	'1'1'8'837   9 "Fq!D$D\4 +  xxz   		s#   B6 )C 6CC	C! C!c           	      |    	 ddl m}  | ddj                  t	        t
        |                   y # t        $ r Y y w xY w)Nr   )_GDBM_VERSIONzgdbm.GDBM_VERSION.)_gdbmr  r   rp   r   r   )r'   r  s     r
   collect_gdbmr  G  s;    '  #((3sM+B"CD     / 	;;c           	          	 ddl m}  |       }t        |      D ]2  }||   }t        |      D ]  } | |d|dt	        ||                 4 y # t        $ r Y y w xY w)Nr   )get_configs[rn   )r  r  r   r   repr)r'   r  all_configsconfig_typeconfigr   s         r
   collect_get_configr  P  st    1 -Kk* G[)&> 	GCc2D4EF	GG	  s   A 	AAc                 (    dd l }t        | |dd       y )Nr   zsubprocess.%s)_USE_POSIX_SPAWN)r  r-   )r'   r  s     r
   collect_subprocessr  ^  s    Hj/;PQr   c                    t         j                  dk7  ry 	 dd l}t        |d      st        	 |j                  d      }|j                  }	 |j                  }||_        d|_	        t         |             } | d|       |j                  j                  }|j                  }||_        d|_	         | d |              	 dd l}|j!                  t         j"                        }	 | d	|	       dd l}
	 |
j'                  g d
|
j(                  |
j(                  dd      }|j+                         \  }}|j,                  rd}|j/                         D ]  }|j1                         }|j3                  d      r,|j5                  d      j1                         }|sF | d|       P|j3                  d      sb|j5                  d      j1                         }|s | d|        	 	 |
j'                  dgd|
j(                  |
j(                  d      }|j+                         d   }|j,                  dk(  ry |j,                  rd}|j1                         }|j/                         d   }|r
 | d|       	 dd l}	 |j;                  |j<                  d      }d}	 |j?                  ||      \  }}|jA                  |       	  | d|rd       y d       y # t        $ r d}Y ^w xY w# t        $ r Y 'w xY w# t        t        f$ r Y w xY w# t6        $ r Y .w xY w# t6        $ r Y y w xY w# |jA                  |       w xY w# t6        $ r Y y w xY w)Nwin32r   WinDLLntdllr"   z<function not available>zwindows.RtlAreLongPathsEnabledzwindows.is_adminzwindows.dll_path)wmicr   getzCaption,Versionz/valueoemT)rX   rY   rZ   r	   r  zCaption=zwindows.version_captionzVersion=zwindows.versionver)shellrX   rY   r	   l   B   zwindows.verz8SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock!AllowDevelopmentWithoutDevLicensezwindows.developer_modeenableddisabled)!r^   rK   ctypesr`   r   r  c_ubyteRtlAreLongPathsEnabledrestypeargtypesrr   r0   windllshell32IsUserAnAdmin_winapiGetModuleFileName	dllhandler  r  r  r  r  r  r   r   removeprefixrv   winregOpenKeyHKEY_LOCAL_MACHINEQueryValueExCloseKey)r'   r  r  BOOLEANr  resr
  r  r  dll_pathr  r  outputrY   liner  r   subkeyr   
value_types                       r
   collect_windowsr  c  sE   
||w6vx( )
 g&..	1%*%A%A" .5"*.0"+-/0C137--''-- '!##]_5,,S]];#X.
 6  R'1'1).%)	   +
 ))+??F %%' 		6D::<Dz*((4::<6=,((4::<.5		6*t'1'1%)   + !!#A&??j(??F   "1%]D) Onn%%GI 5	! & 3 3C @E:OOC  	)9N:Nc  	-,C	-  2 (    2  $ OOC  s   K K =,K' .AK= AL *L ,L2 L  L2 KK	K$#K$'K:9K:=	L
	L
	LLL//L2 2	L>=L>c                    	 dd l }|t        | d|d       	 t        dd      5 }|j	                         j                         }d d d        r
 | d|       y y # t        $ r d }Y _w xY w# 1 sw Y   'xY w# t        $ r Y y w xY w)Nr   zfips.openssl_fips_modeget_fips_modez/proc/sys/crypto/fips_enabledzutf-8)rZ   zfips.linux_crypto_fips_enabled)_hashlibr   r7   openr  rstriprv   )r'   r  fpr  s       r
   collect_fipsr#    s     (4hP1GD 	*;;='')D	* 5t<   	* 	*
  s9   A A5 A)A5 A&%A&)A2.A5 5	B Bc                 :    dd l } | d|j                                y )Nr   ztempfile.gettempdir)tempfile
gettempdir)r'   r%  s     r
   collect_tempfiler'    s    "H$7$7$9:r   c                 |    	 ddl m}  | ddj                  |j	                                      y # t        $ r Y y w xY w)Nr   )utilszlibregrtests.build_infor   )test.libregrtestr)  r   rp   get_build_info)r'   r)  s     r
   collect_libregrtest_utilsr,    s=    * &1E1E1G(HI  r  c                    d}| j                   }g t        t        t        t        t
        t        t        t        t        t        t        t        t        t        t        t         t"        t$        t&        t(        t*        t,        t.        t0        t2        t4        t6        t8        t:        t<        t>        t@        tB        tD        tF        tH        D ]  }	  ||        |S # tJ        $ r d}tM        d|jN                  z  tP        jR                         tU        jV                  tP        jR                         tM        tP        jR                         tP        jR                  jY                          Y w xY w)NFTzERROR: %s() failedfile)-r   r   r   r  r>  rB  r  r  r#  r  r  r  r}   r   ry   r  r  r  r  r  r  r  rd   rf  r  r  r'  r:  r)  r  r  r,  r  r  r  r  r  	Exceptionprintr   r^   rY   	traceback	print_excflush)r   errorr'   collect_funcs       r
   collect_infor7    s   ExxH+ 		+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+  	!+" 	#+$ 	%+& 	'+( 	)+* 	++, 	-+. 	/+0 	1+2 	3+4 	5+6 	7+8 	9+: 	!;+< 	=+> 	?+@ 	A+B 	C+D 	E+F 	"G+L 	M+N 	O+P 	"Q+R 	&S+T 	)U+ 4X	"[4l L  	E&,*?*?@zz#SZZ0szz"JJ	s   .C::BFFc                 
   d}t        |       t        dt        |      z         t                | j                         }t        |j	                               }|D ]'  \  }}|j                  dd      }t        |d|       ) y )NzPython debug information=
r   z: )r1  lenr   r   r   replace)r   r/  titleinfosr   r   s         r
   	dump_infor?  (  sp    &E	%L	#E

	GNNE5;;=!E '
UdC(#u%&'r   c                      t               } t        |       }t        |        |r;t                t        dt        j
                         t	        j                  d       y y )Nz"Collection failed: exit with errorr.  r   )r   r7  r?  r1  r^   rY   exit)r   r5  s     r
   mainrB  5  sA    <DEdO2D r   __main__r   )3r  r   r   r^   r2  r7  r   r   r-   r3   r7   rd   ry   r}   r   r   r   r  r  r  r)  r:  r>  rB  rf  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r'  r,  r7  r?  rB  r   r"   r   r
   <module>rD     s9    	 
  E E: GK  <@ A*H"&J9L
&J.Z,69:%(8&H6M?>(B22j. A;=CB RF
I/<6 :&	[ !FEGR
cOL&;J:z
' zF r   