[Mono-list] [PATCH] mcs error handling and compiler tests
Andrew Birkett
adb@tardis.ed.ac.uk
Tue, 25 Jun 2002 01:56:59 +0100 (BST)
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.
---559023410-851401618-1024966619=:19880
Content-Type: TEXT/PLAIN; charset=US-ASCII
Hi,
I found the answer to my earlier question about the mcs/error directory.
The obscurely named --probe argument to mcs makes it expect to see the
specified compiler error. I started out to rename '--probe' to
'--expect-error' but ended up doing lots more ..
Here's quick headlines (more detail in changelogs):
- Compiler now uses Report class for all error tracking.
- '--probe' option renamed to '--expect-error'
- Standard 0/1 return values used for '--expect-error' rather than
magic numbers (123 and 124).
- Tests in mcs/errors brought up to date, and output format tidied.
- Tests in mcs/tests which fail on linux moved to TEST_NOPASS, and
output format tidied.
- Window-specific tests in mcs/tests have been moved to a seperate
Makefile rule
One problem: I created a new file at mcs/errors/ChangeLog but I can't get
it to be in my patch since I can't "cvs add" it without write permission
on the CVS server. So, I've attached it seperately to this mail. It
should be added as 'errors/ChangeLog'.
And now to bed ...
Andrew
- www.tardis.ed.ac.uk/~adb -
---559023410-851401618-1024966619=:19880
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=patch
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GS4.4.33.0206250156590.19880@omega.tardis.ed.ac.uk>
Content-Description: Patch for error handling and tests
Content-Disposition: attachment; filename=patch
SW5kZXg6IGVycm9ycy9jczAxNzYuY3MNCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NClJDUyBmaWxlOiAvbW9uby9tY3MvZXJyb3JzL2NzMDE3Ni5jcyx2DQpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjENCmRpZmYgLXUgLXIxLjEuMS4x
IGNzMDE3Ni5jcw0KLS0tIGVycm9ycy9jczAxNzYuY3MJOCBKdW4gMjAwMSAx
ODo0NTozNSAtMDAwMAkxLjEuMS4xDQorKysgZXJyb3JzL2NzMDE3Ni5jcwky
NSBKdW4gMjAwMiAwMDozNjoyMiAtMDAwMA0KQEAgLTEsNyArMSw3IEBADQog
Ly8gY3MwMTc2LmNzOiBjYW5ub3QgYmUgYWNjZXNzZWQgd2l0aCBhbiBpbnN0
YW5jZSByZWZlcmVuY2UsIHVzZSB0eXBlbmFtZSBpbnN0ZWFkDQogLy8gTGlu
ZTogMTINCiBjbGFzcyBYIHsNCi0Jc3RhdGljIHZvaWQgdm9pZF9tZXRob2Qg
KCkNCisJcHVibGljIHN0YXRpYyB2b2lkIHZvaWRfbWV0aG9kICgpDQogCXsN
CiAJfQ0KIH0NCkluZGV4OiBlcnJvcnMvY3MwMTk2LmNzDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQpSQ1MgZmlsZTogL21vbm8vbWNzL2Vycm9ycy9jczAx
OTYuY3Msdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjENCmRpZmYgLXUgLXIx
LjEgY3MwMTk2LmNzDQotLS0gZXJyb3JzL2NzMDE5Ni5jcwkyMSBGZWIgMjAw
MiAwMjozNTowMSAtMDAwMAkxLjENCisrKyBlcnJvcnMvY3MwMTk2LmNzCTI1
IEp1biAyMDAyIDAwOjM2OjIyIC0wMDAwDQpAQCAtNiw2ICs2LDYgQEANCiAJ
CWludCAqcCA9IG51bGw7DQogDQogCQlpZiAocCBbMTAsNF0gPT0gNCkNCi0J
CQk7DQorCQkJcmV0dXJuOw0KIAl9DQogfQ0KSW5kZXg6IGVycm9ycy9jczAy
NDIuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvbW9u
by9tY3MvZXJyb3JzL2NzMDI0Mi5jcyx2DQpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQ0KZGlmZiAtdSAtcjEuMSBjczAyNDIuY3MNCi0tLSBlcnJvcnMvY3Mw
MjQyLmNzCTIxIEZlYiAyMDAyIDAyOjM1OjAxIC0wMDAwCTEuMQ0KKysrIGVy
cm9ycy9jczAyNDIuY3MJMjUgSnVuIDIwMDIgMDA6MzY6MjIgLTAwMDANCkBA
IC02LDYgKzYsNiBAQA0KIAkJdm9pZCAqcCA9IG51bGw7DQogDQogCQlpZiAo
cCBbMTBdID09IDQpDQotCQkJOw0KKwkJCXJldHVybjsNCiAJfQ0KIH0NCklu
ZGV4OiBlcnJvcnMvY3MwMjU1LmNzDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQpSQ1MgZmlsZTogL21vbm8vbWNzL2Vycm9ycy9jczAyNTUuY3Msdg0KcmV0
cmlldmluZyByZXZpc2lvbiAxLjENCmRpZmYgLXUgLXIxLjEgY3MwMjU1LmNz
DQotLS0gZXJyb3JzL2NzMDI1NS5jcwkyMSBGZWIgMjAwMiAxODo1ODozNyAt
MDAwMAkxLjENCisrKyBlcnJvcnMvY3MwMjU1LmNzCTI1IEp1biAyMDAyIDAw
OjM2OjIyIC0wMDAwDQpAQCAtMSwxMyArMSwxMyBAQA0KIC8vIGNzMDI1NS5j
czogQ2FuIG5vdCB1c2Ugc3RhY2thbGxvYyBpbiBmaW5hbGx5IG9yIGNhdGNo
DQogLy8gTGluZTogMTANCiB1bnNhZmUgY2xhc3MgWCB7DQotCXN0cmluZyBz
Ow0KIA0KIAlzdGF0aWMgdm9pZCBNYWluICgpDQogCXsNCiAJCXRyeSB7DQog
CQl9IGNhdGNoIHsNCi0JCWNoYXIgKnB0ciA9IHN0YWNrYWxsb2MgY2hhciBb
MTBVXTsNCi19DQorCQljaGFyICpwdHIgPSBzdGFja2FsbG9jIGNoYXIgWzEw
XTsNCisJCXB0ciA9IHB0cjsNCisJCX0NCiAJfQ0KIH0JDQpJbmRleDogZXJy
b3JzL2ZhaWwNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAv
bW9uby9tY3MvZXJyb3JzL2ZhaWwsdg0KcmV0cmlldmluZyByZXZpc2lvbiAx
LjMNCmRpZmYgLXUgLXIxLjMgZmFpbA0KLS0tIGVycm9ycy9mYWlsCTE5IEph
biAyMDAyIDA0OjI3OjM0IC0wMDAwCTEuMw0KKysrIGVycm9ycy9mYWlsCTI1
IEp1biAyMDAyIDAwOjM2OjIzIC0wMDAwDQpAQCAtMSw1MyArMSwzMCBAQA0K
IFRoZSBmb2xsb3dpbmcgdGVzdHMgZmFpbGVkOiANCiANCi1jczAwNTEuY3Ms
IGNzMDA2MC5jcywgY3MwMTExLmNzDQotDQorY3MwMDUxLmNzOiBXZSBkb24n
dCBjb21wbGFpbiBhYm91dCBpbmNvbnNpc3RlbnQgYWNjZXNzaWJpbGl0eS4N
CitjczAwNjAuY3M6IFdlIGRvbid0IGNvbXBsYWluIGFib3V0IGluY29uc2lz
dGVudCBhY2Nlc3NpYmlsaXR5Lg0KIGNzMDEwOC5jczogV2Ugc2hvdWxkIHJl
LWVuYWJsZSB0aGUgdGVzdCBjb2RlIGluIHRoZSBjb21waWxlcg0KIGNzMDEx
MC5jczogU3RhY2sgb3ZlcmZsb3cgaW4gdGhlIGNvbXBpbGVyDQotDQotY3Mw
MTE4LmNzOg0KLQlXZSByZXBvcnQgdGhlIGVycm9yLCBidXQgdGhlIENTQyBl
cnJvciBnaXZlcyBtb3JlIGluZm9ybWF0aW9uLg0KLQ0KLWNzMDEyMS5jczog
RnVuY3Rpb24gZGVhbWJpZ3VhdG9yIGRvZXMgbm90IHdvcmsgaGVyZQ0KLWNz
MDEzNi0yLmNzIGNzMDEzNi5jczogU2ltaWxhciBlcnJvciByZXBvcnRlZCAo
cmV1c2Ugb2YgdmFyaWFibGUgbmFtZSwgMTI4KQ0KLWNzMDE1Ny5jczogSW50
ZXJuYWwgY29tcGlsZXIgZXJyb3IgKG51bGwgcG9pbnRlciByZWZlcmVuY2Up
DQorY3MwMTExLmNzOiBXZSBkb24ndCBjb21wbGFpbiBhYm91dCBzZWNvbmQg
b2NjdXJhbmNlIG9mIG1ldGhvZCBkZWZpbml0aW9uLg0KK2NzMDExOC5jczog
V2UgcmVwb3J0IHRoZSBlcnJvciwgYnV0IHRoZSBDU0MgZXJyb3IgZ2l2ZXMg
bW9yZSBpbmZvcm1hdGlvbi4NCitjczAxMzYuY3M6IFNpbWlsYXIgZXJyb3Ig
cmVwb3J0ZWQgKHJldXNlIG9mIHZhcmlhYmxlIG5hbWUsIDEyOCkNCitjczAx
MzYtMi5jczogU2ltaWxhciBlcnJvciByZXBvcnRlZCAocmV1c2Ugb2YgdmFy
aWFibGUgbmFtZSwgMTI4KQ0KIGNzMDE2NC5jczogV2UgZG9udCBlbWl0IHRo
ZSB3YXJuaW5nIGZvciBhbiB1bnVzZWQgbGFiZWwNCi1jczAxNjUtMi5jcyBj
czAxNjUuY3M6DQotCVdlIG5lZWQgZGF0YSBmbG93IGFuYWx5c2lzDQotDQot
Y3MwMTcxLmNzIA0KLQlXZSBkbyBub3QgdHJhY2sgdW5hc3NpZ25lZCBzdHJ1
Y3QgZmllbGRzIG9uIHN0cnVjdCBjb25zdHJ1Y3RvcnMgDQotDQotY3MwMjE2
LmNzOg0KLQlXZSBkbyBub3QgcmVwb3J0IG1pc3Npbmcgb3BlcmF0b3JzLg0K
LQ0KLWNzMDIzNC5jczoNCi0JV2lsbCBiZSBoYXJkIHRvIGZpeDsNCi0NCi1j
czA2NTQuY3M6DQotCUNvbXBpbGVyIGNyYXNoDQotDQotY3MxMDAxLmNzOg0K
LQlDb21waWxlciBlbWl0cyBzeW50YXggZXJyb3I7ICBJdHMgb2suDQotDQot
CUNvbXBpbGVyIGNyYXNoZXMNCi1jczE1MDEuY3M6DQotCUNvbXBpbGVyIGNy
YXNoZXMuICBFYXN5IHRvIGZpeA0KLQ0KLWNzMTUxMy5jczoNCi0JU3ludGF4
IGVycm9yOyAgV2UgY291bGQgcHJvdmlkZSBiZXR0ZXIgbWVzc2FnZQ0KLQ0K
LWNzMTUxOC5jczoNCi0JU3ludGF4IGVycm9yOyAgV2UgY291bGQgcHJvdmlk
ZSBiZXR0ZXIgbWVzc2FnZQ0KLQ0KLWNzMTUyNS5jczoNCi0JU3ludGF4IGVy
cm9yOyAgV2UgY291bGQgcHJvdmlkZSBiZXR0ZXIgbWVzc2FnZQ0KLQ0KLWNz
MTUyOC5jczoNCi0JU3ludGF4IGVycm9yOyAgV2UgY291bGQgcHJvdmlkZSBi
ZXR0ZXIgbWVzc2FnZQ0KLQ0KLWNzMTUyOS5jczogDQotCVN5bnRheCBlcnJv
cjsgIFdlIGNvdWxkIHByb3ZpZGUgYmV0dGVyIG1lc3NhZ2UNCitjczAxNjUu
Y3M6IFdlIG5lZWQgZGF0YSBmbG93IGFuYWx5c2lzDQorY3MwMTY1LTIuY3M6
IFdlIG5lZWQgZGF0YSBmbG93IGFuYWx5c2lzDQorY3MwMTcxLmNzOiBXZSBk
byBub3QgdHJhY2sgdW5hc3NpZ25lZCBzdHJ1Y3QgZmllbGRzIG9uIHN0cnVj
dCBjb25zdHJ1Y3RvcnMgDQorY3MwMjE2LmNzOiBXZSBkbyBub3QgcmVwb3J0
IG1pc3Npbmcgb3BlcmF0b3JzLg0KK2NzMDIzNC5jczogV2lsbCBiZSBoYXJk
IHRvIGZpeDsNCitjczAyNTUuY3M6IEVycm9yIGlzbid0IGZsYWdnZWQuDQor
Y3MwNTIzLmNzOiBFcnJvciBpc24ndCBmbGFnZ2VkLg0KK2NzMDUyOS5jczog
V2UgZ2V0IGVycm9yIENTMDE0NiBpbnN0ZWFkDQorY3MwNjU0LmNzOiBDb21w
aWxlciBjcmFzaA0KK2NzMTAwMS5jczogQ29tcGlsZXIgZW1pdHMgc3ludGF4
IGVycm9yOyAgSXRzIG9rLg0KK2NzMTUxMy5jczogU3ludGF4IGVycm9yOyAg
V2UgY291bGQgcHJvdmlkZSBiZXR0ZXIgbWVzc2FnZQ0KK2NzMTUxOC5jczog
U3ludGF4IGVycm9yOyAgV2UgY291bGQgcHJvdmlkZSBiZXR0ZXIgbWVzc2Fn
ZQ0KK2NzMTUyNS5jczogU3ludGF4IGVycm9yOyAgV2UgY291bGQgcHJvdmlk
ZSBiZXR0ZXIgbWVzc2FnZQ0KK2NzMTUyOC5jczogU3ludGF4IGVycm9yOyAg
V2UgY291bGQgcHJvdmlkZSBiZXR0ZXIgbWVzc2FnZQ0KK2NzMTUyOS5jczog
U3ludGF4IGVycm9yOyAgV2UgY291bGQgcHJvdmlkZSBiZXR0ZXIgbWVzc2Fn
ZQ0KK2NzMTU1Mi5jczogU3ludGF4IGVycm9yOyAgV2UgY291bGQgcHJvdmlk
ZSBiZXR0ZXIgbWVzc2FnZQ0KK2NzMTYwNC5jczogRXJyb3IgaXNuJ3QgZmxh
Z2dlZC4NCitjcy0yMC5jczogQXR0cmlidXRlIGVycm9yIGlzbid0IGZsYWdn
ZWQNCiANCi1jczE1NTIuY3M6DQotCVN5bnRheCBlcnJvcjsgIFdlIGNvdWxk
IHByb3ZpZGUgYmV0dGVyIG1lc3NhZ2UNCkluZGV4OiBlcnJvcnMvbWFrZWZp
bGUNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvbW9uby9t
Y3MvZXJyb3JzL21ha2VmaWxlLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS40
DQpkaWZmIC11IC1yMS40IG1ha2VmaWxlDQotLS0gZXJyb3JzL21ha2VmaWxl
CTE4IEphbiAyMDAyIDAyOjA5OjUzIC0wMDAwCTEuNA0KKysrIGVycm9ycy9t
YWtlZmlsZQkyNSBKdW4gMjAwMiAwMDozNjoyMyAtMDAwMA0KQEAgLTEsMTAg
KzEsMTIgQEANCiAjDQogIyBDb21waWxlIGF0IHRoZSBtYXhpbXVtIHdhcm5p
bmcgbGV2ZWwgdG8gcHJvYmUgZm9yIHdhcm5pbmdzDQogIw0KLU1DUz0uLi9t
Y3MvbWNzLmV4ZSAtLXdsZXZlbCA0DQorI01DUz1tb25vIC4uL21jcy9tY3Mu
ZXhlIC0td2xldmVsIDQgIyBmb3IgbGludXgNCitNQ1M9Li4vbWNzL21jcy5l
eGUgLS13bGV2ZWwgNCAjIGZvciB3aW5kb3dzDQorDQogDQogYWxsOg0KLQlm
YWlsZWQ9ZmFsc2U7IFwNCisJQCBmYWlsZWQ9ZmFsc2U7IFwNCiAJZm9yIGkg
aW4gY3MqLmNzOyBkbyBcDQogCQljYXNlICQkaSBpbiBcDQogCQkJY3NbMC05
XSotWzAtOV0qY3MpIFwNCkBAIC0xNCwyMCArMTYsMTIgQEANCiAJCQllcnJv
cj1gZWNobyAkJGkgfCBzZWQgLWUgJ3MvY3MqLy8nIC1lICdzLy5jcy8vJ2A7
IFwNCiAJCQk7O1wNCiAJCWVzYWM7IFwNCi0JCWVjaG8gJChNQ1MpIC0tcHJv
YmUgJCRlcnJvciAkJGk7IFwNCi0JCSQoTUNTKSAtLXByb2JlICQkZXJyb3Ig
MSAkJGkgPiAvZGV2L251bGw7IFwNCi0JCWNvZGU9JCQ/OyBcDQotCQlpZiB0
ZXN0ICQkY29kZSAhPSAxMjM7IHRoZW4gXA0KLQkJCWVjaG8gQ29kZSBpczog
JCRjb2RlOyBcDQotCQkJaWYgWyB4JCRjb2RlID0geDEyNCBdOyB0aGVuIFwN
Ci0JCQkJZWNobyAiQ29tcGlsZXIgZmFpbGVkIHRvIGZsYWcgJCRpIjsgXA0K
LQkJCWVsc2UgXA0KLQkJCQllY2hvICJDb21waWxlciBmYWlsZWQgdG8gY29t
cGlsZSAkJGkiOyBcDQotCQkJZmk7IFwNCi0JCQlmbGlzdD0iJCRmbGlzdCAk
JGkiOyBcDQotCQkJZmFpbGVkPXRydWU7IFwNCi0JCWVsc2UgXA0KLQkJCWVj
aG8gdGVzdCAkJGkgb2s7IFwNCisJCWVjaG8gLW4gIlJ1bm5pbmcgdGVzdCAk
JGkgLi4uICI7IFwNCisJCWlmICQoTUNTKSAtLXVuc2FmZSAtLWV4cGVjdC1l
cnJvciAkJGVycm9yICQkaSA+IC9kZXYvbnVsbDsgXA0KKwkJdGhlbiBlY2hv
IE9LOyBcDQorCQllbHNlIGVjaG8gRkFJTEVEOyBcDQorCQkgICAgIGZsaXN0
PSIkJGZsaXN0ICQkaSI7IFwNCisJCSAgICAgZmFpbGVkPXRydWU7IFwNCiAJ
CWZpOyBcDQogCWRvbmU7IFwNCiAJaWYgJCRmYWlsZWQ7IHRoZW4gXA0KSW5k
ZXg6IG1jcy9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJD
UyBmaWxlOiAvbW9uby9tY3MvbWNzL0NoYW5nZUxvZyx2DQpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNTI5DQpkaWZmIC11IC1yMS41MjkgQ2hhbmdlTG9nDQot
LS0gbWNzL0NoYW5nZUxvZwkyMiBKdW4gMjAwMiAxOTozNjozMiAtMDAwMAkx
LjUyOQ0KKysrIG1jcy9DaGFuZ2VMb2cJMjUgSnVuIDIwMDIgMDA6MzY6NDUg
LTAwMDANCkBAIC0xLDMgKzEsMjkgQEANCisyMDAyLTA2LTI1ICBBbmRyZXcg
Qmlya2V0dCAgPGFkYkB0YXJkaXMuZWQuYWMudWs+DQorDQorCSogZHJpdmVy
LmNzOiBNYWRlIGVycm9yIGhhbmRsaW5nIG1vcmUgY29uc2lzdGVudC4gIEVy
cm9ycyBub3cNCisJdHJhY2tlZCBieSBSZXBvcnQgY2xhc3MsIHNvIG1hbnkg
bWV0aG9kcyB3aGljaCB1c2VkIHRvIHJldHVybiBpbnQNCisJbm93IHJldHVy
biB2b2lkLiAgTWFpbigpIG5vdyBwcmludHMgc3VjY2Vzcy9mYWlsdXJlIGFu
ZCANCisJZXJyb3JzL3dhcm5pbmdzIG1lc3NhZ2UuDQorDQorCVJlbmFtZWQg
Jy0tcHJvYmUnIGNvbXBpbGVyIGFyZ3VtZW50IHRvICctLWV4cGVjdC1lcnJv
cicuICBSZW1vdmVkDQorCXRoZSBtYWdpYyBudW1iZXIgcmV0dXJuIHZhbHVl
cyAoMTIzIGFuZCAxMjQpLiAgTm93LCBpZiB0aGUNCisJZXhwZWN0ZWQgZXJy
b3Igb2NjdXJzLCB0aGUgY29tcGlsZXIgZXhpdHMgd2l0aCBzdWNjZXNzIChl
eGl0IHZhbHVlDQorCTApLiAgSWYgdGhlIGNvbXBpbGF0aW9uIGNvbXBsZXRl
cyB3aXRob3V0IHNlZWluZyB0aGF0IHBhcnRpY3VsYXINCisJZXJyb3IsIHRo
ZSBjb21waWxlciBleGl0cyB3aXRoIGZhaWx1cmUgKGV4aXQgdmFsdWUgMSku
ICBUaGUNCisJbWFrZWZpbGUgaW4gbWNzL2Vycm9ycyBoYXMgYmVlbiBjaGFu
Z2VkIHRvIGhhbmRsZSB0aGUgbmV3IGJlaGF2aW91ci4NCisNCisJKiByZXBv
cnQuY3M6IE1hZGUgJ2V4cGVjdGVkIGVycm9yJyBudW1iZXIgYSBwcm9wZXJ0
eSBhbmQgcmVuYW1lZA0KKwlpdCBmcm9tICdQcm9iZScgdG8gJ0V4cGVjdGVk
RXJyb3InLg0KKw0KKwkqIGdlbmVyaWNwYXJzZXIuY3M6IFJlbW92ZWQgZXJy
b3IgaGFuZGxpbmcgc3VwcG9ydCwgc2luY2UgaXQgaXMNCisJbm93IGFsbCBk
b25lIGJ5IFJlcG9ydCBjbGFzcy4NCisNCisJKiBjcy1wYXJzZXIuamF5LCBt
Yi1wYXJzZXIuamF5OiBFcnJvcnMgYXJlIHRyYWNrZWQgYnkgUmVwb3J0DQor
CWNsYXNzLCBzbyBwYXJzZSgpIG5vIGxvbmdlciByZXR1cm5zIGFuIGludC4N
CisNCisJKiBuYW1lc3BhY2UuY3M6IFVzZSBSZXBvcnQuRXJyb3IgaW5zdGVh
ZCBvZiBHZW5lcmljUGFyc2VyLmVycm9yDQorDQorCQ0KIDIwMDItMDYtMjIg
IE1pZ3VlbCBkZSBJY2F6YSAgPG1pZ3VlbEB4aW1pYW4uY29tPg0KIA0KIAkq
IGNsYXNzLmNzIChUeXBlQ29udGFpbmVyLkFkZE1ldGhvZCwgVHlwZUNvbnRh
aW5lci5BZGRJbmRleGVyLA0KSW5kZXg6IG1jcy9jcy1wYXJzZXIuamF5DQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL21vbm8vbWNzL21j
cy9jcy1wYXJzZXIuamF5LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNzgN
CmRpZmYgLXUgLXIxLjE3OCBjcy1wYXJzZXIuamF5DQotLS0gbWNzL2NzLXBh
cnNlci5qYXkJMjAgSnVuIDIwMDIgMTI6MjE6NDMgLTAwMDAJMS4xNzgNCisr
KyBtY3MvY3MtcGFyc2VyLmpheQkyNSBKdW4gMjAwMiAwMDozNjo1MSAtMDAw
MA0KQEAgLTM5MzMsMjggKzM5MzMsMjAgQEANCiAJbGV4ZXIgPSBuZXcgVG9r
ZW5pemVyIChpbnB1dCwgbmFtZSwgZGVmaW5lcyk7DQogfQ0KIA0KLXB1Ymxp
YyBvdmVycmlkZSBpbnQgcGFyc2UgKCkNCitwdWJsaWMgb3ZlcnJpZGUgdm9p
ZCBwYXJzZSAoKQ0KIHsNCi0JZ2xvYmFsX2Vycm9ycyA9IDA7DQogCXRyeSB7
DQogCQlpZiAoeWFjY192ZXJib3NlX2ZsYWcpDQogCQkJeXlwYXJzZSAobGV4
ZXIsIG5ldyB5eWRlYnVnLnl5RGVidWdTaW1wbGUgKCkpOw0KIAkJZWxzZQ0K
IAkJCXl5cGFyc2UgKGxleGVyKTsNCiAJfSBjYXRjaCAoRXhjZXB0aW9uIGUp
ew0KLQkJLy8gQ29uc29sZS5Xcml0ZUxpbmUgKCJGYXRhbCBlcnJvcjogIiAr
IG5hbWUpOw0KLQkJLy8gQ29uc29sZS5Xcml0ZUxpbmUgKGxleGVyLmxvY2F0
aW9uKTsNCi0NCi0JCS8vIA0KIAkJLy8gUGxlYXNlIGRvIG5vdCByZW1vdmUg
dGhpcywgaXQgaXMgdXNlZCBkdXJpbmcgZGVidWdnaW5nDQogCQkvLyBvZiB0
aGUgZ3JhbW1hcg0KIAkJLy8NCiAJCUNvbnNvbGUuV3JpdGVMaW5lIChsZXhl
ci5sb2NhdGlvbiArICIgIDogUGFyc2luZyBlcnJvciAiKTsNCiAJCUNvbnNv
bGUuV3JpdGVMaW5lIChlKTsNCi0JCWdsb2JhbF9lcnJvcnMrKzsNCiAJfQ0K
LQkNCi0JcmV0dXJuIGdsb2JhbF9lcnJvcnM7DQogfQ0KIA0KIC8qIGVuZCBl
bmQgZW5kICovDQpJbmRleDogbWNzL2RyaXZlci5jcw0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KUkNTIGZpbGU6IC9tb25vL21jcy9tY3MvZHJpdmVyLmNz
LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS45Mg0KZGlmZiAtdSAtcjEuOTIg
ZHJpdmVyLmNzDQotLS0gbWNzL2RyaXZlci5jcwkxMyBKdW4gMjAwMiAwMDox
NjowMyAtMDAwMAkxLjkyDQorKysgbWNzL2RyaXZlci5jcwkyNSBKdW4gMjAw
MiAwMDozNjo1MyAtMDAwMA0KQEAgLTQ5LDggKzQ5LDYgQEANCiAJCS8vIFdo
ZXRoZXIgd2Ugd2FudCB0byBvbmx5IHJ1biB0aGUgdG9rZW5pemVyDQogCQlz
dGF0aWMgYm9vbCB0b2tlbml6ZSA9IGZhbHNlOw0KIAkJDQotCQlzdGF0aWMg
aW50IGVycm9yX2NvdW50ID0gMDsNCi0NCiAJCXN0YXRpYyBzdHJpbmcgZmly
c3Rfc291cmNlOw0KIA0KIAkJc3RhdGljIFRhcmdldCB0YXJnZXQgPSBUYXJn
ZXQuRXhlOw0KQEAgLTk1LDE2ICs5MywxNSBAQA0KIAkJCQkoaW50KSBzcGFu
LlRvdGFsU2Vjb25kcywgc3Bhbi5NaWxsaXNlY29uZHMsIG1zZyk7DQogCQl9
DQogCSAgICAgICANCi0JCXN0YXRpYyBpbnQgdG9rZW5pemVfZmlsZSAoc3Ry
aW5nIGlucHV0X2ZpbGUpDQorCQlzdGF0aWMgdm9pZCB0b2tlbml6ZV9maWxl
IChzdHJpbmcgaW5wdXRfZmlsZSkNCiAJCXsNCiAJCQlTdHJlYW0gaW5wdXQ7
DQogDQogCQkJdHJ5IHsNCiAJCQkJaW5wdXQgPSBGaWxlLk9wZW5SZWFkIChp
bnB1dF9maWxlKTsNCi0NCiAJCQl9IGNhdGNoIHsNCiAJCQkJUmVwb3J0LkVy
cm9yICgyMDAxLCAiU291cmNlIGZpbGUgJyIgKyBpbnB1dF9maWxlICsgIicg
Y291bGQgbm90IGJlIG9wZW5lZCIpOw0KLQkJCQlyZXR1cm4gMTsNCisJCQkJ
cmV0dXJuOw0KIAkJCX0NCiANCiAJCQl1c2luZyAoaW5wdXQpew0KQEAgLTEy
MCwxMCArMTE3LDExIEBADQogCQkJCUNvbnNvbGUuV3JpdGVMaW5lICgiVG9r
ZW5pemVkOiAiICsgdG9rZW5zICsgIiBmb3VuZCAiICsgZXJyb3JzICsgIiBl
cnJvcnMiKTsNCiAJCQl9DQogCQkJDQotCQkJcmV0dXJuIDA7DQorCQkJcmV0
dXJuOw0KIAkJfQ0KLQkJDQotCQlzdGF0aWMgaW50IHBhcnNlIChzdHJpbmcg
aW5wdXRfZmlsZSkNCisNCisJCVtNb25vVE9ETygiQ2hhbmdlIGVycm9yIGNv
ZGUgZm9yIGFib3J0ZWQgY29tcGlsYXRpb24gdG8gc29tZXRoaW5nIHJlYXNv
bmFibGUiKV0JCQ0KKwkJc3RhdGljIHZvaWQgcGFyc2UgKHN0cmluZyBpbnB1
dF9maWxlKQ0KIAkJew0KIAkJCUNTaGFycFBhcnNlciBwYXJzZXI7DQogCQkJ
U3RyZWFtIGlucHV0Ow0KQEAgLTEzMyw1OSArMTMxLDUzIEBADQogCQkJCWlu
cHV0ID0gRmlsZS5PcGVuUmVhZCAoaW5wdXRfZmlsZSk7DQogCQkJfSBjYXRj
aCB7DQogCQkJCVJlcG9ydC5FcnJvciAoMjAwMSwgIlNvdXJjZSBmaWxlICci
ICsgaW5wdXRfZmlsZSArICInIGNvdWxkIG5vdCBiZSBvcGVuZWQiKTsNCi0J
CQkJcmV0dXJuIDE7DQorCQkJCXJldHVybjsNCiAJCQl9DQogDQogCQkJcGFy
c2VyID0gbmV3IENTaGFycFBhcnNlciAoaW5wdXRfZmlsZSwgaW5wdXQsIGRl
ZmluZXMpOw0KIAkJCXBhcnNlci55YWNjX3ZlcmJvc2UgPSB5YWNjX3ZlcmJv
c2U7DQogCQkJdHJ5IHsNCi0JCQkJZXJyb3JzID0gcGFyc2VyLnBhcnNlICgp
Ow0KKwkJCQlwYXJzZXIucGFyc2UgKCk7DQogCQkJfSBjYXRjaCAoRXhjZXB0
aW9uIGV4KSB7DQotCQkJCUNvbnNvbGUuV3JpdGVMaW5lIChleCk7DQotCQkJ
CUNvbnNvbGUuV3JpdGVMaW5lICgiQ29tcGlsYXRpb24gYWJvcnRlZCIpOw0K
LQkJCQlyZXR1cm4gMTsNCisJCQkJUmVwb3J0LkVycm9yKDY2NiwgIkNvbXBp
bGF0aW9uIGFib3J0ZWQ6ICIgKyBleCk7DQogCQkJfSBmaW5hbGx5IHsNCiAJ
CQkJaW5wdXQuQ2xvc2UgKCk7DQogCQkJfQ0KLQ0KLQkJCXJldHVybiBlcnJv
cnM7DQogCQl9DQogCQkNCi0JCXN0YXRpYyB2b2lkIFVzYWdlIChib29sIGlz
X2Vycm9yKQ0KKwkJc3RhdGljIHZvaWQgVXNhZ2UgKCkNCiAJCXsNCiAJCQlD
b25zb2xlLldyaXRlTGluZSAoDQogCQkJCSJNb25vIEMjIGNvbXBpbGVyLCAo
QykgMjAwMSBYaW1pYW4sIEluYy5cbiIgKw0KIAkJCQkibWNzIFtvcHRpb25z
XSBzb3VyY2UtZmlsZXNcbiIgKw0KLQkJCQkiICAgLS1hYm91dCAgICAgICAg
IEFib3V0IHRoZSBNb25vIEMjIGNvbXBpbGVyXG4iICsNCi0JCQkJIiAgIC0t
Y2hlY2tlZCAgICAgICBTZXQgZGVmYXVsdCBjb250ZXh0IHRvIGNoZWNrZWRc
biIgKw0KLQkJCQkiICAgLS1kZWZpbmUgU1lNICAgIERlZmluZXMgdGhlIHN5
bWJvbCBTWU1cbiIgKw0KLQkJCQkiICAgLS1kZWJ1ZyAgICAgICAgIEdlbmVy
YXRlIGRlYnVnZ2luZyBpbmZvcm1hdGlvblxuIiArIA0KLQkJCQkiICAgLWcg
ICAgICAgICAgICAgIEdlbmVyYXRlIGRlYnVnZ2luZyBpbmZvcm1hdGlvblxu
IiArDQotCQkJCSIgICAtLWRlYnVnLWFyZ3MgWCAgU3BlY2lmeSBhZGRpdGlv
bmFsIGFyZ3VtZW50cyBmb3IgdGhlXG4iICsNCi0JCQkJIiAgICAgICAgICAg
ICAgICAgICBzeW1ib2wgd3JpdGVyLlxuIiArDQotCQkJCSIgICAtLWZhdGFs
ICAgICAgICAgTWFrZXMgZXJyb3JzIGZhdGFsXG4iICsNCi0JCQkJIiAgIC1M
IFBBVEggICAgICAgICBBZGRzIFBBVEggdG8gdGhlIGFzc2VtYmx5IGxpbmsg
cGF0aFxuIiArDQotCQkJCSIgICAtLW5vY29uZmlnICAgICAgRGlzYWJsZXMg
aW1wbGljaXQgcmVmZXJlbmNlcyB0byBhc3NlbWJsaWVzXG4iICsNCi0JCQkJ
IiAgIC0tbm9zdGRsaWIgICAgICBEb2VzIG5vdCBsb2FkIGNvcmUgbGlicmFy
aWVzXG4iICsNCi0JCQkJIiAgIC0tbm93YXJuIFhYWCAgICBJZ25vcmVzIHdh
cm5pbmcgbnVtYmVyIFhYWFxuIiArDQotCQkJCSIgICAtbyBGTkFNRSAgICAg
ICAgU3BlY2lmaWVzIG91dHB1dCBmaWxlXG4iICsNCi0JCQkJIiAgIC1nLCAt
LWRlYnVnICAgICBXcml0ZSBzeW1ib2xpYyBkZWJ1Z2dpbmcgaW5mb3JtYXRp
b24gdG8gRklMRS1kZWJ1Zy5zXG4iICsNCi0JCQkJIiAgIC0tcGFyc2UgICAg
ICAgICBPbmx5IHBhcnNlcyB0aGUgc291cmNlIGZpbGVcbiIgKw0KLQkJCQki
ICAgLS1wcm9iZSBYICAgICAgIFByb2JlcyBmb3IgdGhlIHNvdXJjZSB0byBn
ZW5lcmF0ZSBjb2RlIFggb24gbGluZSBMXG4iICsNCi0JCQkJIiAgIC0tcmVj
dXJzZSBTUEVDICBSZWN1cnNpdmVseSBjb21waWxlcyB0aGUgZmlsZXMgaW4g
U1BFQyAoW2Rpcl0vZmlsZSlcbiIgKyANCi0JCQkJIiAgIC0tcmVzb3VyY2Ug
RklMRSBBZGRkcyBGSUxFIGFzIGEgcmVzb3VyY2VcbiIgKyANCi0JCQkJIiAg
IC0tc3RhY2t0cmFjZSAgICBTaG93cyBzdGFjayB0cmFjZSBhdCBlcnJvciBs
b2NhdGlvblxuIiArDQotCQkJCSIgICAtLXRhcmdldCBLSU5EICAgU3BlY2lm
aWVzIHRoZSB0YXJnZXQgKEtJTkQgaXMgb25lIG9mOiBleGUsIHdpbmV4ZSwg
IiArDQotCQkJCSAgICAgICAgICAgICAgICAgICAgImxpYnJhcnksIG1vZHVs
ZSlcbiIgKw0KLQkJCQkiICAgLS10aW1lc3RhbXAgICAgIERpc3BsYXlzIHRp
bWUgc3RhbXBzIG9mIHZhcmlvdXMgY29tcGlsZXIgZXZlbnRzXG4iICsNCi0J
CQkJIiAgIC0tdW5zYWZlICAgICAgICBBbGxvd3MgdW5zYWZlIGNvZGVcbiIg
Kw0KLQkJCQkiICAgLS13ZXJyb3IgICAgICAgIFRyZWF0IHdhcm5pbmdzIGFz
IGVycm9yc1xuIiArDQotCQkJCSIgICAtLXdsZXZlbCBMRVZFTCAgU2V0cyB3
YXJuaW5nIGxldmVsICh0aGUgaGlnaGVzdCBpcyA0LCB0aGUgZGVmYXVsdClc
biIgKw0KLQkJCQkiICAgLXIgICAgICAgICAgICAgIFJlZmVyZW5jZXMgYW4g
YXNzZW1ibHlcbiIgKw0KLQkJCQkiICAgLXYgICAgICAgICAgICAgIFZlcmJv
c2UgcGFyc2luZyAoZm9yIGRlYnVnZ2luZyB0aGUgcGFyc2VyKVxuIiArDQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgQGZpbGUgICAg
ICAgICAgIFJlYWQgcmVzcG9uc2UgZmlsZSBmb3IgbW9yZSBvcHRpb25zIik7
DQotCQkJaWYgKGlzX2Vycm9yKQ0KLQkJCQllcnJvcl9jb3VudCsrOw0KKwkJ
CQkiICAgLS1hYm91dCAgICAgICAgICBBYm91dCB0aGUgTW9ubyBDIyBjb21w
aWxlclxuIiArDQorCQkJCSIgICAtLWNoZWNrZWQgICAgICAgIFNldCBkZWZh
dWx0IGNvbnRleHQgdG8gY2hlY2tlZFxuIiArDQorCQkJCSIgICAtLWRlZmlu
ZSBTWU0gICAgIERlZmluZXMgdGhlIHN5bWJvbCBTWU1cbiIgKw0KKwkJCQki
ICAgLS1kZWJ1ZyAgICAgICAgICBHZW5lcmF0ZSBkZWJ1Z2dpbmcgaW5mb3Jt
YXRpb25cbiIgKyANCisJCQkJIiAgIC1nICAgICAgICAgICAgICAgR2VuZXJh
dGUgZGVidWdnaW5nIGluZm9ybWF0aW9uXG4iICsNCisJCQkJIiAgIC0tZGVi
dWctYXJncyBYICAgU3BlY2lmeSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBmb3Ig
dGhlXG4iICsNCisJCQkJIiAgICAgICAgICAgICAgICAgICAgc3ltYm9sIHdy
aXRlci5cbiIgKw0KKwkJCQkiICAgLS1mYXRhbCAgICAgICAgICBNYWtlcyBl
cnJvcnMgZmF0YWxcbiIgKw0KKwkJCQkiICAgLUwgUEFUSCAgICAgICAgICBB
ZGRzIFBBVEggdG8gdGhlIGFzc2VtYmx5IGxpbmsgcGF0aFxuIiArDQorCQkJ
CSIgICAtLW5vY29uZmlnICAgICAgIERpc2FibGVzIGltcGxpY2l0IHJlZmVy
ZW5jZXMgdG8gYXNzZW1ibGllc1xuIiArDQorCQkJCSIgICAtLW5vc3RkbGli
ICAgICAgIERvZXMgbm90IGxvYWQgY29yZSBsaWJyYXJpZXNcbiIgKw0KKwkJ
CQkiICAgLS1ub3dhcm4gWFhYICAgICBJZ25vcmVzIHdhcm5pbmcgbnVtYmVy
IFhYWFxuIiArDQorCQkJCSIgICAtbyBGTkFNRSAgICAgICAgIFNwZWNpZmll
cyBvdXRwdXQgZmlsZVxuIiArDQorCQkJCSIgICAtZywgLS1kZWJ1ZyAgICAg
IFdyaXRlIHN5bWJvbGljIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB0byBGSUxF
LWRlYnVnLnNcbiIgKw0KKwkJCQkiICAgLS1wYXJzZSAgICAgICAgICBPbmx5
IHBhcnNlcyB0aGUgc291cmNlIGZpbGVcbiIgKw0KKwkJCQkiICAgLS1leHBl
Y3QtZXJyb3IgWCBFeHBlY3QgdGhhdCBlcnJvciBYIHdpbGwgYmUgZW5jb3Vu
dGVyZWRcbiIgKw0KKwkJCQkiICAgLS1yZWN1cnNlIFNQRUMgICBSZWN1cnNp
dmVseSBjb21waWxlcyB0aGUgZmlsZXMgaW4gU1BFQyAoW2Rpcl0vZmlsZSlc
biIgKyANCisJCQkJIiAgIC0tcmVzb3VyY2UgRklMRSAgQWRkZHMgRklMRSBh
cyBhIHJlc291cmNlXG4iICsgDQorCQkJCSIgICAtLXN0YWNrdHJhY2UgICAg
IFNob3dzIHN0YWNrIHRyYWNlIGF0IGVycm9yIGxvY2F0aW9uXG4iICsNCisJ
CQkJIiAgIC0tdGFyZ2V0IEtJTkQgICAgU3BlY2lmaWVzIHRoZSB0YXJnZXQg
KEtJTkQgaXMgb25lIG9mOiBleGUsIHdpbmV4ZSwgIiArDQorCQkJCSAgICAg
ICAgICAgICAgICAgICAgICJsaWJyYXJ5LCBtb2R1bGUpXG4iICsNCisJCQkJ
IiAgIC0tdGltZXN0YW1wICAgICAgRGlzcGxheXMgdGltZSBzdGFtcHMgb2Yg
dmFyaW91cyBjb21waWxlciBldmVudHNcbiIgKw0KKwkJCQkiICAgLS11bnNh
ZmUgICAgICAgICBBbGxvd3MgdW5zYWZlIGNvZGVcbiIgKw0KKwkJCQkiICAg
LS13ZXJyb3IgICAgICAgICBUcmVhdCB3YXJuaW5ncyBhcyBlcnJvcnNcbiIg
Kw0KKwkJCQkiICAgLS13bGV2ZWwgTEVWRUwgICBTZXRzIHdhcm5pbmcgbGV2
ZWwgKHRoZSBoaWdoZXN0IGlzIDQsIHRoZSBkZWZhdWx0KVxuIiArDQorCQkJ
CSIgICAtciAgICAgICAgICAgICAgIFJlZmVyZW5jZXMgYW4gYXNzZW1ibHlc
biIgKw0KKwkJCQkiICAgLXYgICAgICAgICAgICAgICBWZXJib3NlIHBhcnNp
bmcgKGZvciBkZWJ1Z2dpbmcgdGhlIHBhcnNlcilcbiIgKw0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiAgIEBmaWxlICAgICAgICAgICAg
UmVhZCByZXNwb25zZSBmaWxlIGZvciBtb3JlIG9wdGlvbnMiKTsNCiAJCX0N
CiANCiAJCXN0YXRpYyB2b2lkIEFib3V0ICgpDQpAQCAtMjAwLDI3ICsxOTIs
MjUgQEANCiAJCQkJIlRoZSBjb21waWxlciB3YXMgd3JpdHRlbiBieSBNaWd1
ZWwgZGUgSWNhemEgYW5kIFJhdmkgUHJhdGFwIik7DQogCQl9DQogCQkNCi0J
CXN0YXRpYyB2b2lkIGVycm9yIChzdHJpbmcgbXNnKQ0KLQkJew0KLQkJCUNv
bnNvbGUuV3JpdGVMaW5lICgiRXJyb3I6ICIgKyBtc2cpOw0KLQkJfQ0KLQ0K
LQkJc3RhdGljIHZvaWQgbm90aWNlIChzdHJpbmcgbXNnKQ0KLQkJew0KLQkJ
CUNvbnNvbGUuV3JpdGVMaW5lIChtc2cpOw0KLQkJfQ0KLQkJDQogCQlwdWJs
aWMgc3RhdGljIGludCBNYWluIChzdHJpbmdbXSBhcmdzKQ0KIAkJew0KLQkJ
CS8vYXJncyA9IG5ldyBzdHJpbmcgWzFdOw0KLQkJCS8vYXJncyBbMF0gPSAi
QGxpc3QiOw0KKwkJCWJvb2wgb2sgPSBNYWluRHJpdmVyIChhcmdzKTsNCiAJ
CQkNCi0JCQlNYWluRHJpdmVyIChhcmdzKTsNCi0JCQkNCi0JCQlyZXR1cm4g
KGVycm9yX2NvdW50ICsgUmVwb3J0LkVycm9ycykgIT0gMCA/IDEgOiAwOw0K
KwkJCWlmIChvayAmJiBSZXBvcnQuRXJyb3JzID09IDApIHsNCisJCQkJQ29u
c29sZS5Xcml0ZSgiQ29tcGlsYXRpb24gc3VjY2VlZGVkIik7DQorCQkJCWlm
IChSZXBvcnQuV2FybmluZ3MgPiAwKSB7DQorCQkJCQlDb25zb2xlLldyaXRl
KCIgLSB7MH0gd2FybmluZyhzKSIsIFJlcG9ydC5XYXJuaW5ncyk7DQorCQkJ
CX0gDQorCQkJCUNvbnNvbGUuV3JpdGVMaW5lKCk7DQorCQkJCXJldHVybiAw
Ow0KKwkJCX0gZWxzZSB7DQorCQkJCUNvbnNvbGUuV3JpdGVMaW5lKCJDb21w
aWxhdGlvbiBmYWlsZWQ6IHswfSBlcnJvcihzKSwgezF9IHdhcm5pbmdzIiwN
CisJCQkJCVJlcG9ydC5FcnJvcnMsIFJlcG9ydC5XYXJuaW5ncyk7DQorCQkJ
CXJldHVybiAxOw0KKwkJCX0NCiAJCX0NCiANCi0JCXN0YXRpYyBwdWJsaWMg
aW50IExvYWRBc3NlbWJseSAoc3RyaW5nIGFzc2VtYmx5LCBib29sIHNvZnQp
DQorCQlzdGF0aWMgcHVibGljIHZvaWQgTG9hZEFzc2VtYmx5IChzdHJpbmcg
YXNzZW1ibHksIGJvb2wgc29mdCkNCiAJCXsNCiAJCQlBc3NlbWJseSBhOw0K
IAkJCXN0cmluZyB0b3RhbF9sb2cgPSAiIjsNCkBAIC0yMjgsMTIgKzIxOCwx
MyBAQA0KIAkJCXRyeSB7DQogCQkJCWNoYXJbXSBwYXRoX2NoYXJzID0geyAn
LycsICdcXCcsICcuJyB9Ow0KIA0KLQkJCQlpZiAoYXNzZW1ibHkuSW5kZXhP
ZkFueSAocGF0aF9jaGFycykgIT0gLTEpDQorCQkJCWlmIChhc3NlbWJseS5J
bmRleE9mQW55IChwYXRoX2NoYXJzKSAhPSAtMSkgew0KIAkJCQkJYSA9IEFz
c2VtYmx5LkxvYWRGcm9tIChhc3NlbWJseSk7DQotCQkJCWVsc2UNCisJCQkJ
fSBlbHNlIHsNCiAJCQkJCWEgPSBBc3NlbWJseS5Mb2FkIChhc3NlbWJseSk7
DQorCQkJCX0NCiAJCQkJVHlwZU1hbmFnZXIuQWRkQXNzZW1ibHkgKGEpOw0K
LQkJCQlyZXR1cm4gMDsNCisNCiAJCQl9IGNhdGNoIChGaWxlTm90Rm91bmRF
eGNlcHRpb24pew0KIAkJCQlmb3JlYWNoIChzdHJpbmcgZGlyIGluIGxpbmtf
cGF0aHMpew0KIAkJCQkJc3RyaW5nIGZ1bGxfcGF0aCA9IGRpciArICIvIiAr
IGFzc2VtYmx5ICsgIi5kbGwiOw0KQEAgLTI0MSw0NyArMjMyLDM3IEBADQog
CQkJCQl0cnkgew0KIAkJCQkJCWEgPSBBc3NlbWJseS5Mb2FkRnJvbSAoZnVs
bF9wYXRoKTsNCiAJCQkJCQlUeXBlTWFuYWdlci5BZGRBc3NlbWJseSAoYSk7
DQotCQkJCQkJcmV0dXJuIDA7DQorCQkJCQkJcmV0dXJuOw0KIAkJCQkJfSBj
YXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGZmKSB7DQogCQkJCQkJdG90
YWxfbG9nICs9IGZmLkZ1c2lvbkxvZzsNCiAJCQkJCQljb250aW51ZTsNCiAJ
CQkJCX0NCiAJCQkJfQ0KLQkJCQlpZiAoc29mdCkNCi0JCQkJCXJldHVybiAw
Ow0KKwkJCQlpZiAoIXNvZnQpIHsNCisJCQkJCVJlcG9ydC5FcnJvciAoNiwg
IkNhbm5vdCBmaW5kIGFzc2VtYmx5IGAiICsgYXNzZW1ibHkgKyAiJyIgKTsN
CisJCQkJCUNvbnNvbGUuV3JpdGVMaW5lICgiTG9nOiBcbiIgKyB0b3RhbF9s
b2cpOw0KKwkJCQl9DQogCQkJfSBjYXRjaCAoQmFkSW1hZ2VGb3JtYXRFeGNl
cHRpb24gZikgew0KLQkJCQllcnJvciAoIi8vIEJhZCBmaWxlIGZvcm1hdCB3
aGlsZSBsb2FkaW5nIGFzc2VtYmx5Iik7DQotCQkJCWVycm9yICgiTG9nOiAi
ICsgZi5GdXNpb25Mb2cpOw0KLQkJCQlyZXR1cm4gMTsNCisJCQkJUmVwb3J0
LkVycm9yKDYsICJDYW5ub3QgbG9hZCBhc3NlbWJseSAoYmFkIGZpbGUgZm9y
bWF0KSIgKyBmLkZ1c2lvbkxvZyk7DQogCQkJfSBjYXRjaCAoRmlsZUxvYWRF
eGNlcHRpb24gZil7DQotCQkJCWVycm9yICgiRmlsZSBMb2FkIEV4Y2VwdGlv
bjogIiArIGFzc2VtYmx5KTsNCi0JCQkJZXJyb3IgKCJMb2c6ICIgKyBmLkZ1
c2lvbkxvZyk7DQotCQkJCXJldHVybiAxOw0KKwkJCQlSZXBvcnQuRXJyb3Io
NiwgIkNhbm5vdCBsb2FkIGFzc2VtYmx5ICIgKyBmLkZ1c2lvbkxvZyk7DQog
CQkJfSBjYXRjaCAoQXJndW1lbnROdWxsRXhjZXB0aW9uKXsNCi0JCQkJZXJy
b3IgKCIvLyBBcmd1bWVudCBOdWxsIGV4Y2VwdGlvbiAiKTsNCi0JCQkJcmV0
dXJuIDE7DQorCQkJCVJlcG9ydC5FcnJvcig2LCAiQ2Fubm90IGxvYWQgYXNz
ZW1ibHkgKG51bGwgYXJndW1lbnQpIik7DQogCQkJfQ0KLQkJCQ0KLQkJCVJl
cG9ydC5FcnJvciAoNiwgIkNhbiBub3QgZmluZCBhc3NlbWJseSBgIiArIGFz
c2VtYmx5ICsgIiciICk7DQotCQkJQ29uc29sZS5Xcml0ZUxpbmUgKCJMb2c6
IFxuIiArIHRvdGFsX2xvZyk7DQotDQotCQkJcmV0dXJuIDA7DQogCQl9DQog
DQogCQkvLy8gPHN1bW1hcnk+DQogCQkvLy8gICBMb2FkcyBhbGwgYXNzZW1i
bGllcyByZWZlcmVuY2VkIG9uIHRoZSBjb21tYW5kIGxpbmUNCiAJCS8vLyA8
L3N1bW1hcnk+DQotCQlzdGF0aWMgcHVibGljIGludCBMb2FkUmVmZXJlbmNl
cyAoKQ0KKwkJc3RhdGljIHB1YmxpYyB2b2lkIExvYWRSZWZlcmVuY2VzICgp
DQogCQl7DQotCQkJaW50IGVycm9ycyA9IDA7DQotDQogCQkJZm9yZWFjaCAo
c3RyaW5nIHIgaW4gcmVmZXJlbmNlcykNCi0JCQkJZXJyb3JzICs9IExvYWRB
c3NlbWJseSAociwgZmFsc2UpOw0KKwkJCQlMb2FkQXNzZW1ibHkgKHIsIGZh
bHNlKTsNCiANCiAJCQlmb3JlYWNoIChzdHJpbmcgciBpbiBzb2Z0X3JlZmVy
ZW5jZXMpDQotCQkJCWVycm9ycyArPSBMb2FkQXNzZW1ibHkgKHIsIHRydWUp
Ow0KKwkJCQlMb2FkQXNzZW1ibHkgKHIsIHRydWUpOw0KIAkJCQ0KLQkJCXJl
dHVybiBlcnJvcnM7DQorCQkJcmV0dXJuOw0KIAkJfQ0KIA0KIAkJc3RhdGlj
IHZvaWQgU2V0dXBEZWZhdWx0RGVmaW5lcyAoKQ0KQEAgLTM2NCw3ICszNDUs
NyBAQA0KIAkJCXBhdHRlcm4gPSBzcGVjOw0KIAkJfQ0KIA0KLQkJc3RhdGlj
IGludCBQcm9jZXNzRmlsZSAoc3RyaW5nIGYpDQorCQlzdGF0aWMgdm9pZCBQ
cm9jZXNzRmlsZSAoc3RyaW5nIGYpDQogCQl7DQogCQkJaWYgKGZpcnN0X3Nv
dXJjZSA9PSBudWxsKQ0KIAkJCQlmaXJzdF9zb3VyY2UgPSBmOw0KQEAgLTM3
NywyMSArMzU4LDIxIEBADQogCQkJfSBlbHNlDQogCQkJCXNvdXJjZV9maWxl
cy5BZGQgKGYsIGYpOw0KIAkJCQkJDQotCQkJaWYgKHRva2VuaXplKQ0KKwkJ
CWlmICh0b2tlbml6ZSkgew0KIAkJCQl0b2tlbml6ZV9maWxlIChmKTsNCi0J
CQllbHNlDQotCQkJCXJldHVybiBwYXJzZSAoZik7DQotCQkJcmV0dXJuIDA7
DQorCQkJfSBlbHNlIHsNCisJCQkJcGFyc2UgKGYpOw0KKwkJCX0NCiAJCX0N
CiANCi0JCXN0YXRpYyBpbnQgQ29tcGlsZUZpbGVzIChzdHJpbmcgc3BlYywg
Ym9vbCByZWN1cnNlKQ0KKwkJc3RhdGljIHZvaWQgQ29tcGlsZUZpbGVzIChz
dHJpbmcgc3BlYywgYm9vbCByZWN1cnNlKQ0KIAkJew0KIAkJCXN0cmluZyBw
YXRoLCBwYXR0ZXJuOw0KLQkJCWludCBlcnJvcnMgPSAwOw0KIA0KIAkJCVNw
bGl0UGF0aEFuZFBhdHRlcm4gKHNwZWMsIG91dCBwYXRoLCBvdXQgcGF0dGVy
bik7DQogCQkJaWYgKHBhdHRlcm4uSW5kZXhPZiAoIioiKSA9PSAtMSl7DQot
CQkJCXJldHVybiBQcm9jZXNzRmlsZSAoc3BlYyk7DQorCQkJCVByb2Nlc3NG
aWxlIChzcGVjKTsNCisJCQkJcmV0dXJuOw0KIAkJCX0NCiANCiAJCQlzdHJp
bmcgW10gZmlsZXMgPSBudWxsOw0KQEAgLTM5OSwxNiArMzgwLDE3IEBADQog
CQkJCWZpbGVzID0gRGlyZWN0b3J5LkdldEZpbGVzIChwYXRoLCBwYXR0ZXJu
KTsNCiAJCQl9IGNhdGNoIChTeXN0ZW0uSU8uRGlyZWN0b3J5Tm90Rm91bmRF
eGNlcHRpb24pIHsNCiAJCQkJUmVwb3J0LkVycm9yICgyMDAxLCAiU291cmNl
IGZpbGUgYCIgKyBzcGVjICsgIicgY291bGQgbm90IGJlIGZvdW5kIik7DQot
CQkJCXJldHVybiAxOw0KKwkJCQlyZXR1cm47DQogCQkJfSBjYXRjaCAoU3lz
dGVtLklPLklPRXhjZXB0aW9uKXsNCiAJCQkJUmVwb3J0LkVycm9yICgyMDAx
LCAiU291cmNlIGZpbGUgYCIgKyBzcGVjICsgIicgY291bGQgbm90IGJlIGZv
dW5kIik7DQotCQkJCXJldHVybiAxOw0KKwkJCQlyZXR1cm47DQorCQkJfQ0K
KwkJCWZvcmVhY2ggKHN0cmluZyBmIGluIGZpbGVzKSB7DQorCQkJCVByb2Nl
c3NGaWxlIChmKTsNCiAJCQl9DQotCQkJZm9yZWFjaCAoc3RyaW5nIGYgaW4g
ZmlsZXMpDQotCQkJCWVycm9ycyArPSBQcm9jZXNzRmlsZSAoZik7DQogDQog
CQkJaWYgKCFyZWN1cnNlKQ0KLQkJCQlyZXR1cm4gZXJyb3JzOw0KKwkJCQly
ZXR1cm47DQogCQkJDQogCQkJc3RyaW5nIFtdIGRpcnMgPSBudWxsOw0KIA0K
QEAgLTQyMSwxMSArNDAzLDggQEANCiAJCQkJCQ0KIAkJCQkvLyBEb24ndCBp
bmNsdWRlIHBhdGggaW4gdGhpcyBzdHJpbmcsIGFzIGVhY2gNCiAJCQkJLy8g
ZGlyZWN0b3J5IGVudHJ5IGFscmVhZHkgZG9lcw0KLQkJCQllcnJvcnMgKz0g
Q29tcGlsZUZpbGVzIChkICsgIi8iICsgcGF0dGVybiwgdHJ1ZSk7DQorCQkJ
CUNvbXBpbGVGaWxlcyAoZCArICIvIiArIHBhdHRlcm4sIHRydWUpOw0KIAkJ
CX0NCi0JCQkNCi0NCi0JCQlyZXR1cm4gZXJyb3JzOw0KIAkJfQ0KIA0KIAkJ
c3RhdGljIHZvaWQgRGVmaW5lRGVmYXVsdENvbmZpZyAoKQ0KQEAgLTQ3Niw5
ICs0NTUsMTAgQEANCiAJCS8vLyAgICBUT0RPOiBNb3N0bHkgc3RydWN0dXJl
ZCB0byBkZWJ1ZyB0aGUgY29tcGlsZXINCiAJCS8vLyAgICBub3csIG5lZWRz
IHRvIGJlIHR1cm5lZCBpbnRvIGEgcmVhbCBkcml2ZXIgc29vbi4NCiAJCS8v
LyA8L3JlbWFya3M+DQotCQlzdGF0aWMgdm9pZCBNYWluRHJpdmVyIChzdHJp
bmcgW10gYXJncykNCisJCVtNb25vVE9ETygiQ2hhbmdlIGVycm9yIGNvZGUg
Zm9yIHVua25vd24gYXJndW1lbnQgdG8gc29tZXRoaW5nIHJlYXNvbmFibGUi
KV0NCisJCXN0YXRpYyBib29sIE1haW5Ecml2ZXIgKHN0cmluZyBbXSBhcmdz
KQ0KIAkJew0KLQkJCWludCBlcnJvcnMgPSAwLCBpOw0KKwkJCWludCBpOw0K
IAkJCXN0cmluZyBvdXRwdXRfZmlsZSA9IG51bGw7DQogCQkJYm9vbCBwYXJz
aW5nX29wdGlvbnMgPSB0cnVlOw0KIAkJCQ0KQEAgLTUyMCw3ICs1MDAsNyBA
QA0KIAkJCQkJaWYgKGV4dHJhX2FyZ3MgPT0gbnVsbCl7DQogCQkJCQkJUmVw
b3J0LkVycm9yICgyMDExLCAiVW5hYmxlIHRvIG9wZW4gcmVzcG9uc2UgZmls
ZTogIiArDQogCQkJCQkJCSAgICAgIHJlc3BvbnNlX2ZpbGUpOw0KLQkJCQkJ
CXJldHVybjsNCisJCQkJCQlyZXR1cm4gZmFsc2U7DQogCQkJCQl9DQogDQog
CQkJCQluZXdfYXJncyA9IG5ldyBzdHJpbmcgW2V4dHJhX2FyZ3MuTGVuZ3Ro
ICsgYXJnY107DQpAQCAtNTUxLDggKzUzMSw4IEBADQogDQogCQkJCQljYXNl
ICItLW1haW4iOiBjYXNlICItbSI6DQogCQkJCQkJaWYgKChpICsgMSkgPj0g
YXJnYyl7DQotCQkJCQkJCVVzYWdlICh0cnVlKTsNCi0JCQkJCQkJcmV0dXJu
Ow0KKwkJCQkJCQlVc2FnZSAoKTsNCisJCQkJCQkJcmV0dXJuIGZhbHNlOw0K
IAkJCQkJCX0NCiAJCQkJCQlSb290Q29udGV4dC5NYWluQ2xhc3MgPSBhcmdz
IFsrK2ldOw0KIAkJCQkJCWNvbnRpbnVlOw0KQEAgLTU2MywyNCArNTQzLDI0
IEBADQogCQkJCQkJDQogCQkJCQljYXNlICIvPyI6IGNhc2UgIi9oIjogY2Fz
ZSAiL2hlbHAiOg0KIAkJCQkJY2FzZSAiLS1oZWxwIjoNCi0JCQkJCQlVc2Fn
ZSAoZmFsc2UpOw0KLQkJCQkJCXJldHVybjsNCisJCQkJCQlVc2FnZSAoKTsN
CisJCQkJCQlyZXR1cm4gZmFsc2U7DQogDQogCQkJCQljYXNlICItLWRlZmlu
ZSI6DQogCQkJCQkJaWYgKChpICsgMSkgPj0gYXJnYyl7DQotCQkJCQkJCVVz
YWdlICh0cnVlKTsNCi0JCQkJCQkJcmV0dXJuOw0KKwkJCQkJCQlVc2FnZSAo
KTsNCisJCQkJCQkJcmV0dXJuIGZhbHNlOw0KIAkJCQkJCX0NCiAJCQkJCQlk
ZWZpbmVzLkFkZCAoYXJncyBbKytpXSk7DQogCQkJCQkJY29udGludWU7DQog
CQkJCQkJDQotCQkJCQljYXNlICItLXByb2JlIjogew0KKwkJCQkJY2FzZSAi
LS1leHBlY3QtZXJyb3IiOiB7DQogCQkJCQkJaW50IGNvZGUgPSAwOw0KIA0K
IAkJCQkJCXRyeSB7DQogCQkJCQkJCWNvZGUgPSBJbnQzMi5QYXJzZSAoDQog
CQkJCQkJCQlhcmdzIFsrK2ldLCBOdW1iZXJTdHlsZXMuQWxsb3dMZWFkaW5n
U2lnbik7DQotCQkJCQkJCVJlcG9ydC5TZXRQcm9iZSAoY29kZSk7DQorCQkJ
CQkJCVJlcG9ydC5FeHBlY3RlZEVycm9yID0gY29kZTsNCiAJCQkJCQl9IGNh
dGNoIHsNCiAJCQkJCQkJUmVwb3J0LkVycm9yICgtMTQsICJJbnZhbGlkIG51
bWJlciBzcGVjaWZpZWQiKTsNCiAJCQkJCQl9IA0KQEAgLTU5NSw4ICs1NzUs
OCBAQA0KIAkJCQkJY2FzZSAiLW8iOiANCiAJCQkJCWNhc2UgIi0tb3V0cHV0
IjoNCiAJCQkJCQlpZiAoKGkgKyAxKSA+PSBhcmdjKXsNCi0JCQkJCQkJVXNh
Z2UgKHRydWUpOw0KLQkJCQkJCQlyZXR1cm47DQorCQkJCQkJCVVzYWdlICgp
Ow0KKwkJCQkJCQlyZXR1cm4gZmFsc2U7DQogCQkJCQkJfQ0KIAkJCQkJCW91
dHB1dF9maWxlID0gYXJncyBbKytpXTsNCiAJCQkJCQlzdHJpbmcgYm5hbWUg
PSBDb2RlR2VuLkJhc2VuYW1lIChvdXRwdXRfZmlsZSk7DQpAQCAtNjE0LDkg
KzU5NCw5IEBADQogDQogCQkJCQljYXNlICItLXJlc291cmNlIjoNCiAJCQkJ
CQlpZiAoKGkgKyAxKSA+PSBhcmdjKXsNCi0JCQkJCQkJVXNhZ2UgKHRydWUp
Ow0KKwkJCQkJCQlVc2FnZSAoKTsNCiAJCQkJCQkJQ29uc29sZS5Xcml0ZUxp
bmUoIk1pc3NpbmcgYXJndW1lbnQgdG8gLS1yZXNvdXJjZSIpOyANCi0JCQkJ
CQkJcmV0dXJuOw0KKwkJCQkJCQlyZXR1cm4gZmFsc2U7DQogCQkJCQkJfQ0K
IAkJCQkJCWlmIChyZXNvdXJjZXMgPT0gbnVsbCkNCiAJCQkJCQkJcmVzb3Vy
Y2VzID0gbmV3IEFycmF5TGlzdCAoKTsNCkBAIC02MjYsOCArNjA2LDggQEAN
CiAJCQkJCQkJDQogCQkJCQljYXNlICItLXRhcmdldCI6DQogCQkJCQkJaWYg
KChpICsgMSkgPj0gYXJnYyl7DQotCQkJCQkJCVVzYWdlICh0cnVlKTsNCi0J
CQkJCQkJcmV0dXJuOw0KKwkJCQkJCQlVc2FnZSAoKTsNCisJCQkJCQkJcmV0
dXJuIGZhbHNlOw0KIAkJCQkJCX0NCiANCiAJCQkJCQlzdHJpbmcgdHlwZSA9
IGFyZ3MgWysraV07DQpAQCAtNjUwLDE1ICs2MzAsMTUgQEANCiAJCQkJCQkJ
dGFyZ2V0X2V4dCA9ICIuZGxsIjsNCiAJCQkJCQkJYnJlYWs7DQogCQkJCQkJ
ZGVmYXVsdDoNCi0JCQkJCQkJVXNhZ2UgKHRydWUpOw0KLQkJCQkJCQlyZXR1
cm47DQorCQkJCQkJCVVzYWdlICgpOw0KKwkJCQkJCQlyZXR1cm4gZmFsc2U7
DQogCQkJCQkJfQ0KIAkJCQkJCWNvbnRpbnVlOw0KIA0KIAkJCQkJY2FzZSAi
LXIiOg0KIAkJCQkJCWlmICgoaSArIDEpID49IGFyZ2Mpew0KLQkJCQkJCQlV
c2FnZSAodHJ1ZSk7DQotCQkJCQkJCXJldHVybjsNCisJCQkJCQkJVXNhZ2Ug
KCk7DQorCQkJCQkJCXJldHVybiBmYWxzZTsNCiAJCQkJCQl9DQogCQkJCQkJ
DQogCQkJCQkJcmVmZXJlbmNlcy5BZGQgKGFyZ3MgWysraV0pOw0KQEAgLTY2
Niw4ICs2NDYsOCBAQA0KIAkJCQkJCQ0KIAkJCQkJY2FzZSAiLUwiOg0KIAkJ
CQkJCWlmICgoaSArIDEpID49IGFyZ2Mpew0KLQkJCQkJCQlVc2FnZSAodHJ1
ZSk7DQotCQkJCQkJCXJldHVybjsNCisJCQkJCQkJVXNhZ2UgKCk7CQ0KKwkJ
CQkJCQlyZXR1cm4gZmFsc2U7DQogCQkJCQkJfQ0KIAkJCQkJCWxpbmtfcGF0
aHMuQWRkIChhcmdzIFsrK2ldKTsNCiAJCQkJCQljb250aW51ZTsNCkBAIC02
ODYsMTYgKzY2NiwxNiBAQA0KIA0KIAkJCQkJY2FzZSAiLS1ub3dhcm4iOg0K
IAkJCQkJCWlmICgoaSArIDEpID49IGFyZ2Mpew0KLQkJCQkJCQlVc2FnZSAo
dHJ1ZSk7DQotCQkJCQkJCXJldHVybjsNCisJCQkJCQkJVXNhZ2UgKCk7DQor
CQkJCQkJCXJldHVybiBmYWxzZTsNCiAJCQkJCQl9DQogCQkJCQkJaW50IHdh
cm47DQogCQkJCQkJDQogCQkJCQkJdHJ5IHsNCiAJCQkJCQkJd2FybiA9IElu
dDMyLlBhcnNlIChhcmdzIFsrK2ldKTsNCiAJCQkJCQl9IGNhdGNoIHsNCi0J
CQkJCQkJVXNhZ2UgKHRydWUpOw0KLQkJCQkJCQlyZXR1cm47DQorCQkJCQkJ
CVVzYWdlICgpOw0KKwkJCQkJCQlyZXR1cm4gZmFsc2U7DQogCQkJCQkJfQ0K
IAkJCQkJCVJlcG9ydC5TZXRJZ25vcmVXYXJuaW5nICh3YXJuKTsNCiAJCQkJ
CQljb250aW51ZTsNCkBAIC03MDUsOCArNjg1LDcgQEANCiAJCQkJCQkJUmVw
b3J0LkVycm9yICgNCiAJCQkJCQkJCTE5MDAsDQogCQkJCQkJCQkiLS13bGV2
ZWwgcmVxdWlyZXMgYW4gdmFsdWUgZnJvbSAwIHRvIDQiKTsNCi0JCQkJCQkJ
ZXJyb3JfY291bnQrKzsNCi0JCQkJCQkJcmV0dXJuOw0KKwkJCQkJCQlyZXR1
cm4gZmFsc2U7DQogCQkJCQkJfQ0KIAkJCQkJCWludCBsZXZlbDsNCiAJCQkJ
CQkNCkBAIC03MTYsMjYgKzY5NSwyNSBAQA0KIAkJCQkJCQlSZXBvcnQuRXJy
b3IgKA0KIAkJCQkJCQkJMTkwMCwNCiAJCQkJCQkJCSItLXdsZXZlbCByZXF1
aXJlcyBhbiB2YWx1ZSBmcm9tIDAgdG8gNCIpOw0KLQkJCQkJCQlyZXR1cm47
DQorCQkJCQkJCXJldHVybiBmYWxzZTsNCiAJCQkJCQl9DQogCQkJCQkJaWYg
KGxldmVsIDwgMCB8fCBsZXZlbCA+IDQpew0KIAkJCQkJCQlSZXBvcnQuRXJy
b3IgKDE5MDAsICJXYXJuaW5nIGxldmVsIG11c3QgYmUgMCB0byA0Iik7DQot
CQkJCQkJCXJldHVybjsNCisJCQkJCQkJcmV0dXJuIGZhbHNlOw0KIAkJCQkJ
CX0gZWxzZQ0KIAkJCQkJCQlSb290Q29udGV4dC5XYXJuaW5nTGV2ZWwgPSBs
ZXZlbDsNCiAJCQkJCQljb250aW51ZTsNCiAJCQkJCQkNCiAJCQkJCWNhc2Ug
Ii0tYWJvdXQiOg0KIAkJCQkJCUFib3V0ICgpOw0KLQkJCQkJCXJldHVybjsN
CisJCQkJCQlyZXR1cm4gdHJ1ZTsNCiANCiAJCQkJCWNhc2UgIi0tcmVjdXJz
ZSI6DQogCQkJCQkJaWYgKChpICsgMSkgPj0gYXJnYyl7DQogCQkJCQkJCUNv
bnNvbGUuV3JpdGVMaW5lICgiLS1yZWN1cnNlIHJlcXVpcmVzIGFuIGFyZ3Vt
ZW50Iik7DQotCQkJCQkJCWVycm9yX2NvdW50Kys7DQotCQkJCQkJCXJldHVy
bjsNCisJCQkJCQkJcmV0dXJuIGZhbHNlOw0KIAkJCQkJCX0NCi0JCQkJCQll
cnJvcnMgKz0gQ29tcGlsZUZpbGVzIChhcmdzIFsrK2ldLCB0cnVlKTsNCisJ
CQkJCQlDb21waWxlRmlsZXMgKGFyZ3MgWysraV0sIHRydWUpOyANCiAJCQkJ
CQljb250aW51ZTsNCiAJCQkJCQkNCiAJCQkJCWNhc2UgIi0tdGltZXN0YW1w
IjoNCkBAIC03NTEsOCArNzI5LDcgQEANCiAJCQkJCWNhc2UgIi0tZGVidWct
YXJncyI6DQogCQkJCQkJaWYgKChpICsgMSkgPj0gYXJnYyl7DQogCQkJCQkJ
CUNvbnNvbGUuV3JpdGVMaW5lICgiLS1kZWJ1Zy1hcmdzIHJlcXVpcmVzIGFu
IGFyZ3VtZW50Iik7DQotCQkJCQkJCWVycm9yX2NvdW50Kys7DQotCQkJCQkJ
CXJldHVybjsNCisJCQkJCQkJcmV0dXJuIGZhbHNlOw0KIAkJCQkJCX0NCiAJ
CQkJCQljaGFyW10gc2VwID0geyAnLCcgfTsNCiAJCQkJCQlkZWJ1Z19hcmds
aXN0LkFkZFJhbmdlIChhcmdzIFsrK2ldLlNwbGl0IChzZXApKTsNCkBAIC03
NjMsMjggKzc0MCwyNyBAQA0KIAkJCQkJCWNvbnRpbnVlOw0KIA0KIAkJCQkJ
ZGVmYXVsdDoNCi0JCQkJCQlDb25zb2xlLldyaXRlTGluZSAoIlVua25vd24g
b3B0aW9uOiAiICsgYXJnKTsNCi0JCQkJCQllcnJvcnMrKzsNCisJCQkJCQlS
ZXBvcnQuV2FybmluZyg2NjYsICJVbmtub3duIG9wdGlvbjogIiArIGFyZyk7
DQogCQkJCQkJY29udGludWU7DQogCQkJCQl9DQogCQkJCX0NCiANCi0JCQkJ
ZXJyb3JzICs9IENvbXBpbGVGaWxlcyAoYXJnLCBmYWxzZSk7IA0KKwkJCQlD
b21waWxlRmlsZXMgKGFyZywgZmFsc2UpOyANCiAJCQl9DQogDQogCQkJaWYg
KHRva2VuaXplKQ0KLQkJCQlyZXR1cm47DQorCQkJCXJldHVybiB0cnVlOw0K
IAkJCQ0KIAkJCWlmIChmaXJzdF9zb3VyY2UgPT0gbnVsbCl7DQogCQkJCVJl
cG9ydC5FcnJvciAoMjAwOCwgIk5vIGZpbGVzIHRvIGNvbXBpbGUgd2VyZSBz
cGVjaWZpZWQiKTsNCi0JCQkJcmV0dXJuOw0KKwkJCQlyZXR1cm4gZmFsc2U7
DQogCQkJfQ0KIA0KIAkJCWlmIChSZXBvcnQuRXJyb3JzID4gMCkNCi0JCQkJ
cmV0dXJuOw0KKwkJCQlyZXR1cm4gZmFsc2U7DQogCQkJDQogCQkJaWYgKHBh
cnNlX29ubHkpDQotCQkJCXJldHVybjsNCisJCQkJcmV0dXJuIHRydWU7DQog
CQkJDQogCQkJLy8NCiAJCQkvLyBMb2FkIENvcmUgTGlicmFyeSBmb3IgZGVm
YXVsdCBjb21waWxhdGlvbg0KQEAgLTc5NSw5ICs3NzEsOCBAQA0KIAkJCWlm
IChsb2FkX2RlZmF1bHRfY29uZmlnKQ0KIAkJCQlEZWZpbmVEZWZhdWx0Q29u
ZmlnICgpOw0KIA0KLQkJCWlmIChlcnJvcnMgPiAwKXsNCi0JCQkJZXJyb3Ig
KCJQYXJzaW5nIGZhaWxlZCIpOw0KLQkJCQlyZXR1cm47DQorCQkJaWYgKFJl
cG9ydC5FcnJvcnMgPiAwKXsNCisJCQkJcmV0dXJuIGZhbHNlOw0KIAkJCX0N
CiANCiAJCQkvLw0KQEAgLTgwNSwxNyArNzgwLDE1IEBADQogCQkJLy8NCiAJ
CQlpZiAodGltZXN0YW1wcykNCiAJCQkJU2hvd1RpbWUgKCJMb2FkaW5nIHJl
ZmVyZW5jZXMiKTsNCi0JCQllcnJvcnMgKz0gTG9hZFJlZmVyZW5jZXMgKCk7
DQorCQkJTG9hZFJlZmVyZW5jZXMgKCk7DQorCQkJDQogCQkJaWYgKHRpbWVz
dGFtcHMpDQogCQkJCVNob3dUaW1lICgiICAgUmVmZXJlbmNlcyBsb2FkZWQi
KTsNCiAJCQkNCi0JCQlpZiAoZXJyb3JzID4gMCl7DQotCQkJCWVycm9yICgi
Q291bGQgbm90IGxvYWQgb25lIG9yIG1vcmUgYXNzZW1ibGllcyIpOw0KLQkJ
CQlyZXR1cm47DQorCQkJaWYgKFJlcG9ydC5FcnJvcnMgPiAwKXsNCisJCQkJ
cmV0dXJuIGZhbHNlOw0KIAkJCX0NCiANCi0JCQllcnJvcl9jb3VudCA9IGVy
cm9yczsNCi0NCiAJCQkvLw0KIAkJCS8vIFF1aWNrIGhhY2sNCiAJCQkvLw0K
QEAgLTg0NCw3ICs4MTcsNyBAQA0KIAkJCWlmICghUm9vdENvbnRleHQuU3Rk
TGliKXsNCiAJCQkJUm9vdENvbnRleHQuUmVzb2x2ZUNvcmUgKCk7DQogCQkJ
CWlmIChSZXBvcnQuRXJyb3JzID4gMCkNCi0JCQkJCXJldHVybjsNCisJCQkJ
CXJldHVybiBmYWxzZTsNCiAJCQl9DQogCQkJDQogCQkJVHlwZU1hbmFnZXIu
SW5pdENvcmVUeXBlcyAoKTsNCkBAIC04NjYsOCArODM5LDcgQEANCiAJCQlU
eXBlTWFuYWdlci5Jbml0Q29kZUhlbHBlcnMgKCk7DQogCQkJCQ0KIAkJCWlm
IChSZXBvcnQuRXJyb3JzID4gMCl7DQotCQkJCWVycm9yICgiQ29tcGlsYXRp
b24gZmFpbGVkIik7DQotCQkJCXJldHVybjsNCisJCQkJcmV0dXJuIGZhbHNl
Ow0KIAkJCX0NCiAJCQkNCiAJCQkvLw0KQEAgLTg4MCw4ICs4NTIsNyBAQA0K
IAkJCQlTaG93VGltZSAoIiAgIGRvbmUiKTsNCiANCiAJCQlpZiAoUmVwb3J0
LkVycm9ycyA+IDApew0KLQkJCQllcnJvciAoIkNvbXBpbGF0aW9uIGZhaWxl
ZCIpOw0KLQkJCQlyZXR1cm47DQorCQkJCXJldHVybiBmYWxzZTsNCiAJCQl9
DQogDQogCQkJaWYgKHRpbWVzdGFtcHMpDQpAQCAtOTA0LDcgKzg3NSw3IEBA
DQogCQkJCWlmIChlcCA9PSBudWxsKXsNCiAJCQkJCVJlcG9ydC5FcnJvciAo
NTAwMSwgIlByb2dyYW0gIiArIG91dHB1dF9maWxlICsNCiAJCQkJCQkJICAg
ICAgIiBkb2VzIG5vdCBoYXZlIGFuIGVudHJ5IHBvaW50IGRlZmluZWQiKTsN
Ci0JCQkJCXJldHVybjsNCisJCQkJCXJldHVybiBmYWxzZTsNCiAJCQkJfQ0K
IAkJCQkNCiAJCQkJQ29kZUdlbi5Bc3NlbWJseUJ1aWxkZXIuU2V0RW50cnlQ
b2ludCAoZXAsIGspOw0KQEAgLTkyOCwxMyArODk5LDEzIEBADQogCQkJCQlT
aG93VGltZSAoIlNhdmVkIHN5bWJvbHMiKTsNCiAJCQl9DQogDQotCQkJaWYg
KFJlcG9ydC5FcnJvcnMgPiAwKXsNCi0JCQkJZXJyb3IgKCJDb21waWxhdGlv
biBmYWlsZWQiKTsNCi0JCQkJcmV0dXJuOw0KLQkJCX0gZWxzZSBpZiAoUmVw
b3J0LlByb2JlQ29kZSAhPSAwKXsNCi0JCQkJZXJyb3IgKCJGYWlsZWQgdG8g
cmVwb3J0IGNvZGUgIiArIFJlcG9ydC5Qcm9iZUNvZGUpOw0KLQkJCQlFbnZp
cm9ubWVudC5FeGl0ICgxMjQpOw0KKwkJCWlmIChSZXBvcnQuRXhwZWN0ZWRF
cnJvciAhPSAwKXsNCisJCQkJQ29uc29sZS5Xcml0ZUxpbmUoIkZhaWxlZCB0
byByZXBvcnQgZXhwZWN0ZWQgZXJyb3IgIiArIFJlcG9ydC5FeHBlY3RlZEVy
cm9yKTsNCisJCQkJRW52aXJvbm1lbnQuRXhpdCAoMSk7DQorCQkJCXJldHVy
biBmYWxzZTsNCiAJCQl9DQorDQorCQkJcmV0dXJuIChSZXBvcnQuRXJyb3Jz
ID09IDApOw0KIAkJfQ0KIA0KIAl9DQpJbmRleDogbWNzL2dlbmVyaWNwYXJz
ZXIuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvbW9u
by9tY3MvbWNzL2dlbmVyaWNwYXJzZXIuY3Msdg0KcmV0cmlldmluZyByZXZp
c2lvbiAxLjYNCmRpZmYgLXUgLXIxLjYgZ2VuZXJpY3BhcnNlci5jcw0KLS0t
IG1jcy9nZW5lcmljcGFyc2VyLmNzCTE5IE5vdiAyMDAxIDAwOjQ0OjA5IC0w
MDAwCTEuNg0KKysrIG1jcy9nZW5lcmljcGFyc2VyLmNzCTI1IEp1biAyMDAy
IDAwOjM2OjUzIC0wMDAwDQpAQCAtMTksMTUgKzE5LDEzIEBADQogCS8vLyA8
L3N1bW1hcnk+DQogCXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBHZW5lcmljUGFy
c2VyDQogCXsNCi0JCXN0YXRpYyBwcm90ZWN0ZWQgaW50IGdsb2JhbF9lcnJv
cnM7DQotDQogCQkvLyBOYW1lIG9mIHRoZSBmaWxlIHdlIGFyZSBwYXJzaW5n
DQogCQlwdWJsaWMgc3RyaW5nIG5hbWU7DQogDQogCQkvLyBJbnB1dCBzdHJl
YW0gdG8gcGFyc2UgZnJvbS4NCiAJCXB1YmxpYyBTeXN0ZW0uSU8uU3RyZWFt
IGlucHV0Ow0KIA0KLQkJcHVibGljIGFic3RyYWN0IGludCBwYXJzZSAoKTsN
CisJCXB1YmxpYyBhYnN0cmFjdCB2b2lkIHBhcnNlICgpOw0KIA0KIAkJcHVi
bGljIHZpcnR1YWwgc3RyaW5nW10gZXh0ZW5zaW9ucygpDQogCQl7DQpAQCAt
MzUsMjggKzMzLDYgQEANCiAJCQlyZXR1cm4gbGlzdDsNCiAJCX0NCiANCi0J
CS8vLyA8c3VtbWFyeT4NCi0JCS8vLyBFbWl0cyBlcnJvciBtZXNzYWdlcyBh
bmQgaW5jcmVtZW50cyBhIGdsb2JhbCBjb3VudCBvZiB0aGVtDQotCQkvLy8g
PC9zdW1tYXJ5Pg0KLQkJLy8vIDxwYXJhbSBuYW1lPSJjb2RlIj48L3BhcmFt
Pg0KLQkJLy8vIDxwYXJhbSBuYW1lPSJkZXNjIj48L3BhcmFtPg0KLQkJc3Rh
dGljIHB1YmxpYyB2b2lkIGVycm9yIChpbnQgY29kZSwgc3RyaW5nIGRlc2Mp
DQotCQl7DQotCQkJQ29uc29sZS5Xcml0ZUxpbmUgKCJFcnJvciAiK2NvZGUr
IjogIisgZGVzYyk7DQotCQkJZ2xvYmFsX2Vycm9ycysrOw0KLQkJfQ0KLQ0K
LQkJLy8gRW1pdHMgZXJyb3IgbWVzc2FnZXMgd2l0aCBsb2NhdGlvbiBpbmZv
Lg0KLQkJLy8gRklYTUUgOiBJZGVhbGx5LCBhbGwgZXJyb3IgcmVwb3J0aW5n
IHNob3VsZCBoYXBwZW4NCi0JCS8vIHdpdGggUmVwb3J0LkVycm9yIGJ1dCBo
b3cgZG8geW91IGdldCBhdCB0aGF0IG5vbi1zdGF0aWMNCi0JCS8vIG1ldGhv
ZCBldmVyeXdoZXJlIHlvdSBuZWVkIGl0ID8NCi0JCXN0YXRpYyBwdWJsaWMg
dm9pZCBlcnJvciAoaW50IGNvZGUsIE1vbm8uQ1NoYXJwLkxvY2F0aW9uIGws
IHN0cmluZyB0ZXh0KQ0KLQkJew0KLQkJCUNvbnNvbGUuV3JpdGVMaW5lIChs
Lk5hbWUgKyAiKCIgKyBsLlJvdyArICIsIiArIA0KLQkJCQkJICAgIik6IEVy
cm9yIENTIiArIGNvZGUgKyAiOiAiICsgdGV4dCk7DQotCQkJZ2xvYmFsX2Vy
cm9ycysrOw0KLQkJfQ0KLQkJDQogCQlwdWJsaWMgR2VuZXJpY1BhcnNlcigp
DQogCQl7DQogCQkJLy8NCkluZGV4OiBtY3MvbWItcGFyc2VyLmpheQ0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9tb25vL21jcy9tY3Mv
bWItcGFyc2VyLmpheSx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQ0KZGlm
ZiAtdSAtcjEuMSBtYi1wYXJzZXIuamF5DQotLS0gbWNzL21iLXBhcnNlci5q
YXkJMTEgT2N0IDIwMDEgMTg6MTI6MTIgLTAwMDAJMS4xDQorKysgbWNzL21i
LXBhcnNlci5qYXkJMjUgSnVuIDIwMDIgMDA6MzY6NTQgLTAwMDANCkBAIC00
NDQsNyArNDQ0LDcgQEANCiANDQogVG9rZW5pemVyIGxleGVyOw0NCiANDQot
cHVibGljIG92ZXJyaWRlIGludCBwYXJzZSAoKQ0NCitwdWJsaWMgb3ZlcnJp
ZGUgdm9pZCBwYXJzZSAoKQ0NCiB7DQ0KIAljdXJyZW50X25hbWVzcGFjZSA9
IG5ldyBOYW1lc3BhY2UgKG51bGwsICIiKTsNDQogCXRoaXMudHJlZSA9IHJj
LlRyZWU7DQ0KQEAgLTQ1Niw3ICs0NTYsNiBAQA0KIAlsZXhlciA9IG5ldyBU
b2tlbml6ZXIgKGlucHV0LCBuYW1lKTsNDQogCVN0cmluZ0J1aWxkZXIgdmFs
dWUgPSBuZXcgU3RyaW5nQnVpbGRlciAoKTsNDQogDQ0KLQlnbG9iYWxfZXJy
b3JzID0gMDsNDQogCXRyeSANDQogCXsNDQogCQlpZiAoeWFjY192ZXJib3Nl
X2ZsYWcpDQ0KQEAgLTQ2OCwxMCArNDY3LDcgQEANCiAJew0NCiAJCUNvbnNv
bGUuV3JpdGVMaW5lIChsZXhlci5sb2NhdGlvbiArICIgIDogUGFyc2luZyBl
cnJvciAiKTsNDQogCQlDb25zb2xlLldyaXRlTGluZSAoZSk7DQ0KLQkJZ2xv
YmFsX2Vycm9ycysrOw0NCiAJfQ0NCi0NDQotCXJldHVybiBnbG9iYWxfZXJy
b3JzOw0NCiB9DQ0KIA0NCiAvKiBlbmQgZW5kIGVuZCAqLw0NCkluZGV4OiBt
Y3MvbmFtZXNwYWNlLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg
ZmlsZTogL21vbm8vbWNzL21jcy9uYW1lc3BhY2UuY3Msdg0KcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjcNCmRpZmYgLXUgLXIxLjcgbmFtZXNwYWNlLmNzDQot
LS0gbWNzL25hbWVzcGFjZS5jcwkxNSBKdW4gMjAwMiAyMzozNTowNCAtMDAw
MAkxLjcNCisrKyBtY3MvbmFtZXNwYWNlLmNzCTI1IEp1biAyMDAyIDAwOjM2
OjU0IC0wMDAwDQpAQCAtNzMsNyArNzMsNyBAQA0KIAkJcHVibGljIHZvaWQg
VXNpbmcgKHN0cmluZyBucykNCiAJCXsNCiAJCQlpZiAoZGVjbF9mb3VuZCl7
DQotCQkJCUdlbmVyaWNQYXJzZXIuZXJyb3IgKDE1MjksICJBIHVzaW5nIGNs
YXVzZSBtdXN0IHByZWNlZGUgYWxsIG90aGVyIG5hbWVzcGFjZSBlbGVtZW50
cyIpOw0KKwkJCQlSZXBvcnQuRXJyb3IgKDE1MjksICJBIHVzaW5nIGNsYXVz
ZSBtdXN0IHByZWNlZGUgYWxsIG90aGVyIG5hbWVzcGFjZSBlbGVtZW50cyIp
Ow0KIAkJCQlyZXR1cm47DQogCQkJfQ0KIA0KQEAgLTEyNyw3ICsxMjcsNyBA
QA0KIAkJCQlpZiAoZGUuVmFsdWUgPT0gbnVsbCl7DQogCQkJCQlzdHJpbmcg
bmFtZSA9IChzdHJpbmcpIGRlLktleTsNCiAJCQkJCQ0KLQkJCQkJR2VuZXJp
Y1BhcnNlci5lcnJvciAoMjM0LCAiVGhlIHR5cGUgb3IgbmFtZXNwYWNlIGAi
ICsNCisJCQkJCVJlcG9ydC5FcnJvciAoMjM0LCAiVGhlIHR5cGUgb3IgbmFt
ZXNwYWNlIGAiICsNCiAJCQkJCQkJICAgIG5hbWUgKyAiJyBkb2VzIG5vdCBl
eGlzdCBpbiB0aGUgIiArDQogCQkJCQkJCSAgICAiY2xhc3Mgb3IgbmFtZXNw
YWNlIGAiICsgbmFtZSArICInIik7DQogCQkJCX0NCkluZGV4OiBtY3MvcmVw
b3J0LmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL21v
bm8vbWNzL21jcy9yZXBvcnQuY3Msdg0KcmV0cmlldmluZyByZXZpc2lvbiAx
LjIzDQpkaWZmIC11IC1yMS4yMyByZXBvcnQuY3MNCi0tLSBtY3MvcmVwb3J0
LmNzCTI3IE1hciAyMDAyIDIzOjQyOjUxIC0wMDAwCTEuMjMNCisrKyBtY3Mv
cmVwb3J0LmNzCTI1IEp1biAyMDAyIDAwOjM2OjU1IC0wMDAwDQpAQCAtNDUs
MTIgKzQ1LDEyIEBADQogCQlzdGF0aWMgcHVibGljIGJvb2wgU3RhY2t0cmFj
ZTsNCiAJCQ0KIAkJLy8NCi0JCS8vIElmIHRoZSBlcnJvciBjb2RlIGlzIHJl
cG9ydGVkIG9uIHRoZSBnaXZlbiBsaW5lLA0KLQkJLy8gdGhlbiB0aGUgcHJv
Y2VzcyBleGl0cyB3aXRoIGEgdW5pcXVlIGVycm9yIGNvZGUuDQorCQkvLyBJ
ZiB0aGUgJ2V4cGVjdGVkJyBlcnJvciBjb2RlIGlzIHJlcG9ydGVkIHRoZW4g
dGhlDQorICAgICAgICAgICAgICAgIC8vIGNvbXBpbGF0aW9uIHN1Y2NlZWRz
Lg0KIAkJLy8NCiAJCS8vIFVzZWQgZm9yIHRoZSB0ZXN0IHN1aXRlIHRvIGV4
Y2VyY2lzZSB0aGUgZXJyb3IgY29kZXMNCiAJCS8vDQotCQlzdGF0aWMgaW50
IHByb2JlX2Vycm9yID0gMDsNCisJCXN0YXRpYyBpbnQgZXhwZWN0ZWRfZXJy
b3IgPSAwOw0KIA0KIAkJLy8NCiAJCS8vIEtlZXBzIHRyYWNrIG9mIHRoZSB3
YXJuaW5ncyB0aGF0IHdlIGFyZSBpZ25vcmluZw0KQEAgLTU5LDExICs1OSwx
MSBAQA0KIAkJDQogCQlzdGF0aWMgdm9pZCBDaGVjayAoaW50IGNvZGUpDQog
CQl7DQotCQkJaWYgKGNvZGUgPT0gcHJvYmVfZXJyb3Ipew0KKwkJCWlmIChj
b2RlID09IGV4cGVjdGVkX2Vycm9yKXsNCiAJCQkJaWYgKEZhdGFsKQ0KIAkJ
CQkJdGhyb3cgbmV3IEV4Y2VwdGlvbiAoKTsNCiAJCQkJDQotCQkJCUVudmly
b25tZW50LkV4aXQgKDEyMyk7DQorCQkJCUVudmlyb25tZW50LkV4aXQgKDAp
Ow0KIAkJCX0NCiAJCX0NCiAJCQ0KQEAgLTE0NywxNiArMTQ3LDE0IEBADQog
CQkJd2FybmluZ19pZ25vcmVfdGFibGUgW2NvZGVdID0gdHJ1ZTsNCiAJCX0N
CiAJCQ0KLQkJc3RhdGljIHB1YmxpYyB2b2lkIFNldFByb2JlIChpbnQgY29k
ZSkNCi0JCXsNCi0JCQlwcm9iZV9lcnJvciA9IGNvZGU7DQotCQl9DQotDQot
CQlzdGF0aWMgcHVibGljIGludCBQcm9iZUNvZGUgew0KLQkJCWdldCB7DQot
CQkJCXJldHVybiBwcm9iZV9lcnJvcjsNCi0JCQl9DQotCQl9DQorICAgICAg
ICAgICAgICAgIHN0YXRpYyBwdWJsaWMgaW50IEV4cGVjdGVkRXJyb3Igew0K
KyAgICAgICAgICAgICAgICAgICAgICAgIHNldCB7DQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9lcnJvciA9IHZhbHVlOw0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAg
ICAgICAgICBnZXQgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGV4cGVjdGVkX2Vycm9yOw0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KIAl9DQogDQogCXB1Ymxp
YyBjbGFzcyBNZXNzYWdlIHsNCkluZGV4OiB0ZXN0cy9DaGFuZ2VMb2cNCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvbW9uby9tY3MvdGVz
dHMvQ2hhbmdlTG9nLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS44MA0KZGlm
ZiAtdSAtcjEuODAgQ2hhbmdlTG9nDQotLS0gdGVzdHMvQ2hhbmdlTG9nCTEz
IEp1biAyMDAyIDEzOjA3OjUzIC0wMDAwCTEuODANCisrKyB0ZXN0cy9DaGFu
Z2VMb2cJMjUgSnVuIDIwMDIgMDA6MzY6NTYgLTAwMDANCkBAIC0xLDMgKzEs
MTQgQEANCisyMDAyLTA2LTI1ICBBbmRyZXcgQmlya2V0dCAgPGFkYkB0YXJk
aXMuZWQuYWMudWs+DQorDQorCSogbWFrZWZpbGU6IFRoZSBmb2xsb3dpbmcg
dGVzdHMgZmFpbCB1bmRlciBsaW51eCBhbmQgaGF2ZSBiZWVuIA0KKwltb3Zl
ZCB0byBURVNUX05PUEFTUzogNDAsIDQ1LCA1MiwgNTMsIDkxLCAxMDYsIDEw
NywgMTIyLCAxMzIsIDEzMw0KKw0KKwlXaW5kb3dzLXNwZWNpZmljIHRlc3Rz
IGhhdmUgYmVlbiBleHRyYWN0ZWQsIGFuZCBhcmUgbm93IHJ1biBieSB0aGUN
CisJdGVzdC13aW5kb3dzIHJ1bGUgKGl0J2xsIGJlIHJ1biB1bmRlciBsaW51
eCBidXQgZmFpbCkNCisNCisJVGhlIG91dHB1dCBmb3JtYXQgaGFzIGJlZW4g
bWFkZSBsZXNzIG5vaXN5LCBhbmQgaXMgYmFzaWNhbGx5IHRoZQ0KKwlzYW1l
IGFzIHRoZSB0ZXN0cyBpbiBtY3MvZXJyb3JzIC0gbGlrZSAiUnVubmluZyB0
ZXN0LTEgLi4uIE9LIi4NCisNCiAyMDAyLTA2LTEzICBSYXZpIFByYXRhcCAg
PHJhdmlAeGltaWFuLmNvbT4NCiANCiAJKiB0ZXN0LTEzMS5jcyA6IEFkZCB0
byB0ZXN0IGVudW0gbWVtYmVyIGF0dHJpYnV0ZSBhcHBsaWNhdGlvbi4NCklu
ZGV4OiB0ZXN0cy9tYWtlZmlsZQ0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
UkNTIGZpbGU6IC9tb25vL21jcy90ZXN0cy9tYWtlZmlsZSx2DQpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTIyDQpkaWZmIC11IC1yMS4xMjIgbWFrZWZpbGUN
Ci0tLSB0ZXN0cy9tYWtlZmlsZQkyMiBKdW4gMjAwMiAwNjoxNDoxMyAtMDAw
MAkxLjEyMg0KKysrIHRlc3RzL21ha2VmaWxlCTI1IEp1biAyMDAyIDAwOjM2
OjU2IC0wMDAwDQpAQCAtNyw2OSArNyw5MyBAQA0KIAl0ZXN0LTEgICB0ZXN0
LTIgICB0ZXN0LTMgICB0ZXN0LTQgICB0ZXN0LTUgICB0ZXN0LTYgICB0ZXN0
LTcgICB0ZXN0LTggICB0ZXN0LTkgICB0ZXN0LTEwIFwNCiAJdGVzdC0xMSAg
dGVzdC0xMiAgdGVzdC0xMyAgdGVzdC0xNCAgdGVzdC0xNSAgdGVzdC0xNiAg
dGVzdC0xNyAgdGVzdC0xOCAgdGVzdC0xOSAgdGVzdC0yMCBcDQogCXRlc3Qt
MjEgIHRlc3QtMjIgIHRlc3QtMjMgIHRlc3QtMjQgIHRlc3QtMjUgIHRlc3Qt
MjYgIHRlc3QtMjcgIHRlc3QtMjggIAkgdGVzdC0zMCBcDQotCXRlc3QtMzEg
IHRlc3QtMzIgIHRlc3QtMzMgIHRlc3QtMzQgIHRlc3QtMzUgIHRlc3QtMzYg
IHRlc3QtMzcgICAgICAgICAgIHRlc3QtMzkgIHRlc3QtNDAgXA0KLQl0ZXN0
LTQxICB0ZXN0LTQyICB0ZXN0LTQzICB0ZXN0LTQ0ICB0ZXN0LTQ1ICB0ZXN0
LTQ2ICB0ZXN0LTQ3ICB0ZXN0LTQ4ICB0ZXN0LTQ5ICB0ZXN0LTUwIFwNCi0J
dGVzdC01MSAgdGVzdC01MiAgdGVzdC01MyAgdGVzdC01NCAgdGVzdC01NSAg
dGVzdC01NiAgdGVzdC01NyAgCSAgICAgICAgdGVzdC01OSAgdGVzdC02MCBc
DQotCXRlc3QtNjEJIHRlc3QtNjIgIHRlc3QtNjMgIHRlc3QtNjQgIHRlc3Qt
NjUgIHRlc3QtNjYgIHRlc3QtNjcgIHRlc3QtNjggIHRlc3QtNjkgIHRlc3Qt
NzAgXA0KKwl0ZXN0LTMxICB0ZXN0LTMyICB0ZXN0LTMzICB0ZXN0LTM0ICB0
ZXN0LTM1ICB0ZXN0LTM2ICB0ZXN0LTM3ICAgICAgICAgICB0ZXN0LTM5ICAg
ICAgICAgIFwNCisJdGVzdC00MSAgdGVzdC00MiAgdGVzdC00MyAgdGVzdC00
NCAgdGVzdC00NiAgdGVzdC00NyAgdGVzdC00OCAgdGVzdC00OSAgXA0KKwl0
ZXN0LTUxICB0ZXN0LTU0ICB0ZXN0LTU1ICB0ZXN0LTU2ICB0ZXN0LTU3ICB0
ZXN0LTU5ICB0ZXN0LTYwIFwNCisJdGVzdC02MQkgdGVzdC02MiAgdGVzdC02
MyAgdGVzdC02NCAgdGVzdC02NSAgdGVzdC02NiAgdGVzdC02OCAgdGVzdC02
OSAgdGVzdC03MCBcDQogCXRlc3QtNzEgIHRlc3QtNzIgIHRlc3QtNzMgIHRl
c3QtNzQgIHRlc3QtNzUgIHRlc3QtNzYgIHRlc3QtNzcgIHRlc3QtNzggIHRl
c3QtNzkgIHRlc3QtODAgXA0KIAl0ZXN0LTgxICB0ZXN0LTgyICB0ZXN0LTgz
ICB0ZXN0LTg0ICB0ZXN0LTg1ICB0ZXN0LTg2ICB0ZXN0LTg3ICB0ZXN0LTg4
ICB0ZXN0LTg5ICB0ZXN0LTkwIFwNCi0JdGVzdC05MSAgdGVzdC05MiAgdGVz
dC05MyAgdGVzdC05NCAgdGVzdC05NSAgdGVzdC05NiAgdGVzdC05NyAgdGVz
dC05OCAgdGVzdC05OSAgdGVzdC0xMDBcDQotCXRlc3QtMTAxIHRlc3QtMTAy
IHRlc3QtMTAzIHRlc3QtMTA0IHRlc3QtMTA1IHRlc3QtMTA2IHRlc3QtMTA3
IHRlc3QtMTA4IHRlc3QtMTA5IHRlc3QtMTEwXA0KKwl0ZXN0LTkyICB0ZXN0
LTkzICB0ZXN0LTk0ICB0ZXN0LTk1ICB0ZXN0LTk2ICB0ZXN0LTk3ICB0ZXN0
LTk4ICB0ZXN0LTk5ICB0ZXN0LTEwMFwNCisJdGVzdC0xMDEgdGVzdC0xMDIg
dGVzdC0xMDMgdGVzdC0xMDQgdGVzdC0xMDUgdGVzdC0xMDggdGVzdC0xMDkg
dGVzdC0xMTBcDQogCXRlc3QtMTExIHRlc3QtMTEyIHRlc3QtMTEzIHRlc3Qt
MTE0IHRlc3QtMTE1IHRlc3QtMTE2IHRlc3QtMTE3IHRlc3QtMTE4IHRlc3Qt
MTE5IAlcDQotCXRlc3QtMTIxIHRlc3QtMTIyIHRlc3QtMTIzICAgICAgICAg
IHRlc3QtMTI1IHRlc3QtMTI2IHRlc3QtMTI3IHRlc3QtMTI4IHRlc3QtMTI5
IHRlc3QtMTMwIFwNCi0JdGVzdC0xMzEgdGVzdC0xMzIgdGVzdC0xMzMgdGVz
dC0xMzQgdGVzdC0xMzUNCisJdGVzdC0xMjEgdGVzdC0xMjMgICAgICAgICAg
dGVzdC0xMjUgdGVzdC0xMjYgdGVzdC0xMjcgdGVzdC0xMjggdGVzdC0xMjkg
dGVzdC0xMzAgXA0KKwl0ZXN0LTEzMSB0ZXN0LTEzNCB0ZXN0LTEzNQ0KIA0K
IFVOU0FGRV9TT1VSQ0VTID0gXA0KIAl1bnNhZmUtMSB1bnNhZmUtMiB1bnNh
ZmUtMw0KIA0KLVRFU1RfTk9QQVNTID0gXA0KLQl0ZXN0LTI5IHRlc3QtMzgg
XA0KLQl0ZXN0LTEyMA0KK1dJTkRPV1NfU09VUkNFUyA9IFwNCisJdGVzdC01
MCB0ZXN0LTY3DQogDQorIyBBIHRlc3QgaXMgYSAnbm8gcGFzcycgaWYgaXQg
ZmFpbHMgb24gZWl0aGVyIHdpbmRvd3Mgb3IgbGludXgNCiAjIFRlc3QgMTIw
IGRvZXMgbm90IHBhc3MgYmVjYXVzZSB0aGUgTVMuTkVUIHJ1bnRpbWUgaXMg
YnVnZ3kuDQorVEVTVF9OT1BBU1MgPSBcDQorCXRlc3QtMjkgdGVzdC0zOCB0
ZXN0LTQwIHRlc3QtNDUgIHRlc3QtNTIgdGVzdC01MyB0ZXN0LTkxIHRlc3Qt
MTA2IHRlc3QtMTA3IFwNCisJdGVzdC0xMjAgdGVzdC0xMjIgdGVzdC0xMzIg
dGVzdC0xMzMgDQorDQorYWxsOiB0ZXN0LWNvbXBpbGVyIHRlc3QtdW5zYWZl
IHRlc3Qtd2luZG93cw0KIA0KLWFsbDogdGVzdC1jb21waWxlciB0ZXN0LXVu
c2FmZQ0KIA0KKyMgQ29tcGlsZSB3aXRoIG1vbm8sIHJ1biB3aXRoIE1TIGpp
dA0KIHRlc3QtY29tcGlsZXI6DQotCS1ybSAqLmV4ZQ0KKwlAcm0gLWYgKi5l
eGU7IFwNCiAJZm9yIGkgaW4gJChURVNUX1NPVVJDRVMpOyBkbyBcDQorCQll
Y2hvIC1uICJSdW5uaW5nICQkaSAuLi4gIjsgXA0KIAkJaWYgJChNQ1MpICQk
aS5jcyA+IC9kZXYvbnVsbDsgdGhlbiBcDQotCQkJaWYgLi8kJGkuZXhlOyB0
aGVuIFwNCi0JCQkJZWNobyAkJGk6IG9rOyBcDQorCQkJaWYgLi8kJGkuZXhl
ID4gL2Rldi9udWxsOyB0aGVuIFwNCisJCQkJZWNobyBPSzsgXA0KIAkJCWVs
c2UgXA0KLQkJCQllY2hvIHRlc3QgJCRpIGZhaWxlZDsgZXhpdDsgXA0KKwkJ
CQllY2hvIEZBSUxFRDsgZXhpdCAxOyBcDQogCQkJZmk7IFwNCiAJCWVsc2Ug
XA0KLQkJCWVjaG8gY29tcGlsZXIgZmFpbGVkIG9uICQkaTsgICBleGl0OyBc
DQorCQkJZWNobyBGQUlMRUQgVE8gQ09NUElMRTsgZXhpdCAxOyBcDQogCQlm
aSBcDQogCWRvbmUNCiANCisjIENvbXBpbGUgd2l0aCBtb25vLCBydW4gd2l0
aCBNUyBqaXQNCiB0ZXN0LXVuc2FmZToNCi0JZm9yIGkgaW4gJChVTlNBRkVf
U09VUkNFUyk7IGRvIFwNCisJQGZvciBpIGluICQoVU5TQUZFX1NPVVJDRVMp
OyBkbyBcDQorCQllY2hvIC1uICJSdW5uaW5nICh1bnNhZmUpICQkaSAuLi4g
IjsgXA0KIAkJaWYgJChNQ1MpIC0tdW5zYWZlICQkaS5jcyA+IC9kZXYvbnVs
bDsgdGhlbiBcDQotCQkJaWYgLi8kJGkuZXhlOyB0aGVuIFwNCi0JCQkJZWNo
byAkJGk6IG9rOyBcDQorCQkJaWYgLi8kJGkuZXhlID4gL2Rldi9udWxsOyB0
aGVuIFwNCisJCQkJZWNobyBPSzsgXA0KIAkJCWVsc2UgXA0KLQkJCQllY2hv
IHRlc3QgJCRpIGZhaWxlZDsgZXhpdDsgXA0KKwkJCQllY2hvIEZBSUxFRDsg
ZXhpdCAxOyBcDQogCQkJZmk7IFwNCiAJCWVsc2UgXA0KLQkJCWVjaG8gY29t
cGlsZXIgZmFpbGVkIG9uICQkaTsgICBleGl0OyBcDQorCQkJZWNobyBGQUlM
RUQgV0hJTEUgQ09NUElMSU5HOyBleGl0IDE7IFwNCiAJCWZpIFwNCiAJZG9u
ZQ0KIA0KKyMgQ29tcGlsZWQgKHByZXZpb3VzbHkpIHdpdGggbW9ubywgcnVu
IHdpdGggbW9ubyBqaXQNCiB0ZXN0LWppdDoNCi0JZm9yIGkgaW4gJChURVNU
X1NPVVJDRVM6LmNzPS5leGUpOyBkbyBcDQotCQlpZiBtb25vIC4vJCRpLmV4
ZTsgdGhlbiBcDQotCQkJZWNobyAkJGk6IG9rOyBcDQorCUBmb3IgaSBpbiAk
KFRFU1RfU09VUkNFUzouY3M9LmV4ZSk7IGRvIFwNCisJCWVjaG8gLW4gIlJ1
bm5pbmcgaml0ICQkaSAuLi4gIjsgXA0KKwkJaWYgbW9ubyAuLyQkaS5leGUg
PiAvZGV2L251bGw7IHRoZW4gXA0KKwkJCWVjaG8gT0s7IFwNCiAJCWVsc2Ug
XA0KLQkJCWVjaG8gdGVzdCAkJGkgZmFpbGVkOyBleGl0OyBcDQorCQkJZWNo
byBGQUlMRUQ7IGV4aXQgMTsgXA0KIAkJZmkgXA0KIAlkb25lDQogDQotDQor
IyBDb21waWxlZCB3aXRoIG1vbm8sIHJ1biB3aXRoIE1TIGppdA0KK3Rlc3Qt
d2luZG93czoNCisJQGVjaG8gUnVubmluZyB3aW5kb3dzLW9ubHkgdGVzdHMg
LSB0aGVzZSB3aWxsIGZhaWwgb24gbGludXg7IFwNCisJZm9yIGkgaW4gJChX
SU5ET1dTX1NPVVJDRVMpOyBkbyBcDQorCQllY2hvIC1uICJSdW5uaW5nICQk
aSAuLi4gIjsgXA0KKwkJaWYgJChNQ1MpICQkaS5jcyA+IC9kZXYvbnVsbDsg
dGhlbiBcDQorCQkJaWYgLi8kJGkuZXhlID4gL2Rldi9udWxsOyB0aGVuIFwN
CisJCQkJZWNobyBPSzsgXA0KKwkJCWVsc2UgXA0KKwkJCQllY2hvIEZBSUxF
RDsgZXhpdCAxOyBcDQorCQkJZmk7IFwNCisJCWVsc2UgXA0KKwkJCWVjaG8g
RkFJTEVEIFRPIENPTVBJTEU7IGV4aXQgMTsgXA0KKwkJZmkgXA0KKwlkb25l
DQogDQogdmVyaWZ5Og0KLQlmb3IgaSBpbiAkKFRFU1RfU09VUkNFUyk7IGRv
IFwNCisJQGZvciBpIGluICQoVEVTVF9TT1VSQ0VTKTsgZG8gXA0KIAkJaWYg
JChNQ1MpIC1vIG1jcy1nZW4tY29kZS5leGUgJCRpLmNzID4gL2Rldi9udWxs
OyB0aGVuIFwNCiAJICAgICAgICAJaWYgJChDU0MpIC9vdXQ6Y3NjLWdlbi1j
b2RlLmV4ZSAkJGkuY3MgPiAvZGV2L251bGw7IHRoZW4gXA0KIAkJCQlpZiAk
KFZFUklGWSkgbWNzLWdlbi1jb2RlLmV4ZSBjc2MtZ2VuLWNvZGUuZXhlID4g
L2Rldi9udWxsOyB0aGVuIFwNCkBAIC03OSw3ICsxMDMsOCBAQA0KIAkJCQlm
aTsgXA0KIAkJCWZpIFwNCiAJCWZpIFwNCi0JZG9uZQ0KKwlkb25lOyBcDQor
CWVjaG8gVmVyaWZpY2F0aW9uIHBhc3NlZA0KIA0KIA0KIGNhc3RzLmNzOiBn
ZW4tY2FzdC10ZXN0LmNzDQo=
---559023410-851401618-1024966619=:19880
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=ChangeLog
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GS4.4.33.0206250156591.19880@omega.tardis.ed.ac.uk>
Content-Description: mcs/error/ChangeLog
Content-Disposition: attachment; filename=ChangeLog
MjAwMi0wNi0yNCAgQW5kcmV3IEJpcmtldHQgIDxhZGJAdGFyZGlzLmVkLmFj
LnVrPg0KDQoJKiBmYWlsOiBjczAxMjEuY3MsIGNzMDE1Ny5jcyBhbmQgY3Mx
NTAxLmNzIG5vIGxvbmdlciBmYWlsLiAgDQoJKiBjczAxNzYuY3M6IE1ldGhv
ZCBoYXMgdG8gYmUgcHVibGljIGZvciBjb3JyZWN0IHRlc3QNCgkqIGNzMDE5
Ni5jcywgY3MwMjQyLmNzOiBEbyAncmV0dXJuJyB0byBzdG9wIG51bGwgc3Rh
dGVtZW50IHdhcm5pbmcuDQoJKiBjczAyNTUuY3M6IEFkZCBhc3NpZ25tZW50
IHRvIHN0b3AgJ3VudXNlZCB2YXJpYWJsZScgd2FybmluZy4NCgkqIG1ha2Vm
aWxlOiBPdXRwdXQgaXMgbm93IGxpa2UgIlJ1bm5pbmcgdGVzdCA0MiAuLiBP
SyIuICBBZGRlZCAtLXVuc2FmZSB0byANCgkgIG1ha2UgY3MwMTkzLmNzLCBj
czAxOTYuY3MgYW5kIGNzMDIxNC0zLmNzIHdvcmsuDQoNCg==
---559023410-851401618-1024966619=:19880--