[M3devel] draft new edition of thread test program

Mika Nystrom mika at async.caltech.edu
Wed Mar 16 16:40:27 CET 2011


Hi Randy,

No objections from me!

     Mika

"Coleburn, Randy" writes:
>--_004_D67F02DDC62F7545A6B84C285F88F3E603418BD6ADatlex02srv_
>Content-Type: multipart/alternative;
>	boundary="_000_D67F02DDC62F7545A6B84C285F88F3E603418BD6ADatlex02srv_"
>
>--_000_D67F02DDC62F7545A6B84C285F88F3E603418BD6ADatlex02srv_
>Content-Type: text/plain; charset="us-ascii"
>Content-Transfer-Encoding: quoted-printable
>
>Mika et al:
>
>I didn't want to check in a modified version of your program without everyo=
>ne agreeing my modifications are desired.
>
>Attached is my modified source code.  See if you think the modifications ar=
>e worthy of adding to the program, or feel free to adjust further, or just =
>tell me you don't want to add them.  If you want me to check in the modifie=
>d source, let me know.
>
>Basically, I've done 2 things:
>
>
>1.       Added pp.finish() in command line parsing so that if you put extra=
> arguments on command line that aren't parsed, you will get an error messag=
>e.  For example, I keep finding I sometimes separate the test names with sp=
>ace instead of comma, only to realize after program starts that the extra a=
>rguments were ignored.  (We could also change the specs to allow for comma =
>to be used as a test name separator.)
>
>
>2.       Added "-verbose" command line option.  If you choose this option, =
>extra information is printed, namely:  as threads are created, their "id" i=
>s printed and then for each iteration, the number of times each thread exec=
>uted its main loop is printed.  Also, if a thread doesn't make any progress=
> on an iteration, a notice that the thread may be starved or deadlocked is =
>printed.
>
>Unless you use -verbose, the program output is the same as your version, ex=
>cept that if you give extra command line arguments, the program will abort =
>and notify you.  For example,
>C:\cm3\Sandbox\m3-libs\m3core\tests\thread\NT386>threadtest.exe -tests read=
> lock
>ParseParams: parameter 4 =3D "lock" extraneous or misplaced.
>
>*** Couldnt parse cmd-line args.
>
>Now, running on Windows 7 (64-bit), I still get non-deterministic behavior =
>and some crashes.  For example:
>C:\cm3\Sandbox\m3-libs\m3core\tests\thread\NT386>threadtest.exe -verbose -t=
>ests read,lock
>Writing file...done
>Creating read threads...
>   read=3D0
>   read=3D1
>   read=3D2
>done
>Creating lock threads...
>   lock=3D21
>   lock=3D22
>   lock=3D23
>done
>running...printing oldest/median age/newest
>..........laziest thread is 0/0/0 (tests: read 0/0/0 lock 0/0/0)
>   read Thread 0 completed 1670 loops.
>   read Thread 1 completed 1692 loops.
>   read Thread 2 completed 1849 loops.
>   lock Thread 21 completed 11788253 loops.
>   lock Thread 22 completed 9448889 loops.
>   lock Thread 23 completed 9480853 loops.
>..........laziest thread is 0/0/0 (tests: read 0/0/0 lock 0/0/0)
>   read Thread 0 completed 2148 loops.
>   read Thread 1 completed 2113 loops.
>   read Thread 2 completed 2343 loops.
>   lock Thread 21 completed 13326765 loops.
>   lock Thread 22 completed 11327588 loops.
>   lock Thread 23 completed 12743882 loops.
>.......
>
>***
>*** runtime error:
>***    Attempt to reference an illegal memory location.
>
>***
>*** runtime error:
>***    Attempt to reference an illegal memory location.
>
>***
>*** runtime error:
>***    Attempt to reference an illegal memory location.
>***    pc =3D 0x126e37d =3D Move + 0x50 in ..\src\runtime\common\RTCollecto=
>r.m3
>***
>
>***
>*** runtime error:
>***    <*ASSERT*> failed.
>***    file "..\src\thread\WIN32\ThreadWin32.m3", line 841
>***
>
>***
>*** runtime error:
>***    <*ASSERT*> failed.
>***    file "..\src\thread\WIN32\ThreadWin32.m3", line 841
>***
>
>***
>*** runtime error:
>***    <*ASSERT*> failed.
>***    file "..\src\thread\WIN32\ThreadWin32.m3", line 841
>***
>
>I'll try on 32-bit XP soon and report.
>
>Regards,
>Randy Coleburn
>
>
>--_000_D67F02DDC62F7545A6B84C285F88F3E603418BD6ADatlex02srv_
>Content-Type: text/html; charset="us-ascii"
>Content-Transfer-Encoding: quoted-printable
>
><html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
>osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
>xmlns:x=3D"urn:schemas-microsoft-com:office:excel" xmlns:p=3D"urn:schemas-m=
>icrosoft-com:office:powerpoint" xmlns:a=3D"urn:schemas-microsoft-com:office=
>:access" xmlns:dt=3D"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s=3D"=
>uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs=3D"urn:schemas-microsof=
>t-com:rowset" xmlns:z=3D"#RowsetSchema" xmlns:b=3D"urn:schemas-microsoft-co=
>m:office:publisher" xmlns:ss=3D"urn:schemas-microsoft-com:office:spreadshee=
>t" xmlns:c=3D"urn:schemas-microsoft-com:office:component:spreadsheet" xmlns=
>:odc=3D"urn:schemas-microsoft-com:office:odc" xmlns:oa=3D"urn:schemas-micro=
>soft-com:office:activation" xmlns:html=3D"http://www.w3.org/TR/REC-html40" =
>xmlns:q=3D"http://schemas.xmlsoap.org/soap/envelope/" xmlns:rtc=3D"http://m=
>icrosoft.com/officenet/conferencing" xmlns:D=3D"DAV:" xmlns:Repl=3D"http://=
>schemas.microsoft.com/repl/" xmlns:mt=3D"http://schemas.microsoft.com/share=
>point/soap/meetings/" xmlns:x2=3D"http://schemas.microsoft.com/office/excel=
>/2003/xml" xmlns:ppda=3D"http://www.passport.com/NameSpace.xsd" xmlns:ois=
>=3D"http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir=3D"http://=
>schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds=3D"http://www.w3=
>.org/2000/09/xmldsig#" xmlns:dsp=3D"http://schemas.microsoft.com/sharepoint=
>/dsp" xmlns:udc=3D"http://schemas.microsoft.com/data/udc" xmlns:xsd=3D"http=
>://www.w3.org/2001/XMLSchema" xmlns:sub=3D"http://schemas.microsoft.com/sha=
>repoint/soap/2002/1/alerts/" xmlns:ec=3D"http://www.w3.org/2001/04/xmlenc#"=
> xmlns:sp=3D"http://schemas.microsoft.com/sharepoint/" xmlns:sps=3D"http://=
>schemas.microsoft.com/sharepoint/soap/" xmlns:xsi=3D"http://www.w3.org/2001=
>/XMLSchema-instance" xmlns:udcs=3D"http://schemas.microsoft.com/data/udc/so=
>ap" xmlns:udcxf=3D"http://schemas.microsoft.com/data/udc/xmlfile" xmlns:udc=
>p2p=3D"http://schemas.microsoft.com/data/udc/parttopart" xmlns:wf=3D"http:/=
>/schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:dsss=3D"http://sche=
>mas.microsoft.com/office/2006/digsig-setup" xmlns:dssi=3D"http://schemas.mi=
>crosoft.com/office/2006/digsig" xmlns:mdssi=3D"http://schemas.openxmlformat=
>s.org/package/2006/digital-signature" xmlns:mver=3D"http://schemas.openxmlf=
>ormats.org/markup-compatibility/2006" xmlns:m=3D"http://schemas.microsoft.c=
>om/office/2004/12/omml" xmlns:mrels=3D"http://schemas.openxmlformats.org/pa=
>ckage/2006/relationships" xmlns:spwp=3D"http://microsoft.com/sharepoint/web=
>partpages" xmlns:ex12t=3D"http://schemas.microsoft.com/exchange/services/20=
>06/types" xmlns:ex12m=3D"http://schemas.microsoft.com/exchange/services/200=
>6/messages" xmlns:pptsl=3D"http://schemas.microsoft.com/sharepoint/soap/Sli=
>deLibrary/" xmlns:spsl=3D"http://microsoft.com/webservices/SharePointPortal=
>Server/PublishedLinksService" xmlns:Z=3D"urn:schemas-microsoft-com:" xmlns:=
>st=3D"" xmlns=3D"http://www.w3.org/TR/REC-html40"><head><meta http-equi=
>v=3DContent-Type content=3D"text/html; charset=3Dus-ascii"><meta name=3DGen=
>erator content=3D"Microsoft Word 12 (filtered medium)"><style><!--
>/* Font Definitions */
>@font-face
>	{font-family:"Cambria Math";
>	panose-1:2 4 5 3 5 4 6 3 2 4;}
>@font-face
>	{font-family:Calibri;
>	panose-1:2 15 5 2 2 2 4 3 2 4;}
>/* Style Definitions */
>p.MsoNormal, li.MsoNormal, div.MsoNormal
>	{margin:0in;
>	margin-bottom:.0001pt;
>	font-size:11.0pt;
>	font-family:"Calibri","sans-serif";}
>a:link, span.MsoHyperlink
>	{mso-style-priority:99;
>	color:blue;
>	text-decoration:underline;}
>a:visited, span.MsoHyperlinkFollowed
>	{mso-style-priority:99;
>	color:purple;
>	text-decoration:underline;}
>p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
>	{mso-style-priority:34;
>	margin-top:0in;
>	margin-right:0in;
>	margin-bottom:0in;
>	margin-left:.5in;
>	margin-bottom:.0001pt;
>	font-size:11.0pt;
>	font-family:"Calibri","sans-serif";}
>span.EmailStyle17
>	{mso-style-type:personal-compose;
>	font-family:"Calibri","sans-serif";
>	color:windowtext;}
>.MsoChpDefault
>	{mso-style-type:export-only;}
>@page WordSection1
>	{size:8.5in 11.0in;
>	margin:1.0in 1.0in 1.0in 1.0in;}
>div.WordSection1
>	{page:WordSection1;}
>/* List Definitions */
>@list l0
>	{mso-list-id:384720956;
>	mso-list-type:hybrid;
>	mso-list-template-ids:982285054 67698703 67698713 67698715 67698703 676987=
>13 67698715 67698703 67698713 67698715;}
>@list l0:level1
>	{mso-level-tab-stop:none;
>	mso-level-number-position:left;
>	text-indent:-.25in;}
>ol
>	{margin-bottom:0in;}
>ul
>	{margin-bottom:0in;}
>--></style><!--[if gte mso 9]><xml>
><o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
></xml><![endif]--><!--[if gte mso 9]><xml>
><o:shapelayout v:ext=3D"edit">
><o:idmap v:ext=3D"edit" data=3D"1" />
></o:shapelayout></xml><![endif]--></head><body lang=3DEN-US link=3Dblue vli=
>nk=3Dpurple><div class=3DWordSection1><p class=3DMsoNormal>Mika et al:<o:p>=
></o:p></p><p class=3DMsoNormal><o:p> </o:p></p><p class=3DMsoNormal>I =
>didn’t want to check in a modified version of your program without ev=
>eryone agreeing my modifications are desired.<o:p></o:p></p><p class=3DMsoN=
>ormal><o:p> </o:p></p><p class=3DMsoNormal>Attached is my modified sou=
>rce code.  See if you think the modifications are worthy of adding to =
>the program, or feel free to adjust further, or just tell me you don’=
>t want to add them.  If you want me to check in the modified source, l=
>et me know.<o:p></o:p></p><p class=3DMsoNormal><o:p> </o:p></p><p clas=
>s=3DMsoNormal>Basically, I’ve done 2 things:<br><br><o:p></o:p></p><p=
> class=3DMsoListParagraph style=3D'text-indent:-.25in;mso-list:l0 level1 lf=
>o1'><![if !supportLists]><span style=3D'mso-list:Ignore'>1.<span style=3D'f=
>ont:7.0pt "Times New Roman"'>       </span></=
>span><![endif]>Added <b>pp.finish()</b> in command line parsing so that if =
>you put extra arguments on command line that aren’t parsed, you will =
>get an error message.  For example, I keep finding I sometimes separat=
>e the test names with space instead of comma, only to realize after program=
> starts that the extra arguments were ignored.  (We could also change =
>the specs to allow for comma to be used as a test name separator.)<br><br><=
>o:p></o:p></p><p class=3DMsoListParagraph style=3D'text-indent:-.25in;mso-l=
>ist:l0 level1 lfo1'><![if !supportLists]><span style=3D'mso-list:Ignore'>2.=
><span style=3D'font:7.0pt "Times New Roman"'>     =
>  </span></span><![endif]>Added “<b>–verbose</b>” co=
>mmand line option.  If you choose this option, extra information is pr=
>inted, namely:  as threads are created, their “id” is prin=
>ted and then for each iteration, the number of times each thread executed i=
>ts main loop is printed.  Also, if a thread doesn’t make any pro=
>gress on an iteration, a notice that the thread may be starved or deadlocke=
>d is printed.<o:p></o:p></p><p class=3DMsoNormal><o:p> </o:p></p><p cl=
>ass=3DMsoNormal>Unless you use –verbose, the program output is the sa=
>me as your version, except that if you give extra command line arguments, t=
>he program will abort and notify you.  For example,<o:p></o:p></p><p c=
>lass=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-family:"Cou=
>rier New"'>C:\cm3\Sandbox\m3-libs\m3core\tests\thread\NT386>threadtest.e=
>xe -tests read lock<o:p></o:p></span></p><p class=3DMsoNormal style=3D'marg=
>in-left:.5in'><span style=3D'font-family:"Courier New"'>ParseParams: parame=
>ter 4 =3D "lock" extraneous or misplaced.<o:p></o:p></span></p><p=
> class=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-family:"C=
>ourier New"'><o:p> </o:p></span></p><p class=3DMsoNormal style=3D'marg=
>in-left:.5in'><span style=3D'font-family:"Courier New"'>*** Couldnt parse c=
>md-line args.<o:p></o:p></span></p><p class=3DMsoNormal><o:p> </o:p></=
>p><p class=3DMsoNormal>Now, running on Windows 7 (64-bit), I still get non-=
>deterministic behavior and some crashes.  For example:<o:p></o:p></p><=
>p class=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-family:"=
>Courier New"'>C:\cm3\Sandbox\m3-libs\m3core\tests\thread\NT386>threadtes=
>t.exe -verbose -tests read,lock<o:p></o:p></span></p><p class=3DMsoNormal s=
>tyle=3D'margin-left:.5in'><span style=3D'font-family:"Courier New"'>Writing=
> file...done<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-left=
>:.5in'><span style=3D'font-family:"Courier New"'>Creating read threads...<o=
>:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-left:.5in'><span s=
>tyle=3D'font-family:"Courier New"'>   read=3D0<o:p></o:p></span><=
>/p><p class=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-fami=
>ly:"Courier New"'>   read=3D1<o:p></o:p></span></p><p class=3DMso=
>Normal style=3D'margin-left:.5in'><span style=3D'font-family:"Courier New"'=
>>   read=3D2<o:p></o:p></span></p><p class=3DMsoNormal style=3D'm=
>argin-left:.5in'><span style=3D'font-family:"Courier New"'>done<o:p></o:p><=
>/span></p><p class=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'fo=
>nt-family:"Courier New"'>Creating lock threads...<o:p></o:p></span></p><p c=
>lass=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-family:"Cou=
>rier New"'>   lock=3D21<o:p></o:p></span></p><p class=3DMsoNormal=
> style=3D'margin-left:.5in'><span style=3D'font-family:"Courier New"'>&nbsp=
>;  lock=3D22<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margin=
>-left:.5in'><span style=3D'font-family:"Courier New"'>   lock=3D2=
>3<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-left:.5in'><spa=
>n style=3D'font-family:"Courier New"'>done<o:p></o:p></span></p><p class=3D=
>MsoNormal style=3D'margin-left:.5in'><span style=3D'font-family:"Courier Ne=
>w"'>running...printing oldest/median age/newest<o:p></o:p></span></p><p cla=
>ss=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-family:"Couri=
>er New"'>..........laziest thread is 0/0/0 (tests: read 0/0/0 lock 0/0/0)<o=
>:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-left:.5in'><span s=
>tyle=3D'font-family:"Courier New"'>   read Thread 0 completed 167=
>0 loops.<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-left:.5i=
>n'><span style=3D'font-family:"Courier New"'>   read Thread 1 com=
>pleted 1692 loops.<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margi=
>n-left:.5in'><span style=3D'font-family:"Courier New"'>   read Th=
>read 2 completed 1849 loops.<o:p></o:p></span></p><p class=3DMsoNormal styl=
>e=3D'margin-left:.5in'><span style=3D'font-family:"Courier New"'> &nbs=
>p; lock Thread 21 completed 11788253 loops.<o:p></o:p></span></p><p class=
>=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-family:"Courier=
> New"'>   lock Thread 22 completed 9448889 loops.<o:p></o:p></spa=
>n></p><p class=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-f=
>amily:"Courier New"'>   lock Thread 23 completed 9480853 loops.<o=
>:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-left:.5in'><span s=
>tyle=3D'font-family:"Courier New"'>..........laziest thread is 0/0/0 (tests=
>: read 0/0/0 lock 0/0/0)<o:p></o:p></span></p><p class=3DMsoNormal style=3D=
>'margin-left:.5in'><span style=3D'font-family:"Courier New"'>   r=
>ead Thread 0 completed 2148 loops.<o:p></o:p></span></p><p class=3DMsoNorma=
>l style=3D'margin-left:.5in'><span style=3D'font-family:"Courier New"'>&nbs=
>p;  read Thread 1 completed 2113 loops.<o:p></o:p></span></p><p class=
>=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-family:"Courier=
> New"'>   read Thread 2 completed 2343 loops.<o:p></o:p></span></=
>p><p class=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-famil=
>y:"Courier New"'>   lock Thread 21 completed 13326765 loops.<o:p>=
></o:p></span></p><p class=3DMsoNormal style=3D'margin-left:.5in'><span styl=
>e=3D'font-family:"Courier New"'>   lock Thread 22 completed 11327=
>588 loops.<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-left:.=
>5in'><span style=3D'font-family:"Courier New"'>   lock Thread 23 =
>completed 12743882 loops.<o:p></o:p></span></p><p class=3DMsoNormal style=
>=3D'margin-left:.5in'><span style=3D'font-family:"Courier New"'>.......<o:p=
>></o:p></span></p><p class=3DMsoNormal style=3D'margin-left:.5in'><span sty=
>le=3D'font-family:"Courier New"'><o:p> </o:p></span></p><p class=3DMso=
>Normal style=3D'margin-left:.5in'><span style=3D'font-family:"Courier New"'=
>>***<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-left:.5in'><=
>span style=3D'font-family:"Courier New"'>*** runtime error:<o:p></o:p></spa=
>n></p><p class=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-f=
>amily:"Courier New"'>***    Attempt to reference an illegal =
>memory location.<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-=
>left:.5in'><span style=3D'font-family:"Courier New"'><o:p> </o:p></spa=
>n></p><p class=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-f=
>amily:"Courier New"'>***<o:p></o:p></span></p><p class=3DMsoNormal style=3D=
>'margin-left:.5in'><span style=3D'font-family:"Courier New"'>*** runtime er=
>ror:<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-left:.5in'><=
>span style=3D'font-family:"Courier New"'>***    Attempt to r=
>eference an illegal memory location.<o:p></o:p></span></p><p class=3DMsoNor=
>mal style=3D'margin-left:.5in'><span style=3D'font-family:"Courier New"'><o=
>:p> </o:p></span></p><p class=3DMsoNormal style=3D'margin-left:.5in'><=
>span style=3D'font-family:"Courier New"'>***<o:p></o:p></span></p><p class=
>=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-family:"Courier=
> New"'>*** runtime error:<o:p></o:p></span></p><p class=3DMsoNormal style=
>=3D'margin-left:.5in'><span style=3D'font-family:"Courier New"'>*** &n=
>bsp;  Attempt to reference an illegal memory location.<o:p></o:p></spa=
>n></p><p class=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-f=
>amily:"Courier New"'>***    pc =3D 0x126e37d =3D Move + 0x50=
> in ..\src\runtime\common\RTCollector.m3<o:p></o:p></span></p><p class=3DMs=
>oNormal style=3D'margin-left:.5in'><span style=3D'font-family:"Courier New"=
>'>***<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-left:.5in'>=
><span style=3D'font-family:"Courier New"'><o:p> </o:p></span></p><p cl=
>ass=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-family:"Cour=
>ier New"'>***<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-lef=
>t:.5in'><span style=3D'font-family:"Courier New"'>*** runtime error:<o:p></=
>o:p></span></p><p class=3DMsoNormal style=3D'margin-left:.5in'><span style=
>=3D'font-family:"Courier New"'>***    <*ASSERT*> faile=
>d.<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-left:.5in'><sp=
>an style=3D'font-family:"Courier New"'>***    file "..\=
>src\thread\WIN32\ThreadWin32.m3", line 841<o:p></o:p></span></p><p cla=
>ss=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-family:"Couri=
>er New"'>***<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-left=
>:.5in'><span style=3D'font-family:"Courier New"'><o:p> </o:p></span></=
>p><p class=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-famil=
>y:"Courier New"'>***<o:p></o:p></span></p><p class=3DMsoNormal style=3D'mar=
>gin-left:.5in'><span style=3D'font-family:"Courier New"'>*** runtime error:=
><o:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-left:.5in'><span=
> style=3D'font-family:"Courier New"'>***    <*ASSERT*>=
> failed.<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-left:.5i=
>n'><span style=3D'font-family:"Courier New"'>***    file &qu=
>ot;..\src\thread\WIN32\ThreadWin32.m3", line 841<o:p></o:p></span></p>=
><p class=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-family:=
>"Courier New"'>***<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margi=
>n-left:.5in'><span style=3D'font-family:"Courier New"'><o:p> </o:p></s=
>pan></p><p class=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font=
>-family:"Courier New"'>***<o:p></o:p></span></p><p class=3DMsoNormal style=
>=3D'margin-left:.5in'><span style=3D'font-family:"Courier New"'>*** runtime=
> error:<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-left:.5in=
>'><span style=3D'font-family:"Courier New"'>***    <*ASSE=
>RT*> failed.<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-l=
>eft:.5in'><span style=3D'font-family:"Courier New"'>***    f=
>ile "..\src\thread\WIN32\ThreadWin32.m3", line 841<o:p></o:p></sp=
>an></p><p class=3DMsoNormal style=3D'margin-left:.5in'><span style=3D'font-=
>family:"Courier New"'>***<o:p></o:p></span></p><p class=3DMsoNormal><o:p>&n=
>bsp;</o:p></p><p class=3DMsoNormal>I’ll try on 32-bit XP soon and rep=
>ort.<o:p></o:p></p><p class=3DMsoNormal><o:p> </o:p></p><p class=3DMso=
>Normal>Regards,<o:p></o:p></p><p class=3DMsoNormal>Randy Coleburn<o:p></o:p=
>></p><p class=3DMsoNormal><o:p> </o:p></p></div></body></html>=
>
>--_000_D67F02DDC62F7545A6B84C285F88F3E603418BD6ADatlex02srv_--
>
>--_004_D67F02DDC62F7545A6B84C285F88F3E603418BD6ADatlex02srv_
>Content-Type: application/octet-stream; name="Main.m3"
>Content-Description: Main.m3
>Content-Disposition: attachment; filename="Main.m3"; size=18584;
>	creation-date="Thu, 03 Mar 2011 01:28:22 GMT";
>	modification-date="Tue, 15 Mar 2011 01:30:19 GMT"
>Content-Transfer-Encoding: base64
>
>TU9EVUxFIE1haW47DQoNCigqIFRocmVhZGluZyBzdHJlc3MtdGVzdC4NCg0KICAgQ3JlYXRlIGEg
>bnVtYmVyIG9mIHRocmVhZHMuICBuIGlzIHNwZWNpZmllZCB2aWEgblBlciwgSXQgaXMNCiAgIHJl
>YXNvbmFibGUgZm9yIG5QZXIgdG8gYmUgZnJvbSAxIHRvIGEgZmV3IGh1bmRyZWQuICBuUGVyIGRl
>ZmF1bHRzDQogICB0byAzIGJ1dCBjYW4gYmUgc2V0IGJ5IHRoZSAtbiBjb21tYW5kLWxpbmUgc3dp
>dGNoLg0KDQogICBPdGhlciBjb21tYW5kLWxpbmUgc3dpdGNoZXM6DQoNCiAgIC13YWl0IDxzdGVw
>cz4NCiAgICAgIGhvdyBtYW55IG9uZS1zZWNvbmQgd2FpdHMgdG8gZXhlY3V0ZSBiZXR3ZWVuIHBy
>aW50cyAoZGVmYXVsdCAxMCkNCg0KICAgLWl0ZXJzIDxpdGVycz4NCiAgICAgIGhvdyBtYW55IGl0
>ZXJhdGlvbnMgdG8gcnVuIGZvciAoZGVmYXVsdCAxMCkNCg0KICAgLXRlc3RzIDx0ZXN0MT4sPHRl
>c3QyPiwuLi4NCiAgICAgIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRlc3RzIChkZWZhdWx0IHN0
>ZCB0eXBlcykNCiAgICAgIGNhbiBzcGVjaWZ5IGFsbCB3aXRoICJBTEwiIG9yIHN0YW5kYXJkIHRl
>c3RzIHdpdGggIlNURCINCiAgICAgIGFuZCBjYW4gc3VidHJhY3QgdGVzdHMgd2l0aCAtPG5hbWUg
>b2YgdGVzdD4NCiAgICAgIGV4YW1wbGVzLg0KICAgICAgICAgLXRlc3RzIHJlYWQsYWxsb2MsY3Jl
>YXQNCg0KICAgICAgICAgLXRlc3RzIEFMTCwtcmVhZA0KDQogICBUaGUgdGhyZWFkcyBjcmVhdGVk
>IGFyZSBvZiBmaXZlIHR5cGVzLiAgRWFjaCB0eXBlIG9mIHRocmVhZCBzdGFydHMNCiAgIGJ5IHNs
>ZWVwaW5nIGZvciBhIHdoaWxlLCB0byBnaXZlIHRoZSBvdGhlciB0aHJlYWRzIGEgY2hhbmNlIHRv
>IGJlDQogICBjcmVhdGVkLg0KDQogICBUaGUgdGhyZWFkcyBhcmUgb2YgdGhlIGZvbGxvd2luZyB0
>eXBlczoNCg0KICAgMS4gUmVhZGVyIC0tIGNvbnRpbnVvdXNseSByZWFkIHRoZSBjb250ZW50cyBv
>ZiB0aGUgZmlsZSAiaG9odW0iLA0KICAgICAgY3JlYXRlZCBkdXJpbmcgc3RhcnR1cCBpbiBDV0Qg
>YnkgdGhlIG1haW4gdGhyZWFkLg0KDQogICAyLiBGb3JrZXIgLS0gcmVwZWF0ZWRseSBmb3JrIGEg
>c3VicHJvY2VzcyB0aGF0IHNsZWVwcyBmb3Igb25lIHNlY29uZA0KICAgICAgdXNpbmcgUHJvY2Vz
>cy5DcmVhdGUuDQoNCiAgIDJiLiBGb3JrVG9vTXVjaCAtLSBmb3JrICJzbGVlcCAxMCIgYW5kIGRv
>IE5PVCBjYWxsIFByb2Nlc3MuV2FpdC4NCiAgICAgIE1heSBnZW5lcmF0ZSBsb3RzIG9mIHpvbWJp
>ZXMuDQoNCiAgIDMuIEFsbG9jYXRvciAtLSByZXBlYXRlZGx5IGFsbG9jYXRlIGhlYXAgbWVtb3J5
>IGFuZCBwZXJmb3JtDQogICAgICBtZWFuaW5nbGVzcyBvcGVyYXRpb25zIG9uIGl0Lg0KDQogICA0
>LiBDcmVhdG9yIC0tIHJlcGVhdGVkbHkgZm9yayBhIHNpbXBsZSBUaHJlYWQuVCB0aGF0IGRvZXMg
>bm90aGluZw0KICAgICAgYW5kIGV4aXRzLiAgV2FpdCBmb3IgaXQgdG8gZXhpdCBiZWZvcmUgZm9y
>a2luZyBhbm90aGVyLg0KDQogICA1LiBMb2NrZXIgLS0gcmVwZWF0ZWRseSBpbmNyZW1lbnQgb3Ig
>ZGVjcmVtZW50IGEgc2luZ2xlIGludGVnZXINCiAgICAgIHZhcmlhYmxlIGZyb20gd2l0aGluIGEg
>TVVURVgtcHJvdGVjdGVkIGNyaXRpY2FsIHNlY3Rpb24uDQoNCiAgIDYuIFJlYWRlck5vRXhjZXB0
>IC0tIGxpa2UgUmVhZGVyIGJ1dCB3aXRob3V0IFRSWS1FWENFUFQNCg0KICAgNy4gVHJ5RXhjZXB0
>IC0tIGEgbG9vcCB0aGF0IGNhdGNoZXMgYW4gZXhjZXB0aW9uIHRoYXQgbmV2ZXIgaGFwcGVucw0K
>DQogICBFYWNoIHRocmVhZCB3cml0ZXMgdGhlIHRoZSBpdCBwZXJmb3JtcyBhbiBvcGVyYXRpb24g
>dG8gdGhlIHRpbWVzMQ0KICAgYXJyYXkuICBUaGUgdGltZXMxIGFycmF5IGlzIGNvcGllZCBieSB0
>aGUgbWFpbiB0aHJlYWQsIGV2ZXJ5IDEwKw0KICAgc2Vjb25kcywgaW50byB0aGUgdGltZXMyIGFy
>cmF5LiAgTm8gbG9ja3MgYXJlIHVzZWQgdG8gc3luY2hyb25pemUNCiAgIHRoaXMgY29weWluZyBh
>Y3Rpdml0eSBhcyB3ZSBkb24ndCB3YW50IHRvIGludHJvZHVjZSB0b28gbWFueSBwb3NzaWJsZQ0K
>ICAgcGxhY2VzIHRoaW5ncyBjb3VsZCBkZWFkbG9jay4NCg0KICAgVGhlIG1haW4gdGhyZWFkIHRo
>ZW4gcHJpbnRzIG91dCBob3cgbG9uZyBhZ28gdGhlIHRocmVhZCB0aGF0IGhhcyBub3QNCiAgIHdy
>aXR0ZW4gdGltZXMxIGxhc3Qgd3JvdGUgdGhhdCBhcnJheS4NCg0KICAgTm90ZSB0aGF0IGFjdGlv
>bnMgaW4gdGhlIG1haW4gdGhyZWFkIG1heSBhbGxvY2F0ZSBtZW1vcnkgYW5kIHRoZXJlZm9yZQ0K
>ICAgYWNxdWlyZXMgbG9ja3MgaW4gVGhyZWFkUFRocmVhZC5tMywgdGhlIGZpbGUgd2hpY2ggdGhl
>IHByb2dyYW0gaXMNCiAgIG1haW5seSBpbnRlbmRlZCB0byB0ZXN0LiAgVGhlIGRlc2lnbiBpcyBi
>YXNlZCBvbiBhIGtub3dsZWRnZSBvZiB0aGUNCiAgIGludGVybmFsIGJlaGF2aW9yIG9mIFRocmVh
>ZFBUaHJlYWQubTMgYW5kIGFsc28gb24gYSBrbm93bGVkZ2Ugb2YgdGhlDQogICBtaXNiZWhhdmlv
>ciBvZiBleGlzdGluZywgaGlnaGx5IG11bHRpdGhyZWFkZWQgYXBwbGljYXRpb25zLg0KDQoNCiAg
>IEZBSVJORVNTIElTU1VFUw0KDQogICBFc3BlY2lhbGx5IHdpdGggdXNlciB0aHJlYWRzLCB0aGVy
>ZSBtYXkgYmUgZmFpcm5lc3MgcHJvYmxlbXMuICBUaGUNCiAgIHBvaW50IG9mIHRoZSBwcm9ncmFt
>IGlzIHRvIHRlc3QgdGhyZWFkaW5nIHNvIHRoZXJlIGlzIG9idmlvdXNseSBubw0KICAgYXR0ZW1w
>dCBhdCBlbmZvcmNpbmcgZmFpcm5lc3MuICBXaXRoIHVzZXIgdGhyZWFkcywgdGhpcyBtYXkgY2F1
>c2UNCiAgIGNlcnRhaW4gdHlwZXMgb2YgdGhyZWFkcyB0byBtb25vcG9saXplIHRoZSBjcHUuICAi
>U1RELC1sb2NrIiBtaWdodA0KICAgYmUgYWR2aXNlZCBmb3IgdGhlIGxpc3Qgb2YgdGVzdHMgZm9y
>IHVzZXIgdGhyZWFkcy4NCg0KICAgQXV0aG9yOiBNaWthIE55c3Ryb20gPG1pa2FAYWx1bS5taXQu
>ZWR1Pg0KDQogICBDb3B5cmlnaHQgKGMpIDIwMTEgR2VuZXJhdGlvbiBDYXBpdGFsIEx0ZC4gIEFs
>bCByaWdodHMgcmVzZXJ2ZWQuDQoNCiAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnks
>IGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUNCiAgIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBm
>b3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQ0KICAgZ3JhbnRlZCwgcHJv
>dmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsDQogICBj
>b3BpZXMuIEdlbmVyYXRpb24gQ2FwaXRhbCBMdGQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucw0K
>ICAgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3Nl
>LiBJdCBpcw0KICAgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3
>YXJyYW50eS4NCg0KICopDQogKCogTWFyY2ggMTQsIDIwMTEsIFIuQy5Db2xlYnVybjoNCiAgICAg
>ICBBZGRlZCAtdmVyYm9zZSBvcHRpb24gYW5kIHRocmVhZCBsb29wIGl0ZXJhdGlvbiBjb3VudGlu
>ZyB3aXRoIGV4cGxpY2l0IG5vdGlmaWNhdGlvbiBvZiBzdGFydmVkL2RlYWRsb2NrZWQgdGhyZWFk
>cy4NCiAgICAgICBBZGRlZCBwcC5maW5pc2goKSB0byB0ZWxsIGlmIGFsbCBjb21tYW5kIGxpbmUg
>cGFyYW1ldGVycyB3ZXJlIHByb2Nlc3NlZC4NCiAqKQ0KDQoNCklNUE9SVCBUaHJlYWQsIFJkLCBG
>aWxlUmQsIFdyLCBGaWxlV3IsIFByb2Nlc3M7DQpJTVBPUlQgVGltZTsNCklNUE9SVCBJbnRBcnJh
>eVNvcnQ7DQpJTVBPUlQgQXRvbSwgQXRvbUxpc3Q7DQpJTVBPUlQgT1NFcnJvcjsNCklNUE9SVCBQ
>YXJzZVBhcmFtcywgUGFyYW1zOw0KSU1QT1JUIFN0ZGlvOw0KSU1QT1JUIFRleHQ7DQpJTVBPUlQg
>Rm10Ow0KDQo8KiBGQVRBTCBUaHJlYWQuQWxlcnRlZCwgV3IuRmFpbHVyZSAqPg0KDQpDT05TVCBJ
>bml0UGF1c2UgPSAxLjBkMDsNCg0KVFlQRSBDbG9zdXJlID0gVGhyZWFkLkNsb3N1cmUgT0JKRUNU
>IGlkIDogQ0FSRElOQUwgRU5EOw0KDQpQUk9DRURVUkUgTWFrZVJlYWRlclRocmVhZChpIDogQ0FS
>RElOQUwpID0NCiAgQkVHSU4NCiAgICBFVkFMIFRocmVhZC5Gb3JrKE5FVyhDbG9zdXJlLCBpZCA6
>PSBpLCBhcHBseSA6PSBSQXBwbHkpKQ0KICBFTkQgTWFrZVJlYWRlclRocmVhZDsNCg0KUFJPQ0VE
>VVJFIE1ha2VSZWFkZXJOb0V4Y2VwdFRocmVhZChpIDogQ0FSRElOQUwpID0NCiAgQkVHSU4NCiAg
>ICBFVkFMIFRocmVhZC5Gb3JrKE5FVyhDbG9zdXJlLCBpZCA6PSBpLCBhcHBseSA6PSBOQXBwbHkp
>KQ0KICBFTkQgTWFrZVJlYWRlck5vRXhjZXB0VGhyZWFkOw0KDQpQUk9DRURVUkUgTWFrZVRyeUV4
>Y2VwdFRocmVhZChpIDogQ0FSRElOQUwpID0NCiAgQkVHSU4NCiAgICBFVkFMIFRocmVhZC5Gb3Jr
>KE5FVyhDbG9zdXJlLCBpZCA6PSBpLCBhcHBseSA6PSBUQXBwbHkpKQ0KICBFTkQgTWFrZVRyeUV4
>Y2VwdFRocmVhZDsNCg0KUFJPQ0VEVVJFIE1ha2VGb3JrZXJUaHJlYWQoaSA6IENBUkRJTkFMKSA9
>DQogIEJFR0lODQogICAgRVZBTCBUaHJlYWQuRm9yayhORVcoQ2xvc3VyZSwgaWQgOj0gaSwgYXBw
>bHkgOj0gRkFwcGx5KSkNCiAgRU5EIE1ha2VGb3JrZXJUaHJlYWQ7DQoNClBST0NFRFVSRSBNYWtl
>Rm9ya1Rvb011Y2hUaHJlYWQoaSA6IENBUkRJTkFMKSA9DQogIEJFR0lODQogICAgRVZBTCBUaHJl
>YWQuRm9yayhORVcoQ2xvc3VyZSwgaWQgOj0gaSwgYXBwbHkgOj0gTUFwcGx5KSkNCiAgRU5EIE1h
>a2VGb3JrVG9vTXVjaFRocmVhZDsNCg0KUFJPQ0VEVVJFIE1ha2VBbGxvY2F0b3JUaHJlYWQoaSA6
>IENBUkRJTkFMKSA9DQogIEJFR0lODQogICAgRVZBTCBUaHJlYWQuRm9yayhORVcoQ2xvc3VyZSwg
>aWQgOj0gaSwgYXBwbHkgOj0gQUFwcGx5KSkNCiAgRU5EIE1ha2VBbGxvY2F0b3JUaHJlYWQ7DQoN
>ClBST0NFRFVSRSBNYWtlQ3JlYXRvclRocmVhZChpIDogQ0FSRElOQUwpID0NCiAgQkVHSU4NCiAg
>ICBFVkFMIFRocmVhZC5Gb3JrKE5FVyhDbG9zdXJlLCBpZCA6PSBpLCBhcHBseSA6PSBDQXBwbHkp
>KQ0KICBFTkQgTWFrZUNyZWF0b3JUaHJlYWQ7DQoNClBST0NFRFVSRSBNYWtlTG9ja2VyVGhyZWFk
>KGkgOiBDQVJESU5BTCkgPQ0KICBCRUdJTg0KICAgIEVWQUwgVGhyZWFkLkZvcmsoTkVXKENsb3N1
>cmUsIGlkIDo9IGksIGFwcGx5IDo9IExBcHBseSkpDQogIEVORCBNYWtlTG9ja2VyVGhyZWFkOw0K
>DQpUWVBFDQogIFRocmVhZE1ha2VyID0gUFJPQ0VEVVJFKGkgOiBDQVJESU5BTCk7DQogIE5hbWVk
>ID0gUkVDT1JEIG1ha2VyIDogVGhyZWFkTWFrZXI7IG5hbWVkIDogVEVYVCBFTkQ7DQoNCkNPTlNU
>DQogIE1ha2VycyA9IEFSUkFZIE9GIE5hbWVkIHsNCiAgICBOYW1lZCB7IE1ha2VSZWFkZXJUaHJl
>YWQsICAgICAgICAgInJlYWQiICB9LA0KICAgIE5hbWVkIHsgTWFrZVJlYWRlck5vRXhjZXB0VGhy
>ZWFkLCAibnhyZWFkIiAgfSwNCiAgICBOYW1lZCB7IE1ha2VUcnlFeGNlcHRUaHJlYWQsICAgICAg
>InRyeWV4Y2VwdCIgIH0sDQogICAgTmFtZWQgeyBNYWtlRm9ya2VyVGhyZWFkLCAgICAgICAgICJm
>b3JrIiAgfSwNCiAgICBOYW1lZCB7IE1ha2VGb3JrVG9vTXVjaFRocmVhZCwgICAgImZvcmt0b29t
>dWNoIiAgfSwNCiAgICBOYW1lZCB7IE1ha2VBbGxvY2F0b3JUaHJlYWQsICAgICAgImFsbG9jIiB9
>LA0KICAgIE5hbWVkIHsgTWFrZUNyZWF0b3JUaHJlYWQsICAgICAgICAiY3JlYXQiIH0sDQogICAg
>TmFtZWQgeyBNYWtlTG9ja2VyVGhyZWFkLCAgICAgICAgICJsb2NrIiAgfQ0KICB9Ow0KDQpDT05T
>VCBTdGRUZXN0QXJyID0gQVJSQVkgT0YgVEVYVCB7ICJyZWFkIiwgImZvcmsiLCAiYWxsb2MiLCAi
>Y3JlYXRlIiwgImxvY2siIH07DQooKiBkZXNpZ25hdGVkICJzdGFuZGFyZCIgdGVzdHMgKikNCg0K
>VFlQRSBNID0gWyBGSVJTVChNYWtlcnMpLi5MQVNUKE1ha2VycykgXTsNCg0KKCoqKioqKioqKioq
>KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
>KiopDQoNClBST0NFRFVSRSBSQXBwbHkoY2wgOiBDbG9zdXJlKSA6IFJFRkFOWSA9DQogIEJFR0lO
>DQogICAgY291bnRzMVtjbC5pZF0gOj0gMEw7DQogICAgY291bnRzM1tjbC5pZF0gOj0gMEw7DQog
>ICAgVGhyZWFkLlBhdXNlKEluaXRQYXVzZSk7DQogICAgTE9PUA0KICAgICAgVFJZDQogICAgICAg
>IFdJVEggcmQgPSBGaWxlUmQuT3BlbihGaWxlbmFtZSkgRE8NCiAgICAgICAgICBUUlkNCiAgICAg
>ICAgICAgIExPT1ANCiAgICAgICAgICAgICAgPCpVTlVTRUQqPlZBUiBjIDo9IFJkLkdldENoYXIo
>cmQpOyBCRUdJTiAgRU5EDQogICAgICAgICAgICBFTkQNCiAgICAgICAgICBFWENFUFQNCiAgICAg
>ICAgICAgIFJkLkVuZE9mRmlsZSA9PiBSZC5DbG9zZShyZCkNCiAgICAgICAgICBFTkQ7DQogICAg
>ICAgICAgdGltZXMxW2NsLmlkXTo9IEZMT09SKFRpbWUuTm93KCkpDQogICAgICAgIEVORA0KICAg
>ICAgRVhDRVBUDQogICAgICAgIE9TRXJyb3IuRSh4KSA9PiBFcnJvcigiUkFwcGx5OiBPU0Vycm9y
>LkU6ICIgJiBGbXRBdG9tTGlzdCh4KSkNCiAgICAgIHwNCiAgICAgICAgUmQuRmFpbHVyZSh4KSA9
>PiBFcnJvcigiUkFwcGx5OiBSZC5GYWlsdXJlOiAiICYgRm10QXRvbUxpc3QoeCkpDQogICAgICBF
>TkQ7DQogICAgICBjb3VudHMxW2NsLmlkXSA6PSBjb3VudHMxW2NsLmlkXSArIDFMOyAoKiB3b3Vs
>ZCBiZSBuaWNlIHRvIHVzZSBJTkMgaGVyZSwgYnV0IHRoZXJlIGlzIGEgQ0cgYnVnIG9uIE5UMzg2
>IHdpdGggSU5DIG9mIExPTkdJTlQgKikNCiAgICBFTkQNCiAgRU5EIFJBcHBseTsNCg0KUFJPQ0VE
>VVJFIE5BcHBseShjbCA6IENsb3N1cmUpIDogUkVGQU5ZID0NCiAgPCpGQVRBTCBPU0Vycm9yLkUs
>IFJkLkZhaWx1cmUsIFJkLkVuZE9mRmlsZSo+DQogIEJFR0lODQogICAgY291bnRzMVtjbC5pZF0g
>Oj0gMEw7DQogICAgY291bnRzM1tjbC5pZF0gOj0gMEw7DQogICAgVGhyZWFkLlBhdXNlKEluaXRQ
>YXVzZSk7DQogICAgTE9PUA0KICAgICAgV0lUSCByZCA9IEZpbGVSZC5PcGVuKEZpbGVuYW1lKSBE
>Tw0KICAgICAgICBXSElMRSBOT1QgUmQuRU9GKHJkKSBETw0KICAgICAgICAgIDwqVU5VU0VEKj5W
>QVIgYyA6PSBSZC5HZXRDaGFyKHJkKTsgQkVHSU4gIEVORA0KICAgICAgICBFTkQ7DQogICAgICAg
>IFJkLkNsb3NlKHJkKTsNCiAgICAgICAgdGltZXMxW2NsLmlkXTo9IEZMT09SKFRpbWUuTm93KCkp
>DQogICAgICBFTkQ7DQogICAgICBjb3VudHMxW2NsLmlkXSA6PSBjb3VudHMxW2NsLmlkXSArIDFM
>OyAoKiB3b3VsZCBiZSBuaWNlIHRvIHVzZSBJTkMgaGVyZSwgYnV0IHRoZXJlIGlzIGEgQ0cgYnVn
>IG9uIE5UMzg2IHdpdGggSU5DIG9mIExPTkdJTlQgKikNCiAgICBFTkQNCiAgRU5EIE5BcHBseTsN
>Cg0KRVhDRVBUSU9OIFg7DQoNClBST0NFRFVSRSBUQXBwbHkoY2wgOiBDbG9zdXJlKSA6IFJFRkFO
>WSA9DQogIEJFR0lODQogICAgY291bnRzMVtjbC5pZF0gOj0gMEw7DQogICAgY291bnRzM1tjbC5p
>ZF0gOj0gMEw7DQogICAgVGhyZWFkLlBhdXNlKEluaXRQYXVzZSk7DQogICAgTE9PUA0KICAgICAg
>VFJZDQogICAgICAgIFdJVEggbm93ID0gVGltZS5Ob3coKSBETw0KICAgICAgICAgIHRpbWVzMVtj
>bC5pZF06PSBGTE9PUihub3cpOw0KICAgICAgICAgIElGIG5vdyA8IDAuMGQwIFRIRU4gUkFJU0Ug
>WCBFTkQNCiAgICAgICAgRU5EDQogICAgICBFWENFUFQgWCA9PiA8KkFTU0VSVCBGQUxTRSo+DQog
>ICAgICBFTkQ7DQogICAgICBjb3VudHMxW2NsLmlkXSA6PSBjb3VudHMxW2NsLmlkXSArIDFMOyAo
>KiB3b3VsZCBiZSBuaWNlIHRvIHVzZSBJTkMgaGVyZSwgYnV0IHRoZXJlIGlzIGEgQ0cgYnVnIG9u
>IE5UMzg2IHdpdGggSU5DIG9mIExPTkdJTlQgKikNCiAgICBFTkQNCiAgRU5EIFRBcHBseTsNCg0K
>UFJPQ0VEVVJFIEZBcHBseShjbCA6IENsb3N1cmUpIDogUkVGQU5ZID0NCiAgQkVHSU4NCiAgICBj
>b3VudHMxW2NsLmlkXSA6PSAwTDsNCiAgICBjb3VudHMzW2NsLmlkXSA6PSAwTDsNCiAgICBUaHJl
>YWQuUGF1c2UoSW5pdFBhdXNlKTsNCiAgICBMT09QDQogICAgICBUUlkNCiAgICAgICAgV0lUSCBw
>cm9jID0gUHJvY2Vzcy5DcmVhdGUoUGFyYW1zLkdldCgwKSwNCiAgICAgICAgICAgICAgICAgICAg
>ICAgICAgICAgICAgICAgQVJSQVkgT0YgVEVYVCB7ICItc2xlZXAiIH0pIERPDQogICAgICAgICAg
>RVZBTCBQcm9jZXNzLldhaXQocHJvYyk7IHRpbWVzMVtjbC5pZF0gOj0gRkxPT1IoVGltZS5Ob3co
>KSkNCiAgICAgICAgRU5EDQogICAgICBFWENFUFQNCiAgICAgICAgT1NFcnJvci5FKHgpID0+IEVy
>cm9yKCJGQXBwbHk6IE9TRXJyb3IuRTogIiAmIEZtdEF0b21MaXN0KHgpKQ0KICAgICAgRU5EOw0K
>ICAgICAgY291bnRzMVtjbC5pZF0gOj0gY291bnRzMVtjbC5pZF0gKyAxTDsgKCogd291bGQgYmUg
>bmljZSB0byB1c2UgSU5DIGhlcmUsIGJ1dCB0aGVyZSBpcyBhIENHIGJ1ZyBvbiBOVDM4NiB3aXRo
>IElOQyBvZiBMT05HSU5UICopDQogICAgRU5EDQogIEVORCBGQXBwbHk7DQoNClBST0NFRFVSRSBN
>QXBwbHkoY2wgOiBDbG9zdXJlKSA6IFJFRkFOWSA9DQogIEJFR0lODQogICAgY291bnRzMVtjbC5p
>ZF0gOj0gMEw7DQogICAgY291bnRzM1tjbC5pZF0gOj0gMEw7DQogICAgVGhyZWFkLlBhdXNlKElu
>aXRQYXVzZSk7DQogICAgTE9PUA0KICAgICAgVFJZDQogICAgICAgIDwqTk9XQVJOKj5XSVRIIHBy
>b2MgPSBQcm9jZXNzLkNyZWF0ZShQYXJhbXMuR2V0KDApLA0KICAgICAgICAgICAgICAgICAgICAg
>ICAgICAgICAgICAgICBBUlJBWSBPRiBURVhUIHsgIi1zbGVlcDEwIiB9KSBETw0KICAgICAgICAg
>ICgqIG5vIFByb2Nlc3MuV2FpdCAqKQ0KICAgICAgICAgIHRpbWVzMVtjbC5pZF0gOj0gRkxPT1Io
>VGltZS5Ob3coKSk7DQogICAgICAgICAgVGhyZWFkLlBhdXNlKDEuMGQwKQ0KICAgICAgICBFTkQN
>CiAgICAgIEVYQ0VQVA0KICAgICAgICBPU0Vycm9yLkUoeCkgPT4gRXJyb3IoIkZBcHBseTogT1NF
>cnJvci5FOiAiICYgRm10QXRvbUxpc3QoeCkpDQogICAgICBFTkQ7DQogICAgICBjb3VudHMxW2Ns
>LmlkXSA6PSBjb3VudHMxW2NsLmlkXSArIDFMOyAoKiB3b3VsZCBiZSBuaWNlIHRvIHVzZSBJTkMg
>aGVyZSwgYnV0IHRoZXJlIGlzIGEgQ0cgYnVnIG9uIE5UMzg2IHdpdGggSU5DIG9mIExPTkdJTlQg
>KikNCiAgICBFTkQNCiAgRU5EIE1BcHBseTsNCg0KUFJPQ0VEVVJFIEFBcHBseShjbCA6IENsb3N1
>cmUpIDogUkVGQU5ZID0NCiAgQkVHSU4NCiAgICBjb3VudHMxW2NsLmlkXSA6PSAwTDsNCiAgICBj
>b3VudHMzW2NsLmlkXSA6PSAwTDsNCiAgICBUaHJlYWQuUGF1c2UoSW5pdFBhdXNlKTsNCiAgICBM
>T09QDQogICAgICBWQVINCiAgICAgICAgYXJyIDo9IE5FVyhSRUYgQVJSQVkgT0YgSU5URUdFUiwg
>MTAyNSk7DQogICAgICBCRUdJTg0KICAgICAgICBGT1IgaSA6PSBGSVJTVChhcnJeKSsxIFRPIExB
>U1QoYXJyXikgRE8NCiAgICAgICAgICBhcnJbaV0gOj0gYXJyW2ldIC0gYXJyW2ktMV0NCiAgICAg
>ICAgRU5EOyB0aW1lczFbY2wuaWRdIDo9IEZMT09SKFRpbWUuTm93KCkpDQogICAgICBFTkQ7DQog
>ICAgICBjb3VudHMxW2NsLmlkXSA6PSBjb3VudHMxW2NsLmlkXSArIDFMOyAoKiB3b3VsZCBiZSBu
>aWNlIHRvIHVzZSBJTkMgaGVyZSwgYnV0IHRoZXJlIGlzIGEgQ0cgYnVnIG9uIE5UMzg2IHdpdGgg
>SU5DIG9mIExPTkdJTlQgKikNCiAgICBFTkQNCiAgRU5EIEFBcHBseTsNCg0KUFJPQ0VEVVJFIENB
>cHBseShjbCA6IENsb3N1cmUpIDogUkVGQU5ZID0NCiAgQkVHSU4NCiAgICBjb3VudHMxW2NsLmlk
>XSA6PSAwTDsNCiAgICBjb3VudHMzW2NsLmlkXSA6PSAwTDsNCiAgICBUaHJlYWQuUGF1c2UoSW5p
>dFBhdXNlKTsNCiAgICBMT09QDQogICAgICBWQVINCiAgICAgICAgdCA6PSBUaHJlYWQuRm9yayhO
>RVcoVGhyZWFkLkNsb3N1cmUsIGFwcGx5IDo9IFRocmVhZE5PUCkpOw0KICAgICAgQkVHSU4NCiAg
>ICAgICAgRVZBTCBUaHJlYWQuSm9pbih0KTsgdGltZXMxW2NsLmlkXSA6PSBGTE9PUihUaW1lLk5v
>dygpKQ0KICAgICAgRU5EOw0KICAgICAgY291bnRzMVtjbC5pZF0gOj0gY291bnRzMVtjbC5pZF0g
>KyAxTDsgKCogd291bGQgYmUgbmljZSB0byB1c2UgSU5DIGhlcmUsIGJ1dCB0aGVyZSBpcyBhIENH
>IGJ1ZyBvbiBOVDM4NiB3aXRoIElOQyBvZiBMT05HSU5UICopDQogICAgRU5EDQogIEVORCBDQXBw
>bHk7DQoNClBST0NFRFVSRSBUaHJlYWROT1AoPCpVTlVTRUQqPmNsIDogVGhyZWFkLkNsb3N1cmUp
>IDogUkVGQU5ZID0gQkVHSU4gUkVUVVJOIE5JTCBFTkQgVGhyZWFkTk9QOw0KDQpWQVIgbXUgICAg
>IDo9IE5FVyhNVVRFWCk7DQpWQVIgc2hhcmVkIDo9IDA7DQoNClBST0NFRFVSRSBMQXBwbHkoY2wg
>OiBDbG9zdXJlKSA6IFJFRkFOWSA9DQogIEJFR0lODQogICAgY291bnRzMVtjbC5pZF0gOj0gMEw7
>DQogICAgY291bnRzM1tjbC5pZF0gOj0gMEw7DQogICAgVGhyZWFkLlBhdXNlKEluaXRQYXVzZSk7
>DQogICAgTE9PUA0KICAgICAgTE9DSyBtdSBETw0KICAgICAgICBDQVNFIGNsLmlkIE1PRCAyIE9G
>DQogICAgICAgICAgMSA9PiBJTkMoc2hhcmVkKQ0KICAgICAgICB8DQogICAgICAgICAgMCA9PiBE
>RUMoc2hhcmVkKQ0KICAgICAgICBFTFNFDQogICAgICAgICAgPCpBU1NFUlQgRkFMU0UqPg0KICAg
>ICAgICBFTkQNCiAgICAgIEVORDsgdGltZXMxW2NsLmlkXSA6PSBGTE9PUihUaW1lLk5vdygpKTsN
>CiAgICAgIGNvdW50czFbY2wuaWRdIDo9IGNvdW50czFbY2wuaWRdICsgMUw7ICgqIHdvdWxkIGJl
>IG5pY2UgdG8gdXNlIElOQyBoZXJlLCBidXQgdGhlcmUgaXMgYSBDRyBidWcgb24gTlQzODYgd2l0
>aCBJTkMgb2YgTE9OR0lOVCAqKQ0KICAgIEVORA0KICBFTkQgTEFwcGx5Ow0KDQoNCkNPTlNUIEZp
>bGVuYW1lID0gImhvaHVtIjsNCg0KUFJPQ0VEVVJFIFdyaXRlQUZpbGUoKSA9DQogIDwqRkFUQUwg
>V3IuRmFpbHVyZSwgT1NFcnJvci5FKj4gICgqIGVycm9ycyBkdXJpbmcgc2V0dXAgYXJlIGp1c3Qg
>ZmF0YWwgKikNCiAgQkVHSU4NCiAgICBXSVRIIHdyID0gRmlsZVdyLk9wZW4oRmlsZW5hbWUpIERP
>DQogICAgICBGT1IgaSA6PSAxIFRPIDI1NiBETw0KICAgICAgICBGT1IgaiA6PSAxIFRPIGkgRE8N
>CiAgICAgICAgICBXci5QdXRDaGFyKHdyLCBWQUwoT1JEKCdBJykgKyBpIE1PRCAyNSwgQ0hBUikp
>DQogICAgICAgIEVORDsNCiAgICAgICAgV3IuUHV0VGV4dCh3ciwgV3IuRU9MKQ0KICAgICAgRU5E
>Ow0KICAgICAgV3IuQ2xvc2Uod3IpDQogICAgRU5EDQogIEVORCBXcml0ZUFGaWxlOw0KDQpQUk9D
>RURVUkUgUHV0SW50KGMgOiBJTlRFR0VSKSA9DQogIEJFR0lODQogICAgSUYgYyA8IDAgVEhFTg0K
>ICAgICAgV3IuUHV0Q2hhcihTdGRpby5zdGRvdXQsJy0nKTsNCiAgICAgIGMgOj0gLWM7DQogICAg
>RU5EOw0KICAgIElGIGMgPiAxMCBUSEVODQogICAgICBQdXRJbnQoYyBESVYgMTApDQogICAgRU5E
>Ow0KICAgIFdyLlB1dENoYXIoU3RkaW8uc3Rkb3V0LFZBTChjIE1PRCAxMCArIE9SRCgnMCcpLENI
>QVIpKQ0KICBFTkQgUHV0SW50Ow0KDQpQUk9DRURVUkUgUHV0U3RhdHMoVkFSIGEgOiBBUlJBWSBP
>RiBJTlRFR0VSKSA9DQogICgqIG5vdyBpcyBnbG9iYWwgaW4gTWFpbi5tMyAqKQ0KICBCRUdJTg0K
>ICAgIEludEFycmF5U29ydC5Tb3J0KGEpOw0KDQogICAgKCogdGhlIHJlc3VsdCBpc24ndCBxdWl0
>ZSByaWdodCBpZiBOVU1CRVIoYSkgaXMgZXZlbiAqKQ0KICAgIFdJVEggbWluID0gYVtGSVJTVChh
>KV0sDQogICAgICAgICBtYXggPSBhW0xBU1QoYSldLA0KICAgICAgICAgbWVkID0gYVtMQVNUKGEp
>IERJViAyXSBETw0KICAgICAgUHV0SW50KG5vdy1taW4pOw0KICAgICAgV3IuUHV0Q2hhcihTdGRp
>by5zdGRvdXQsJy8nKTsNCiAgICAgIFB1dEludChub3ctbWVkKTsNCiAgICAgIFdyLlB1dENoYXIo
>U3RkaW8uc3Rkb3V0LCcvJyk7DQogICAgICBQdXRJbnQobm93LW1heCkNCiAgICBFTkQNCiAgRU5E
>IFB1dFN0YXRzOw0KDQpQUk9DRURVUkUgRm10QXRvbUxpc3QoZXJyIDogQXRvbUxpc3QuVCkgOiBU
>RVhUID0NCiAgVkFSDQogICAgbXNnIDo9ICIiOw0KICAgIHAgOj0gZXJyOw0KICBCRUdJTg0KICAg
>IFdISUxFIHAgIyBOSUwgRE8NCiAgICAgIG1zZyA6PSBtc2cgJiAiICIgJiBBdG9tLlRvVGV4dChw
>LmhlYWQpOyBwIDo9IHAudGFpbA0KICAgIEVORDsNCiAgICBSRVRVUk4gbXNnDQogIEVORCBGbXRB
>dG9tTGlzdDsNCg0KUFJPQ0VEVVJFIEVycm9yKG1zZyA6IFRFWFQpID0NCiAgQkVHSU4NCiAgICBX
>ci5QdXRUZXh0KFN0ZGlvLnN0ZG91dCwiRVJST1IgIiAmIG1zZyAmIFdyLkVPTCkNCiAgRU5EIEVy
>cm9yOw0KDQpQUk9DRURVUkUgQWRkVGVzdCh0ZXN0IDogVEVYVCkgPQ0KICBCRUdJTg0KICAgIElG
>ICAgIFRleHQuRXF1YWwoIkFMTCIsdGVzdCkgVEhFTg0KICAgICAgc2V0cyA6PSBTRVQgT0YgTSB7
>IEZJUlNUKE0pIC4uIExBU1QoTSkgfTsNCiAgICAgIFJFVFVSTg0KICAgIEVMU0lGIFRleHQuRXF1
>YWwoIlNURCIsdGVzdCkgVEhFTg0KICAgICAgc2V0cyA6PSBTdGRUZXN0czsNCiAgICAgIFJFVFVS
>Tg0KICAgIEVMU0lGIFRleHQuRXF1YWwoIlBPU0lYIix0ZXN0KSBUSEVODQogICAgICAoKiBlcXVh
>bCB0byBTVEQsLWxvY2sgKikNCiAgICAgIHNldHMgOj0gU3RkVGVzdHM7DQogICAgICB0ZXN0IDo9
>ICItbG9jayINCiAgICBFTkQ7DQoNCiAgICBGT1IgaSA6PSBGSVJTVChNYWtlcnMpIFRPIExBU1Qo
>TWFrZXJzKSBETw0KICAgICAgSUYgICAgVGV4dC5FcXVhbChNYWtlcnNbaV0ubmFtZWQsdGVzdCkg
>VEhFTg0KICAgICAgICBzZXRzIDo9IHNldHMgKyBTRVQgT0YgTSB7IGkgfTsgUkVUVVJODQogICAg
>ICBFTFNJRiBUZXh0LkVxdWFsKCItIiAmIE1ha2Vyc1tpXS5uYW1lZCx0ZXN0KSBUSEVODQogICAg
>ICAgIHNldHMgOj0gc2V0cyAtIFNFVCBPRiBNIHsgaSB9OyBSRVRVUk4NCiAgICAgIEVORA0KICAg
>IEVORDsNCg0KICAgICgqIG5vIG1hdGNoICopDQoNCiAgICBWQVINCiAgICAgIG1zZyA6PSAiTm8g
>dGVzdCBuYW1lZCBcIiIgJiB0ZXN0ICYgIlwiLCBrbm93biB0ZXN0czoiOw0KICAgIEJFR0lODQog
>ICAgICBGT1IgaSA6PSBGSVJTVChNYWtlcnMpIFRPIExBU1QoTWFrZXJzKSBETw0KICAgICAgICBt
>c2cgOj0gbXNnICYgIiAiICYgTWFrZXJzW2ldLm5hbWVkDQogICAgICBFTkQ7DQogICAgICBQcm9j
>ZXNzLkNyYXNoKG1zZykNCiAgICBFTkQNCiAgRU5EIEFkZFRlc3Q7DQoNCkNPTlNUDQogIERlZmF1
>bHROUGVyID0gMzsNClZBUg0KICBuUGVyIDo9IERlZmF1bHROUGVyOyAoKiBtdXN0IGJlIG9kZCAq
>KQ0KDQogIG4gOiBDQVJESU5BTDsNCg0KICB0aW1lczEsIHRpbWVzMiwgdGltZXMzIDogUkVGIEFS
>UkFZIE9GIElOVEVHRVI7DQogICgqIHRpbWVzMSA6IGlucHV0IGFycmF5DQogICAgIHRpbWVzMiA6
>IGEgc3RhYmxlIGNvcHkgb2YgdGltZXMxDQoNCiAgICAgdGltZXMzIDogYSBjb3B5IG9mIHRob3Nl
>IGJpdHMgb2YgdGltZXMxIHRoYXQgYXJlIGFjdGl2ZQ0KICAqKQ0KICBjb3VudHMxLCBjb3VudHMy
>LCBjb3VudHMzIDogUkVGIEFSUkFZIE9GIExPTkdJTlQ7DQogICgqIGNvdW50czEgOiBpbnB1dA0K
>ICAgICBjb3VudHMyIDogc3RhYmxlIGNvcHkgb2YgY291bnRzMQ0KICAgICBjb3VudHMzIDogY29w
>eSBvZiBwcmlvciBjb3VudHMyIHZhbHVlcyB1c2VkIGZvciBjb21wYXJpc29uDQogICopDQogIGFj
>dGl2ZTogUkVGIEFSUkFZIE9GIEJPT0xFQU47ICgqIHRlbGxzIGlmIGEgcGFydGljdWxhciB0aHJl
>YWQgaWQgaXMgYW4gYWN0aXZlIHRocmVhZCAqKQ0KICB0aHJlYWRNOiBSRUYgQVJSQVkgT0YgTTsg
>KCogZm9yIGFjdGl2ZSB0aHJlYWRzLCB0ZWxscyB0aGUgdHlwZSBvZiB0aHJlYWQsIGkuZS4sIGl0
>cyBNICopDQogIG5vdyA6IElOVEVHRVI7DQogIHNldHMgOiBTRVQgT0YgTTsNCg0KICBwcCA6PSBO
>RVcoUGFyc2VQYXJhbXMuVCkuaW5pdChTdGRpby5zdGRlcnIpOw0KDQogIGl0ZXJzIDo9IDEwOw0K
>ICB3YWl0ICA6PSAxMDsNCiAgU3RkVGVzdHMgOj0gU0VUIE9GIE0geyB9Ow0KICB2ZXJib3NlOiBC
>T09MRUFOIDo9IEZBTFNFOw0KDQpCRUdJTg0KICBGT1IgaSA6PSBGSVJTVChTdGRUZXN0QXJyKSBU
>TyBMQVNUKFN0ZFRlc3RBcnIpIERPDQogICAgRk9SIGogOj0gRklSU1QoTSkgVE8gTEFTVChNKSBE
>Tw0KICAgICAgSUYgVGV4dC5FcXVhbChTdGRUZXN0QXJyW2ldLE1ha2Vyc1tqXS5uYW1lZCkgVEhF
>Tg0KICAgICAgICBTdGRUZXN0cyA6PSBTdGRUZXN0cyArIFNFVCBPRiBNIHsgaiB9DQogICAgICBF
>TkQNCiAgICBFTkQNCiAgRU5EOw0KDQogIHNldHMgOj0gU3RkVGVzdHM7DQoNCiAgVFJZDQogICAg
>SUYgcHAua2V5d29yZFByZXNlbnQoIi1zbGVlcDEwIikgVEhFTg0KICAgICAgKCogc2xlZXAgYW5k
>IGV4aXQgKikNCiAgICAgIFRocmVhZC5QYXVzZSgxMC4wZDApOw0KICAgICAgUHJvY2Vzcy5FeGl0
>KDApDQogICAgRU5EOw0KICAgIElGIHBwLmtleXdvcmRQcmVzZW50KCItc2xlZXAiKSBUSEVODQog
>ICAgICAoKiBzbGVlcCBhbmQgZXhpdCAqKQ0KICAgICAgVGhyZWFkLlBhdXNlKDEuMGQwKTsNCiAg
>ICAgIFByb2Nlc3MuRXhpdCgwKQ0KICAgIEVORDsNCg0KICAgIElGIHBwLmtleXdvcmRQcmVzZW50
>KCItbiIpICAgICBUSEVOIG5QZXIgOj0gcHAuZ2V0TmV4dEludCgpIEVORDsNCiAgICBJRiBwcC5r
>ZXl3b3JkUHJlc2VudCgiLXdhaXQiKSAgVEhFTiB3YWl0IDo9IHBwLmdldE5leHRJbnQoKSBFTkQ7
>DQogICAgSUYgcHAua2V5d29yZFByZXNlbnQoIi1pdGVycyIpIFRIRU4gaXRlcnMgOj0gcHAuZ2V0
>TmV4dEludCgpIEVORDsNCiAgICBJRiBwcC5rZXl3b3JkUHJlc2VudCgiLXZlcmJvc2UiKSBUSEVO
>IHZlcmJvc2UgOj0gVFJVRTsgRU5EOw0KDQogICAgSUYgcHAua2V5d29yZFByZXNlbnQoIi10ZXN0
>cyIpIFRIRU4NCiAgICAgIFZBUg0KICAgICAgICBzIDo9IDA7DQogICAgICBCRUdJTg0KICAgICAg
>ICBzZXRzIDo9IFNFVCBPRiBNIHt9IDsNCg0KICAgICAgICBXSVRIIHRlc3RzID0gcHAuZ2V0TmV4
>dCgpLA0KICAgICAgICAgICAgIGwgICAgID0gVGV4dC5MZW5ndGgodGVzdHMpIERPDQogICAgICAg
>ICAgRk9SIGkgOj0gMCBUTyBsLTEgRE8NCiAgICAgICAgICAgIElGIGkgPSBsLTEgVEhFTg0KICAg
>ICAgICAgICAgICBBZGRUZXN0KFRleHQuU3ViKHRlc3RzLHMsbC1zKSkNCiAgICAgICAgICAgIEVM
>U0lGIFRleHQuR2V0Q2hhcih0ZXN0cyxpKSA9ICcsJyBUSEVODQogICAgICAgICAgICAgIEFkZFRl
>c3QoVGV4dC5TdWIodGVzdHMscyxpLXMpKTsNCiAgICAgICAgICAgICAgcyA6PSBpKzENCiAgICAg
>ICAgICAgIEVORA0KICAgICAgICAgIEVORA0KICAgICAgICBFTkQNCiAgICAgIEVORDsNCiAgICAg
>IHBwLmZpbmlzaCgpOw0KICAgIEVORA0KDQogIEVYQ0VQVA0KICAgIFBhcnNlUGFyYW1zLkVycm9y
>ID0+IFByb2Nlc3MuQ3Jhc2goIkNvdWxkbnQgcGFyc2UgY21kLWxpbmUgYXJncy4iKQ0KICBFTkQ7
>DQoNCiAgbiA6PSBOVU1CRVIoTWFrZXJzKSAqIG5QZXI7DQogIHRpbWVzMSA6PSBORVcoUkVGIEFS
>UkFZIE9GIElOVEVHRVIsIG4pOw0KICB0aW1lczIgOj0gTkVXKFJFRiBBUlJBWSBPRiBJTlRFR0VS
>LCBuKTsNCiAgdGltZXMzIDo9IE5FVyhSRUYgQVJSQVkgT0YgSU5URUdFUiwgbik7DQogIGNvdW50
>czEgOj0gTkVXKFJFRiBBUlJBWSBPRiBMT05HSU5ULCBuKTsNCiAgY291bnRzMiA6PSBORVcoUkVG
>IEFSUkFZIE9GIExPTkdJTlQsIG4pOw0KICBjb3VudHMzIDo9IE5FVyhSRUYgQVJSQVkgT0YgTE9O
>R0lOVCwgbik7DQogIGFjdGl2ZSA6PSBORVcoUkVGIEFSUkFZIE9GIEJPT0xFQU4sIG4pOw0KICB0
>aHJlYWRNIDo9IE5FVyhSRUYgQVJSQVkgT0YgTSwgbik7DQoNCiAgRk9SIGkgOj0gMCBUTyBuLTEN
>CiAgRE8NCiAgICAgYWN0aXZlW2ldIDo9IEZBTFNFOw0KICBFTkQ7ICgqIGZvciAqKQ0KDQogIFdy
>LlB1dFRleHQoU3RkaW8uc3Rkb3V0LCJXcml0aW5nIGZpbGUuLi4iKTsgV3IuRmx1c2goU3RkaW8u
>c3Rkb3V0KTsNCiAgV3JpdGVBRmlsZSgpOw0KICBXci5QdXRUZXh0KFN0ZGlvLnN0ZG91dCwiZG9u
>ZSIgJiBXci5FT0wpOyBXci5GbHVzaChTdGRpby5zdGRvdXQpOw0KDQogIEZPUiBpIDo9IEZJUlNU
>KE0pIFRPIExBU1QoTSkgRE8NCiAgICBJRiBpIElOIHNldHMgVEhFTg0KICAgICAgV3IuUHV0VGV4
>dChTdGRpby5zdGRvdXQsIkNyZWF0aW5nICIgJiBNYWtlcnNbaV0ubmFtZWQgJiAiIHRocmVhZHMu
>Li4iKTsNCiAgICAgIFdyLkZsdXNoKFN0ZGlvLnN0ZG91dCk7DQogICAgICBGT1IgaiA6PSAwIFRP
>IG5QZXIgLSAxIERPDQogICAgICAgIFdJVEggaWQgPSBpICogblBlciArIGoNCiAgICAgICAgRE8N
>CiAgICAgICAgICAgTWFrZXJzW2ldLm1ha2VyKGlkKTsNCiAgICAgICAgICAgYWN0aXZlW2lkXSA6
>PSBUUlVFOw0KICAgICAgICAgICB0aHJlYWRNW2lkXSA6PSBpOw0KICAgICAgICAgICBJRiB2ZXJi
>b3NlDQogICAgICAgICAgIFRIRU4NCiAgICAgICAgICAgICAgV3IuUHV0VGV4dChTdGRpby5zdGRv
>dXQsIFdyLkVPTCk7IFdyLlB1dFRleHQoU3RkaW8uc3Rkb3V0LCAiICAgIiAmIE1ha2Vyc1tpXS5u
>YW1lZCAmICI9Iik7IFB1dEludChpZCk7DQogICAgICAgICAgIEVORDsgKCogaWYgKikNCiAgICAg
>ICAgRU5EOyAoKiB3aXRoICopDQogICAgICBFTkQ7DQogICAgICBJRiB2ZXJib3NlDQogICAgICBU
>SEVODQogICAgICAgICBXci5QdXRUZXh0KFN0ZGlvLnN0ZG91dCwgV3IuRU9MKTsNCiAgICAgIEVO
>RDsgKCogaWYgKikNCiAgICAgIFdyLlB1dFRleHQoU3RkaW8uc3Rkb3V0LCAiZG9uZSIgJiBXci5F
>T0wpOyAgV3IuRmx1c2goU3RkaW8uc3Rkb3V0KQ0KICAgIEVORA0KICBFTkQ7DQoNCiAgV3IuUHV0
>VGV4dChTdGRpby5zdGRvdXQsInJ1bm5pbmcuLi5wcmludGluZyBvbGRlc3QvbWVkaWFuIGFnZS9u
>ZXdlc3QiICYgV3IuRU9MKTsNCiAgV3IuRmx1c2goU3RkaW8uc3Rkb3V0KTsNCiAgRk9SIGkgOj0g
>MSBUTyBpdGVycyBETw0KICAgIEZPUiBqIDo9IDEgVE8gd2FpdCBETw0KICAgICAgVGhyZWFkLlBh
>dXNlKDEuMGQwKTsNCiAgICAgIFdyLlB1dFRleHQoU3RkaW8uc3Rkb3V0LCIuIik7DQogICAgICBX
>ci5GbHVzaChTdGRpby5zdGRvdXQpDQogICAgRU5EOw0KICAgIHRpbWVzMl4gOj0gdGltZXMxXjsN
>CiAgICBub3cgIDo9IEZMT09SKFRpbWUuTm93KCkpOw0KICAgIGNvdW50czJeIDo9IGNvdW50czFe
>Ow0KICAgIFZBUg0KICAgICAgcCA6PSAwOw0KICAgIEJFR0lODQogICAgICBGT1IgaSA6PSBGSVJT
>VChNKSBUTyBMQVNUKE0pIERPDQogICAgICAgIElGIGkgSU4gc2V0cyBUSEVODQogICAgICAgICAg
>U1VCQVJSQVkodGltZXMzXixwLG5QZXIpIDo9IFNVQkFSUkFZKHRpbWVzMl4saSpuUGVyLG5QZXIp
>Ow0KICAgICAgICAgIElOQyhwLG5QZXIpDQogICAgICAgIEVORA0KICAgICAgRU5EOw0KICAgICAg
>V3IuUHV0VGV4dChTdGRpby5zdGRvdXQsImxhemllc3QgdGhyZWFkIGlzICIpOw0KICAgICAgUHV0
>U3RhdHMoU1VCQVJSQVkodGltZXMzXiwwLHApKTsNCiAgICAgIFdyLlB1dFRleHQoU3RkaW8uc3Rk
>b3V0LCIgKHRlc3RzOiIpOw0KDQogICAgICBGT1IgaSA6PSBGSVJTVChNKSBUTyBMQVNUKE0pIERP
>DQogICAgICAgIElGIGkgSU4gc2V0cyBUSEVODQogICAgICAgICAgV3IuUHV0VGV4dChTdGRpby5z
>dGRvdXQsIiAiKTsNCiAgICAgICAgICBXci5QdXRUZXh0KFN0ZGlvLnN0ZG91dCxNYWtlcnNbaV0u
>bmFtZWQpOw0KICAgICAgICAgIFdyLlB1dFRleHQoU3RkaW8uc3Rkb3V0LCIgIik7DQogICAgICAg
>ICAgUHV0U3RhdHMoU1VCQVJSQVkodGltZXMyXixpKm5QZXIsblBlcikpDQogICAgICAgIEVORA0K
>ICAgICAgRU5EOw0KICAgICAgV3IuUHV0VGV4dChTdGRpby5zdGRvdXQsIikiKTtXci5QdXRUZXh0
>KFN0ZGlvLnN0ZG91dCxXci5FT0wpOw0KICAgICAgV3IuRmx1c2goU3RkaW8uc3Rkb3V0KTsNCg0K
>ICAgICAgRk9SIGkgOj0gMCBUTyBuLTENCiAgICAgIERPDQogICAgICAgICBJRiBhY3RpdmVbaV0g
>QU5EIChjb3VudHMyW2ldID0gY291bnRzM1tpXSkNCiAgICAgICAgIFRIRU4NCiAgICAgICAgICAg
>IFdyLlB1dFRleHQoU3RkaW8uc3Rkb3V0LCBNYWtlcnNbdGhyZWFkTVtpXV0ubmFtZWQgJiAiIFRo
>cmVhZCAiICYgRm10LkludChpKSAmICIgYXBwZWFycyBzdGFydmVkIG9yIGRlYWRsb2NrZWQgISEh
>IiAmIFdyLkVPTCk7DQogICAgICAgICBFTFNJRiB2ZXJib3NlIEFORCBhY3RpdmVbaV0gQU5EIChj
>b3VudHMyW2ldID4gY291bnRzM1tpXSkNCiAgICAgICAgIFRIRU4NCiAgICAgICAgICAgIFdyLlB1
>dFRleHQoU3RkaW8uc3Rkb3V0LCAiICAgIiAmIE1ha2Vyc1t0aHJlYWRNW2ldXS5uYW1lZCAmICIg
>VGhyZWFkICIgJiBGbXQuSW50KGkpICYgIiBjb21wbGV0ZWQgIiAmIEZtdC5Mb25nSW50KGNvdW50
>czJbaV0gLSBjb3VudHMzW2ldKSAmICIgbG9vcHMuIiAmIFdyLkVPTCk7DQogICAgICAgICBFTkQ7
>ICgqIGlmICopDQogICAgICBFTkQ7ICgqIGZvciAqKQ0KICAgICAgY291bnRzM14gOj0gY291bnRz
>Ml47DQogICAgICBXci5GbHVzaChTdGRpby5zdGRvdXQpOw0KICAgIEVORA0KICBFTkQ7DQogIFdy
>LlB1dFRleHQoU3RkaW8uc3Rkb3V0LCAiQWxsIHRlc3RzIGNvbXBsZXRlLiAgQ29uZ3JhdHVsYXRp
>b25zLiIpOw0KICBXci5QdXRUZXh0KFN0ZGlvLnN0ZG91dCwgV3IuRU9MKTsNCkVORCBNYWluLg0K
>DQo=
>
>--_004_D67F02DDC62F7545A6B84C285F88F3E603418BD6ADatlex02srv_--



More information about the M3devel mailing list