§
    ÷¢±j‚-  ã                   óÒ  — d dl Z d dlZd dlZd dlZd dlZd dlZedk    rej        d          Zne	Zdd„Z
d„ Z G d„ dej        ¦  «        Z G d„ d	ej        ¦  «        Z G d
„ de¦  «        Z G d„ de¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Zd dlZd dlZ G d„ d¦  «        Z G d„ dej        ¦  «        Zd„ Zedk    r…ej        dd…         dgk    r e¦   «           ej        d ¦  «          ej        ¦   «           ej        ¦   «           e¦   «           ej        ¦   «           ej        ¦   «           ej        ¦   «          dS dS )é    NÚ__main__Úreturnc                  óJ   — dt           j        v rt          j        d¦  «        ‚dS )z¬For tests that often fails in CI, probably when it is being run multiple times
    (ie, for different Python versions)

    Github actions always have a `CI` variable.
    ÚCIzWe skip this test on CIN)ÚosÚenvironÚunittestÚSkipTest© ó    úfC:\Users\johnn\AppData\Local\Programs\Python\Python311\Lib\site-packages\win32/test/test_win32trace.pyÚSkipIfCIr      s+   € ð �rŒzÐÐÝÔÐ 9Ñ:Ô:Ð:ð Ðr   c                  óî   — t          j        d¦  «         t          j        d¦  «         t          j        ¦   «         dk    r5t          j        ¦   «          t          j        ¦   «          t          d¦  «        ‚d S )NÚHigš™™™™™©?z\An existing win32trace reader appears to be running - please stop this process and try again)Ú
win32traceÚwriteÚtimeÚsleepÚreadÚTermReadÚ	TermWriteÚAssertionErrorr   r   r   ÚCheckNoOtherReadersr      ss   € ÝÔ�TÑÔÐÝ„JˆtÑÔÐÝ„ÑÔ˜DÒ Ð åÔÑÔÐÝÔÑÔÐÝð?ñ
ô 
ð 	
ð	 !Ð r   c                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestInitOpsc                 ó”   — t          ¦   «          t          j        ¦   «          t          j        ¦   «          t          j        ¦   «          d S ©N)r   r   ÚInitReadr   r   ©Úselfs    r   ÚsetUpzTestInitOps.setUp'   s=   € Ý‰
Œ
ˆ
åÔÑÔÐÝŒÑÔÐÝÔÑÔÐÐÐr   c                 ó®   — 	 t          j        ¦   «          n# t           j        $ r Y nw xY w	 t          j        ¦   «          d S # t           j        $ r Y d S w xY wr   )r   r   Úerrorr   r   s    r   ÚtearDownzTestInitOps.tearDown.   s{   € ð	ÝÔÑ!Ô!Ð!Ð!øÝÔð 	ð 	ð 	ØˆDð	øøøð	ÝÔ Ñ"Ô"Ð"Ð"Ð"øÝÔð 	ð 	ð 	ØˆDˆDð	øøøs   ‚ –(§(¬A ÁAÁAc                 óŒ  — |                       t          j        t          j        ¦  «         t          j        ¦   «          t          j        ¦   «         }|                      |d¦  «         t          j        ¦   «          |                       t          j        t          j        ¦  «         t          j        ¦   «          |                       t          j        t          j        ¦  «         t          j        ¦   «          |                       t          j        t          j        ¦  «         t          j        ¦   «          t          j        ¦   «          d S )NÚ )	ÚassertRaisesr   r#   r   r   ÚassertEqualr   Ú	InitWriter   )r    Úresults     r   ÚtestInitTermReadzTestInitOps.testInitTermRead8   só   € Ø×Ò�*Ô*­J¬OÑ<Ô<Ð<ÝÔÑÔÐÝ”Ñ"Ô"ˆØ×Ò˜ Ñ$Ô$Ð$ÝÔÑÔÐØ×Ò�*Ô*­J¬OÑ<Ô<Ð<åÔÑÔÐØ×Ò�*Ô*­JÔ,?Ñ@Ô@Ð@ÝÔÑÔÐØ×Ò�*Ô*­JÔ,@ÑAÔAÐAÝÔÑÔÐÝÔÑÔÐÐÐr   c                 ó&  — |                       t          j        t          j        d¦  «         t          j        ¦   «          t          j        d¦  «         t          j        ¦   «          |                       t          j        t          j        d¦  «         d S )NÚHeizJohan Galtung)r'   r   r#   r   r)   r   r   s    r   ÚtestInitTermWritezTestInitOps.testInitTermWriteG   ss   € Ø×Ò�*Ô*­JÔ,<¸eÑDÔDÐDÝÔÑÔÐÝÔ˜Ñ)Ô)Ð)ÝÔÑÔÐØ×Ò�*Ô*­JÔ,<¸eÑDÔDÐDÐDÐDr   c                 ó$  — t          j        ¦   «          t          j        d¦  «         t          j        ¦   «          t          j        ¦   «          |                      t          j        ¦   «         dv ¦  «         t          j        ¦   «          t          j        ¦   «          t          j        d¦  «         t          j        ¦   «          t          j        ¦   «          |                      dt          j        ¦   «         ¦  «         t          j        ¦   «          d S )NúTa da)r0   r&   )	r   r)   r   r   r   Ú
assertTruer   r   r(   r   s    r   ÚtestTermSematicszTestInitOps.testTermSematicsN   sã   € ÝÔÑÔÐÝÔ˜Ñ!Ô!Ð!õ 	ÔÑÔÐÝÔÑÔÐØ�Š�
œÑ)Ô)¨]Ð:Ñ;Ô;Ð;ÝÔÑÔÐõ 	ÔÑÔÐÝÔ˜Ñ!Ô!Ð!ÝÔÑÔÐÝÔÑÔÐØ×Ò˜¥*¤/Ñ"3Ô"3Ñ4Ô4Ð4ÝÔÑÔÐÐÐr   N)Ú__name__Ú
__module__Ú__qualname__r!   r$   r+   r.   r2   r   r   r   r   r   &   sb   € € € € € ðð ð ðð ð ðð ð ðEð Eð Eðð ð ð ð r   r   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚBasicSetupTearDownc                 ó”   — t          ¦   «          t          j        ¦   «          t          j        ¦   «          t          j        ¦   «          d S r   ©r   r   r   r   r)   r   s    r   r!   zBasicSetupTearDown.setUpe   s?   € Ý‰
Œ
ˆ
ÝÔÑÔÐõ 	ŒÑÔÐÝÔÑÔÐÐÐr   c                 óR   — t          j        ¦   «          t          j        ¦   «          d S r   )r   r   r   r   s    r   r$   zBasicSetupTearDown.tearDownn   s&   € ÝÔÑÔÐÝÔÑÔÐÐÐr   N)r3   r4   r5   r!   r$   r   r   r   r7   r7   d   s2   € € € € € ðð ð ðð ð ð ð r   r7   c                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestModuleOpsc                 ó€   — t          j        d¦  «         t          j        ¦   «         }|                      d|¦  «         d S ©NzSyver Enstad©r   r   r   r(   ©r    ÚsyverEnstads     r   ÚtestRoundTripzTestModuleOps.testRoundTript   s<   € ÝÔ˜Ñ(Ô(Ð(Ý ”oÑ'Ô'ˆØ×Ò˜¨Ñ5Ô5Ð5Ð5Ð5r   c                 ó€   — t          j        d¦  «         t          j        ¦   «         }|                      d|¦  «         d S ©Nu   Â©opyright Syver Enstadr?   r@   s     r   ÚtestRoundTripUnicodez"TestModuleOps.testRoundTripUnicodey   s>   € ÝÔÐ4Ñ5Ô5Ð5Ý ”oÑ'Ô'ˆØ×ÒÐ4°kÑBÔBÐBÐBÐBr   c                 ó|   — t          j        d¦  «         |                      dt          j        ¦   «         ¦  «         d S r>   ©r   r   r(   Úblockingreadr   s    r   ÚtestBlockingReadzTestModuleOps.testBlockingRead~   s8   € ÝÔ˜Ñ(Ô(Ð(Ø×Ò˜­Ô)@Ñ)BÔ)BÑCÔCÐCÐCÐCr   c                 ó|   — t          j        d¦  «         |                      dt          j        ¦   «         ¦  «         d S rD   rG   r   s    r   ÚtestBlockingReadUnicodez%TestModuleOps.testBlockingReadUnicode‚   s:   € ÝÔÐ4Ñ5Ô5Ð5Ø×ÒÐ4µjÔ6MÑ6OÔ6OÑPÔPÐPÐPÐPr   c                 ó,   — t          j        ¦   «          d S r   )r   Úflushr   s    r   Ú	testFlushzTestModuleOps.testFlush†   s   € ÝÔÑÔÐÐÐr   N)r3   r4   r5   rB   rE   rI   rK   rN   r   r   r   r<   r<   s   sh   € € € € € ð6ð 6ð 6ð
Cð Cð Cð
Dð Dð DðQð Qð Qðð ð ð ð r   r<   c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestTraceObjectOpsc                 óÔ  — t          j        ¦   «          t          j        ¦   «          t          j        ¦   «         }|                      t           j        |j        ¦  «         |                      t           j        |j        d¦  «         t          j        ¦   «          t          j	        ¦   «          |  
                    d|                     ¦   «         ¦  «         |                     d¦  «         d S )Nr&   ÚSyver)r   r   r   Ú	GetTracerr'   r#   r   r   r   r)   r(   ©r    ÚtraceObjects     r   ÚtestInitzTestTraceObjectOps.testInit‹   sÂ   € ÝÔÑÔÐÝÔÑÔÐÝ Ô*Ñ,Ô,ˆØ×Ò�*Ô*¨KÔ,<Ñ=Ô=Ð=Ø×Ò�*Ô*¨KÔ,=¸rÑBÔBÐBÝÔÑÔÐÝÔÑÔÐØ×Ò˜˜[×-Ò-Ñ/Ô/Ñ0Ô0Ð0Ø×Ò˜'Ñ"Ô"Ð"Ð"Ð"r   c                 óT   — t          j        ¦   «         }|                     ¦   «          d S r   )r   rS   rM   rT   s     r   rN   zTestTraceObjectOps.testFlush–   s(   € Ý Ô*Ñ,Ô,ˆØ×ÒÑÔÐÐÐr   c                 óz   — t          j        ¦   «         }|                      |                     ¦   «         ¦  «         d S r   )r   rS   ÚassertFalseÚisatty)r    Útracers     r   Ú
testIsattyzTestTraceObjectOps.testIsattyš   s2   € ÝÔ%Ñ'Ô'ˆØ×Ò˜Ÿš™œÑ)Ô)Ð)Ð)Ð)r   c                 ó¦   — t          j        ¦   «         }|                     d¦  «         |                      d|                     ¦   «         ¦  «         d S r>   )r   rS   r   r(   r   rT   s     r   rB   z TestTraceObjectOps.testRoundTripž   sL   € Ý Ô*Ñ,Ô,ˆØ×Ò˜.Ñ)Ô)Ð)Ø×Ò˜¨×)9Ò)9Ñ);Ô);Ñ<Ô<Ð<Ð<Ð<r   N)r3   r4   r5   rV   rN   r\   rB   r   r   r   rP   rP   Š   sP   € € € € € ð	#ð 	#ð 	#ðð ð ð*ð *ð *ð=ð =ð =ð =ð =r   rP   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚWriterThreadc                 óœ   — d| _         t          | j        ¦  «        D ]#}t          j        t          |¦  «        ¦  «         Œ$| j        | _         d S ©Nr   )Ú
writeCountÚrangeÚBucketCountr   r   Ústr©r    Úeachs     r   ÚrunzWriterThread.run¥   sK   € ØˆŒÝ˜$Ô*Ñ+Ô+ð 	(ð 	(ˆDÝÔ�S ™YœYÑ'Ô'Ð'Ð'ØÔ*ˆŒˆˆr   c                 ó"   — | j         | j        k    S r   )rb   rd   r   s    r   ÚverifyWrittenzWriterThread.verifyWritten«   s   € ØŒ $Ô"2Ò2Ð2r   N)r3   r4   r5   rh   rj   r   r   r   r_   r_   ¤   s2   € € € € € ð+ð +ð +ð3ð 3ð 3ð 3ð 3r   r_   c                   ó4   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚTestMultipleThreadsWritingé2   é	   c                 óŒ  — t          ¦   «          | j        t          _        t          j        ¦   «          t          j        ¦   «          t          j        ¦   «          t          ¦   «          d„ t          | j	        ¦  «        D ¦   «         | _
        t          t          | j        ¦  «        ¦  «        | _        | j        D ]}d| j        |<   Œd S )Nc                 ó*   — g | ]}t          ¦   «         ‘ŒS r   ©r_   ©Ú.0rg   s     r   ú
<listcomp>z4TestMultipleThreadsWriting.setUp.<locals>.<listcomp>»   s   € ÐJÐJÐJ¨4�™œÐJÐJÐJr   r   )r   rd   r_   r   r   r   r)   r   rc   Ú
FullBucketÚthreadsÚlistÚbucketsrf   s     r   r!   z TestMultipleThreadsWriting.setUp´   s±   € Ý‰
Œ
ˆ
Ø#'Ô#3�Ô ÝÔÑÔÐÝŒÑÔÐÝÔÑÔÐÝÑÔÐØJÐJµ5¸¼Ñ3IÔ3IÐJÑJÔJˆŒÝ�E $Ô"2Ñ3Ô3Ñ4Ô4ˆŒØ”Lð 	#ð 	#ˆDØ!"ˆDŒL˜ÑÐð	#ð 	#r   c                 óR   — t          j        ¦   «          t          j        ¦   «          d S r   ©r   r   r   r   s    r   r$   z#TestMultipleThreadsWriting.tearDownÀ   ó&   € ÝÔÑÔÐÝÔÑÔÐÐÐr   c                 ór   — d}| j         D ],}|                      || j        ¦  «         || j        k    rd} nŒ-|S ©NTF©rx   ÚassertLessEqualru   ©r    ÚbucketsAreFullrg   s      r   ÚareBucketsFullz)TestMultipleThreadsWriting.areBucketsFullÄ   óT   € ØˆØ”Lð 	ð 	ˆDØ× Ò   t¤Ñ7Ô7Ð7Ø�t”Ò&Ð&Ø!&�Ø�ð 'ð Ðr   c                 ó  — 	 t          j        ¦   «         }|D ]n}t          |¦  «        }| j        |         }|                      |d¦  «         |dz   | j        |<   | j        |         | j        k    r|                      ¦   «         r d S ŒoŒ…©Né   éÿÿÿÿ©r   rH   Úintrx   ÚassertNotEqualru   r‚   ©r    Ú
readStringÚchÚintegerÚcounts        r   r   zTestMultipleThreadsWriting.readÍ   ó–   € ð		Ý#Ô0Ñ2Ô2ˆJØ ð ð �Ý˜b™'œ'�Øœ WÔ-�Ø×#Ò# E¨2Ñ.Ô.Ð.Ø(-°©	�”˜WÑ%Ø”< Ô(¨D¬OÒ;Ð;Ø×*Ò*Ñ,Ô,ð Ø˜˜øð		r   c                 óV  — | j         D ]}|                     ¦   «          Œ|                      ¦   «          | j         D ]}|                     ¦   «          Œ| j         D ])}|                      |                     ¦   «         ¦  «         Œ*|                      |                      ¦   «         ¦  «         d S r   )rv   Ústartr   Újoinr1   rj   r‚   rf   s     r   ÚtestThreadsz&TestMultipleThreadsWriting.testThreadsÙ   s¥   € Ø”Lð 	ð 	ˆDØ�JŠJ‰LŒLˆLˆLØ�	Š	‰ŒˆØ”Lð 	ð 	ˆDØ�IŠI‰KŒKˆKˆKØ”Lð 	2ð 	2ˆDØ�OŠO˜D×.Ò.Ñ0Ô0Ñ1Ô1Ð1Ð1Ø�Š˜×+Ò+Ñ-Ô-Ñ.Ô.Ð.Ð.Ð.r   N)
r3   r4   r5   ru   rd   r!   r$   r‚   r   r”   r   r   r   rl   rl   ¯   si   € € € € € à€JØ€Kð
#ð 
#ð 
#ðð ð ðð ð ð
ð 
ð 
ð/ð /ð /ð /ð /r   rl   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚTestHugeChunksi   c                 ó”   — t          ¦   «          t          j        ¦   «          t          j        ¦   «          t          j        ¦   «          d S r   r9   r   s    r   r!   zTestHugeChunks.setUpè   s=   € Ý‰
Œ
ˆ
ÝÔÑÔÐÝŒÑÔÐÝÔÑÔÐÐÐr   c                 ó    — d}t          |¦  «        | j        k    r3t          j        |¦  «         ||z  }t          |¦  «        | j        k    °1d S d S )Na   ***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
)ÚlenÚBiggestChunkr   r   )r    Údatas     r   ÚtestHugeChunkszTestHugeChunks.testHugeChunksî   sW   € Ø ˆÝ�$‰iŒi˜4Ô,Ò,Ð,ÝÔ˜TÑ"Ô"Ð"Ø�D‰LˆDõ �$‰iŒi˜4Ô,Ò,Ð,Ð,Ð,Ð,Ð,r   c                 óR   — t          j        ¦   «          t          j        ¦   «          d S r   rz   r   s    r   r$   zTestHugeChunks.tearDownõ   r{   r   N)r3   r4   r5   rš   r!   rœ   r$   r   r   r   r–   r–   ä   sF   € € € € € à€Lðð ð ðð ð ðð ð ð ð r   r–   c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚTraceWriteProcessc                 ó"   — d| _         || _        d S )Nr‡   )ÚexitCodeÚthreadCount)r    r¢   s     r   Ú__init__zTraceWriteProcess.__init__ÿ   s   € ØˆŒØ&ˆÔÐÐr   c                 óÔ   — t          j        d d                     t          | j        | j        ¦  «        d d dt           j        d d t          j        ¦   «         ¦	  «	        \  }}}}|| _        d S )Nz'python.exe "{}" /run_test_process {} {}r   )	Úwin32processÚCreateProcessÚformatÚ	this_filerd   r¢   ÚNORMAL_PRIORITY_CLASSÚSTARTUPINFOÚprocessHandle)r    Ú
procHandleÚthreadHandleÚprocIdÚthreadIds        r   r’   zTraceWriteProcess.start  ss   € Ý5AÔ5OØØ5×<Ò<Ý˜4Ô+¨TÔ-=ñô ð ØØÝÔ.ØØÝÔ$Ñ&Ô&ñ6
ô 6
Ñ2ˆ
�L &¨(ð (ˆÔÐÐr   c                 óŠ   — t          j        | j        t           j        ¦  «         t	          j        | j        ¦  «        | _        d S r   )Ú
win32eventÚWaitForSingleObjectr«   ÚINFINITEr¥   ÚGetExitCodeProcessr¡   r   s    r   r“   zTraceWriteProcess.join  s4   € ÝÔ& tÔ'9½:Ô;NÑOÔOÐOÝ$Ô7¸Ô8JÑKÔKˆŒˆˆr   c                 ó   — | j         dk    S ra   )r¡   r   s    r   rj   zTraceWriteProcess.verifyWritten  s   € ØŒ} Ò!Ð!r   N)r3   r4   r5   r£   r’   r“   rj   r   r   r   rŸ   rŸ   þ   sS   € € € € € ð'ð 'ð 'ð(ð (ð (ð Lð Lð Lð"ð "ð "ð "ð "r   rŸ   c                   ó:   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
ÚTestOutofProcessrn   rm   c                 ó  — t          ¦   «          t          j        ¦   «          | j        t          _        |                      ¦   «          t          t          | j        ¦  «        ¦  «        | _        | j        D ]}d| j        |<   Œd S ra   )	r   r   r   rd   rŸ   ÚsetUpWritersrw   rc   rx   rf   s     r   r!   zTestOutofProcess.setUp  s|   € Ý‰
Œ
ˆ
ÝÔÑÔÐØ(,Ô(8ÕÔ%Ø×ÒÑÔÐÝ�E $Ô"2Ñ3Ô3Ñ4Ô4ˆŒØ”Lð 	#ð 	#ˆDØ!"ˆDŒL˜ÑÐð	#ð 	#r   c                 ó,   — t          j        ¦   «          d S r   )r   r   r   s    r   r$   zTestOutofProcess.tearDown(  s   € ÝÔÑÔÐÐÐr   c                 ó  — g | _         t          | j        d¦  «        \  }}t          d¦  «        D ])}| j                              t          |¦  «        ¦  «         Œ*|r)| j                              t          |¦  «        ¦  «         d S d S )Né   )Ú	processesÚdivmodru   rc   ÚappendrŸ   )r    ÚquotÚ	remainderrg   s       r   r¹   zTestOutofProcess.setUpWriters+  s�   € ØˆŒå  ¤°!Ñ4Ô4‰ˆˆiÝ˜!‘H”Hð 	;ð 	;ˆDØŒN×!Ò!Õ"3°DÑ"9Ô"9Ñ:Ô:Ð:Ð:Øð 	@ØŒN×!Ò!Õ"3°IÑ">Ô">Ñ?Ô?Ð?Ð?Ð?ð	@ð 	@r   c                 ór   — d}| j         D ],}|                      || j        ¦  «         || j        k    rd} nŒ-|S r}   r~   r€   s      r   r‚   zTestOutofProcess.areBucketsFull4  rƒ   r   c                 ó  — 	 t          j        ¦   «         }|D ]n}t          |¦  «        }| j        |         }|                      |d¦  «         |dz   | j        |<   | j        |         | j        k    r|                      ¦   «         r d S ŒoŒ…r…   rˆ   r‹   s        r   r   zTestOutofProcess.read=  r�   r   c                 óV  — | j         D ]}|                     ¦   «          Œ|                      ¦   «          | j         D ]}|                     ¦   «          Œ| j         D ])}|                      |                     ¦   «         ¦  «         Œ*|                      |                      ¦   «         ¦  «         d S r   )r½   r’   r   r“   r1   rj   r‚   rf   s     r   ÚtestProcesseszTestOutofProcess.testProcessesI  s¥   € Ø”Nð 	ð 	ˆDØ�JŠJ‰LŒLˆLˆLØ�	Š	‰ŒˆØ”Nð 	ð 	ˆDØ�IŠI‰KŒKˆKˆKØ”Nð 	2ð 	2ˆDØ�OŠO˜D×.Ò.Ñ0Ô0Ñ1Ô1Ð1Ð1Ø�Š˜×+Ò+Ñ-Ô-Ñ.Ô.Ð.Ð.Ð.r   N)r3   r4   r5   rd   ru   r!   r$   r¹   r‚   r   rÅ   r   r   r   r·   r·     s{   € € € € € Ø€KØ€Jð#ð #ð #ðð ð ð@ð @ð @ðð ð ð
ð 
ð 
ð/ð /ð /ð /ð /r   r·   c                  ó¬  — t          t          j        d         ¦  «        t          _        t          t          j        d         ¦  «        } d„ t          | ¦  «        D ¦   «         }t          j        ¦   «          |D ]}|                     ¦   «          Œ|D ]}| 	                    ¦   «          Œ|D ]*}| 
                    ¦   «         st          j        d¦  «         Œ+d S )Né   é   c                 ó*   — g | ]}t          ¦   «         ‘ŒS r   rq   rr   s     r   rt   z%_RunAsTestProcess.<locals>.<listcomp>X  s   € Ð=Ð=Ð= $�|‰~Œ~Ð=Ð=Ð=r   r‡   )r‰   ÚsysÚargvr_   rd   rc   r   r)   r’   r“   rj   Úexit)r¢   rv   Úts      r   Ú_RunAsTestProcessrÎ   T  sÊ   € å"¥3¤8¨A¤;Ñ/Ô/…LÔÝ•c”h˜q”kÑ"Ô"€KØ=Ð=­%°Ñ*<Ô*<Ð=Ñ=Ô=€GÝÔÑÔÐØð ð ˆØ	�Š‰	Œ	ˆ	ˆ	Øð ð ˆØ	�Š‰ŒˆˆØð ð ˆØ�ŠÑ Ô ð 	ÝŒH�R‰LŒLˆLøðð r   r†   rÇ   z/run_test_process)r   N) r   rÊ   Ú	threadingr   r	   r   r3   rË   r¨   Ú__file__r   r   ÚTestCaser   r7   r<   rP   ÚThreadr_   rl   r–   r±   r¥   rŸ   r·   rÎ   rÌ   r   r)   r   r   Úmainr   r   r   ú<module>rÔ      së  ðØ 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø €€€à Ð Ð Ð àˆzÒÐØ”˜”€I€Ià€Ið;ð ;ð ;ð ;ð

ð 

ð 

ð;ð ;ð ;ð ;ð ;�(Ô#ñ ;ô ;ð ;ð|ð ð ð ð ˜Ô*ñ ô ð ðð ð ð ð Ð&ñ ô ð ð.=ð =ð =ð =ð =Ð+ñ =ô =ð =ð43ð 3ð 3ð 3ð 3�9Ô#ñ 3ô 3ð 3ð2/ð 2/ð 2/ð 2/ð 2/ Ô!2ñ 2/ô 2/ð 2/ðjð ð ð ð �XÔ&ñ ô ð ð, Ð Ð Ð Ø Ð Ð Ð ð"ð "ð "ð "ð "ñ "ô "ð "ð:6/ð 6/ð 6/ð 6/ð 6/�xÔ(ñ 6/ô 6/ð 6/ðrð ð ð ˆzÒÐØ
„x��!�„}Ð,Ð-Ò-Ð-ØÐÑÔÐØˆŒ�‰Œˆð €JÔÑÔÐØ€JÔÑÔÐØÐÑÔÐà€JÔÑÔÐØ€JÔÑÔÐØ€H„M�O„O€O€O€Oð Ðr   