Enhancements to flymake in jde-eclipse-compiler-server.el

"Yee Keat Phuah" <[email protected]> Thu, 27 Dec 2007 12:34:45 +0800
Newsgroups gmane.emacs.jdee
Message-ID <[email protected]>
------=_Part_11783_32679719.1198730085710
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Hi,

Would like to thank Suraj again for the amazing module
jde-ecilpse-compiler-server.el, one feature that I felt missing was
that flymake
could not highlight only the parts of the line that causes the error,
instead of highlighting the whole line.

I have written a module that add this features to the flymake module,
though it modify some of the flymake's internal functions.

Will see how I can feed some patches upstream so that I do not need to
override the flymake's functions.

As this is my first piece of serious code using elisp, any comments welcomed. :)

Cheers,
Phuah Yee Keat

------=_Part_11783_32679719.1198730085710
Content-Type: text/x-emacs-lisp; name=jde-ecj-flymake.el
Content-Transfer-Encoding: base64
X-Attachment-Id: f_faosxqmx0
Content-Disposition: attachment; filename=jde-ecj-flymake.el

Ozs7IGpkZS1lY2otZmx5bWFrZS5lbCAtLS0gRW5oYW5jZW1lbnRzIGZvciBmbHltYWtlIGZvciBK
REVFCgoKOzsgQ29weXJpZ2h0IChDKSAyMDA3IGJ5IFBodWFoIFllZSBLZWF0Cgo7OyBBdXRob3I6
IFBodWFoIFllZSBLZWF0IDx5a3BodWFoQGdtYWlsLmNvbT4KOzsgTWFpbnRhaW5lcjogUGh1YWgg
WWVlIEtlYXQgPHlrcGh1YWhAZ21haWwuY29tPgo7OyBDcmVhdGVkOiAyNyBEZWMgMjAwNwo7OyBL
ZXl3b3JkczogZmx5bWFrZSBqZGUtbW9kZSBqYXZhIGVjbGlwc2UgZWNqCjs7IFZlcnNpb24gMC4x
Cgo7OyBUaGlzIGZpbGUgaXMgbm90IHBhcnQgb2YgRW1hY3MKCjs7IFRoaXMgcHJvZ3JhbSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKOzsgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKOzsg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u
IDIsIG9yIChhdAo7OyB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgo7OyBUaGlzIHBy
b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwg
YnV0Cjs7IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKOzsgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgoKOzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKOzsgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwo7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCjs7IEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgoKCjs7OyBDb21tZW50YXJ5Ogo7OyAKOzsgVGhpcyBmaWxlIGVuaGFu
Y2UgdGhlIGZseW1ha2UgZm9yIGpkZWUgbW9kZSB1c2luZyB0aGUgamRlLWVjbGlwc2UtY29tcGls
ZXItc2VydmVyLmVsCjs7IGl0IHVzZXMgdGhlIGNhcmV0cyBmcm9tIHRoZSBlY2ogdG8gb25seSBo
aWdobGlnaHQgcG9ydGlvbiBvZiB0aGUgbGluZXMgdGhhdCBoYXZlIAo7OyB0aGUgZXJyb3Ivd2Fy
bmluZy4KCihyZXF1aXJlICdmbHltYWtlKQoocmVxdWlyZSAnamRlLWVjbGlwc2UtY29tcGlsZXIt
c2VydmVyKQoKKGRlZnN0cnVjdCAoZmx5bWFrZS1sZXIKICAgICAgICAgICAgKDpjb25zdHJ1Y3Rv
ciBuaWwpCiAgICAgICAgICAgICg6Y29uc3RydWN0b3IgZmx5bWFrZS1sZXItbWFrZS1sZXIgKGZp
bGUgbGluZSB0eXBlIHRleHQgJm9wdGlvbmFsIGZ1bGwtZmlsZSBzdGFydCBlbmQpKSkKICBmaWxl
IGxpbmUgdHlwZSB0ZXh0IGZ1bGwtZmlsZSBzdGFydCBlbmQpCgooZGVmdW4gZmx5bWFrZS1sZXIt
c2V0LWZpbGUgKGxpbmUtZXJyLWluZm8gZmlsZSkKICAoZmx5bWFrZS1sZXItbWFrZS1sZXIgZmls
ZQoJCQkoZmx5bWFrZS1sZXItbGluZSBsaW5lLWVyci1pbmZvKQoJCQkoZmx5bWFrZS1sZXItdHlw
ZSBsaW5lLWVyci1pbmZvKQoJCQkoZmx5bWFrZS1sZXItdGV4dCBsaW5lLWVyci1pbmZvKQoJCQko
Zmx5bWFrZS1sZXItZnVsbC1maWxlIGxpbmUtZXJyLWluZm8pCgkJCShmbHltYWtlLWxlci1zdGFy
dCBsaW5lLWVyci1pbmZvKQoJCQkoZmx5bWFrZS1sZXItZW5kIGxpbmUtZXJyLWluZm8pKSkKCihk
ZWZ1biBmbHltYWtlLWxlci1zZXQtZnVsbC1maWxlIChsaW5lLWVyci1pbmZvIGZ1bGwtZmlsZSkK
ICAoZmx5bWFrZS1sZXItbWFrZS1sZXIgKGZseW1ha2UtbGVyLWZpbGUgbGluZS1lcnItaW5mbykK
CQkJKGZseW1ha2UtbGVyLWxpbmUgbGluZS1lcnItaW5mbykKCQkJKGZseW1ha2UtbGVyLXR5cGUg
bGluZS1lcnItaW5mbykKCQkJKGZseW1ha2UtbGVyLXRleHQgbGluZS1lcnItaW5mbykKCQkJZnVs
bC1maWxlCgkJCShmbHltYWtlLWxlci1zdGFydCBsaW5lLWVyci1pbmZvKQoJCQkoZmx5bWFrZS1s
ZXItZW5kIGxpbmUtZXJyLWluZm8pKSkKCihkZWZ1biBmbHltYWtlLWxlci1zZXQtbGluZSAobGlu
ZS1lcnItaW5mbyBsaW5lKQogIChmbHltYWtlLWxlci1tYWtlLWxlciAoZmx5bWFrZS1sZXItZmls
ZSBsaW5lLWVyci1pbmZvKQoJCQlsaW5lCgkJCShmbHltYWtlLWxlci10eXBlIGxpbmUtZXJyLWlu
Zm8pCgkJCShmbHltYWtlLWxlci10ZXh0IGxpbmUtZXJyLWluZm8pCgkJCShmbHltYWtlLWxlci1m
dWxsLWZpbGUgbGluZS1lcnItaW5mbykKCQkJKGZseW1ha2UtbGVyLXN0YXJ0IGxpbmUtZXJyLWlu
Zm8pCgkJCShmbHltYWtlLWxlci1lbmQgbGluZS1lcnItaW5mbykpKQoKKGRlZnVuIGZseW1ha2Ut
cGFyc2UtbGluZSAobGluZSkKICAiUGFyc2UgTElORSB0byBzZWUgaWYgaXQgaXMgYW4gZXJyb3Ig
b3Igd2FybmluZy4KUmV0dXJuIGl0cyBjb21wb25lbnRzIGlmIHNvLCBuaWwgb3RoZXJ3aXNlLiIK
ICAobGV0ICgocmF3LWZpbGUtbmFtZSBuaWwpCgkobGluZS1ubyAwKQoJKGVyci10eXBlICJlIikK
CShlcnItdGV4dCBuaWwpCgkoY29sLXN0YXJ0IG5pbCkKCShjb2wtZW5kIG5pbCkKCShwYXR0ZXJu
cyBmbHltYWtlLWVyci1saW5lLXBhdHRlcm5zKQoJKG1hdGNoZWQgbmlsKSkKICAgICh3aGlsZSAo
YW5kIHBhdHRlcm5zIChub3QgbWF0Y2hlZCkpCiAgICAgICh3aGVuIChzdHJpbmctbWF0Y2ggKGNh
ciAoY2FyIHBhdHRlcm5zKSkgbGluZSkKCShsZXQqICgoZmlsZS1pZHggKG50aCAxIChjYXIgcGF0
dGVybnMpKSkKCSAgICAgICAobGluZS1pZHggKG50aCAyIChjYXIgcGF0dGVybnMpKSkKCSAgICAg
ICAoY29sLXBhcnNlciAobnRoIDUgKGNhciBwYXR0ZXJucykpKSkKCgkgIChzZXRxIHJhdy1maWxl
LW5hbWUgKGlmIGZpbGUtaWR4IChtYXRjaC1zdHJpbmcgZmlsZS1pZHggbGluZSkgbmlsKSkKCSAg
KHNldHEgbGluZS1ubyAgICAgICAoaWYgbGluZS1pZHggKHN0cmluZy10by1udW1iZXIgKG1hdGNo
LXN0cmluZyBsaW5lLWlkeCBsaW5lKSkgMCkpCgkgIChzZXRxIGVyci10ZXh0ICAgICAgKGlmICg+
IChsZW5ndGggKGNhciBwYXR0ZXJucykpIDQpCgkJCQkgIChtYXRjaC1zdHJpbmcgKG50aCA0IChj
YXIgcGF0dGVybnMpKSBsaW5lKQoJCQkJKGZseW1ha2UtcGF0Y2gtZXJyLXRleHQgKHN1YnN0cmlu
ZyBsaW5lIChtYXRjaC1lbmQgMCkpKSkpCgkgIChvciBlcnItdGV4dCAoc2V0cSBlcnItdGV4dCAi
PG5vIGVycm9yIHRleHQ+IikpCgkgIChpZiAoYW5kIGVyci10ZXh0IChzdHJpbmctbWF0Y2ggIl5b
d1ddYXJuaW5nIiBlcnItdGV4dCkpCgkgICAgICAoc2V0cSBlcnItdHlwZSAidyIpKQoJICAod2hl
biBjb2wtcGFyc2VyCgkgICAgKGZseW1ha2UtbG9nIDMgIi0tLS0gaGF2ZSBjb2x1bW4gaW5mb3Jt
YXRpb24iKQoJICAgIChsZXQgKChjb2wtbGlzdCAoZnVuY2FsbCBjb2wtcGFyc2VyIGxpbmUpKSkK
CSAgICAgIChzZXRxIGNvbC1zdGFydCAobnRoIDAgY29sLWxpc3QpKQoJICAgICAgKHNldHEgY29s
LWVuZCAobnRoIDEgY29sLWxpc3QpKSkpCgkgIChmbHltYWtlLWxvZyAzICJwYXJzZSBsaW5lOiBm
aWxlLWlkeD0lcyBsaW5lLWlkeD0lcyBmaWxlPSVzIGxpbmU9JXMgdGV4dD0lcyBjb2w9JXM6JXMi
IGZpbGUtaWR4IGxpbmUtaWR4CgkJICAgICAgIHJhdy1maWxlLW5hbWUgbGluZS1ubyBlcnItdGV4
dCBjb2wtc3RhcnQgY29sLWVuZCkKCSAgKHNldHEgbWF0Y2hlZCB0KSkpCiAgICAoc2V0cSBwYXR0
ZXJucyAoY2RyIHBhdHRlcm5zKSkpCiAgKGlmIG1hdGNoZWQKICAgICAgKGZseW1ha2UtbGVyLW1h
a2UtbGVyIHJhdy1maWxlLW5hbWUgbGluZS1ubyBlcnItdHlwZSBlcnItdGV4dCBuaWwgY29sLXN0
YXJ0IGNvbC1lbmQpCiAgICAoKSkpKQoKKHNldHEgZmx5bWFrZS1lcnItbGluZS1wYXR0ZXJucwog
ICAgICAoY29ucyAnKCIgKlxcKFxcW2phdmFjXFxdXFwpPyAqXFwoXFwoW2EtekEtWl06XFwpP1te
OihcdFxuXStcXClcOlxcKFswLTldK1xcKVw6WyBcdFxuXSpcXCguK1xcKSIKCSAgICAgIDIgNCBu
aWwgNSBmbHltYWtlLWphdmEtZ2V0LXN0YXJ0LWVuZCkKCSAgICBmbHltYWtlLWVyci1saW5lLXBh
dHRlcm5zKSkKCihkZWZ1biBmbHltYWtlLWphdmEtZ2V0LXN0YXJ0LWVuZCAobGluZSkKICAiUGFy
c2UgdGhlIGNhcmV0cyBmcm9tIHRoZSBqYXZhYyBsaW5lIHRvIG9idGFpbiB0aGUgc3RhcnQgY29s
dW1uIGFuZCBlbmQgY29sdW1uIG9mIHRoZSBlcnJvciwgb25seSBvbmUgc3RyZXRjaCBwZXIgbGlu
ZSIKICAobGV0KiAoKHN0cmluZ3MgKHNwbGl0LXN0cmluZyBsaW5lICJcbiIpKQoJIChzdHJpbmdy
ZWYgKG50aCAxIHN0cmluZ3MpKQoJIChsZWFkaW5nLXNwYWNlcyAoZmx5bWFrZS1jb3VudC1sZWFk
aW5nLXNwYWNlcyBzdHJpbmdyZWYpKQoJIChjYXJldHMgKG50aCAyIHN0cmluZ3MpKQoJIChzdGFy
dCAwKQoJIChlbmQgMCkKCSBwb3MpCiAgICAoZmx5bWFrZS1sb2cgMyAic3RyaW5ncmVmID0gJXMs
IGxlYWRpbmctc3BhY2VzID0gJXMsIGNhcmV0cyA9ICVzIiBzdHJpbmdyZWYgbGVhZGluZy1zcGFj
ZXMgY2FyZXRzKQogICAgKHNldHEgcG9zIChmbHltYWtlLWNvdW50LXNwYWNlcy1jYXJldHMgY2Fy
ZXRzKSkKICAgIChzZXRxIHN0YXJ0ICgtIChudGggMCBwb3MpIGxlYWRpbmctc3BhY2VzKSkKICAg
IChzZXRxIGVuZCAoLSAobnRoIDEgcG9zKSBsZWFkaW5nLXNwYWNlcykpCiAgICAobGlzdCBzdGFy
dCBlbmQpKSkKCihkZWZ1biBmbHltYWtlLWNvbWJpbmUtdHJpcGxldCAobGluZXMgJm9wdGlvbmFs
IHNlcCkKICAobGV0ICgoY29tYmluZWQtbGluZXMgJygpKQoJKHRyaXBsZXQgJygpKSkKICAgIChk
b2xpc3QgKHN0ciBsaW5lcykKICAgICAgKHdoZW4gKD0gKGxlbmd0aCB0cmlwbGV0KSAoaWYgc2Vw
IDYgMykpCgkoYWRkLXRvLWxpc3QgJ2NvbWJpbmVkLWxpbmVzIChhcHBseSAnY29uY2F0IHRyaXBs
ZXQpIHQpCgkoc2V0cSB0cmlwbGV0ICcoKSkpCiAgICAgIChhZGQtdG8tbGlzdCAndHJpcGxldCBz
dHIgdCkKICAgICAgKGlmIHNlcAoJICAoc2V0cSB0cmlwbGV0IChhcHBlbmQgdHJpcGxldCAobGlz
dCBzZXApKSkpKQogICAgKGFkZC10by1saXN0ICdjb21iaW5lZC1saW5lcyAoYXBwbHkgJ2NvbmNh
dCB0cmlwbGV0KSB0KQogICAgY29tYmluZWQtbGluZXMpKQoKKGFkZC1ob29rICdmbHltYWtlLWJl
Zm9yZS1wYXJzZS1lcnItbGluZXMtaG9vayAnbWVyZ2UtamF2YS1lcnItbGluZXMpCgooZGVmdW4g
Zmx5bWFrZS1jb3VudC1zcGFjZXMtY2FyZXRzIChsaW5lKQogIChsZXQgKChzcGFjZXMgMCkKCShj
YXJldHMgMCkpCiAgICAoZG9saXN0IChjaGFyIChzdHJpbmctdG8tbGlzdCBsaW5lKSkKICAgICAg
KGNvbmQgKChjaGFyLWVxdWFsIGNoYXIgP1xzKSAoaW5jZiBzcGFjZXMpKQoJICAgICgoY2hhci1l
cXVhbCBjaGFyID9cdCkgKHNldHEgc3BhY2VzICgrIHNwYWNlcyA4KSkpCgkgICAgKChjaGFyLWVx
dWFsIGNoYXIgP14pIChpbmNmIGNhcmV0cykpKSkKICAgIChsaXN0IHNwYWNlcyAoKyBzcGFjZXMg
Y2FyZXRzKSkpKQoKKGRlZnVuIGZseW1ha2UtY291bnQtbGVhZGluZy1zcGFjZXMgKGxpbmUpCiAg
KGZseW1ha2UtbG9nIDMgImNvdW50LWxlYWRpbmctc3BhY2VzIDogJXMgIiBsaW5lKQogIChsZXQq
ICgoc3RyaW5nbGlzdCAoc3RyaW5nLXRvLWxpc3QgbGluZSkpCgkgKGMgKGNhciBzdHJpbmdsaXN0
KSkKCSAoc3BhY2VzIDApCgkgKGRvbmUgbmlsKSkKICAgICh3aGlsZSAoYW5kIChub3QgZG9uZSkg
c3RyaW5nbGlzdCkKICAgICAgKGNvbmQgKChjaGFyLWVxdWFsIGMgP1xzKSAoaW5jZiBzcGFjZXMp
KQoJICAgICgoY2hhci1lcXVhbCBjID9cdCkgKHNldHEgc3BhY2VzICgrIHNwYWNlcyA4KSkpCgkg
ICAgKHQgKHNldHEgZG9uZSB0KSkpCiAgICAgIChzZXRxIHN0cmluZ2xpc3QgKGNkciBzdHJpbmds
aXN0KSkKICAgICAgKHNldHEgYyAoY2FyIHN0cmluZ2xpc3QpKSkKICAgIHNwYWNlcykpCgooZGVm
dW4gZmx5bWFrZS1oaWdobGlnaHQtbGluZSAobGluZS1ubyBsaW5lLWVyci1pbmZvLWxpc3QpCiAg
IkhpZ2hsaWdodCBsaW5lIExJTkUtTk8gaW4gY3VycmVudCBidWZmZXIuClBlcmhhcHMgdXNlIHRl
eHQgZnJvbSBMSU5FLUVSUi1JTkZPLUxJU1QgdG8gZW5oYW5jZSBoaWdobGlnaHRpbmcuIgogIChn
b3RvLWxpbmUgbGluZS1ubykKICAobGV0KiAoKGxpbmUtYmVnIChmbHltYWtlLWxpbmUtYmVnaW5u
aW5nLXBvc2l0aW9uKSkKCSAobGluZS1lbmQgKGZseW1ha2UtbGluZS1lbmQtcG9zaXRpb24pKQoJ
IChiZWcgICAgICBsaW5lLWJlZykKCSAoZW5kICAgICAgbGluZS1lbmQpCgkgKHRvb2x0aXAtdGV4
dCAoZmx5bWFrZS1sZXItdGV4dCAobnRoIDAgbGluZS1lcnItaW5mby1saXN0KSkpCgkgKGZhY2Ug
ICAgIG5pbCkpCgogICAgKGdvdG8tY2hhciBsaW5lLWJlZykKICAgICh3aGlsZSAobG9va2luZy1h
dCAiWyBcdF0iKQogICAgICAoZm9yd2FyZC1jaGFyKSkKCiAgICAoaWYgKGZseW1ha2UtbGVyLXN0
YXJ0IChudGggMCBsaW5lLWVyci1pbmZvLWxpc3QpKQoJKGZvcndhcmQtY2hhciAoZmx5bWFrZS1s
ZXItc3RhcnQgKG50aCAwIGxpbmUtZXJyLWluZm8tbGlzdCkpKSkKCiAgICAoc2V0cSBiZWcgKHBv
aW50KSkKCiAgICAoaWYgKGZseW1ha2UtbGVyLWVuZCAobnRoIDAgbGluZS1lcnItaW5mby1saXN0
KSkKCShzZXRxIGVuZCAoKyBiZWcgKC0gKGZseW1ha2UtbGVyLWVuZCAobnRoIDAgbGluZS1lcnIt
aW5mby1saXN0KSkgKGZseW1ha2UtbGVyLXN0YXJ0IChudGggMCBsaW5lLWVyci1pbmZvLWxpc3Qp
KSkpKQogICAgICAoZ290by1jaGFyIGxpbmUtZW5kKQogICAgICAod2hpbGUgKGFuZCAobG9va2lu
Zy1hdCAiWyBcdFxyXG5dIikgKD4gKHBvaW50KSAxKSkKCShiYWNrd2FyZC1jaGFyKSkKCiAgICAg
IChzZXRxIGVuZCAoMSsgKHBvaW50KSkpKQoKICAgICh3aGVuICg8PSBlbmQgYmVnKQogICAgICAo
c2V0cSBiZWcgbGluZS1iZWcpCiAgICAgIChzZXRxIGVuZCBsaW5lLWVuZCkpCgogICAgKHdoZW4g
KD0gZW5kIGJlZykKICAgICAgKGdvdG8tY2hhciBlbmQpCiAgICAgIChmb3J3YXJkLWxpbmUpCiAg
ICAgIChzZXRxIGVuZCAocG9pbnQpKSkKCiAgICAoaWYgKD4gKGZseW1ha2UtZ2V0LWxpbmUtZXJy
LWNvdW50IGxpbmUtZXJyLWluZm8tbGlzdCAiZSIpIDApCgkoc2V0cSBmYWNlICdmbHltYWtlLWVy
cmxpbmUpCiAgICAgIChzZXRxIGZhY2UgJ2ZseW1ha2Utd2FybmxpbmUpKQoKICAgIChmbHltYWtl
LW1ha2Utb3ZlcmxheSBiZWcgZW5kIHRvb2x0aXAtdGV4dCBmYWNlIG5pbCkpKQoKOyhsZXQqICgo
cG9zIChnZXQtc3RhcnQtZW5kICIgICAgXl5eXl5eIikpCjsgICAgICAgKHN0YXJ0IChudGggMCBw
b3MpKQo7ICAgICAgIChlbmQgKG50aCAxIHBvcykpKQo7ICAobWVzc2FnZSAicG9zOiVzOiVzIiBz
dGFydCBlbmQpKQoKKGRlZnVuIGZseW1ha2Utc3BsaXQtb3V0cHV0IChvdXRwdXQpCiAgIlNwbGl0
IE9VVFBVVCBpbnRvIGxpbmVzLgpSZXR1cm4gbGFzdCBvbmUgYXMgcmVzaWR1YWwgaWYgaXQgZG9l
cyBub3QgZW5kIHdpdGggbmV3bGluZSBjaGFyLgpSZXR1cm5zICgoTElORVMpIFJFU0lEVUFMKS4i
CiAgKGZseW1ha2UtbG9nIDMgIm1ham9yLW1vZGU6JXMiIG1ham9yLW1vZGUpCiAgKGlmIChtZW1i
ZXIgbWFqb3ItbW9kZSAnKGphdmEtbW9kZSBqZGUtbW9kZSkpCiAgICAgIChmbHltYWtlLXNwbGl0
LW91dHB1dC1qYXZhIG91dHB1dCkKICAgICh3aGVuIChhbmQgb3V0cHV0ICg+IChsZW5ndGggb3V0
cHV0KSAwKSkKICAgICAgKGxldCogKChsaW5lcyAoZmx5bWFrZS1zcGxpdC1zdHJpbmcgb3V0cHV0
ICJbXG5ccl0rIikpCgkgICAgIChjb21wbGV0ZSAoZXF1YWwgIlxuIiAoY2hhci10by1zdHJpbmcg
KGFyZWYgb3V0cHV0ICgxLSAobGVuZ3RoIG91dHB1dCkpKSkpKQoJICAgICAocmVzaWR1YWwgbmls
KSkKCSh3aGVuIChub3QgY29tcGxldGUpCgkgIChzZXRxIHJlc2lkdWFsIChjYXIgKGxhc3QgbGlu
ZXMpKSkKCSAgKHNldHEgbGluZXMgKGJ1dGxhc3QgbGluZXMpKSkKCShsaXN0IGxpbmVzIHJlc2lk
dWFsKSkpKSkKCihkZWZ1biBmbHltYWtlLXNwbGl0LW91dHB1dC1qYXZhIChvdXRwdXQpCiAgKGZs
eW1ha2UtbG9nIDMgImZseW1ha2Utc3BsaXQtb3V0cHV0LWphdmEiKQogICh3aGVuIChhbmQgb3V0
cHV0ICg+IChsZW5ndGggb3V0cHV0KSAwKSkKICAgIChsZXQqICgobGluZXMgKGZseW1ha2Utc3Bs
aXQtc3RyaW5nIG91dHB1dCAiW1xuXHJdKyIpKQoJICAgY29tcGxldGUgCgkgICByZXNpZHVhbCkK
ICAgICAgKHNldHEgbGluZXMgKGZseW1ha2UtY29tYmluZS10cmlwbGV0IGxpbmVzICJcbiIpKQog
ICAgICAoc2V0cSBjb21wbGV0ZSAoc3RyaW5nLW1hdGNoICIuKlxuLipcbi4qXG4iIChjYXIgKGxh
c3QgbGluZXMpKSkpCiAgICAgICh3aGVuIChub3QgY29tcGxldGUpCgkoc2V0cSByZXNpZHVhbCAo
Y2FyIChsYXN0IGxpbmVzKSkpCgkoc2V0cSBsaW5lcyAoYnV0bGFzdCBsaW5lcykpKQogICAgICAo
bGlzdCBsaW5lcyByZXNpZHVhbCkpKSkKCihwcm92aWRlICdqZGUtZWNqLWZseW1ha2Up
------=_Part_11783_32679719.1198730085710--