[xmlsec] enhancement to xmlsec

Moultrie, Ferrell (ISSAtlanta) FMoultrie@iss.net
Thu, 19 Dec 2002 12:19:07 -0500


This is a multi-part message in MIME format.

------_=_NextPart_001_01C2A782.BCF84023
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Sorry -- I wish my mua would warn me when it sees the word "attached"
but there's no attachment! Both files attached now.
Ferrell

-----Original Message-----
From: Aleksey Sanin [mailto:aleksey@aleksey.com]=20
Sent: Thursday, December 19, 2002 11:57 AM
To: Moultrie, Ferrell (ISSAtlanta)
Cc: xmlsec@aleksey.com
Subject: Re: [xmlsec] enhancement to xmlsec


Thanks a lot! I just know that any non trivial knowledge (like "starting

from slash...")
might be lost other the time :) The only problem I have is that I don't=20
see attachment :)
Can you resend it, please?

Thanks,
Aleksey



Moultrie, Ferrell (ISSAtlanta) wrote:

>Aleksey:
>  Done. I didn't think the overload was particularly troublesome since
>the XPath syntax was clearly different from a node-name but the
approach
>you suggested is cleaner and without ambiguity. I'm attaching diffs
>against 0.0.10 as before plus an additional diff (-b) which is smaller
>and removes some (possibly gratuitous) white-space editing I'd done
>while implementing the code. Your choice as to which to check-in.
>Ferrell
> =20
>



------_=_NextPart_001_01C2A782.BCF84023
Content-Type: text/plain;
	name="xmlsec-diff-b.txt"
Content-Transfer-Encoding: base64
Content-Description: xmlsec-diff-b.txt
Content-Disposition: attachment;
	filename="xmlsec-diff-b.txt"

MTY3YTE2OCwxNzANCj4gCSIgIC0tbm9kZS14cGF0aCA8WFBhdGggZXhwcmVzc2lvbj5cbiINCj4g
ICAgICIgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIG9wZXJhdGlvbiBzdGFydCBwb2lu
dCB0byB0aGUgZmlyc3Qgbm9kZSBcbiINCj4gICAgICIgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxlY3RlZCBieSB0aGUgc3BlY2lmaWVkIFhQYXRoIGV4cHJlc3Npb25cbiINCjMwNmEzMTANCj4g
Y2hhciAqbm9kZVhQYXRoID0gTlVMTDsNCjM3N2MzODENCjwgCSAgICBpZigobm9kZU5hbWUgIT0g
TlVMTCkgfHwgKG5vZGVJZCAhPSBOVUxMKSl7DQotLS0NCj4gCSAgICBpZigobm9kZU5hbWUgIT0g
TlVMTCkgfHwgKG5vZGVJZCAhPSBOVUxMKSB8fCAobm9kZVhQYXRoICE9IE5VTEwpKXsNCjM4MmEz
ODcsMzkzDQo+IAl9IGVsc2UgaWYoKHN0cmNtcChhcmd2W3Bvc10sICItLW5vZGUteHBhdGgiKSA9
PSAwKSAmJiAocG9zICsgMSA8IGFyZ2MpKSAgew0KPiAJCWlmKChub2RlTmFtZSAhPSBOVUxMKSB8
fCAobm9kZUlkICE9IE5VTEwpIHx8IChub2RlWFBhdGggIT0gTlVMTCkpew0KPiAJCQlmcHJpbnRm
KHN0ZGVyciwgIkVycm9yOiBhbm90aGVyIG5vZGUgc2VsZWN0aW9uIG9wdGlvbiBwcmVzZW50XG4i
KTsNCj4gCQkJcmV0ID0gLTE7DQo+IAkJfSBlbHNlIHsNCj4gCQkJbm9kZVhQYXRoID0gYXJndlsr
K3Bvc107DQo+IAkgICAgfQ0KMzg0YzM5NQ0KPCAJICAgIGlmKChub2RlTmFtZSAhPSBOVUxMKSB8
fCAobm9kZUlkICE9IE5VTEwpKXsNCi0tLQ0KPiAJICAgIGlmKChub2RlTmFtZSAhPSBOVUxMKSB8
fCAobm9kZUlkICE9IE5VTEwpIHx8IChub2RlWFBhdGggIT0gTlVMTCkpew0KMTI0NWExMjU3LDEy
ODcNCj4gDQo+IC8qIEZ1bmN0aW9uIHRvIGZpbmQgYmFzZSBub2RlIGZvciBvcGVyYXRpb24gYXMg
c3BlY2lmaWVkIGJ5IHVzZXIgdXNpbmcgZWl0aGVyDQo+ICAqIERURCBJZCwgWFBhdGggYWJzIGV4
cHJlc3Npb24sIE5vZGVOYW1lLCBvciBkZWZhdWx0IHRvIHJvb3Qgbm9kZSAqLw0KPiB4bWxOb2Rl
UHRyIGZpbmRCYXNlTm9kZSh4bWxEb2NQdHIgZG9jKSB7DQo+IAl4bWxOb2RlUHRyIGN1ciA9IE5V
TEw7DQo+IAlpZihub2RlSWQgIT0gTlVMTCkgew0KPiAJICAgIHhtbEF0dHJQdHIgYXR0cjsNCj4g
CSAgICBhdHRyID0geG1sR2V0SUQoZG9jLCBCQURfQ0FTVCBub2RlSWQpOw0KPiAJICAgIGN1ciA9
IChhdHRyICE9IE5VTEwpID8gYXR0ci0+cGFyZW50IDogTlVMTDsNCj4gCX0gZWxzZSBpZihub2Rl
WFBhdGggIT0gTlVMTCkgew0KPiAJCXhtbE5vZGVTZXRQdHIgcE5vZGVMaXN0ID0gTlVMTDsNCj4g
CQl4bWxYUGF0aENvbnRleHRQdHIgcEN0eCA9IE5VTEw7DQo+IAkJeG1sWFBhdGhPYmplY3RQdHIg
cFhQYXRoT2JqID0gTlVMTDsNCj4gCQlwQ3R4ID0geG1sWFBhdGhOZXdDb250ZXh0KGRvYyk7DQo+
IAkJcFhQYXRoT2JqID0geG1sWFBhdGhFdmFsKEJBRF9DQVNUIG5vZGVYUGF0aCwgcEN0eCk7DQo+
IAkJaWYgKHBYUGF0aE9iaiAhPSBOVUxMKSB7DQo+IAkJCXBOb2RlTGlzdCA9IHBYUGF0aE9iai0+
bm9kZXNldHZhbDsNCj4gCQl9DQo+IAkJaWYgKHBOb2RlTGlzdCAhPSBOVUxMICYmIHBOb2RlTGlz
dC0+bm9kZU5yID4gMCkgeyANCj4gCQkJY3VyID0gcE5vZGVMaXN0LT5ub2RlVGFiWzBdOw0KPiAJ
CX0NCj4gCQl4bWxYUGF0aEZyZWVDb250ZXh0KHBDdHgpOw0KPiAJCXhtbFhQYXRoRnJlZU9iamVj
dChwWFBhdGhPYmopOw0KPiAJfSBlbHNlIGlmKG5vZGVOYW1lICE9IE5VTEwpIHsNCj4gCQljdXIg
PSB4bWxTZWNGaW5kTm9kZSh4bWxEb2NHZXRSb290RWxlbWVudChkb2MpLCBCQURfQ0FTVCBub2Rl
TmFtZSwgQkFEX0NBU1Qgbm9kZU5zKTsNCj4gCX0gZWxzZSB7DQo+IAkgICAgY3VyID0geG1sRG9j
R2V0Um9vdEVsZW1lbnQoZG9jKTsNCj4gCX0NCj4gCXJldHVybiBjdXI7IC8qIGNhbiBiZSBOVUxM
IC4uIGNhbGxlciBtdXN0IGNoZWNrICovDQo+IH0gLyogb2YgZmluZEJhc2VOb2RlKCkgKi8NCj4g
DQoxMjQ4YTEyOTENCj4gCXhtbE5vZGVQdHIgY3VyOw0KMTI1NSwxMjU2YzEyOTgsMTMwNw0KPCAg
ICAgc2lnbk5vZGUgPSB4bWxTZWNGaW5kTm9kZSh4bWxEb2NHZXRSb290RWxlbWVudChkb2MpLCAN
CjwgCQkJICAgICAgQkFEX0NBU1QgIlNpZ25hdHVyZSIsIHhtbFNlY0RTaWdOcyk7DQotLS0NCj4g
DQo+IAkvKioNCj4gCSAqIFdoYXQgZG8gd2Ugd2FudCB0byBzaWduPw0KPiAJICovICAgIA0KPiAJ
Y3VyID0gZmluZEJhc2VOb2RlKGRvYyk7DQo+IAlpZiAoY3VyID09IE5VTEwpIHsgDQo+IAkJZnBy
aW50ZihzdGRlcnIsIkVycm9yOiBmYWlsZWQgdG8gZmluZCBzcGVjaWZpZWQgbm9kZVxuIik7DQo+
IAkJcmV0dXJuKC0xKTsNCj4gCX0NCj4gCXNpZ25Ob2RlID0geG1sU2VjRmluZE5vZGUoY3VyLCBC
QURfQ0FTVCAiU2lnbmF0dXJlIiwgeG1sU2VjRFNpZ05zKTsNCjEzMTBhMTM2Mg0KPiAJeG1sTm9k
ZVB0ciBjdXI7DQoxMzE0LDEzMTVjMTM2NiwxMzc0DQo8ICAgICBzaWduTm9kZSA9IHhtbFNlY0Zp
bmROb2RlKHhtbERvY0dldFJvb3RFbGVtZW50KGRvYyksIA0KPCAJCQkgICAgICBCQURfQ0FTVCAi
U2lnbmF0dXJlIiwgeG1sU2VjRFNpZ05zKTsNCi0tLQ0KPiAJLyoqDQo+IAkgKiBXaGF0IGRvIHdl
IHdhbnQgdG8gdmVyaWZ5Pw0KPiAJICovICAgIA0KPiAJY3VyID0gZmluZEJhc2VOb2RlKGRvYyk7
DQo+IAlpZiAoY3VyID09IE5VTEwpIHsgDQo+IAkJZnByaW50ZihzdGRlcnIsIkVycm9yOiBmYWls
ZWQgdG8gZmluZCBzcGVjaWZpZWQgbm9kZVxuIik7DQo+IAkJcmV0dXJuKC0xKTsNCj4gCX0NCj4g
CXNpZ25Ob2RlID0geG1sU2VjRmluZE5vZGUoY3VyLCBCQURfQ0FTVCAiU2lnbmF0dXJlIiwgeG1s
U2VjRFNpZ05zKTsNCjE0MTQsMTQxNWMxNDczDQo8IAlpZihub2RlSWQgIT0gTlVMTCkgew0KPCAJ
ICAgIHhtbEF0dHJQdHIgYXR0cjsNCi0tLQ0KPiAJY3VyID0gZmluZEJhc2VOb2RlKGRvYyk7DQox
NDE3LDE0MjRkMTQ3NA0KPCAJICAgIGF0dHIgPSB4bWxHZXRJRChkb2MsIEJBRF9DQVNUIG5vZGVJ
ZCk7DQo8IAkgICAgY3VyID0gKGF0dHIgIT0gTlVMTCkgPyBhdHRyLT5wYXJlbnQgOiBOVUxMOw0K
PCAJfSBlbHNlIGlmKG5vZGVOYW1lICE9IE5VTEwpIHsNCjwgCSAgICBjdXIgPSB4bWxTZWNGaW5k
Tm9kZSh4bWxEb2NHZXRSb290RWxlbWVudChkb2MpLCBCQURfQ0FTVCBub2RlTmFtZSwgQkFEX0NB
U1Qgbm9kZU5zKTsNCjwgCX0gZWxzZSB7DQo8IAkgICAgY3VyID0geG1sRG9jR2V0Um9vdEVsZW1l
bnQoZG9jKTsNCjwgCX0NCjwgCQ0KMTQ5OGMxNTQ4LDE1NTMNCjwgICAgIGN1ciA9IHhtbFNlY0Zp
bmROb2RlKHhtbERvY0dldFJvb3RFbGVtZW50KGRvYyksIEJBRF9DQVNUICJFbmNyeXB0ZWREYXRh
IiwgeG1sU2VjRW5jTnMpOw0KLS0tDQo+IAljdXIgPSBmaW5kQmFzZU5vZGUoZG9jKTsNCj4gCWlm
IChjdXIgPT0gTlVMTCkgeyANCj4gCQlmcHJpbnRmKHN0ZGVyciwiRXJyb3I6IGZhaWxlZCB0byBm
aW5kIHNwZWNpZmllZCBub2RlXG4iKTsNCj4gCQlyZXR1cm4oLTEpOw0KPiAJfQ0KPiAgICAgY3Vy
ID0geG1sU2VjRmluZE5vZGUoY3VyLCBCQURfQ0FTVCAiRW5jcnlwdGVkRGF0YSIsIHhtbFNlY0Vu
Y05zKTsNCho=

------_=_NextPart_001_01C2A782.BCF84023
Content-Type: text/plain;
	name="xmlsec-diff.txt"
Content-Transfer-Encoding: base64
Content-Description: xmlsec-diff.txt
Content-Disposition: attachment;
	filename="xmlsec-diff.txt"

MTY3YTE2OCwxNzANCj4gCSIgIC0tbm9kZS14cGF0aCA8WFBhdGggZXhwcmVzc2lvbj5cbiINCj4g
ICAgICIgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIG9wZXJhdGlvbiBzdGFydCBwb2lu
dCB0byB0aGUgZmlyc3Qgbm9kZSBcbiINCj4gICAgICIgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxlY3RlZCBieSB0aGUgc3BlY2lmaWVkIFhQYXRoIGV4cHJlc3Npb25cbiINCjMwNmEzMTANCj4g
Y2hhciAqbm9kZVhQYXRoID0gTlVMTDsNCjM3N2MzODENCjwgCSAgICBpZigobm9kZU5hbWUgIT0g
TlVMTCkgfHwgKG5vZGVJZCAhPSBOVUxMKSl7DQotLS0NCj4gCSAgICBpZigobm9kZU5hbWUgIT0g
TlVMTCkgfHwgKG5vZGVJZCAhPSBOVUxMKSB8fCAobm9kZVhQYXRoICE9IE5VTEwpKXsNCjM4MmEz
ODcsMzkzDQo+IAl9IGVsc2UgaWYoKHN0cmNtcChhcmd2W3Bvc10sICItLW5vZGUteHBhdGgiKSA9
PSAwKSAmJiAocG9zICsgMSA8IGFyZ2MpKSAgew0KPiAJCWlmKChub2RlTmFtZSAhPSBOVUxMKSB8
fCAobm9kZUlkICE9IE5VTEwpIHx8IChub2RlWFBhdGggIT0gTlVMTCkpew0KPiAJCQlmcHJpbnRm
KHN0ZGVyciwgIkVycm9yOiBhbm90aGVyIG5vZGUgc2VsZWN0aW9uIG9wdGlvbiBwcmVzZW50XG4i
KTsNCj4gCQkJcmV0ID0gLTE7DQo+IAkJfSBlbHNlIHsNCj4gCQkJbm9kZVhQYXRoID0gYXJndlsr
K3Bvc107DQo+IAkgICAgfQ0KMzg0YzM5NQ0KPCAJICAgIGlmKChub2RlTmFtZSAhPSBOVUxMKSB8
fCAobm9kZUlkICE9IE5VTEwpKXsNCi0tLQ0KPiAJICAgIGlmKChub2RlTmFtZSAhPSBOVUxMKSB8
fCAobm9kZUlkICE9IE5VTEwpIHx8IChub2RlWFBhdGggIT0gTlVMTCkpew0KMzg4LDM5NWMzOTks
NDA2DQo8IAkJbm9kZU5hbWUgPSBzdHJyY2hyKGFyZ3ZbKytwb3NdLCAnOicpOw0KPCAJCWlmKG5v
ZGVOYW1lICE9IE5VTEwpIHsNCjwgCQkgICAgKihub2RlTmFtZSsrKSA9ICdcMCc7DQo8IAkJICAg
IG5vZGVOcyA9IGFyZ3ZbcG9zXTsNCjwgCQl9IGVsc2Ugew0KPCAJCSAgICBub2RlTmFtZSA9IGFy
Z3ZbcG9zXTsNCjwgCQkgICAgbm9kZU5zID0gTlVMTDsNCjwgCQl9DQotLS0NCj4gCQkJbm9kZU5h
bWUgPSBzdHJyY2hyKGFyZ3ZbKytwb3NdLCAnOicpOw0KPiAJCQlpZihub2RlTmFtZSAhPSBOVUxM
KSB7DQo+IAkJCSAgICAqKG5vZGVOYW1lKyspID0gJ1wwJzsNCj4gCQkJICAgIG5vZGVOcyA9IGFy
Z3ZbcG9zXTsNCj4gCQkJfSBlbHNlIHsNCj4gCQkJICAgIG5vZGVOYW1lID0gYXJndltwb3NdOw0K
PiAJCQkgICAgbm9kZU5zID0gTlVMTDsNCj4gCQkJfQ0KMTI0NWExMjU3LDEyODcNCj4gDQo+IC8q
IEZ1bmN0aW9uIHRvIGZpbmQgYmFzZSBub2RlIGZvciBvcGVyYXRpb24gYXMgc3BlY2lmaWVkIGJ5
IHVzZXIgdXNpbmcgZWl0aGVyDQo+ICAqIERURCBJZCwgWFBhdGggYWJzIGV4cHJlc3Npb24sIE5v
ZGVOYW1lLCBvciBkZWZhdWx0IHRvIHJvb3Qgbm9kZSAqLw0KPiB4bWxOb2RlUHRyIGZpbmRCYXNl
Tm9kZSh4bWxEb2NQdHIgZG9jKSB7DQo+IAl4bWxOb2RlUHRyIGN1ciA9IE5VTEw7DQo+IAlpZihu
b2RlSWQgIT0gTlVMTCkgew0KPiAJICAgIHhtbEF0dHJQdHIgYXR0cjsNCj4gCSAgICBhdHRyID0g
eG1sR2V0SUQoZG9jLCBCQURfQ0FTVCBub2RlSWQpOw0KPiAJICAgIGN1ciA9IChhdHRyICE9IE5V
TEwpID8gYXR0ci0+cGFyZW50IDogTlVMTDsNCj4gCX0gZWxzZSBpZihub2RlWFBhdGggIT0gTlVM
TCkgew0KPiAJCXhtbE5vZGVTZXRQdHIgcE5vZGVMaXN0ID0gTlVMTDsNCj4gCQl4bWxYUGF0aENv
bnRleHRQdHIgcEN0eCA9IE5VTEw7DQo+IAkJeG1sWFBhdGhPYmplY3RQdHIgcFhQYXRoT2JqID0g
TlVMTDsNCj4gCQlwQ3R4ID0geG1sWFBhdGhOZXdDb250ZXh0KGRvYyk7DQo+IAkJcFhQYXRoT2Jq
ID0geG1sWFBhdGhFdmFsKEJBRF9DQVNUIG5vZGVYUGF0aCwgcEN0eCk7DQo+IAkJaWYgKHBYUGF0
aE9iaiAhPSBOVUxMKSB7DQo+IAkJCXBOb2RlTGlzdCA9IHBYUGF0aE9iai0+bm9kZXNldHZhbDsN
Cj4gCQl9DQo+IAkJaWYgKHBOb2RlTGlzdCAhPSBOVUxMICYmIHBOb2RlTGlzdC0+bm9kZU5yID4g
MCkgeyANCj4gCQkJY3VyID0gcE5vZGVMaXN0LT5ub2RlVGFiWzBdOw0KPiAJCX0NCj4gCQl4bWxY
UGF0aEZyZWVDb250ZXh0KHBDdHgpOw0KPiAJCXhtbFhQYXRoRnJlZU9iamVjdChwWFBhdGhPYmop
Ow0KPiAJfSBlbHNlIGlmKG5vZGVOYW1lICE9IE5VTEwpIHsNCj4gCQljdXIgPSB4bWxTZWNGaW5k
Tm9kZSh4bWxEb2NHZXRSb290RWxlbWVudChkb2MpLCBCQURfQ0FTVCBub2RlTmFtZSwgQkFEX0NB
U1Qgbm9kZU5zKTsNCj4gCX0gZWxzZSB7DQo+IAkgICAgY3VyID0geG1sRG9jR2V0Um9vdEVsZW1l
bnQoZG9jKTsNCj4gCX0NCj4gCXJldHVybiBjdXI7IC8qIGNhbiBiZSBOVUxMIC4uIGNhbGxlciBt
dXN0IGNoZWNrICovDQo+IH0gLyogb2YgZmluZEJhc2VOb2RlKCkgKi8NCj4gDQoxMjQ4YTEyOTEN
Cj4gCXhtbE5vZGVQdHIgY3VyOw0KMTI1NSwxMjU2YzEyOTgsMTMwNw0KPCAgICAgc2lnbk5vZGUg
PSB4bWxTZWNGaW5kTm9kZSh4bWxEb2NHZXRSb290RWxlbWVudChkb2MpLCANCjwgCQkJICAgICAg
QkFEX0NBU1QgIlNpZ25hdHVyZSIsIHhtbFNlY0RTaWdOcyk7DQotLS0NCj4gDQo+IAkvKioNCj4g
CSAqIFdoYXQgZG8gd2Ugd2FudCB0byBzaWduPw0KPiAJICovICAgIA0KPiAJY3VyID0gZmluZEJh
c2VOb2RlKGRvYyk7DQo+IAlpZiAoY3VyID09IE5VTEwpIHsgDQo+IAkJZnByaW50ZihzdGRlcnIs
IkVycm9yOiBmYWlsZWQgdG8gZmluZCBzcGVjaWZpZWQgbm9kZVxuIik7DQo+IAkJcmV0dXJuKC0x
KTsNCj4gCX0NCj4gCXNpZ25Ob2RlID0geG1sU2VjRmluZE5vZGUoY3VyLCBCQURfQ0FTVCAiU2ln
bmF0dXJlIiwgeG1sU2VjRFNpZ05zKTsNCjEyNTgsMTI1OWMxMzA5LDEzMTANCjwgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwiRXJyb3I6IGZhaWxlZCB0byBmaW5kIFNpZ25hdHVyZSBub2RlXG4iKTsN
CjwgCXJldHVybigtMSk7DQotLS0NCj4gCQlmcHJpbnRmKHN0ZGVyciwiRXJyb3I6IGZhaWxlZCB0
byBmaW5kIFNpZ25hdHVyZSBub2RlXG4iKTsNCj4gCQlyZXR1cm4oLTEpOw0KMTMxMGExMzYyDQo+
IAl4bWxOb2RlUHRyIGN1cjsNCjEzMTMsMTMxNWMxMzY1LDEzNzQNCjwgICAgIAkgICAgDQo8ICAg
ICBzaWduTm9kZSA9IHhtbFNlY0ZpbmROb2RlKHhtbERvY0dldFJvb3RFbGVtZW50KGRvYyksIA0K
PCAJCQkgICAgICBCQURfQ0FTVCAiU2lnbmF0dXJlIiwgeG1sU2VjRFNpZ05zKTsNCi0tLQ0KPiAN
Cj4gCS8qKg0KPiAJICogV2hhdCBkbyB3ZSB3YW50IHRvIHZlcmlmeT8NCj4gCSAqLyAgICANCj4g
CWN1ciA9IGZpbmRCYXNlTm9kZShkb2MpOw0KPiAJaWYgKGN1ciA9PSBOVUxMKSB7IA0KPiAJCWZw
cmludGYoc3RkZXJyLCJFcnJvcjogZmFpbGVkIHRvIGZpbmQgc3BlY2lmaWVkIG5vZGVcbiIpOw0K
PiAJCXJldHVybigtMSk7DQo+IAl9DQo+IAlzaWduTm9kZSA9IHhtbFNlY0ZpbmROb2RlKGN1ciwg
QkFEX0NBU1QgIlNpZ25hdHVyZSIsIHhtbFNlY0RTaWdOcyk7DQoxMzE3LDEzMThjMTM3NiwxMzc3
DQo8ICAgICAgICAgZnByaW50ZihzdGRlcnIsIkVycm9yOiBmYWlsZWQgdG8gZmluZCBTaWduYXR1
cmUgbm9kZVxuIik7DQo8IAlyZXR1cm4oLTEpOw0KLS0tDQo+IAkJZnByaW50ZihzdGRlcnIsIkVy
cm9yOiBmYWlsZWQgdG8gZmluZCBTaWduYXR1cmUgbm9kZVxuIik7DQo+IAkJcmV0dXJuKC0xKTsN
CjE0MTQsMTQyNGMxNDczLDE0NzQNCjwgCWlmKG5vZGVJZCAhPSBOVUxMKSB7DQo8IAkgICAgeG1s
QXR0clB0ciBhdHRyOw0KPCAJICAgIA0KPCAJICAgIGF0dHIgPSB4bWxHZXRJRChkb2MsIEJBRF9D
QVNUIG5vZGVJZCk7DQo8IAkgICAgY3VyID0gKGF0dHIgIT0gTlVMTCkgPyBhdHRyLT5wYXJlbnQg
OiBOVUxMOw0KPCAJfSBlbHNlIGlmKG5vZGVOYW1lICE9IE5VTEwpIHsNCjwgCSAgICBjdXIgPSB4
bWxTZWNGaW5kTm9kZSh4bWxEb2NHZXRSb290RWxlbWVudChkb2MpLCBCQURfQ0FTVCBub2RlTmFt
ZSwgQkFEX0NBU1Qgbm9kZU5zKTsNCjwgCX0gZWxzZSB7DQo8IAkgICAgY3VyID0geG1sRG9jR2V0
Um9vdEVsZW1lbnQoZG9jKTsNCjwgCX0NCjwgCQ0KLS0tDQo+IAljdXIgPSBmaW5kQmFzZU5vZGUo
ZG9jKTsNCj4gDQoxNDk4YzE1NDgsMTU1Mw0KPCAgICAgY3VyID0geG1sU2VjRmluZE5vZGUoeG1s
RG9jR2V0Um9vdEVsZW1lbnQoZG9jKSwgQkFEX0NBU1QgIkVuY3J5cHRlZERhdGEiLCB4bWxTZWNF
bmNOcyk7DQotLS0NCj4gCWN1ciA9IGZpbmRCYXNlTm9kZShkb2MpOw0KPiAJaWYgKGN1ciA9PSBO
VUxMKSB7IA0KPiAJCWZwcmludGYoc3RkZXJyLCJFcnJvcjogZmFpbGVkIHRvIGZpbmQgc3BlY2lm
aWVkIG5vZGVcbiIpOw0KPiAJCXJldHVybigtMSk7DQo+IAl9DQo+ICAgICBjdXIgPSB4bWxTZWNG
aW5kTm9kZShjdXIsIEJBRF9DQVNUICJFbmNyeXB0ZWREYXRhIiwgeG1sU2VjRW5jTnMpOw0KGg==

------_=_NextPart_001_01C2A782.BCF84023--