--------------090809010004090208020509
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Bill Kelly wrote:
>
>> These are the times I get running the other solutions,
>> 10 runs of 1000 points each.  Each run, every solution is
>> fed the exact same point data.
>
> Auuughhh!!
>
> Sorry for another self-reply........ :-/
>
> The benchmark script I attached to the earlier post did not,
> in fact, pass the same point data to each solution per run.
> (Maybe that'll teach me to make last minute changes without
> verifying...)
>
> The benchmark script at
> http://tastyspleen.net/~billk/ruby/quiz/157-smallest-circle/benchmark/
> now does correctly pass the same coordinate data to each script
> per run.
>
> . . .
>
> I had hoped by averaging multiple runs (10) - each run having
> different point data - that the rankings would have been pretty
> stable.
>
> However, JUSTIN and LIONEL still tend to trade places on
> different invocations:

Here's a 157_benchmark_2.rb which benchs on several point distributions 
(square, disk, circle and gaussian) and my code adapted to the benchmark 
(the convex hull was done outside of encircle so it wasn't active for 
the benchmark).

Lionel

--------------090809010004090208020509
Content-Type: text/plain;
 name57_benchmark_2.rb"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename57_benchmark_2.rb"

DQpyZXF1aXJlICdiZW5jaG1hcmsnDQoNCm1vZHVsZSBQSElMSVBQIDsgZXZhbChGaWxlLnJl
YWQoJzE1N19waGlsaXBwX2hvZm1hbm4ucmInKSkgIDsgIGVuZA0KbW9kdWxlIExJT05FTCA7
ICBldmFsKEZpbGUucmVhZCgnMTU3X2xpb25lbF9ib3V0b24ucmInKSkgICAgOyAgZW5kDQpt
b2R1bGUgVEhPTUFTIDsgIGV2YWwoRmlsZS5yZWFkKCcxNTdfdGhvbWFzX21sLnJiJykpICAg
ICAgICA7ICBlbmQNCm1vZHVsZSBET1VHIDsgICAgZXZhbChGaWxlLnJlYWQoJzE1N19kb3Vn
X3NlaWZlcnQucmInKSkgICAgIDsgIGVuZA0KbW9kdWxlIEZSQU5LIDsgICBldmFsKEZpbGUu
cmVhZCgnMTU3X2ZyYW5rX2Zpc2NoZXIucmInKSkgICAgOyAgZW5kDQptb2R1bGUgSlVTVElO
IDsgIGV2YWwoRmlsZS5yZWFkKCcxNTdfanVzdGluX2V0aGllci5yYicpKSAgICA7ICBlbmQN
Cm1vZHVsZSBCSUxMIDsgICAgZXZhbChGaWxlLnJlYWQoJzE1N19iaWxsX2tlbGx5LnJiJykp
ICAgICAgIDsgIGVuZA0KDQpuYW1lc3BhY2VzID0gWw0KIyBUSE9NQVMsICAgIyBwb2ludHMu
Y29tYmluYXRpb24gPz8NCiAgRlJBTkssDQogIEpVU1RJTiwNCiAgTElPTkVMLA0KICBET1VH
LA0KICBQSElMSVBQLA0KICBCSUxMIF0NCg0KIyBTb21lIGZvbGtzIGltcGxlbWVudGVkIGdl
bmVyYXRlX3NhbXBsZXMgZGlmZmVyZW50bHksDQojIGJ1dCB3ZSB3YW50IHRvIHJ1biBhbGwg
c29sdXRpb25zIG9uIHRoZSBzYW1lIGRhdGFzZXQuDQojIFdlJ2xsIHVzZSBhbiBpbXBsZW1l
bnRhdGlvbiBlcXVpdmFsZW50IHRvIHRoYXQNCiMgcHJvdmlkZWQgYnkgdGhlIHF1aXogYXV0
aG9yOiBbcmFuZCwgcmFuZF0NCg0KbnVtX3J1bnMgPSAxMA0KbnVtX3NhbXBsZXMgPSAxMDAw
DQoNCmRlZiBnZW5lcmF0ZV9zYW1wbGVzKG1vZCwgY29vcmRzKQ0KICBjb29yZHMubWFwIHt8
eHl8IG1vZDo6UG9pbnQubmV3KCp4eSl9DQplbmQNCg0KZGVmIHByZXBhcmVfcG9pbnRzZXRz
KG5hbWVzcGFjZXMsIHJhd19jb29yZHMsIG51bV9ydW5zKQ0KICBwb2ludHNldHMgPSB7fQ0K
ICBuYW1lc3BhY2VzLmVhY2ggZG8gfG1vZHwNCiAgICBwb2ludHNldHNbbW9kLm5hbWVdID0g
KDAuLi5udW1fcnVucykubWFwIGRvIHxpfA0KICAgICAgZ2VuZXJhdGVfc2FtcGxlcyhtb2Qs
IHJhd19jb29yZHNbaV0pDQogICAgZW5kDQogIGVuZA0KICBwb2ludHNldHMNCmVuZA0KDQoj
IFByZWdlbmVyYXRlIGRpZmZlcmVudCBwb2ludCBkYXRhIGZvciBzdWNjZXNzaXZlIHJ1bnMu
DQojIChBbGwgc29sdXRpb25zIGFyZSBmZWQgdGhlIHNhbWUgcG9pbnQgZGF0YSBwZXIgcnVu
LikNCg0KZGlzdHJpYnV0aW9ucyA9IHsNCiAgIlJhbmRvbSBvbiBzcXVhcmUiID0+DQogICAg
KDEuLm51bV9ydW5zKS5tYXAgeygxLi5udW1fc2FtcGxlcykubWFwIHtbcmFuZCwgcmFuZF19
fSwNCiAgIlJhbmRvbSBvbiBkaXNrIiA9Pg0KICAgICgxLi5udW1fcnVucykubWFwIHsoMS4u
bnVtX3NhbXBsZXMpLm1hcCB7DQogICAgICAgIHJvID0gcmFuZCgwLjUpDQogICAgICAgIHRo
ZXRhID0gTWF0aDo6UEkgKiAyICogcmFuZA0KICAgICAgICBbIHJvICogTWF0aDo6Y29zKHRo
ZXRhKSwgcm8gKiBNYXRoOjpzaW4odGhldGEpXQ0KICAgICAgfQ0KICAgIH0sDQogICJSYW5k
b20gb24gY2lyY2xlIiA9Pg0KICAgICgxLi5udW1fcnVucykubWFwIHsoMS4ubnVtX3NhbXBs
ZXMpLm1hcCB7DQogICAgICAgIHRoZXRhID0gTWF0aDo6UEkgKiAyICogcmFuZA0KICAgICAg
ICBbIE1hdGg6OmNvcyh0aGV0YSksIE1hdGg6OnNpbih0aGV0YSldDQogICAgICB9DQogICAg
fSwNCiAgIjJEIEdhdXNzaWFuIiA9Pg0KICAgICgxLi5udW1fcnVucykubWFwIHsoMS4ubnVt
X3NhbXBsZXMpLm1hcCB7DQoJcm8gPSBNYXRoOjpzcXJ0KC0yICogTWF0aDo6bG9nKHJhbmQp
KQ0KICAgICAgICB0aGV0YSA9IE1hdGg6OlBJICogMiAqIHJhbmQNCiAgICAgICAgWyBNYXRo
Ojpjb3ModGhldGEpLCBNYXRoOjpzaW4odGhldGEpXQ0KICAgICAgfQ0KICAgIH0sDQp9DQoN
CmxhYmVsX3dpZHRoID0gbmFtZXNwYWNlcy5tYXAge3xtb2R8IG1vZC5uYW1lLmxlbmd0aH0u
bWF4DQoNCmRpc3RyaWJ1dGlvbnMuZWFjaCB7IHxuYW1lLHJhd19jb29yZHN8DQogIHB1dHMg
Ii0tICN7bmFtZX0gLS0iDQogIHBvaW50c2V0cyA9IHByZXBhcmVfcG9pbnRzZXRzKG5hbWVz
cGFjZXMsIHJhd19jb29yZHMsIG51bV9ydW5zKQ0KICBzb2x1dGlvbnMgPSB7fQ0KICBuYW1l
c3BhY2VzLmVhY2gge3xtb2R8IHNvbHV0aW9uc1ttb2QubmFtZV0gPSBDbGFzcy5uZXcgeyBp
bmNsdWRlIG1vZCB9Lm5ld30NCiAgQmVuY2htYXJrLmJtKGxhYmVsX3dpZHRoKSBkbyB8eHwN
CiAgICBuYW1lc3BhY2VzLmVhY2ggZG8gfG1vZHwNCiAgICAgIG5hbWUgPSBtb2QubmFtZQ0K
ICAgICAgc29sdXRpb24gPSBzb2x1dGlvbnNbbmFtZV0NCiAgICAgIHgucmVwb3J0KG5hbWUp
IGRvDQogICAgICAgIG51bV9ydW5zLnRpbWVzIGRvIHxpfA0KICAgICAgICAgIHBvaW50cyA9
IHBvaW50c2V0c1tuYW1lXVtpXQ0KICAgICAgICAgIHNvbHV0aW9uLmVuY2lyY2xlKHBvaW50
cykNCiAgICAgICAgZW5kDQogICAgICBlbmQNCiAgICBlbmQNCiAgZW5kDQp9DQo--------------090809010004090208020509
Content-Type: text/plain;
 name57_lionel_bouton.rb"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename57_lionel_bouton.rb"

aW5jbHVkZSBNYXRoCgptb2R1bGUgQ29udmV4SHVsbAoKICAjIGFmdGVyIGdyYWhhbSAmIGFu
ZHJldwogIGRlZiBzZWxmLmNvbnZleF9odWxsKHBvaW50cykKICAgIGxvcCA9IHBvaW50cy5z
b3J0X2J5IHsgfHB8IHAueCB9CiAgICBsZWZ0ID0gbG9wLnNoaWZ0CiAgICByaWdodCA9IGxv
cC5wb3AKICAgIGxvd2VyLCB1cHBlciA9IFtsZWZ0XSwgW2xlZnRdCiAgICBsb3dlcl9odWxs
LCB1cHBlcl9odWxsID0gW10sIFtdCiAgICBkZXRfZnVuYyA9IGRldGVybWluYW50X2Z1bmN0
aW9uKGxlZnQsIHJpZ2h0KQogICAgdW50aWwgbG9wLmVtcHR5PwogICAgICBwID0gbG9wLnNo
aWZ0CiAgICAgICggZGV0X2Z1bmMuY2FsbChwKSA8IDAgPyBsb3dlciA6IHVwcGVyICkgPDwg
cAogICAgZW5kCiAgICBsb3dlciA8PCByaWdodAogICAgdW50aWwgbG93ZXIuZW1wdHk/CiAg
ICAgIGxvd2VyX2h1bGwgPDwgbG93ZXIuc2hpZnQKICAgICAgd2hpbGUgKGxvd2VyX2h1bGwu
c2l6ZSA+PSAzKSAmJgogICAgICAgICAgIWNvbnZleD8obG93ZXJfaHVsbC5sYXN0KDMpLCB0
cnVlKQogICAgICAgIGxhc3QgPSBsb3dlcl9odWxsLnBvcAogICAgICAgIGxvd2VyX2h1bGwu
cG9wCiAgICAgICAgbG93ZXJfaHVsbCA8PCBsYXN0CiAgICAgIGVuZAogICAgZW5kCiAgICB1
cHBlciA8PCByaWdodAogICAgdW50aWwgdXBwZXIuZW1wdHk/CiAgICAgIHVwcGVyX2h1bGwg
PDwgdXBwZXIuc2hpZnQKICAgICAgd2hpbGUgKHVwcGVyX2h1bGwuc2l6ZSA+PSAzKSAmJgog
ICAgICAgICAgIWNvbnZleD8odXBwZXJfaHVsbC5sYXN0KDMpLCBmYWxzZSkKICAgICAgICBs
YXN0ID0gdXBwZXJfaHVsbC5wb3AKICAgICAgICB1cHBlcl9odWxsLnBvcAogICAgICAgIHVw
cGVyX2h1bGwgPDwgbGFzdAogICAgICBlbmQKICAgIGVuZAogICAgdXBwZXJfaHVsbC5zaGlm
dAogICAgdXBwZXJfaHVsbC5wb3AKICAgIGxvd2VyX2h1bGwgKyB1cHBlcl9odWxsLnJldmVy
c2UKICBlbmQKCiAgcHJpdmF0ZQoKICBkZWYgc2VsZi5kZXRlcm1pbmFudF9mdW5jdGlvbihw
MCwgcDEpCiAgICBwcm9jIHsgfHB8ICgocDAueC1wMS54KSoocC55LXAxLnkpKS0oKHAueC1w
MS54KSoocDAueS1wMS55KSkgfQogIGVuZAoKICBkZWYgc2VsZi5jb252ZXg/KGxpc3Rfb2Zf
dGhyZWUsIGxvd2VyKQogICAgcDAsIHAxLCBwMiA9IGxpc3Rfb2ZfdGhyZWUKICAgIChkZXRl
cm1pbmFudF9mdW5jdGlvbihwMCwgcDIpLmNhbGwocDEpID4gMCkgXiBsb3dlcgogIGVuZAoK
ZW5kCgpjbGFzcyBQb2ludCA8IFN0cnVjdC5uZXcoOngsIDp5KQogIGRlZiBzZWxmLnJhbmRv
bQogICAgUG9pbnQubmV3KHJhbmQsIHJhbmQpCiAgZW5kCgogIGRlZiBzZWxmLmdlbmVyYXRl
X3NhbXBsZXMobikKICAgICgxLi5uKS5tYXAgeyBzZWxmLnJhbmRvbSB9CiAgZW5kCgogIGRl
ZiB0b19zCiAgICAiKCN7eH0sICN7eX0pIgogIGVuZAplbmQKCmNsYXNzIFBvdGVudGlhbENl
bnRlciA8IFN0cnVjdC5uZXcoOngsIDp5LCA6cG9pbnRzKQogIGluY2x1ZGUgTWF0aAoKICAj
IFNxdWFyZSBkaXN0YW5jZSB3aXRoIGEgcG9pbnQKICBkZWYgc3F1YXJlX2Rpc3RhbmNlKHBv
aW50KQogICAgKChwb2ludC54IC0geCkgKiogMikgKyAoKHBvaW50LnkgLSB5KSAqKiAyKQog
IGVuZAoKICAjIE1heGltdW0gc3F1YXJlIGRpc3RhbmNlIHdpdGggbXkgcG9pbnRzCiAgIyBJ
dCdzIGNhY2hlZCBiZWNhdXNlIGl0J3MgY2FsbGVkIHNldmVyYWwgdGltZXMgYW5kIGNhbiBi
ZSB2ZXJ5IGNvc3RseQogIGRlZiBtYXhfc3F1YXJlX2Rpc3RhbmNlCiAgICBAc3FfZGlzdCB8
fD0gKHBvaW50cy5tYXAgeyB8cG9pbnR8IHNxdWFyZV9kaXN0YW5jZShwb2ludCkgfS5tYXgp
CiAgZW5kCgogICMgQ29tcHV0ZSB0aGUgYmVzdCBtb3ZlIHdpdGggZ2l2ZW4gZGlzdGFuY2Ug
KHJvKQogICMgYW5kIGFuZ2xlcyAodGhldGFzKQogICMgcmV0dXJucyBuaWwgaWYgbm9uZSBp
cyBiZXR0ZXIgdGhhbiB0aGUgY3VycmVudCBwb3NpdGlvbgogIGRlZiBiZXN0X21vdmUocm8s
IHRoZXRhcykKICAgIHBvdGVudGlhbF9tb3ZlcyA9IHRoZXRhcy5tYXAgeyB8dGhldGF8CiAg
ICAgIG5ld194ID0geCArIChybyAqIGNvcyh0aGV0YSkpCiAgICAgIG5ld195ID0geSArIChy
byAqIHNpbih0aGV0YSkpCiAgICAgIFBvdGVudGlhbENlbnRlci5uZXcobmV3X3gsbmV3X3ks
cG9pbnRzKQogICAgfQogICAgY2hvb3NlX21vdmVfMShwb3RlbnRpYWxfbW92ZXMpCiAgZW5k
CgogICMgRHVtYmVyLCBmYXN0ZXIKICBkZWYgY2hvb3NlX21vdmVfMShwb3RlbnRpYWxfbW92
ZXMpCiAgICBwb3RlbnRpYWxfbW92ZXMuZGV0ZWN0IHsgfG1vdmV8CiAgICAgIG1heF9zcXVh
cmVfZGlzdGFuY2UgPiBtb3ZlLm1heF9zcXVhcmVfZGlzdGFuY2UKICAgIH0KICBlbmQKCiAg
IyBMb29rIGZvciB0aGUgc2hvcnRlc3QgcGF0aCwgc2xvd2VyICh+MS40eCBvbiBhdmVyYWdl
IHdpdGggbWFueSBwb2ludHMpCiAgZGVmIGNob29zZV9tb3ZlXzIocG90ZW50aWFsX21vdmVz
KQogICAgcG90ZW50aWFsX21vdmVzLnJlamVjdCEgeyB8bW92ZXwKICAgICAgbWF4X3NxdWFy
ZV9kaXN0YW5jZSA8PSBtb3ZlLm1heF9zcXVhcmVfZGlzdGFuY2UKICAgIH0KICAgIHBvdGVu
dGlhbF9tb3Zlcy5taW4geyB8YzEsYzJ8CiAgICAgIGMxLm1heF9zcXVhcmVfZGlzdGFuY2Ug
PD0+IGMyLm1heF9zcXVhcmVfZGlzdGFuY2UKICAgIH0KICBlbmQKCiAgIyBDaGVjayB0aGF0
IHRoZSBnaXZlbiBvZmZzZXQgaXMgYmlnIGVub3VnaCB0byBtb3ZlCiAgIyB0aGUgY3VycmVu
dCBwb3NpdGlvbgogICMgKGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9ycyBwcmV2ZW50
IGluZmluaXRlIHByZWNpc2lvbi4uLikKICBkZWYgY2FuX2JlX21vdmVkX2J5KG9mZnNldCkK
ICAgICgoeCArIG9mZnNldCkgIT0geCkgfHwgKCh5ICsgb2Zmc2V0KSAhPSB5KQogIGVuZAoK
ICBkZWYgdG9fcwogICAgIigje3h9LCAje3l9KSIKICBlbmQKZW5kCgpjbGFzcyBDaXJjbGUg
PCBTdHJ1Y3QubmV3KDpjZW50ZXIsIDpyYWRpdXMpCiAgZGVmIHRvX3MKICAgICJ7Y2VudGVy
OiN7Y2VudGVyfSwgcmFkaXVzOiN7cmFkaXVzfX0iCiAgZW5kCmVuZAoKZGVmIGNob3NlX29y
aWdpbmFsX2NlbnRlcl9hbmRfbW92ZV9hbW91bnQocG9pbnRzKQogICMgU3RhcnQgd2l0aCBh
IGdvb2QgcG90ZW50aWFsIChhcm91bmQgdGhlIG1pZGRsZSBvZiB0aGUgcG9pbnQgY2xvdWQp
CiAgbWF4X3ggPSBwb2ludHMubWFwe3xwfCBwLnh9Lm1heAogIG1pbl94ID0gcG9pbnRzLm1h
cHt8cHwgcC54fS5taW4KICB4ID0gKG1heF94ICsgbWluX3gpIC8gMgogIG1heF95ID0gcG9p
bnRzLm1hcHt8cHwgcC55fS5tYXgKICBtaW5feSA9IHBvaW50cy5tYXB7fHB8IHAueX0ubWlu
CiAgeSA9IChtYXhfeSArIG1pbl95KSAvIDIKICBjZW50ZXIgPSBQb3RlbnRpYWxDZW50ZXIu
bmV3KHgsIHksIHBvaW50cykKICAjIFRoZSBvcmlnaW5hbCBkaXNwbGFjZW1lbnQgdmFsdWUg
aXMgYmFzZWQgb24gdGhlIGZhY3QgdGhhdCBhIHRydWx5CiAgIyByYW5kb20gZGlzdHJpYnV0
aW9uIGdldHMgYSBtZWFuIHZhbHVlIHdpdGggYSBwcmVjaXNpb24gb2YgdGhpcyBvcmRlci4K
ICAjIFRoZSBhY3R1YWwgY2VudGVyIGlzIHByb2JhYmx5IHJlYWNoYWJsZSB3aXRoIGEgZmV3
IG9mIHRoZXNlIHN0ZXBzCiAgbW92ZV9hbW91bnQgPSAoKG1heF95IC0gbWluX3kpICsgKG1h
eF94IC0gbWluX3gpKSAvIHBvaW50cy5zaXplCiAgcmV0dXJuIFtjZW50ZXIsIG1vdmVfYW1v
dW50XQplbmQKCiMgTG9vayBmb3IgdGhlIGJlc3QgY2VudGVyIGJ5IG1pbmltaXppbmcKIyBp
dHMgbWF4aW11bSBkaXN0YW5jZSB3aXRoIHRoZSBnaXZlbiBwb2ludHMKIyBUaGlzIGlzIHRo
ZSBzYW1lIGFzIG1pbmltaXppbmcgaXRzIHNxdWFyZQojICh0aGUgbWF4aW11bSBvZiB0aGUg
c3F1YXJlIGRpc3RhbmNlcykKIyBUaGlzIGNhbiBiZSBzZWVuIGFzIGEgZGljaG90b215IG9u
IGEgMi1kaW1lbnNpb25hbCBzcGFjZQpkZWYgZW5jaXJjbGUocG9pbnRzKQogIHBvaW50cyA9
IENvbnZleEh1bGwuY29udmV4X2h1bGwocG9pbnRzKQogIGNlbnRlciwgcm8gPSBjaG9zZV9v
cmlnaW5hbF9jZW50ZXJfYW5kX21vdmVfYW1vdW50KHBvaW50cykKICAjIFdlJ2xsIG1vdmUg
d2l0aCBwb2xhciBjb29yZGluYXRlcyAoZGlzdGFuY2UgKyBhbmdsZSA6IHJvL3RoZXRhKQog
ICMgSG93IG1hbnkgZGlyZWN0aW9ucyBkbyB3ZSBmb2xsb3c/CiAgIyBlYWNoIG5ldyBhbmds
ZSBjcmVhdGVzIGEgbmV3IChjb3N0bHkpIG1heF9zcXVhcmVfZGlzdGFuY2UgY2FsbAogICMg
c28gd2UgdGFrZSB0aGUgbWluaW11bSBuZWVkZWQgdG8gbW92ZSBhcm91bmQgYW5kIGNsaW1i
IHRoZQogICMgc3F1YXJlX2Rpc3RhbmNlIGdyYWRpZW50OiAzCiAgYW5nbGVfY291bnQgPSAz
CiAgdGhldGFzID0gKDEuLmFuZ2xlX2NvdW50KS5tYXAgeyB8Y3wgKDIgKiBjICogTWF0aDo6
UEkpIC8gYW5nbGVfY291bnR9CiAgaXRlciA9IDAKICAjIFRyYWNlIG91ciBtb3ZlcwogIGNl
bnRlcl9saXN0ID0gW10KCiAgbG9vcCBkbwogICAgY2VudGVyX2xpc3QgPDwgY2VudGVyCiAg
ICBpdGVyICs9IDEKICAgIyBwdXRzICIje2l0ZXJ9OiAje2NlbnRlci5tYXhfc3F1YXJlX2Rp
c3RhbmNlfSIKICAgICMgSXMgdGhlcmUgYSBiZXN0IG1vdmUgYXZhaWxhYmxlID8KICAgIGlm
IG5ld19jZW50ZXIgPSBjZW50ZXIuYmVzdF9tb3ZlKHJvLCB0aGV0YXMpCiAgICAgIGNlbnRl
ciA9IG5ld19jZW50ZXIKICAgIGVsc2UKICAgICAgcm8gLz0gMgogICAgICAjIFdlIHN0b3Ag
d2hlbiBybyBiZWNvbWVzIHRvbyBzbWFsbCB0byBtb3ZlIHRoZSBjZW50ZXIKICAgICAgYnJl
YWsgdW5sZXNzIGNlbnRlci5jYW5fYmVfbW92ZWRfYnkocm8pCiAgICBlbmQKICBlbmQKICMg
cHV0cyAiQ2lyY2xlIGZvdW5kIGluICN7aXRlcn0gaXRlcmF0aW9ucyIKICByZXR1cm4gWyBD
aXJjbGUubmV3KGNlbnRlciwgc3FydChjZW50ZXIubWF4X3NxdWFyZV9kaXN0YW5jZSkpLAog
ICAgICAgICAgIGNlbnRlcl9saXN0IF0KZW5kCgppZiAkMCA9PSBfX0ZJTEVfXwoKICAjIFVz
ZXMgMTAgcG9pbnRzIGJ5IGRlZmF1bHQKICBQT0lOVF9DT1VOVCA9IChBUkdWWzBdLnRvX2kg
PT0gMCkgPyAxMCA6IEFSR1ZbMF0udG9faQoKICBwb2ludHMgPSBQb2ludC5nZW5lcmF0ZV9z
YW1wbGVzKFBPSU5UX0NPVU5UKQogIHQgPSBUaW1lLm5vdwogIGNpcmNsZSwgY2VudGVyX2xp
c3QgPSBlbmNpcmNsZShodWxsKQogIHB1dHMgY2lyY2xlCiAgcHV0cyAiRm91bmQgaW46ICN7
VGltZS5ub3cgLSB0fXMiCiAgCiAgIyBHZW5lcmF0ZSBhIEdudVBsb3QgY29tbWFuZCBmaWxl
IHRvIHNlZSB0aGUgcmVzdWx0CiAgZiA9IEZpbGUub3BlbigncGxvdGNvbW1hbmQuY21kJywg
J3cnKQogIGYucHJpbnQgPDxFT0YKc2V0IHBhcmFtZXRyaWMKc2V0IHNpemUgc3F1YXJlCnNl
dCB4cmFuZ2UgWy0wLjI6MS4yXQpzZXQgeXJhbmdlIFstMC4yOjEuMl0Kc2V0IG11bHRpcGxv
dApwbG90ICItIgoje3BvaW50cy5tYXAgeyB8cHwgIiN7cC54fSAje3AueX0iIH0uam9pbigi
XG4iKX0KZW5kCnBsb3QgIi0iIHdpdGggbGluZXMKI3tjZW50ZXJfbGlzdC5tYXAgeyB8cHwg
IiN7cC54fSAje3AueX0iIH0uam9pbigiXG4iKX0KZW5kCnBsb3QgWzA6MipwaV0gCihzaW4o
dCkqI3tjaXJjbGUucmFkaXVzfSkrI3tjaXJjbGUuY2VudGVyLnh9LChjb3ModCkqI3tjaXJj
bGUucmFkaXVzfSkrI3tjaXJjbGUuY2VudGVyLnl9CnNldCBub211bHRpcGxvdApFT0YKICBm
LmNsb3NlCiAgCiAgcHV0cyA8PEVPRgp1c2UgJ2dudXBsb3QgLXBlcnNpc3QgcGxvdGNvbW1h
bmQuY21kJyB0byBzZWUKdGhlIGNpcmNsZSwgcG9pbnRzIGFuZCBwYXRoIHRvIHRoZSBjZW50
ZXIKRU9GCiAgCmVuZAoKCg--------------090809010004090208020509--