[Mono-list] Re: More help needed.

Atsushi Enomoto ginga@kit.hi-ho.ne.jp
Mon, 14 Oct 2002 22:29:33 +0900


--------_3DAAC39652B30519E008_MULTIPART_MIXED_
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: 7bit

>    I am using a method called System.Xml.XmlDocument.ImportNode, but
> Mono does not implement this bad boy yet.  Could someone cook an
> implementation for this method?

2 days ago, I failed to send this easy implementation code to the ML,
but only to send to Miguel himself.
Now I made some tests and some modifications.

Miguel, I found two bugs that code in copying attributes,
so please update that code.

____________________
Atsushi ENOMOTO

--------_3DAAC39652B30519E008_MULTIPART_MIXED_
Content-Type: application/octet-stream; name="XmlDocument.diff"
Content-Disposition: attachment;
 filename="XmlDocument.diff"
Content-Transfer-Encoding: base64

LS0tIFhtbERvY3VtZW50LmNzCTIwMDItMTAtMTQgMjI6MDM6NTYuMDAwMDAwMDAwICswOTAwCisr
KyBuZXdYbWxEb2N1bWVudC5jcwkyMDAyLTEwLTE0IDIyOjEyOjE2LjAwMDAwMDAwMCArMDkwMApA
QCAtMzk1LDExICszOTUsMTcgQEAKIAkJW01vbm9UT0RPXQogCQlwdWJsaWMgdmlydHVhbCBYbWxO
b2RlIEltcG9ydE5vZGUgKFhtbE5vZGUgbm9kZSwgYm9vbCBkZWVwKQogCQl7CisJCQkvLyBIb3cg
dG8gcmVzb2x2ZSBkZWZhdWx0IGF0dHJpYnV0ZSB2YWx1ZXM/CiAJCQlzd2l0Y2gobm9kZS5Ob2Rl
VHlwZSkKIAkJCXsKIAkJCQljYXNlIFhtbE5vZGVUeXBlLkF0dHJpYnV0ZToKLQkJCQkJWG1sQXR0
cmlidXRlIGEgPSBub2RlIGFzIFhtbEF0dHJpYnV0ZTsKLQkJCQkJcmV0dXJuIHRoaXMuQ3JlYXRl
QXR0cmlidXRlKGEuUHJlZml4LCBhLkxvY2FsTmFtZSwgYS5OYW1lc3BhY2VVUkkpOworCQkJCQl7
CisJCQkJCQlYbWxBdHRyaWJ1dGUgc3JjX2F0dCA9IG5vZGUgYXMgWG1sQXR0cmlidXRlOworCQkJ
CQkJWG1sQXR0cmlidXRlIGRzdF9hdHQgPSB0aGlzLkNyZWF0ZUF0dHJpYnV0ZShzcmNfYXR0LlBy
ZWZpeCwgc3JjX2F0dC5Mb2NhbE5hbWUsIHNyY19hdHQuTmFtZXNwYWNlVVJJKTsKKwkJCQkJCS8v
IFRPRE86IHJlc29sdmUgZGVmYXVsdCBhdHRyaWJ1dGUgdmFsdWVzCisJCQkJCQlkc3RfYXR0LlZh
bHVlID0gc3JjX2F0dC5WYWx1ZTsKKwkJCQkJCXJldHVybiBkc3RfYXR0OworCQkJCQl9CiAKIAkJ
CQljYXNlIFhtbE5vZGVUeXBlLkNEQVRBOgogCQkJCQlyZXR1cm4gdGhpcy5DcmVhdGVDRGF0YVNl
Y3Rpb24obm9kZS5WYWx1ZSk7CkBAIC00MTEsNDMgKzQxNyw1NCBAQAogCQkJCQl0aHJvdyBuZXcg
WG1sRXhjZXB0aW9uKCJEb2N1bWVudCBjYW5ub3QgYmUgaW1wb3J0ZWQuIik7CiAKIAkJCQljYXNl
IFhtbE5vZGVUeXBlLkRvY3VtZW50RnJhZ21lbnQ6Ci0JCQkJCVhtbERvY3VtZW50RnJhZ21lbnQg
ZGYgPSB0aGlzLkNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLQkJCQkJaWYoZGVlcCkKIAkJCQkJ
ewotCQkJCQkJZm9yZWFjaChYbWxOb2RlIG4gaW4gbm9kZS5DaGlsZE5vZGVzKQorCQkJCQkJWG1s
RG9jdW1lbnRGcmFnbWVudCBkZiA9IHRoaXMuQ3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworCQkJ
CQkJaWYoZGVlcCkKIAkJCQkJCXsKLQkJCQkJCQlkZi5BcHBlbmRDaGlsZCh0aGlzLkltcG9ydE5v
ZGUobiwgZGVlcCkpOworCQkJCQkJCWZvcmVhY2goWG1sTm9kZSBuIGluIG5vZGUuQ2hpbGROb2Rl
cykKKwkJCQkJCQl7CisJCQkJCQkJCWRmLkFwcGVuZENoaWxkKHRoaXMuSW1wb3J0Tm9kZShuLCBk
ZWVwKSk7CisJCQkJCQkJfQogCQkJCQkJfQorCQkJCQkJcmV0dXJuIGRmOwogCQkJCQl9Ci0JCQkJ
CXJldHVybiBkZjsKIAogCQkJCWNhc2UgWG1sTm9kZVR5cGUuRG9jdW1lbnRUeXBlOgogCQkJCQl0
aHJvdyBuZXcgWG1sRXhjZXB0aW9uKCJEb2N1bWVudFR5cGUgY2Fubm90IGJlIGltcG9ydGVkLiIp
OwogCiAJCQkJY2FzZSBYbWxOb2RlVHlwZS5FbGVtZW50OgotCQkJCQlYbWxFbGVtZW50IHNyYyA9
IG5vZGUgYXMgWG1sRWxlbWVudDsKLQkJCQkJWG1sRWxlbWVudCBkc3QgPSB0aGlzLkNyZWF0ZUVs
ZW1lbnQoc3JjLlByZWZpeCwgc3JjLkxvY2FsTmFtZSwgc3JjLk5hbWVzcGFjZVVSSSk7Ci0JCQkJ
CWlmKGRlZXApCiAJCQkJCXsKLQkJCQkJCWZvcmVhY2goWG1sTm9kZSBuIGluIHNyYy5DaGlsZE5v
ZGVzKQotCQkJCQkJCWRzdC5BcHBlbmRDaGlsZCh0aGlzLkltcG9ydE5vZGUobiwgZGVlcCkpOwor
CQkJCQkJWG1sRWxlbWVudCBzcmMgPSAoWG1sRWxlbWVudClub2RlOworCQkJCQkJWG1sRWxlbWVu
dCBkc3QgPSB0aGlzLkNyZWF0ZUVsZW1lbnQoc3JjLlByZWZpeCwgc3JjLkxvY2FsTmFtZSwgc3Jj
Lk5hbWVzcGFjZVVSSSk7CisJCQkJCQlmb3JlYWNoKFhtbEF0dHJpYnV0ZSBhdHRyIGluIHNyYy5B
dHRyaWJ1dGVzKQorCQkJCQkJeworCQkJCQkJCS8vIFRPRE86IGNyZWF0ZSBkZWZhdWx0IGF0dHJp
YnV0ZSB2YWx1ZXMKKwkJCQkJCQlkc3QuU2V0QXR0cmlidXRlTm9kZSgoWG1sQXR0cmlidXRlKXRo
aXMuSW1wb3J0Tm9kZShhdHRyLCBkZWVwKSk7CisJCQkJCQl9CisJCQkJCQlpZihkZWVwKQorCQkJ
CQkJeworCQkJCQkJCWZvcmVhY2goWG1sTm9kZSBuIGluIHNyYy5DaGlsZE5vZGVzKQorCQkJCQkJ
CQlkc3QuQXBwZW5kQ2hpbGQodGhpcy5JbXBvcnROb2RlKG4sIGRlZXApKTsKKwkJCQkJCX0KKwkJ
CQkJCXJldHVybiBkc3Q7CiAJCQkJCX0KLQkJCQkJcmV0dXJuIGRzdDsKIAotCQkJCS8vY2FzZSBY
bWxOb2RlVHlwZS5FbmRFbGVtZW50OgotCQkJCS8vCXRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4
Y2VwdGlvbiAoKTsKLQkJCQkvL2Nhc2UgWG1sTm9kZVR5cGUuRW5kRW50aXR5OgotCQkJCS8vCXRo
cm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiAoKTsKLQkJCQkvL2Nhc2UgWG1sTm9kZVR5
cGUuRW50aXR5OgotCQkJCS8vCXRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiAoKTsK
KwkJCQljYXNlIFhtbE5vZGVUeXBlLkVuZEVsZW1lbnQ6CisJCQkJCXRocm93IG5ldyBYbWxFeGNl
cHRpb24gKCJJbGxlZ2FsIEltcG9ydE5vZGUgY2FsbCBmb3IgTm9kZVR5cGUuRW5kRWxlbWVudCIp
OworCQkJCWNhc2UgWG1sTm9kZVR5cGUuRW5kRW50aXR5OgorCQkJCQl0aHJvdyBuZXcgWG1sRXhj
ZXB0aW9uICgiSWxsZWdhbCBJbXBvcnROb2RlIGNhbGwgZm9yIE5vZGVUeXBlLkVuZEVudGl0eSIp
OworCQkJCWNhc2UgWG1sTm9kZVR5cGUuRW50aXR5OgorCQkJCQl0aHJvdyBuZXcgTm90SW1wbGVt
ZW50ZWRFeGNlcHRpb24gKCk7CiAKKwkJCQkvLyBbMjAwMi4xMC4xNF0gQ3JlYXRlRW50aXR5UmVm
ZXJlbmNlIG5vdCBpbXBsZW1lbnRlZC4KIAkJCQljYXNlIFhtbE5vZGVUeXBlLkVudGl0eVJlZmVy
ZW5jZToKLQkJCQkJcmV0dXJuIHRoaXMuQ3JlYXRlRW50aXR5UmVmZXJlbmNlKG5vZGUuTmFtZSk7
CisJCQkJCXRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbigiSW1wb3J0Tm9kZSBvZiBF
bnRpdHlSZWZlcmVuY2Ugbm90IGltcGxlbWVudGVkIG1haW5seSBiZWNhdXNlIENyZWF0ZUVudGl0
eVJlZmVyZW5jZSB3YXMgaW1wbGVtZW50ZWQgaW4gdGhlIG1lYW50aW1lLiIpOworLy8JCQkJCXJl
dHVybiB0aGlzLkNyZWF0ZUVudGl0eVJlZmVyZW5jZShub2RlLk5hbWUpOwogCi0JCQkJLy9jYXNl
IFhtbE5vZGVUeXBlLk5vbmU6Ci0JCQkJLy8JdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0
aW9uICgpOwotCQkJCS8vY2FzZSBYbWxOb2RlVHlwZS5Ob3RhdGlvbjoKLQkJCQkvLwl0aHJvdyBu
ZXcgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24gKCk7CisJCQkJY2FzZSBYbWxOb2RlVHlwZS5Ob25l
OgorCQkJCQl0aHJvdyBuZXcgWG1sRXhjZXB0aW9uICgiSWxsZWdhbCBJbXBvcnROb2RlIGNhbGwg
Zm9yIE5vZGVUeXBlLk5vbmUiKTsKKwkJCQljYXNlIFhtbE5vZGVUeXBlLk5vdGF0aW9uOgorCQkJ
CQl0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24gKCk7CiAKIAkJCQljYXNlIFhtbE5v
ZGVUeXBlLlByb2Nlc3NpbmdJbnN0cnVjdGlvbjoKIAkJCQkJWG1sUHJvY2Vzc2luZ0luc3RydWN0
aW9uIHBpID0gbm9kZSBhcyBYbWxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb247CkBAIC00NjIsOCArNDc5
LDEwIEBACiAJCQkJY2FzZSBYbWxOb2RlVHlwZS5XaGl0ZXNwYWNlOgogCQkJCQlyZXR1cm4gdGhp
cy5DcmVhdGVXaGl0ZXNwYWNlKG5vZGUuVmFsdWUpOwogCi0JCQkJLy9jYXNlIFhtbE5vZGVUeXBl
LlhtbERlY2xhcmF0aW9uOgotCQkJCS8vCXRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlv
biAoKTsKKwkJCQkvLyBJIGRvbid0IGtub3cgaG93IHRvIHRlc3QgaXQuLi4KKwkJCQljYXNlIFht
bE5vZGVUeXBlLlhtbERlY2xhcmF0aW9uOgorCQkJCS8vCXJldHVybiB0aGlzLkNyZWF0ZU5vZGUo
WG1sTm9kZVR5cGUuWG1sRGVjbGFyYXRpb24sIFN0cmluZy5FbXB0eSwgbm9kZS5WYWx1ZSk7CisJ
CQkJCXRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiAoKTsKIAogCQkJCWRlZmF1bHQ6
CiAJCQkJCXRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiAoKTsK

--------_3DAAC39652B30519E008_MULTIPART_MIXED_
Content-Type: application/octet-stream; name="XmlDocumentTests.diff"
Content-Disposition: attachment;
 filename="XmlDocumentTests.diff"
Content-Transfer-Encoding: base64

LS0tIFhtbERvY3VtZW50VGVzdHMuY3MJMjAwMi0xMC0xNCAyMjowMzo1Ny4wMDAwMDAwMDAgKzA5
MDAKKysrIG5ld1htbERvY3VtZW50VGVzdHMuY3MJMjAwMi0xMC0xNCAyMjowMDoxOS4wMDAwMDAw
MDAgKzA5MDAKQEAgLTc0NCw1ICs3NDQsNTQgQEAKIAkJCW5leHRTaWJsaW5nID0gbm9kZS5OZXh0
U2libGluZzsKIAkJCUFzc2VydE51bGwgKCJFeHBlY3RlZCByZW1vdmVkIG5vZGUncyBuZXh0IHNp
YmxpbmcgdG8gYmUgbnVsbC4iLCBuZXh0U2libGluZyk7CiAJCX0KKworCQkvLyBJbXBvcnROb2Rl
CisJCXB1YmxpYyB2b2lkIFRlc3RJbXBvcnROb2RlICgpCisJCXsKKwkJCVhtbE5vZGUgbjsKKwor
CQkJc3RyaW5nIHhsaW5rVVJJID0gImh0dHA6Ly93d3cudzMub3JnLzE5OTkvWExpbmsiOworCQkJ
c3RyaW5nIHhtbDEgPSAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnID8+PGZv
byB4bWxuczp4bGluaz0nIiArIHhsaW5rVVJJICsgIic+PGJhciBhMT0ndjEnIHhsaW5rOmhyZWY9
JyNmb28nPjxiYXo+PCFbQ0RBVEFbY2RhdGEgc2VjdGlvbi5cblx0aXRlbSAxXG5cdGl0ZW0gMlxu
XV0+RnJvbSBoZXJlLCBzaW1wbGUgdGV4dCBub2RlLjwvYmF6PjwvYmFyPjwvZm9vPiI7CisJCQlk
b2N1bWVudC5Mb2FkWG1sKHhtbDEpOworCQkJWG1sRG9jdW1lbnQgbmV3RG9jID0gbmV3IFhtbERv
Y3VtZW50KCk7CisJCQluZXdEb2MuTG9hZFhtbCgiPGhvZ2U+PGZ1Z2EgLz48L2hvZ2U+Iik7CisJ
CQlYbWxFbGVtZW50IGJhciA9IGRvY3VtZW50LkRvY3VtZW50RWxlbWVudC5GaXJzdENoaWxkIGFz
IFhtbEVsZW1lbnQ7CisKKwkJCS8vIEF0dHJpYnV0ZQorCQkJbiA9IG5ld0RvYy5JbXBvcnROb2Rl
KGJhci5HZXRBdHRyaWJ1dGVOb2RlKCJocmVmIiwgeGxpbmtVUkkpLCB0cnVlKTsKKwkJCUFzc2Vy
dEVxdWFscygiI0ltcG9ydE5vZGUuQXR0ci5OUy5Mb2NhbE5hbWUiLCAiaHJlZiIsIG4uTG9jYWxO
YW1lKTsKKwkJCUFzc2VydEVxdWFscygiI0ltcG9ydE5vZGUuQXR0ci5OUy5OU1VSSSIsIHhsaW5r
VVJJLCBuLk5hbWVzcGFjZVVSSSk7CisJCQlBc3NlcnRFcXVhbHMoIiNJbXBvcnROb2RlLkF0dHIu
TlMuVmFsdWUiLCAiI2ZvbyIsIG4uVmFsdWUpOworCisJCQkvLyBDREFUQQorCQkJbiA9IG5ld0Rv
Yy5JbXBvcnROb2RlKGJhci5GaXJzdENoaWxkLkZpcnN0Q2hpbGQsIHRydWUpOworCQkJQXNzZXJ0
RXF1YWxzKCIjSW1wb3J0Tm9kZS5DREFUQSIsICJjZGF0YSBzZWN0aW9uLlxuXHRpdGVtIDFcblx0
aXRlbSAyXG4iLCBuLlZhbHVlKTsKKworCQkJLy8gRWxlbWVudAorCQkJWG1sRWxlbWVudCBlID0g
bmV3RG9jLkltcG9ydE5vZGUoYmFyLCB0cnVlKSBhcyBYbWxFbGVtZW50OworCQkJQXNzZXJ0RXF1
YWxzKCIjSW1wb3J0Tm9kZS5FbGVtZW50Lk5hbWUiLCAiYmFyIiwgZS5OYW1lKTsKKwkJCUFzc2Vy
dEVxdWFscygiI0ltcG9ydE5vZGUuRWxlbWVudC5BdHRyIiwgIiNmb28iLCBlLkdldEF0dHJpYnV0
ZSgiaHJlZiIsIHhsaW5rVVJJKSk7CisJCQlBc3NlcnRFcXVhbHMoIiNJbXBvcnROb2RlLkVsZW1l
bnQuZGVlcCIsICJiYXoiLCBlLkZpcnN0Q2hpbGQuTmFtZSk7CisKKwkJCS8vIEVudGl0eSBSZWZl
cmVuY2U6CisJCQkvLyAgIFsyMDAyLzEwLzE0XSBDcmVhdGVFbnRpdHlSZWZlcmVuY2Ugd2FzIG5v
dCBpbXBsZW1lbnRlZC4KKy8vCQkJZG9jdW1lbnQuTG9hZFhtbCgiPCFET0NUWVBFIHRlc3QgUFVC
TElDICdkdW1teScgWzwhRU5USVRZIEZPT0VOVCAnZm9vJz5dPjxyb290PiZGT09FTlQ7PC9yb290
PiIpOworLy8JCQluID0gbmV3RG9jLkltcG9ydE5vZGUoZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50
LkZpcnN0Q2hpbGQpOworLy8JCQlBc3NlcnRFcXVhbHMoIiNJbXBvcnROb2RlLkVudGl0eVJlZmVy
ZW5jZSIsICJGT09FTlQiLCBuLk5hbWUpOworLy8JCQlBc3NlcnRFcXVhbHMoIiNJbXBvcnROb2Rl
LkVudGl0eVJlZmVyZW5jZSIsICJmb29fIiwgbi5WYWx1ZSk7CisKKwkJCS8vIFByb2Nlc3Npbmcg
SW5zdHJ1Y3Rpb24KKwkJCWRvY3VtZW50LkxvYWRYbWwoIjxmb28+PD94bWwtc3R5bGVzaGVldCBo
cmVmPSdmb28ueHNsJyA/PjwvZm9vPiIpOworCQkJWG1sUHJvY2Vzc2luZ0luc3RydWN0aW9uIHBp
ID0gKFhtbFByb2Nlc3NpbmdJbnN0cnVjdGlvbiluZXdEb2MuSW1wb3J0Tm9kZShkb2N1bWVudC5E
b2N1bWVudEVsZW1lbnQuRmlyc3RDaGlsZCwgZmFsc2UpOworCQkJQXNzZXJ0RXF1YWxzKCIjSW1w
b3J0Tm9kZS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uTmFtZSIsICJ4bWwtc3R5bGVzaGVldCIsIHBp
Lk5hbWUpOworCQkJQXNzZXJ0RXF1YWxzKCIjSW1wb3J0Tm9kZS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24uRGF0YSIsICJocmVmPSdmb28ueHNsJyIsIHBpLkRhdGEuVHJpbSgpKTsKKwkJCQorCQkJLy8g
VGV4dAorCQkJZG9jdW1lbnQuTG9hZFhtbCh4bWwxKTsKKwkJCW4gPSBuZXdEb2MuSW1wb3J0Tm9k
ZSgoWG1sVGV4dCliYXIuRmlyc3RDaGlsZC5DaGlsZE5vZGVzWzFdLCB0cnVlKTsKKwkJCUFzc2Vy
dEVxdWFscygiI0ltcG9ydE5vZGUuVGV4dCIsICJGcm9tIGhlcmUsIHNpbXBsZSB0ZXh0IG5vZGUu
Iiwgbi5WYWx1ZSk7CisKKwkJCS8vIFdoaXRlc3BhY2UKKwkJfQogCX0KIH0K

--------_3DAAC39652B30519E008_MULTIPART_MIXED_
Content-Type: application/octet-stream; name="newXmlDocument.cs"
Content-Disposition: attachment;
 filename="newXmlDocument.cs"
Content-Transfer-Encoding: base64

Ly8KLy8gU3lzdGVtLlhtbC5YbWxEb2N1bWVudAovLwovLyBBdXRob3JzOgovLyAgIERhbmllbCBX
ZWJlciAoZGFuaWVsLXdlYmVyQGF1c3Rpbi5yci5jb20pCi8vICAgS3JhbCBGZXJjaCA8a3JhbF9m
ZXJjaEBob3RtYWlsLmNvbT4KLy8gICBKYXNvbiBEaWFtb25kIDxqYXNvbkBpbmpla3RpbG8ub3Jn
PgovLyAgIE1pZ3VlbCBkZSBJY2F6YSAobWlndWVsQHhpbWlhbi5jb20pCi8vICAgRHVuY2FuIE1h
ayAoZHVuY2FuQHhpbWlhbi5jb20pCi8vCi8vIChDKSAyMDAxIERhbmllbCBXZWJlcgovLyAoQykg
MjAwMiBLcmFsIEZlcmNoLCBKYXNvbiBEaWFtb25kLCBNaWd1ZWwgZGUgSWNhemEsIER1bmNhbiBN
YWsKLy8KCnVzaW5nIFN5c3RlbTsKdXNpbmcgU3lzdGVtLklPOwp1c2luZyBTeXN0ZW0uVGV4dDsK
dXNpbmcgU3lzdGVtLlhtbC5YUGF0aDsKdXNpbmcgU3lzdGVtLkRpYWdub3N0aWNzOwp1c2luZyBT
eXN0ZW0uQ29sbGVjdGlvbnM7CgpuYW1lc3BhY2UgU3lzdGVtLlhtbAp7CglwdWJsaWMgY2xhc3Mg
WG1sRG9jdW1lbnQgOiBYbWxOb2RlCgl7CgkJI3JlZ2lvbiBGaWVsZHMKCgkJWG1sTGlua2VkTm9k
ZSBsYXN0TGlua2VkQ2hpbGQ7CgkJWG1sTmFtZVRhYmxlIG5hbWVUYWJsZTsKCQlzdHJpbmcgYmFz
ZVVSSSA9IFN0cmluZy5FbXB0eTsKCgkJI2VuZHJlZ2lvbgoKCQkjcmVnaW9uIENvbnN0cnVjdG9y
cwoKCQlwdWJsaWMgWG1sRG9jdW1lbnQgKCkgOiBiYXNlIChudWxsKSB7IH0KCgkJW01vbm9UT0RP
XQoJCXByb3RlY3RlZCBpbnRlcm5hbCBYbWxEb2N1bWVudCAoWG1sSW1wbGVtZW50YXRpb24gaW1w
KSA6IGJhc2UgKG51bGwpCgkJewoJCQl0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24g
KCk7CgkJfQoKCQlwdWJsaWMgWG1sRG9jdW1lbnQgKFhtbE5hbWVUYWJsZSBudCkgOiBiYXNlIChu
dWxsKQoJCXsKCQkJbmFtZVRhYmxlID0gbnQ7CgkJfQoKCQkjZW5kcmVnaW9uCgoJCSNyZWdpb24g
RXZlbnRzCgoJCXB1YmxpYyBldmVudCBYbWxOb2RlQ2hhbmdlZEV2ZW50SGFuZGxlciBOb2RlQ2hh
bmdlZDsKCgkJcHVibGljIGV2ZW50IFhtbE5vZGVDaGFuZ2VkRXZlbnRIYW5kbGVyIE5vZGVDaGFu
Z2luZzsKCgkJcHVibGljIGV2ZW50IFhtbE5vZGVDaGFuZ2VkRXZlbnRIYW5kbGVyIE5vZGVJbnNl
cnRlZDsKCgkJcHVibGljIGV2ZW50IFhtbE5vZGVDaGFuZ2VkRXZlbnRIYW5kbGVyIE5vZGVJbnNl
cnRpbmc7CgoJCXB1YmxpYyBldmVudCBYbWxOb2RlQ2hhbmdlZEV2ZW50SGFuZGxlciBOb2RlUmVt
b3ZlZDsKCgkJcHVibGljIGV2ZW50IFhtbE5vZGVDaGFuZ2VkRXZlbnRIYW5kbGVyIE5vZGVSZW1v
dmluZzsKCgkJI2VuZHJlZ2lvbgoKCQkjcmVnaW9uIFByb3BlcnRpZXMKCgkJcHVibGljIG92ZXJy
aWRlIHN0cmluZyBCYXNlVVJJIHsKCQkJZ2V0IHsKCQkJCXJldHVybiBiYXNlVVJJOwoJCQl9CgkJ
fQoKCQlwdWJsaWMgWG1sRWxlbWVudCBEb2N1bWVudEVsZW1lbnQgewoJCQlnZXQgewoJCQkJWG1s
Tm9kZSBub2RlID0gRmlyc3RDaGlsZDsKCgkJCQl3aGlsZSAobm9kZSAhPSBudWxsKSB7CgkJCQkJ
aWYgKG5vZGUgaXMgWG1sRWxlbWVudCkKCQkJCQkJYnJlYWs7CgkJCQkJbm9kZSA9IG5vZGUuTmV4
dFNpYmxpbmc7CgkJCQl9CgoJCQkJcmV0dXJuIG5vZGUgIT0gbnVsbCA/IG5vZGUgYXMgWG1sRWxl
bWVudCA6IG51bGw7CgkJCX0KCQl9CgoJCVtNb25vVE9ET10KCQlwdWJsaWMgdmlydHVhbCBYbWxE
b2N1bWVudFR5cGUgRG9jdW1lbnRUeXBlIHsKCQkJZ2V0IHsgdGhyb3cgbmV3IE5vdEltcGxlbWVu
dGVkRXhjZXB0aW9uKCk7IH0KCQl9CgoJCVtNb25vVE9ET10KCQlwdWJsaWMgWG1sSW1wbGVtZW50
YXRpb24gSW1wbGVtZW50YXRpb24gewoJCQlnZXQgeyB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRF
eGNlcHRpb24oKTsgfQoJCX0KCgkJW01vbm9UT0RPICgiU2V0dGVyLiIpXQoJCXB1YmxpYyBvdmVy
cmlkZSBzdHJpbmcgSW5uZXJYbWwgewoJCQlnZXQgewoJCQkJLy8gTm90IHN1cmUgd2h5IHRoaXMg
aXMgYW4gb3ZlcnJpZGUuICBQYXNzaW5nIHRocm91Z2ggZm9yIG5vdy4KCQkJCXJldHVybiBiYXNl
LklubmVyWG1sOwoJCQl9CgkJCXNldCB7IHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlv
bigpOyB9CgkJfQoKCQlwdWJsaWMgb3ZlcnJpZGUgYm9vbCBJc1JlYWRPbmx5IHsKCQkJZ2V0IHsg
cmV0dXJuIGZhbHNlOyB9CgkJfQoKCQlpbnRlcm5hbCBvdmVycmlkZSBYbWxMaW5rZWROb2RlIExh
c3RMaW5rZWRDaGlsZCB7CgkJCWdldAl7CgkJCQlyZXR1cm4gbGFzdExpbmtlZENoaWxkOwoJCQl9
CgoJCQlzZXQgewoJCQkJbGFzdExpbmtlZENoaWxkID0gdmFsdWU7CgkJCX0KCQl9CgkJCgkJcHVi
bGljIG92ZXJyaWRlIHN0cmluZyBMb2NhbE5hbWUgewoJCQlnZXQgeyByZXR1cm4gIiNkb2N1bWVu
dCI7IH0KCQl9CgoJCXB1YmxpYyBvdmVycmlkZSBzdHJpbmcgTmFtZSB7CgkJCWdldCB7IHJldHVy
biAiI2RvY3VtZW50IjsgfQoJCX0KCgkJcHVibGljIFhtbE5hbWVUYWJsZSBOYW1lVGFibGUgewoJ
CQlnZXQgeyByZXR1cm4gbmFtZVRhYmxlOyB9CgkJfQoKCQlwdWJsaWMgb3ZlcnJpZGUgWG1sTm9k
ZVR5cGUgTm9kZVR5cGUgewoJCQlnZXQgeyByZXR1cm4gWG1sTm9kZVR5cGUuRG9jdW1lbnQ7IH0K
CQl9CgoJCXB1YmxpYyBvdmVycmlkZSBYbWxEb2N1bWVudCBPd25lckRvY3VtZW50IHsKCQkJZ2V0
IHsgcmV0dXJuIG51bGw7IH0KCQl9CgoJCVtNb25vVE9ET10KCQlwdWJsaWMgYm9vbCBQcmVzZXJ2
ZVdoaXRlc3BhY2UgewoJCQlnZXQgeyB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24o
KTsgfQoJCQlzZXQgeyB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24oKTsgfQoJCX0K
CgkJW01vbm9UT0RPXQoJCXB1YmxpYyB2aXJ0dWFsIFhtbFJlc29sdmVyIFhtbFJlc29sdmVyIHsK
CQkJc2V0IHsgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uKCk7IH0KCQl9CgoJCSNl
bmRyZWdpb24KCgkJI3JlZ2lvbiBNZXRob2RzCgoJCVtNb25vVE9ET10KCQlwdWJsaWMgb3ZlcnJp
ZGUgWG1sTm9kZSBDbG9uZU5vZGUgKGJvb2wgZGVlcCkKCQl7CgkJCXRocm93IG5ldyBOb3RJbXBs
ZW1lbnRlZEV4Y2VwdGlvbiAoKTsKCQl9CgoJCXB1YmxpYyBYbWxBdHRyaWJ1dGUgQ3JlYXRlQXR0
cmlidXRlIChzdHJpbmcgbmFtZSkKCQl7CgkJCXJldHVybiBDcmVhdGVBdHRyaWJ1dGUgKG5hbWUs
IFN0cmluZy5FbXB0eSk7CgkJfQoKCQlwdWJsaWMgWG1sQXR0cmlidXRlIENyZWF0ZUF0dHJpYnV0
ZSAoc3RyaW5nIHF1YWxpZmllZE5hbWUsIHN0cmluZyBuYW1lc3BhY2VVUkkpCgkJewoJCQlzdHJp
bmcgcHJlZml4OwoJCQlzdHJpbmcgbG9jYWxOYW1lOwoKCQkJUGFyc2VOYW1lIChxdWFsaWZpZWRO
YW1lLCBvdXQgcHJlZml4LCBvdXQgbG9jYWxOYW1lKTsKCgkJCXJldHVybiBDcmVhdGVBdHRyaWJ1
dGUgKHByZWZpeCwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpOwoJCX0KCgkJcHVibGljIHZpcnR1
YWwgWG1sQXR0cmlidXRlIENyZWF0ZUF0dHJpYnV0ZSAoc3RyaW5nIHByZWZpeCwgc3RyaW5nIGxv
Y2FsTmFtZSwgc3RyaW5nIG5hbWVzcGFjZVVSSSkKCQl7CgkJCWlmICgobG9jYWxOYW1lID09IG51
bGwpIHx8IChsb2NhbE5hbWUgPT0gU3RyaW5nLkVtcHR5KSkKCQkJCXRocm93IG5ldyBBcmd1bWVu
dEV4Y2VwdGlvbiAoIlRoZSBhdHRyaWJ1dGUgbG9jYWwgbmFtZSBjYW5ub3QgYmUgZW1wdHkuIik7
CgoJCQlyZXR1cm4gbmV3IFhtbEF0dHJpYnV0ZSAocHJlZml4LCBsb2NhbE5hbWUsIG5hbWVzcGFj
ZVVSSSwgdGhpcyk7CgkJfQoKCQlwdWJsaWMgdmlydHVhbCBYbWxDRGF0YVNlY3Rpb24gQ3JlYXRl
Q0RhdGFTZWN0aW9uIChzdHJpbmcgZGF0YSkKCQl7CgkJCXJldHVybiBuZXcgWG1sQ0RhdGFTZWN0
aW9uIChkYXRhLCB0aGlzKTsKCQl9CgoJCXB1YmxpYyB2aXJ0dWFsIFhtbENvbW1lbnQgQ3JlYXRl
Q29tbWVudCAoc3RyaW5nIGRhdGEpCgkJewoJCQlyZXR1cm4gbmV3IFhtbENvbW1lbnQoZGF0YSwg
dGhpcyk7CgkJfQoKCQlbTW9ub1RPRE9dCgkJcHJvdGVjdGVkIGludGVybmFsIHZpcnR1YWwgWG1s
QXR0cmlidXRlIENyZWF0ZURlZmF1bHRBdHRyaWJ1dGUgKHN0cmluZyBwcmVmaXgsIHN0cmluZyBs
b2NhbE5hbWUsIHN0cmluZyBuYW1lc3BhY2VVUkkpCgkJewoJCQl0aHJvdyBuZXcgTm90SW1wbGVt
ZW50ZWRFeGNlcHRpb24gKCk7CgkJfQoKCQlbTW9ub1RPRE9dCgkJcHVibGljIHZpcnR1YWwgWG1s
RG9jdW1lbnRGcmFnbWVudCBDcmVhdGVEb2N1bWVudEZyYWdtZW50ICgpCgkJewoJCQl0aHJvdyBu
ZXcgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24gKCk7CgkJfQoKCQlwdWJsaWMgdmlydHVhbCBYbWxE
b2N1bWVudFR5cGUgQ3JlYXRlRG9jdW1lbnRUeXBlIChzdHJpbmcgbmFtZSwgc3RyaW5nIHB1Ymxp
Y0lkLAoJCQkJCQkJCSAgIHN0cmluZyBzeXN0ZW1JZCwgc3RyaW5nIGludGVybmFsU3Vic2V0KQoJ
CXsKCQkJcmV0dXJuIG5ldyBYbWxEb2N1bWVudFR5cGUgKG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1J
ZCwgaW50ZXJuYWxTdWJzZXQsIHRoaXMpOwoJCX0KCgkJcHVibGljIFhtbEVsZW1lbnQgQ3JlYXRl
RWxlbWVudCAoc3RyaW5nIG5hbWUpCgkJewoJCQlyZXR1cm4gQ3JlYXRlRWxlbWVudCAobmFtZSwg
U3RyaW5nLkVtcHR5KTsKCQl9CgoJCXB1YmxpYyBYbWxFbGVtZW50IENyZWF0ZUVsZW1lbnQgKAoJ
CQlzdHJpbmcgcXVhbGlmaWVkTmFtZSwgCgkJCXN0cmluZyBuYW1lc3BhY2VVUkkpCgkJewoJCQlz
dHJpbmcgcHJlZml4OwoJCQlzdHJpbmcgbG9jYWxOYW1lOwoKCQkJUGFyc2VOYW1lIChxdWFsaWZp
ZWROYW1lLCBvdXQgcHJlZml4LCBvdXQgbG9jYWxOYW1lKTsKCgkJCXJldHVybiBDcmVhdGVFbGVt
ZW50IChwcmVmaXgsIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKTsKCQl9CgoJCXB1YmxpYyB2aXJ0
dWFsIFhtbEVsZW1lbnQgQ3JlYXRlRWxlbWVudCAoCgkJCXN0cmluZyBwcmVmaXgsCgkJCXN0cmlu
ZyBsb2NhbE5hbWUsCgkJCXN0cmluZyBuYW1lc3BhY2VVUkkpCgkJewoJCQlpZiAoKGxvY2FsTmFt
ZSA9PSBudWxsKSB8fCAobG9jYWxOYW1lID09IFN0cmluZy5FbXB0eSkpCgkJCQl0aHJvdyBuZXcg
QXJndW1lbnRFeGNlcHRpb24gKCJUaGUgbG9jYWwgbmFtZSBmb3IgZWxlbWVudHMgb3IgYXR0cmli
dXRlcyBjYW5ub3QgYmUgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcuIik7CgoJCQlyZXR1cm4gbmV3
IFhtbEVsZW1lbnQgKHByZWZpeCAhPSBudWxsID8gcHJlZml4IDogU3RyaW5nLkVtcHR5LCBsb2Nh
bE5hbWUsIG5hbWVzcGFjZVVSSSAhPSBudWxsID8gbmFtZXNwYWNlVVJJIDogU3RyaW5nLkVtcHR5
LCB0aGlzKTsKCQl9CgoJCVtNb25vVE9ET10KCQlwdWJsaWMgdmlydHVhbCBYbWxFbnRpdHlSZWZl
cmVuY2UgQ3JlYXRlRW50aXR5UmVmZXJlbmNlIChzdHJpbmcgbmFtZSkKCQl7CgkJCXRocm93IG5l
dyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiAoKTsKCQl9CgoJCVtNb25vVE9ET10KCQlwcm90ZWN0
ZWQgaW50ZXJuYWwgdmlydHVhbCBYUGF0aE5hdmlnYXRvciBDcmVhdGVOYXZpZ2F0b3IgKFhtbE5v
ZGUgbm9kZSkKCQl7CgkJCXRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiAoKTsKCQl9
CgoJCXB1YmxpYyB2aXJ0dWFsIFhtbE5vZGUgQ3JlYXRlTm9kZSAoCgkJCXN0cmluZyBub2RlVHlw
ZVN0cmluZywKCQkJc3RyaW5nIG5hbWUsCgkJCXN0cmluZyBuYW1lc3BhY2VVUkkpCgkJewoJCQly
ZXR1cm4gQ3JlYXRlTm9kZSAoR2V0Tm9kZVR5cGVGcm9tU3RyaW5nIChub2RlVHlwZVN0cmluZyks
IG5hbWUsIG5hbWVzcGFjZVVSSSk7CgkJfQoKCQlwdWJsaWMgdmlydHVhbCBYbWxOb2RlIENyZWF0
ZU5vZGUgKAoJCQlYbWxOb2RlVHlwZSB0eXBlLAoJCQlzdHJpbmcgbmFtZSwKCQkJc3RyaW5nIG5h
bWVzcGFjZVVSSSkKCQl7CgkJCXN0cmluZyBwcmVmaXggPSBudWxsOwoJCQlzdHJpbmcgbG9jYWxO
YW1lID0gbmFtZTsKCgkJCWlmICgodHlwZSA9PSBYbWxOb2RlVHlwZS5BdHRyaWJ1dGUpIHx8ICh0
eXBlID09IFhtbE5vZGVUeXBlLkVsZW1lbnQpIHx8ICh0eXBlID09IFhtbE5vZGVUeXBlLkVudGl0
eVJlZmVyZW5jZSkpCgkJCQlQYXJzZU5hbWUgKG5hbWUsIG91dCBwcmVmaXgsIG91dCBsb2NhbE5h
bWUpOwoJCQkKCQkJcmV0dXJuIENyZWF0ZU5vZGUgKHR5cGUsIHByZWZpeCwgbG9jYWxOYW1lLCBu
YW1lc3BhY2VVUkkpOwoJCX0KCgkJcHVibGljIHZpcnR1YWwgWG1sTm9kZSBDcmVhdGVOb2RlICgK
CQkJWG1sTm9kZVR5cGUgdHlwZSwKCQkJc3RyaW5nIHByZWZpeCwKCQkJc3RyaW5nIG5hbWUsCgkJ
CXN0cmluZyBuYW1lc3BhY2VVUkkpCgkJewoJCQlzd2l0Y2ggKHR5cGUpIHsKCQkJCWNhc2UgWG1s
Tm9kZVR5cGUuQXR0cmlidXRlOiByZXR1cm4gQ3JlYXRlQXR0cmlidXRlIChwcmVmaXgsIG5hbWUs
IG5hbWVzcGFjZVVSSSk7CgkJCQljYXNlIFhtbE5vZGVUeXBlLkNEQVRBOiByZXR1cm4gQ3JlYXRl
Q0RhdGFTZWN0aW9uIChudWxsKTsKCQkJCWNhc2UgWG1sTm9kZVR5cGUuQ29tbWVudDogcmV0dXJu
IENyZWF0ZUNvbW1lbnQgKG51bGwpOwoJCQkJY2FzZSBYbWxOb2RlVHlwZS5Eb2N1bWVudDogcmV0
dXJuIG5ldyBYbWxEb2N1bWVudCAoKTsgLy8gVE9ETyAtIHRlc3QgdG8gc2VlIHdoaWNoIGNvbnN0
cnVjdG9yIHRvIHVzZSwgaS5lLiB1c2UgZXhpc3RpbmcgTmFtZVRhYmxlIG9yIG5vdC4KCQkJCWNh
c2UgWG1sTm9kZVR5cGUuRG9jdW1lbnRGcmFnbWVudDogcmV0dXJuIENyZWF0ZURvY3VtZW50RnJh
Z21lbnQgKCk7CgkJCQljYXNlIFhtbE5vZGVUeXBlLkRvY3VtZW50VHlwZTogcmV0dXJuIENyZWF0
ZURvY3VtZW50VHlwZSAobnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7CgkJCQljYXNlIFhtbE5vZGVU
eXBlLkVsZW1lbnQ6IHJldHVybiBDcmVhdGVFbGVtZW50IChwcmVmaXgsIG5hbWUsIG5hbWVzcGFj
ZVVSSSk7CgkJCQljYXNlIFhtbE5vZGVUeXBlLkVudGl0eVJlZmVyZW5jZTogcmV0dXJuIENyZWF0
ZUVudGl0eVJlZmVyZW5jZSAobnVsbCk7CgkJCQljYXNlIFhtbE5vZGVUeXBlLlByb2Nlc3NpbmdJ
bnN0cnVjdGlvbjogcmV0dXJuIENyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbiAobnVsbCwgbnVs
bCk7CgkJCQljYXNlIFhtbE5vZGVUeXBlLlNpZ25pZmljYW50V2hpdGVzcGFjZTogcmV0dXJuIENy
ZWF0ZVNpZ25pZmljYW50V2hpdGVzcGFjZSAoU3RyaW5nLkVtcHR5KTsKCQkJCWNhc2UgWG1sTm9k
ZVR5cGUuVGV4dDogcmV0dXJuIENyZWF0ZVRleHROb2RlIChudWxsKTsKCQkJCWNhc2UgWG1sTm9k
ZVR5cGUuV2hpdGVzcGFjZTogcmV0dXJuIENyZWF0ZVdoaXRlc3BhY2UgKFN0cmluZy5FbXB0eSk7
CgkJCQljYXNlIFhtbE5vZGVUeXBlLlhtbERlY2xhcmF0aW9uOiByZXR1cm4gQ3JlYXRlWG1sRGVj
bGFyYXRpb24gKCIxLjAiLCBudWxsLCBudWxsKTsKCQkJCWRlZmF1bHQ6IHRocm93IG5ldyBBcmd1
bWVudE91dE9mUmFuZ2VFeGNlcHRpb24oU3RyaW5nLkZvcm1hdCgiezB9XG5QYXJhbWV0ZXIgbmFt
ZTogezF9IiwKCQkJCQkJCSAiU3BlY2lmaWVkIGFyZ3VtZW50IHdhcyBvdXQgb2YgdGhlIHJhbmdl
IG9mIHZhbGlkIHZhbHVlcyIsIHR5cGUuVG9TdHJpbmcgKCkpKTsKCQkJfQoJCX0KCgkJcHVibGlj
IHZpcnR1YWwgWG1sUHJvY2Vzc2luZ0luc3RydWN0aW9uIENyZWF0ZVByb2Nlc3NpbmdJbnN0cnVj
dGlvbiAoCgkJCXN0cmluZyB0YXJnZXQsCgkJCXN0cmluZyBkYXRhKQoJCXsKCQkJcmV0dXJuIG5l
dyBYbWxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gKHRhcmdldCwgZGF0YSwgdGhpcyk7CgkJfQoKCQlw
dWJsaWMgdmlydHVhbCBYbWxTaWduaWZpY2FudFdoaXRlc3BhY2UgQ3JlYXRlU2lnbmlmaWNhbnRX
aGl0ZXNwYWNlIChzdHJpbmcgdGV4dCkKCQl7CgkJCWZvcmVhY2ggKGNoYXIgYyBpbiB0ZXh0KQoJ
CQkJaWYgKChjICE9ICcgJykgJiYgKGMgIT0gJ1xyJykgJiYgKGMgIT0gJ1xuJykgJiYgKGMgIT0g
J1x0JykpCgkJCQkgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uICgiSW52YWxpZCB3aGl0
ZXNwYWNlIGNoYXJhY3RlcnMuIik7CgkJCSAKCQkJcmV0dXJuIG5ldyBYbWxTaWduaWZpY2FudFdo
aXRlc3BhY2UgKHRleHQsIHRoaXMpOwoJCX0KCgkJcHVibGljIHZpcnR1YWwgWG1sVGV4dCBDcmVh
dGVUZXh0Tm9kZSAoc3RyaW5nIHRleHQpCgkJewoJCQlyZXR1cm4gbmV3IFhtbFRleHQgKHRleHQs
IHRoaXMpOwoJCX0KCgkJcHVibGljIHZpcnR1YWwgWG1sV2hpdGVzcGFjZSBDcmVhdGVXaGl0ZXNw
YWNlIChzdHJpbmcgdGV4dCkKCQl7CgkJCWZvcmVhY2ggKGNoYXIgYyBpbiB0ZXh0KQoJCQkJaWYg
KChjICE9ICcgJykgJiYgKGMgIT0gJ1xyJykgJiYgKGMgIT0gJ1xuJykgJiYgKGMgIT0gJ1x0Jykp
CgkJCQkgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uICgiSW52YWxpZCB3aGl0ZXNwYWNl
IGNoYXJhY3RlcnMuIik7CgkJCSAKCQkJcmV0dXJuIG5ldyBYbWxXaGl0ZXNwYWNlICh0ZXh0LCB0
aGlzKTsKCQl9CgoJCXB1YmxpYyB2aXJ0dWFsIFhtbERlY2xhcmF0aW9uIENyZWF0ZVhtbERlY2xh
cmF0aW9uIChzdHJpbmcgdmVyc2lvbiwgc3RyaW5nIGVuY29kaW5nLAoJCQkJCQkJCSAgICBzdHJp
bmcgc3RhbmRhbG9uZSkKCQl7CgkJCWlmICh2ZXJzaW9uICE9ICIxLjAiKQoJCQkJdGhyb3cgbmV3
IEFyZ3VtZW50RXhjZXB0aW9uICgidmVyc2lvbiBzdHJpbmcgaXMgbm90IGNvcnJlY3QuIik7CgoJ
CQlpZiAgKChzdGFuZGFsb25lICE9IG51bGwpICYmICEoKHN0YW5kYWxvbmUgPT0gInllcyIpIHx8
IChzdGFuZGFsb25lID09ICJubyIpKSkKCQkJCXRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbiAo
InN0YW5kYWxvbmUgc3RyaW5nIGlzIG5vdCBjb3JyZWN0LiIpOwoJCQkKCQkJcmV0dXJuIG5ldyBY
bWxEZWNsYXJhdGlvbiAodmVyc2lvbiwgZW5jb2RpbmcsIHN0YW5kYWxvbmUsIHRoaXMpOwoJCX0K
CgkJW01vbm9UT0RPXQoJCXB1YmxpYyB2aXJ0dWFsIFhtbEVsZW1lbnQgR2V0RWxlbWVudEJ5SWQg
KHN0cmluZyBlbGVtZW50SWQpCgkJewoJCQl0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFeGNlcHRp
b24gKCk7CgkJfQoKCQlwdWJsaWMgdmlydHVhbCBYbWxOb2RlTGlzdCBHZXRFbGVtZW50c0J5VGFn
TmFtZSAoc3RyaW5nIG5hbWUpCgkJewoJCQlBcnJheUxpc3Qgbm9kZUFycmF5TGlzdCA9IG5ldyBB
cnJheUxpc3QgKCk7CgkJCXRoaXMuc2VhcmNoTm9kZXNSZWN1cnNpdmVseSAodGhpcywgbmFtZSwg
U3RyaW5nLkVtcHR5LCBub2RlQXJyYXlMaXN0KTsKCQkJcmV0dXJuIG5ldyBYbWxOb2RlQXJyYXlM
aXN0IChub2RlQXJyYXlMaXN0KTsKCQl9CgoJCXByaXZhdGUgdm9pZCBzZWFyY2hOb2Rlc1JlY3Vy
c2l2ZWx5IChYbWxOb2RlIGFyZ05vZGUsIHN0cmluZyBhcmdOYW1lLCBzdHJpbmcgYXJnTmFtZXNw
YWNlVVJJLCAKCQkJQXJyYXlMaXN0IGFyZ0FycmF5TGlzdCkKCQl7CgkJCVhtbE5vZGVMaXN0IHht
bE5vZGVMaXN0ID0gYXJnTm9kZS5DaGlsZE5vZGVzOwoJCQlmb3JlYWNoIChYbWxOb2RlIG5vZGUg
aW4geG1sTm9kZUxpc3QpewoJCQkJaWYgKG5vZGUuTG9jYWxOYW1lLkVxdWFscyAoYXJnTmFtZSkg
JiYgbm9kZS5OYW1lc3BhY2VVUkkuRXF1YWxzIChhcmdOYW1lc3BhY2VVUkkpKQoJCQkJCWFyZ0Fy
cmF5TGlzdC5BZGQgKG5vZGUpOwoJCQkJZWxzZQkKCQkJCQl0aGlzLnNlYXJjaE5vZGVzUmVjdXJz
aXZlbHkgKG5vZGUsIGFyZ05hbWUsIGFyZ05hbWVzcGFjZVVSSSwgYXJnQXJyYXlMaXN0KTsKCQkJ
fQoJCX0KCgkJcHVibGljIHZpcnR1YWwgWG1sTm9kZUxpc3QgR2V0RWxlbWVudHNCeVRhZ05hbWUg
KHN0cmluZyBsb2NhbE5hbWUsIHN0cmluZyBuYW1lc3BhY2VVUkkpCgkJewoJCQlBcnJheUxpc3Qg
bm9kZUFycmF5TGlzdCA9IG5ldyBBcnJheUxpc3QgKCk7CgkJCXRoaXMuc2VhcmNoTm9kZXNSZWN1
cnNpdmVseSAodGhpcywgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkksIG5vZGVBcnJheUxpc3QpOwoJ
CQlyZXR1cm4gbmV3IFhtbE5vZGVBcnJheUxpc3QgKG5vZGVBcnJheUxpc3QpOwoJCX0KCgkJcHJp
dmF0ZSBYbWxOb2RlVHlwZSBHZXROb2RlVHlwZUZyb21TdHJpbmcgKHN0cmluZyBub2RlVHlwZVN0
cmluZykKCQl7CgkJCXN3aXRjaCAobm9kZVR5cGVTdHJpbmcpIHsKCQkJCWNhc2UgImF0dHJpYnV0
ZSI6IHJldHVybiBYbWxOb2RlVHlwZS5BdHRyaWJ1dGU7CgkJCQljYXNlICJjZGF0YXNlY3Rpb24i
OiByZXR1cm4gWG1sTm9kZVR5cGUuQ0RBVEE7CgkJCQljYXNlICJjb21tZW50IjogcmV0dXJuIFht
bE5vZGVUeXBlLkNvbW1lbnQ7CgkJCQljYXNlICJkb2N1bWVudCI6IHJldHVybiBYbWxOb2RlVHlw
ZS5Eb2N1bWVudDsKCQkJCWNhc2UgImRvY3VtZW50ZnJhZ21lbnQiOiByZXR1cm4gWG1sTm9kZVR5
cGUuRG9jdW1lbnRGcmFnbWVudDsKCQkJCWNhc2UgImRvY3VtZW50dHlwZSI6IHJldHVybiBYbWxO
b2RlVHlwZS5Eb2N1bWVudFR5cGU7CgkJCQljYXNlICJlbGVtZW50IjogcmV0dXJuIFhtbE5vZGVU
eXBlLkVsZW1lbnQ7CgkJCQljYXNlICJlbnRpdHlyZWZlcmVuY2UiOiByZXR1cm4gWG1sTm9kZVR5
cGUuRW50aXR5UmVmZXJlbmNlOwoJCQkJY2FzZSAicHJvY2Vzc2luZ2luc3RydWN0aW9uIjogcmV0
dXJuIFhtbE5vZGVUeXBlLlByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKCQkJCWNhc2UgInNpZ25pZmlj
YW50d2hpdGVzcGFjZSI6IHJldHVybiBYbWxOb2RlVHlwZS5TaWduaWZpY2FudFdoaXRlc3BhY2U7
CgkJCQljYXNlICJ0ZXh0IjogcmV0dXJuIFhtbE5vZGVUeXBlLlRleHQ7CgkJCQljYXNlICJ3aGl0
ZXNwYWNlIjogcmV0dXJuIFhtbE5vZGVUeXBlLldoaXRlc3BhY2U7CgkJCQlkZWZhdWx0OgoJCQkJ
CXRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbihTdHJpbmcuRm9ybWF0KCJUaGUgc3RyaW5nIGRv
ZXNuJ3QgcmVwcmVzZW50IGFueSBub2RlIHR5cGUgOiB7MH0uIiwgbm9kZVR5cGVTdHJpbmcpKTsK
CQkJfQoJCX0KCgkJW01vbm9UT0RPXQoJCXB1YmxpYyB2aXJ0dWFsIFhtbE5vZGUgSW1wb3J0Tm9k
ZSAoWG1sTm9kZSBub2RlLCBib29sIGRlZXApCgkJewoJCQkvLyBIb3cgdG8gcmVzb2x2ZSBkZWZh
dWx0IGF0dHJpYnV0ZSB2YWx1ZXM/CgkJCXN3aXRjaChub2RlLk5vZGVUeXBlKQoJCQl7CgkJCQlj
YXNlIFhtbE5vZGVUeXBlLkF0dHJpYnV0ZToKCQkJCQl7CgkJCQkJCVhtbEF0dHJpYnV0ZSBzcmNf
YXR0ID0gbm9kZSBhcyBYbWxBdHRyaWJ1dGU7CgkJCQkJCVhtbEF0dHJpYnV0ZSBkc3RfYXR0ID0g
dGhpcy5DcmVhdGVBdHRyaWJ1dGUoc3JjX2F0dC5QcmVmaXgsIHNyY19hdHQuTG9jYWxOYW1lLCBz
cmNfYXR0Lk5hbWVzcGFjZVVSSSk7CgkJCQkJCS8vIFRPRE86IHJlc29sdmUgZGVmYXVsdCBhdHRy
aWJ1dGUgdmFsdWVzCgkJCQkJCWRzdF9hdHQuVmFsdWUgPSBzcmNfYXR0LlZhbHVlOwoJCQkJCQly
ZXR1cm4gZHN0X2F0dDsKCQkJCQl9CgoJCQkJY2FzZSBYbWxOb2RlVHlwZS5DREFUQToKCQkJCQly
ZXR1cm4gdGhpcy5DcmVhdGVDRGF0YVNlY3Rpb24obm9kZS5WYWx1ZSk7CgoJCQkJY2FzZSBYbWxO
b2RlVHlwZS5Db21tZW50OgoJCQkJCXJldHVybiB0aGlzLkNyZWF0ZUNvbW1lbnQobm9kZS5WYWx1
ZSk7CgoJCQkJY2FzZSBYbWxOb2RlVHlwZS5Eb2N1bWVudDoKCQkJCQl0aHJvdyBuZXcgWG1sRXhj
ZXB0aW9uKCJEb2N1bWVudCBjYW5ub3QgYmUgaW1wb3J0ZWQuIik7CgoJCQkJY2FzZSBYbWxOb2Rl
VHlwZS5Eb2N1bWVudEZyYWdtZW50OgoJCQkJCXsKCQkJCQkJWG1sRG9jdW1lbnRGcmFnbWVudCBk
ZiA9IHRoaXMuQ3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwoJCQkJCQlpZihkZWVwKQoJCQkJCQl7
CgkJCQkJCQlmb3JlYWNoKFhtbE5vZGUgbiBpbiBub2RlLkNoaWxkTm9kZXMpCgkJCQkJCQl7CgkJ
CQkJCQkJZGYuQXBwZW5kQ2hpbGQodGhpcy5JbXBvcnROb2RlKG4sIGRlZXApKTsKCQkJCQkJCX0K
CQkJCQkJfQoJCQkJCQlyZXR1cm4gZGY7CgkJCQkJfQoKCQkJCWNhc2UgWG1sTm9kZVR5cGUuRG9j
dW1lbnRUeXBlOgoJCQkJCXRocm93IG5ldyBYbWxFeGNlcHRpb24oIkRvY3VtZW50VHlwZSBjYW5u
b3QgYmUgaW1wb3J0ZWQuIik7CgoJCQkJY2FzZSBYbWxOb2RlVHlwZS5FbGVtZW50OgoJCQkJCXsK
CQkJCQkJWG1sRWxlbWVudCBzcmMgPSAoWG1sRWxlbWVudClub2RlOwoJCQkJCQlYbWxFbGVtZW50
IGRzdCA9IHRoaXMuQ3JlYXRlRWxlbWVudChzcmMuUHJlZml4LCBzcmMuTG9jYWxOYW1lLCBzcmMu
TmFtZXNwYWNlVVJJKTsKCQkJCQkJZm9yZWFjaChYbWxBdHRyaWJ1dGUgYXR0ciBpbiBzcmMuQXR0
cmlidXRlcykKCQkJCQkJewoJCQkJCQkJLy8gVE9ETzogY3JlYXRlIGRlZmF1bHQgYXR0cmlidXRl
IHZhbHVlcwoJCQkJCQkJZHN0LlNldEF0dHJpYnV0ZU5vZGUoKFhtbEF0dHJpYnV0ZSl0aGlzLklt
cG9ydE5vZGUoYXR0ciwgZGVlcCkpOwoJCQkJCQl9CgkJCQkJCWlmKGRlZXApCgkJCQkJCXsKCQkJ
CQkJCWZvcmVhY2goWG1sTm9kZSBuIGluIHNyYy5DaGlsZE5vZGVzKQoJCQkJCQkJCWRzdC5BcHBl
bmRDaGlsZCh0aGlzLkltcG9ydE5vZGUobiwgZGVlcCkpOwoJCQkJCQl9CgkJCQkJCXJldHVybiBk
c3Q7CgkJCQkJfQoKCQkJCWNhc2UgWG1sTm9kZVR5cGUuRW5kRWxlbWVudDoKCQkJCQl0aHJvdyBu
ZXcgWG1sRXhjZXB0aW9uICgiSWxsZWdhbCBJbXBvcnROb2RlIGNhbGwgZm9yIE5vZGVUeXBlLkVu
ZEVsZW1lbnQiKTsKCQkJCWNhc2UgWG1sTm9kZVR5cGUuRW5kRW50aXR5OgoJCQkJCXRocm93IG5l
dyBYbWxFeGNlcHRpb24gKCJJbGxlZ2FsIEltcG9ydE5vZGUgY2FsbCBmb3IgTm9kZVR5cGUuRW5k
RW50aXR5Iik7CgkJCQljYXNlIFhtbE5vZGVUeXBlLkVudGl0eToKCQkJCQl0aHJvdyBuZXcgTm90
SW1wbGVtZW50ZWRFeGNlcHRpb24gKCk7CgoJCQkJLy8gWzIwMDIuMTAuMTRdIENyZWF0ZUVudGl0
eVJlZmVyZW5jZSBub3QgaW1wbGVtZW50ZWQuCgkJCQljYXNlIFhtbE5vZGVUeXBlLkVudGl0eVJl
ZmVyZW5jZToKCQkJCQl0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24oIkltcG9ydE5v
ZGUgb2YgRW50aXR5UmVmZXJlbmNlIG5vdCBpbXBsZW1lbnRlZCBtYWlubHkgYmVjYXVzZSBDcmVh
dGVFbnRpdHlSZWZlcmVuY2Ugd2FzIGltcGxlbWVudGVkIGluIHRoZSBtZWFudGltZS4iKTsKLy8J
CQkJCXJldHVybiB0aGlzLkNyZWF0ZUVudGl0eVJlZmVyZW5jZShub2RlLk5hbWUpOwoKCQkJCWNh
c2UgWG1sTm9kZVR5cGUuTm9uZToKCQkJCQl0aHJvdyBuZXcgWG1sRXhjZXB0aW9uICgiSWxsZWdh
bCBJbXBvcnROb2RlIGNhbGwgZm9yIE5vZGVUeXBlLk5vbmUiKTsKCQkJCWNhc2UgWG1sTm9kZVR5
cGUuTm90YXRpb246CgkJCQkJdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uICgpOwoK
CQkJCWNhc2UgWG1sTm9kZVR5cGUuUHJvY2Vzc2luZ0luc3RydWN0aW9uOgoJCQkJCVhtbFByb2Nl
c3NpbmdJbnN0cnVjdGlvbiBwaSA9IG5vZGUgYXMgWG1sUHJvY2Vzc2luZ0luc3RydWN0aW9uOwoJ
CQkJCXJldHVybiB0aGlzLkNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihwaS5UYXJnZXQsIHBp
LkRhdGEpOwoKCQkJCWNhc2UgWG1sTm9kZVR5cGUuU2lnbmlmaWNhbnRXaGl0ZXNwYWNlOgoJCQkJ
CXJldHVybiB0aGlzLkNyZWF0ZVNpZ25pZmljYW50V2hpdGVzcGFjZShub2RlLlZhbHVlKTsKCgkJ
CQljYXNlIFhtbE5vZGVUeXBlLlRleHQ6CgkJCQkJcmV0dXJuIHRoaXMuQ3JlYXRlVGV4dE5vZGUo
bm9kZS5WYWx1ZSk7CgoJCQkJY2FzZSBYbWxOb2RlVHlwZS5XaGl0ZXNwYWNlOgoJCQkJCXJldHVy
biB0aGlzLkNyZWF0ZVdoaXRlc3BhY2Uobm9kZS5WYWx1ZSk7CgoJCQkJLy8gSSBkb24ndCBrbm93
IGhvdyB0byB0ZXN0IGl0Li4uCgkJCQljYXNlIFhtbE5vZGVUeXBlLlhtbERlY2xhcmF0aW9uOgoJ
CQkJLy8JcmV0dXJuIHRoaXMuQ3JlYXRlTm9kZShYbWxOb2RlVHlwZS5YbWxEZWNsYXJhdGlvbiwg
U3RyaW5nLkVtcHR5LCBub2RlLlZhbHVlKTsKCQkJCQl0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRF
eGNlcHRpb24gKCk7CgoJCQkJZGVmYXVsdDoKCQkJCQl0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRF
eGNlcHRpb24gKCk7CgkJCX0KCQl9CgoJCXB1YmxpYyB2aXJ0dWFsIHZvaWQgTG9hZCAoU3RyZWFt
IGluU3RyZWFtKQoJCXsKCQkJWG1sUmVhZGVyIHhtbFJlYWRlciA9IG5ldyBYbWxUZXh0UmVhZGVy
IChpblN0cmVhbSk7CgkJCUxvYWQgKHhtbFJlYWRlcik7CgkJfQoKCQlwdWJsaWMgdmlydHVhbCB2
b2lkIExvYWQgKHN0cmluZyBmaWxlbmFtZSkKCQl7CgkJCWJhc2VVUkkgPSBmaWxlbmFtZTsKCQkJ
WG1sUmVhZGVyIHhtbFJlYWRlciA9IG5ldyBYbWxUZXh0UmVhZGVyIChuZXcgU3RyZWFtUmVhZGVy
IChmaWxlbmFtZSkpOwoJCQlMb2FkICh4bWxSZWFkZXIpOwoJCX0KCgkJcHVibGljIHZpcnR1YWwg
dm9pZCBMb2FkIChUZXh0UmVhZGVyIHR4dFJlYWRlcikKCQl7CgkJCUxvYWQgKG5ldyBYbWxUZXh0
UmVhZGVyICh0eHRSZWFkZXIpKTsKCQl9CgoJCXB1YmxpYyB2aXJ0dWFsIHZvaWQgTG9hZCAoWG1s
UmVhZGVyIHhtbFJlYWRlcikKCQl7CgkJCS8vIFJlc2V0IG91ciBkb2N1bWVudAoJCQkvLyBGb3Ig
bm93IHRoaXMganVzdCBtZWFucyByZW1vdmluZyBhbGwgb3VyIGNoaWxkcmVuIGJ1dCBsYXRlciB0
aGlzCgkJCS8vIG1heSB0dXJuIG91dCBvIG5lZWQgdG8gY2FsbCBhIHByaXZhdGUgbWV0aG9kIHRo
YXQgcmVzZXRzIG90aGVyIHRoaW5ncwoJCQkvLyBsaWtlIHByb3BlcnRpZXMgd2UgaGF2ZSwgZXRj
LgoJCQlSZW1vdmVBbGwgKCk7CgoJCQlYbWxOb2RlIGN1cnJlbnROb2RlID0gdGhpczsKCQkJWG1s
Tm9kZSBuZXdOb2RlOwoKCQkJd2hpbGUgKHhtbFJlYWRlci5SZWFkICgpKSAKCQkJewoJCQkJc3dp
dGNoICh4bWxSZWFkZXIuTm9kZVR5cGUpIHsKCgkJCQljYXNlIFhtbE5vZGVUeXBlLkNEQVRBOgoJ
CQkJCW5ld05vZGUgPSBDcmVhdGVDRGF0YVNlY3Rpb24oeG1sUmVhZGVyLlZhbHVlKTsKCQkJCQlj
dXJyZW50Tm9kZS5BcHBlbmRDaGlsZCAobmV3Tm9kZSk7CgkJCQkJYnJlYWs7CgoJCQkJY2FzZSBY
bWxOb2RlVHlwZS5Db21tZW50OgoJCQkJCW5ld05vZGUgPSBDcmVhdGVDb21tZW50ICh4bWxSZWFk
ZXIuVmFsdWUpOwoJCQkJCWN1cnJlbnROb2RlLkFwcGVuZENoaWxkIChuZXdOb2RlKTsKCQkJCQli
cmVhazsKCgkJCQljYXNlIFhtbE5vZGVUeXBlLkVsZW1lbnQ6CgkJCQkJWG1sRWxlbWVudCBlbGVt
ZW50ID0gQ3JlYXRlRWxlbWVudCAoeG1sUmVhZGVyLlByZWZpeCwgeG1sUmVhZGVyLkxvY2FsTmFt
ZSwgeG1sUmVhZGVyLk5hbWVzcGFjZVVSSSk7CgkJCQkJY3VycmVudE5vZGUuQXBwZW5kQ2hpbGQg
KGVsZW1lbnQpOwoKCQkJCQkvLyBzZXQgdGhlIGVsZW1lbnQncyBhdHRyaWJ1dGVzLgoJCQkJCXdo
aWxlICh4bWxSZWFkZXIuTW92ZVRvTmV4dEF0dHJpYnV0ZSAoKSkgewoJCQkJCQlYbWxBdHRyaWJ1
dGUgYXR0cmlidXRlID0gQ3JlYXRlQXR0cmlidXRlICh4bWxSZWFkZXIuUHJlZml4LCB4bWxSZWFk
ZXIuTG9jYWxOYW1lLCB4bWxSZWFkZXIuTmFtZXNwYWNlVVJJKTsKCQkJCQkJYXR0cmlidXRlLlZh
bHVlID0geG1sUmVhZGVyLlZhbHVlOwoJCQkJCQllbGVtZW50LlNldEF0dHJpYnV0ZU5vZGUgKGF0
dHJpYnV0ZSk7CgkJCQkJfQoKCQkJCQl4bWxSZWFkZXIuTW92ZVRvRWxlbWVudCAoKTsKCgkJCQkJ
Ly8gaWYgdGhpcyBlbGVtZW50IGlzbid0IGVtcHR5LCBwdXNoIGl0IG9udG8gb3VyICJzdGFjayIu
CgkJCQkJaWYgKCF4bWxSZWFkZXIuSXNFbXB0eUVsZW1lbnQpCgkJCQkJCWN1cnJlbnROb2RlID0g
ZWxlbWVudDsKCgkJCQkJYnJlYWs7CgoJCQkJY2FzZSBYbWxOb2RlVHlwZS5FbmRFbGVtZW50OgoJ
CQkJCWN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuUGFyZW50Tm9kZTsKCQkJCQlicmVhazsKCgkJ
CQljYXNlIFhtbE5vZGVUeXBlLlByb2Nlc3NpbmdJbnN0cnVjdGlvbjoKCQkJCQluZXdOb2RlID0g
Q3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uICh4bWxSZWFkZXIuTmFtZSwgeG1sUmVhZGVyLlZh
bHVlKTsKCQkJCQljdXJyZW50Tm9kZS5BcHBlbmRDaGlsZCAobmV3Tm9kZSk7CgkJCQkJYnJlYWs7
CgoJCQkJY2FzZSBYbWxOb2RlVHlwZS5UZXh0OgoJCQkJCW5ld05vZGUgPSBDcmVhdGVUZXh0Tm9k
ZSAoeG1sUmVhZGVyLlZhbHVlKTsKCQkJCQljdXJyZW50Tm9kZS5BcHBlbmRDaGlsZCAobmV3Tm9k
ZSk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQl9CgoJCXB1YmxpYyB2aXJ0dWFsIHZvaWQgTG9h
ZFhtbCAoc3RyaW5nIHhtbCkKCQl7CgkJCVhtbFJlYWRlciB4bWxSZWFkZXIgPSBuZXcgWG1sVGV4
dFJlYWRlciAobmV3IFN0cmluZ1JlYWRlciAoeG1sKSk7CgkJCUxvYWQgKHhtbFJlYWRlcik7CgkJ
fQoKCQlpbnRlcm5hbCB2b2lkIG9uTm9kZUNoYW5nZWQgKFhtbE5vZGUgbm9kZSwgWG1sTm9kZSBQ
YXJlbnQpCgkJewoJCQlpZiAoTm9kZUNoYW5nZWQgIT0gbnVsbCkKCQkJCU5vZGVDaGFuZ2VkIChu
b2RlLCBuZXcgWG1sTm9kZUNoYW5nZWRFdmVudEFyZ3MKCQkJCQkoWG1sTm9kZUNoYW5nZWRBY3Rp
b24uQ2hhbmdlLAoJCQkJCW5vZGUsIFBhcmVudCwgUGFyZW50KSk7CgkJfQoKCQlpbnRlcm5hbCB2
b2lkIG9uTm9kZUNoYW5naW5nKFhtbE5vZGUgbm9kZSwgWG1sTm9kZSBQYXJlbnQpCgkJewoJCQlp
ZiAoTm9kZUNoYW5naW5nICE9IG51bGwpCgkJCQlOb2RlQ2hhbmdpbmcgKG5vZGUsIG5ldyBYbWxO
b2RlQ2hhbmdlZEV2ZW50QXJncwoJCQkJCShYbWxOb2RlQ2hhbmdlZEFjdGlvbi5DaGFuZ2UsCgkJ
CQkJbm9kZSwgUGFyZW50LCBQYXJlbnQpKTsKCQl9CgoJCWludGVybmFsIHZvaWQgb25Ob2RlSW5z
ZXJ0ZWQgKFhtbE5vZGUgbm9kZSwgWG1sTm9kZSBuZXdQYXJlbnQpCgkJewoJCQlpZiAoTm9kZUlu
c2VydGVkICE9IG51bGwpCgkJCQlOb2RlSW5zZXJ0ZWQgKG5vZGUsIG5ldyBYbWxOb2RlQ2hhbmdl
ZEV2ZW50QXJncwoJCQkJCShYbWxOb2RlQ2hhbmdlZEFjdGlvbi5JbnNlcnQsCgkJCQkJbm9kZSwg
bnVsbCwgbmV3UGFyZW50KSk7CgkJfQoKCQlpbnRlcm5hbCB2b2lkIG9uTm9kZUluc2VydGluZyAo
WG1sTm9kZSBub2RlLCBYbWxOb2RlIG5ld1BhcmVudCkKCQl7CgkJCWlmIChOb2RlSW5zZXJ0aW5n
ICE9IG51bGwpCgkJCQlOb2RlSW5zZXJ0aW5nIChub2RlLCBuZXcgWG1sTm9kZUNoYW5nZWRFdmVu
dEFyZ3MKCQkJCQkoWG1sTm9kZUNoYW5nZWRBY3Rpb24uSW5zZXJ0LAoJCQkJCW5vZGUsIG51bGws
IG5ld1BhcmVudCkpOwoJCX0KCgkJaW50ZXJuYWwgdm9pZCBvbk5vZGVSZW1vdmVkIChYbWxOb2Rl
IG5vZGUsIFhtbE5vZGUgb2xkUGFyZW50KQoJCXsKCQkJaWYgKE5vZGVSZW1vdmVkICE9IG51bGwp
CgkJCQlOb2RlUmVtb3ZlZCAobm9kZSwgbmV3IFhtbE5vZGVDaGFuZ2VkRXZlbnRBcmdzCgkJCQkJ
KFhtbE5vZGVDaGFuZ2VkQWN0aW9uLlJlbW92ZSwKCQkJCQlub2RlLCBvbGRQYXJlbnQsIG51bGwp
KTsKCQl9CgoJCWludGVybmFsIHZvaWQgb25Ob2RlUmVtb3ZpbmcgKFhtbE5vZGUgbm9kZSwgWG1s
Tm9kZSBvbGRQYXJlbnQpCgkJewoJCQlpZiAoTm9kZVJlbW92aW5nICE9IG51bGwpCgkJCQlOb2Rl
UmVtb3ZpbmcgKG5vZGUsIG5ldyBYbWxOb2RlQ2hhbmdlZEV2ZW50QXJncwoJCQkJCShYbWxOb2Rl
Q2hhbmdlZEFjdGlvbi5SZW1vdmUsCgkJCQkJbm9kZSwgb2xkUGFyZW50LCBudWxsKSk7CgkJfQoK
CQlwcml2YXRlIHZvaWQgUGFyc2VOYW1lIChzdHJpbmcgbmFtZSwgb3V0IHN0cmluZyBwcmVmaXgs
IG91dCBzdHJpbmcgbG9jYWxOYW1lKQoJCXsKCQkJaW50IGluZGV4T2ZDb2xvbiA9IG5hbWUuSW5k
ZXhPZiAoJzonKTsKCQkJCgkJCWlmIChpbmRleE9mQ29sb24gIT0gLTEpIHsKCQkJCXByZWZpeCA9
IG5hbWUuU3Vic3RyaW5nICgwLCBpbmRleE9mQ29sb24pOwoJCQkJbG9jYWxOYW1lID0gbmFtZS5T
dWJzdHJpbmcgKGluZGV4T2ZDb2xvbiArIDEpOwoJCQl9IGVsc2UgewoJCQkJcHJlZml4ID0gIiI7
CgkJCQlsb2NhbE5hbWUgPSBuYW1lOwoJCQl9CgkJfQoKCQlbTW9ub1RPRE9dCgkJcHVibGljIHZp
cnR1YWwgWG1sTm9kZSBSZWFkTm9kZShYbWxSZWFkZXIgcmVhZGVyKQoJCXsKCQkJdGhyb3cgbmV3
IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uICgpOwoJCX0KCgkJW01vbm9UT0RPICgiVmVyaWZ5IHdo
YXQgZW5jb2RpbmcgaXMgdXNlZCBieSBkZWZhdWx0OyAgU2hvdWxkIHVzZSBQcmVzZXJ2ZVdoaXRl
U3BhY2UiKV0KCQlwdWJsaWMgdmlydHVhbCB2b2lkIFNhdmUoU3RyZWFtIG91dFN0cmVhbSkKCQl7
CgkJCVhtbFRleHRXcml0ZXIgeG1sV3JpdGVyID0gbmV3IFhtbFRleHRXcml0ZXIgKG91dFN0cmVh
bSwgRW5jb2RpbmcuVVRGOCk7CgkJCVdyaXRlQ29udGVudFRvICh4bWxXcml0ZXIpOwoJCQl4bWxX
cml0ZXIuQ2xvc2UgKCk7CgkJfQoKCQlbTW9ub1RPRE8gKCJWZXJpZnkgd2hhdCBlbmNvZGluZyBp
cyB1c2VkIGJ5IGRlZmF1bHQ7IFNob3VsZCB1c2UgUHJlc2V2ZVdoaXRlU3BhY2UiKV0KCQlwdWJs
aWMgdmlydHVhbCB2b2lkIFNhdmUgKHN0cmluZyBmaWxlbmFtZSkKCQl7CgkJCVhtbFRleHRXcml0
ZXIgeG1sV3JpdGVyID0gbmV3IFhtbFRleHRXcml0ZXIgKGZpbGVuYW1lLCBFbmNvZGluZy5VVEY4
KTsKCQkJV3JpdGVDb250ZW50VG8gKHhtbFdyaXRlcik7CgkJCXhtbFdyaXRlci5DbG9zZSAoKTsK
CQl9CgoJCVtNb25vVE9ET10KCQlwdWJsaWMgdmlydHVhbCB2b2lkIFNhdmUgKFRleHRXcml0ZXIg
d3JpdGVyKQoJCXsKCQkJWG1sVGV4dFdyaXRlciB4bWxXcml0ZXIgPSBuZXcgWG1sVGV4dFdyaXRl
ciAod3JpdGVyKTsKCQkJV3JpdGVDb250ZW50VG8gKHhtbFdyaXRlcik7CgkJCXhtbFdyaXRlci5G
bHVzaCAoKTsKCQl9CgoJCVtNb25vVE9ETyAoIlNob3VsZCBwcmVzZXJ2ZSB3aGl0ZSBzcGFjZSBp
ZiBQcmVzZXJ2ZVdoaXNzcGFjZSBpcyBzZXQiKV0KCQlwdWJsaWMgdmlydHVhbCB2b2lkIFNhdmUg
KFhtbFdyaXRlciB4bWxXcml0ZXIpCgkJewoJCQkvLwoJCQkvLyBUaGlzIHNob3VsZCBwcmVzZXJ2
ZSB3aGl0ZSBzcGFjZSBpZiBQcmVzZXJ2ZVdoaXRlU3BhY2UgaXMgdHJ1ZQoJCQkvLwoJCQlXcml0
ZUNvbnRlbnRUbyAoeG1sV3JpdGVyKTsKCQkJeG1sV3JpdGVyLkZsdXNoICgpOwoJCX0KCgkJcHVi
bGljIG92ZXJyaWRlIHZvaWQgV3JpdGVDb250ZW50VG8gKFhtbFdyaXRlciB3KQoJCXsKCQkJZm9y
ZWFjaChYbWxOb2RlIGNoaWxkTm9kZSBpbiBDaGlsZE5vZGVzKQoJCQkJY2hpbGROb2RlLldyaXRl
VG8odyk7CgkJfQoKCQlwdWJsaWMgb3ZlcnJpZGUgdm9pZCBXcml0ZVRvIChYbWxXcml0ZXIgdykK
CQl7CgkJCVdyaXRlQ29udGVudFRvKHcpOwoJCX0KCgkJI2VuZHJlZ2lvbgoJfQp9Cg==

--------_3DAAC39652B30519E008_MULTIPART_MIXED_
Content-Type: application/octet-stream; name="newXmlDocumentTests.cs"
Content-Disposition: attachment;
 filename="newXmlDocumentTests.cs"
Content-Transfer-Encoding: base64

Ly8KLy8gU3lzdGVtLlhtbC5YbWxEb2N1bWVudFRlc3RzCi8vCi8vIEF1dGhvcnM6Ci8vICAgSmFz
b24gRGlhbW9uZCA8amFzb25AaW5qZWt0aWxvLm9yZz4KLy8gICBLcmFsIEZlcmNoIDxrcmFsX2Zl
cmNoQGhvdG1haWwuY29tPgovLwovLyAoQykgMjAwMiBKYXNvbiBEaWFtb25kLCBLcmFsIEZlcmNo
Ci8vCgp1c2luZyBTeXN0ZW07CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9uczsKdXNpbmcgU3lzdGVt
LlhtbDsKdXNpbmcgU3lzdGVtLklPOwp1c2luZyBTeXN0ZW0uVGV4dDsKCnVzaW5nIE5Vbml0LkZy
YW1ld29yazsKCm5hbWVzcGFjZSBNb25vVGVzdHMuU3lzdGVtLlhtbAp7CglwdWJsaWMgY2xhc3Mg
WG1sRG9jdW1lbnRUZXN0cyA6IFRlc3RDYXNlCgl7CgkJcHVibGljIFhtbERvY3VtZW50VGVzdHMg
KCkgOiBiYXNlICgiTW9ub1Rlc3RzLlN5c3RlbS5YbWwuWG1sRG9jdW1lbnRUZXN0cyB0ZXN0c3Vp
dGUiKSB7fQoJCXB1YmxpYyBYbWxEb2N1bWVudFRlc3RzIChzdHJpbmcgbmFtZSkgOiBiYXNlIChu
YW1lKSB7fQoKCQlwcml2YXRlIFhtbERvY3VtZW50IGRvY3VtZW50OwoJCXByaXZhdGUgQXJyYXlM
aXN0IGV2ZW50U3RyaW5ncyA9IG5ldyBBcnJheUxpc3QoKTsKCgkJLy8gVGhlc2UgRXZlbnQqIG1l
dGhvZHMgc3VwcG9ydCB0aGUgVGVzdEV2ZW50Tm9kZSogVGVzdHMgaW4gdGhpcyBmaWxlLgoJCS8v
IE1vc3Qgb2YgdGhlbSBhcmUgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBYbWxOb2RlQ2hhbmdlZEV2
ZW50SGFuZGxlcgoJCS8vIGRlbGVnYXRlLgoJCXByaXZhdGUgdm9pZCBFdmVudFN0cmluZ0FkZChz
dHJpbmcgZXZlbnROYW1lLCBYbWxOb2RlQ2hhbmdlZEV2ZW50QXJncyBlKQoJCXsKCQkJc3RyaW5n
IG9sZFBhcmVudCA9IChlLk9sZFBhcmVudCAhPSBudWxsKSA/IGUuT2xkUGFyZW50Lk5hbWUgOiAi
PG5vbmU+IjsKCQkJc3RyaW5nIG5ld1BhcmVudCA9IChlLk5ld1BhcmVudCAhPSBudWxsKSA/IGUu
TmV3UGFyZW50Lk5hbWUgOiAiPG5vbmU+IjsKCQkJZXZlbnRTdHJpbmdzLkFkZCAoU3RyaW5nLkZv
cm1hdCAoInswfSwgezF9LCB7Mn0sIHszfSwgezR9IiwgZXZlbnROYW1lLCBlLkFjdGlvbi5Ub1N0
cmluZyAoKSwgZS5Ob2RlLk91dGVyWG1sLCBvbGRQYXJlbnQsIG5ld1BhcmVudCkpOwoJCX0KCgkJ
cHJpdmF0ZSB2b2lkIEV2ZW50Tm9kZUNoYW5nZWQoT2JqZWN0IHNlbmRlciwgWG1sTm9kZUNoYW5n
ZWRFdmVudEFyZ3MgZSkKCQl7CgkJCUV2ZW50U3RyaW5nQWRkICgiTm9kZUNoYW5nZWQiLCBlKTsK
CQl9CgoJCXByaXZhdGUgdm9pZCBFdmVudE5vZGVDaGFuZ2luZyAoT2JqZWN0IHNlbmRlciwgWG1s
Tm9kZUNoYW5nZWRFdmVudEFyZ3MgZSkKCQl7CgkJCUV2ZW50U3RyaW5nQWRkICgiTm9kZUNoYW5n
aW5nIiwgZSk7CgkJfQoKCQlwcml2YXRlIHZvaWQgRXZlbnROb2RlQ2hhbmdpbmdFeGNlcHRpb24g
KE9iamVjdCBzZW5kZXIsIFhtbE5vZGVDaGFuZ2VkRXZlbnRBcmdzIGUpCgkJewoJCQl0aHJvdyBu
ZXcgRXhjZXB0aW9uICgiZG9uJ3QgY2hhbmdlIHRoZSB2YWx1ZS4iKTsKCQl9CgoJCXByaXZhdGUg
dm9pZCBFdmVudE5vZGVJbnNlcnRlZChPYmplY3Qgc2VuZGVyLCBYbWxOb2RlQ2hhbmdlZEV2ZW50
QXJncyBlKQoJCXsKCQkJRXZlbnRTdHJpbmdBZGQgKCJOb2RlSW5zZXJ0ZWQiLCBlKTsKCQl9CgoJ
CXByaXZhdGUgdm9pZCBFdmVudE5vZGVJbnNlcnRpbmcoT2JqZWN0IHNlbmRlciwgWG1sTm9kZUNo
YW5nZWRFdmVudEFyZ3MgZSkKCQl7CgkJCUV2ZW50U3RyaW5nQWRkICgiTm9kZUluc2VydGluZyIs
IGUpOwoJCX0KCgkJcHJpdmF0ZSB2b2lkIEV2ZW50Tm9kZUluc2VydGluZ0V4Y2VwdGlvbihPYmpl
Y3Qgc2VuZGVyLCBYbWxOb2RlQ2hhbmdlZEV2ZW50QXJncyBlKQoJCXsKCQkJdGhyb3cgbmV3IEV4
Y2VwdGlvbiAoImRvbid0IGluc2VydCB0aGUgZWxlbWVudC4iKTsKCQl9CgoJCXByaXZhdGUgdm9p
ZCBFdmVudE5vZGVSZW1vdmVkKE9iamVjdCBzZW5kZXIsIFhtbE5vZGVDaGFuZ2VkRXZlbnRBcmdz
IGUpCgkJewoJCQlFdmVudFN0cmluZ0FkZCAoIk5vZGVSZW1vdmVkIiwgZSk7CgkJfQoKCQlwcml2
YXRlIHZvaWQgRXZlbnROb2RlUmVtb3ZpbmcoT2JqZWN0IHNlbmRlciwgWG1sTm9kZUNoYW5nZWRF
dmVudEFyZ3MgZSkKCQl7CgkJCUV2ZW50U3RyaW5nQWRkICgiTm9kZVJlbW92aW5nIiwgZSk7CgkJ
fQoKCQlwcml2YXRlIHZvaWQgRXZlbnROb2RlUmVtb3ZpbmdFeGNlcHRpb24oT2JqZWN0IHNlbmRl
ciwgWG1sTm9kZUNoYW5nZWRFdmVudEFyZ3MgZSkKCQl7CgkJCXRocm93IG5ldyBFeGNlcHRpb24g
KCJkb24ndCByZW1vdmUgdGhlIGVsZW1lbnQuIik7CgkJfQoKCQlwcm90ZWN0ZWQgb3ZlcnJpZGUg
dm9pZCBTZXRVcCAoKQoJCXsKCQkJZG9jdW1lbnQgPSBuZXcgWG1sRG9jdW1lbnQgKCk7CgkJfQoK
CQlwdWJsaWMgdm9pZCBUZXN0Q3JlYXRlTm9kZU5vZGVUeXBlTmFtZUVtcHR5UGFyYW1zICgpCgkJ
ewoJCQlYbWxOb2RlIG5vZGU7CgoJCQl0cnkgewoJCQkJbm9kZSA9IGRvY3VtZW50LkNyZWF0ZU5v
ZGUgKG51bGwsIG51bGwsIG51bGwpOwoJCQkJRmFpbCAoIkV4cGVjdGVkIGFuIEFyZ3VtZW50RXhj
ZXB0aW9uIHRvIGJlIHRocm93bi4iKTsKCQkJfSBjYXRjaCAoQXJndW1lbnRFeGNlcHRpb24pIHt9
CgoJCQl0cnkgewoJCQkJbm9kZSA9IGRvY3VtZW50LkNyZWF0ZU5vZGUgKCJhdHRyaWJ1dGUiLCBu
dWxsLCBudWxsKTsKCQkJCUZhaWwgKCJFeHBlY3RlZCBhIE51bGxSZWZlcmVuY2VFeGNlcHRpb24g
dG8gYmUgdGhyb3duLiIpOwoJCQl9IGNhdGNoIChOdWxsUmVmZXJlbmNlRXhjZXB0aW9uKSB7fQoK
CQkJdHJ5IHsKCQkJCW5vZGUgPSBkb2N1bWVudC5DcmVhdGVOb2RlICgiYXR0cmlidXRlIiwgIiIs
IG51bGwpOwoJCQkJRmFpbCAoIkV4cGVjdGVkIGFuIEFyZ3VtZW50RXhjZXB0aW9uIHRvIGJlIHRo
cm93bi4iKTsKCQkJfSBjYXRjaCAoQXJndW1lbnRFeGNlcHRpb24pIHt9CgoJCQl0cnkgewoJCQkJ
bm9kZSA9IGRvY3VtZW50LkNyZWF0ZU5vZGUgKCJlbGVtZW50IiwgbnVsbCwgbnVsbCk7CgkJCQlG
YWlsICgiRXhwZWN0ZWQgYSBOdWxsUmVmZXJlbmNlRXhjZXB0aW9uIHRvIGJlIHRocm93bi4iKTsK
CQkJfSBjYXRjaCAoTnVsbFJlZmVyZW5jZUV4Y2VwdGlvbikge30KCgkJCXRyeSB7CgkJCQlub2Rl
ID0gZG9jdW1lbnQuQ3JlYXRlTm9kZSAoImVsZW1lbnQiLCAiIiwgbnVsbCk7CgkJCQlGYWlsICgi
RXhwZWN0ZWQgYW4gQXJndW1lbnRFeGNlcHRpb24gdG8gYmUgdGhyb3duLiIpOwoJCQl9IGNhdGNo
IChBcmd1bWVudEV4Y2VwdGlvbikge30KCgkJCXRyeSB7CgkJCQlub2RlID0gZG9jdW1lbnQuQ3Jl
YXRlTm9kZSAoImVudGl0eXJlZmVyZW5jZSIsIG51bGwsIG51bGwpOwoJCQkJRmFpbCAoIkV4cGVj
dGVkIGEgTnVsbFJlZmVyZW5jZUV4Y2VwdGlvbiB0byBiZSB0aHJvd24uIik7CgkJCX0gY2F0Y2gg
KE51bGxSZWZlcmVuY2VFeGNlcHRpb24pIHt9CgkJfQoKCQlwdWJsaWMgdm9pZCBUZXN0Q3JlYXRl
Tm9kZUludmFsaWRYbWxOb2RlVHlwZSAoKQoJCXsKCQkJWG1sTm9kZSBub2RlOwoKCQkJdHJ5IHsK
CQkJCW5vZGUgPSBkb2N1bWVudC5DcmVhdGVOb2RlIChYbWxOb2RlVHlwZS5FbmRFbGVtZW50LCBu
dWxsLCBudWxsKTsKCQkJCUZhaWwgKCJFeHBlY3RlZCBhbiBBcmd1bWVudE91dE9mUmFuZ2VFeGNl
cHRpb24gdG8gYmUgdGhyb3duLiIpOwoJCQl9IGNhdGNoIChBcmd1bWVudE91dE9mUmFuZ2VFeGNl
cHRpb24pIHt9CgoJCQl0cnkgewoJCQkJbm9kZSA9IGRvY3VtZW50LkNyZWF0ZU5vZGUgKFhtbE5v
ZGVUeXBlLkVuZEVudGl0eSwgbnVsbCwgbnVsbCk7CgkJCQlGYWlsICgiRXhwZWN0ZWQgYW4gQXJn
dW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uIHRvIGJlIHRocm93bi4iKTsKCQkJfSBjYXRjaCAoQXJn
dW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uKSB7fQoKCQkJdHJ5IHsKCQkJCW5vZGUgPSBkb2N1bWVu
dC5DcmVhdGVOb2RlIChYbWxOb2RlVHlwZS5FbnRpdHksIG51bGwsIG51bGwpOwoJCQkJRmFpbCAo
IkV4cGVjdGVkIGFuIEFyZ3VtZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbiB0byBiZSB0aHJvd24uIik7
CgkJCX0gY2F0Y2ggKEFyZ3VtZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbikge30KCgkJCXRyeSB7CgkJ
CQlub2RlID0gZG9jdW1lbnQuQ3JlYXRlTm9kZSAoWG1sTm9kZVR5cGUuTm9uZSwgbnVsbCwgbnVs
bCk7CgkJCQlGYWlsICgiRXhwZWN0ZWQgYW4gQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uIHRv
IGJlIHRocm93bi4iKTsKCQkJfSBjYXRjaCAoQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uKSB7
fQoKCQkJdHJ5IHsKCQkJCW5vZGUgPSBkb2N1bWVudC5DcmVhdGVOb2RlIChYbWxOb2RlVHlwZS5O
b3RhdGlvbiwgbnVsbCwgbnVsbCk7CgkJCQlGYWlsICgiRXhwZWN0ZWQgYW4gQXJndW1lbnRPdXRP
ZlJhbmdlRXhjZXB0aW9uIHRvIGJlIHRocm93bi4iKTsKCQkJfSBjYXRjaCAoQXJndW1lbnRPdXRP
ZlJhbmdlRXhjZXB0aW9uKSB7fQoKCQkJLy8gVE9ETzogIHVuZG9jdW1lbnRlZCBhbGxvd2FibGUg
dHlwZS4KCQkJbm9kZSA9IGRvY3VtZW50LkNyZWF0ZU5vZGUgKFhtbE5vZGVUeXBlLlhtbERlY2xh
cmF0aW9uLCBudWxsLCBudWxsKTsKCQkJQXNzZXJ0RXF1YWxzIChYbWxOb2RlVHlwZS5YbWxEZWNs
YXJhdGlvbiwgbm9kZS5Ob2RlVHlwZSk7CgkJfQoKCQlwdWJsaWMgdm9pZCBUZXN0Q3JlYXRlTm9k
ZVdoaWNoUGFyYW1Jc1VzZWQgKCkKCQl7CgkJCVhtbE5vZGUgbm9kZTsKCgkJCS8vIE5vIGNvbnN0
cnVjdG9yIHBhcmFtcyBmb3IgRG9jdW1lbnQsIERvY3VtZW50RnJhZ21lbnQuCgoJCQlub2RlID0g
ZG9jdW1lbnQuQ3JlYXRlTm9kZSAoWG1sTm9kZVR5cGUuQ0RBVEEsICJhIiwgImIiLCAiYyIpOwoJ
CQlBc3NlcnRFcXVhbHMgKFN0cmluZy5FbXB0eSwgKChYbWxDRGF0YVNlY3Rpb24pbm9kZSkuVmFs
dWUpOwoKCQkJbm9kZSA9IGRvY3VtZW50LkNyZWF0ZU5vZGUgKFhtbE5vZGVUeXBlLkNvbW1lbnQs
ICJhIiwgImIiLCAiYyIpOwoJCQlBc3NlcnRFcXVhbHMgKFN0cmluZy5FbXB0eSwgKChYbWxDb21t
ZW50KW5vZGUpLlZhbHVlKTsKCgkJCW5vZGUgPSBkb2N1bWVudC5DcmVhdGVOb2RlIChYbWxOb2Rl
VHlwZS5Eb2N1bWVudFR5cGUsICJhIiwgImIiLCAiYyIpOwoJCQlBc3NlcnROdWxsICgoKFhtbERv
Y3VtZW50VHlwZSlub2RlKS5WYWx1ZSk7CgovLyBUT0RPOiBhZGQgdGhpcyBiYWNrIGluIHRvIHRl
c3Qgd2hlbiBpdCdzIGltcGxlbWVudGVkLgovLwkJCW5vZGUgPSBkb2N1bWVudC5DcmVhdGVOb2Rl
IChYbWxOb2RlVHlwZS5FbnRpdHlSZWZlcmVuY2UsICJhIiwgImIiLCAiYyIpOwovLwkJCUFzc2Vy
dE51bGwgKCgoWG1sRW50aXR5UmVmZXJlbmNlKW5vZGUpLlZhbHVlKTsKCgkJCW5vZGUgPSBkb2N1
bWVudC5DcmVhdGVOb2RlIChYbWxOb2RlVHlwZS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sICJhIiwg
ImIiLCAiYyIpOwoJCQlBc3NlcnRFcXVhbHMgKFN0cmluZy5FbXB0eSwgKChYbWxQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24pbm9kZSkuVmFsdWUpOwoKCQkJbm9kZSA9IGRvY3VtZW50LkNyZWF0ZU5vZGUg
KFhtbE5vZGVUeXBlLlNpZ25pZmljYW50V2hpdGVzcGFjZSwgImEiLCAiYiIsICJjIik7CgkJCUFz
c2VydEVxdWFscyAoU3RyaW5nLkVtcHR5LCAoKFhtbFNpZ25pZmljYW50V2hpdGVzcGFjZSlub2Rl
KS5WYWx1ZSk7CgoJCQlub2RlID0gZG9jdW1lbnQuQ3JlYXRlTm9kZSAoWG1sTm9kZVR5cGUuVGV4
dCwgImEiLCAiYiIsICJjIik7CgkJCUFzc2VydEVxdWFscyAoU3RyaW5nLkVtcHR5LCAoKFhtbFRl
eHQpbm9kZSkuVmFsdWUpOwoKCQkJbm9kZSA9IGRvY3VtZW50LkNyZWF0ZU5vZGUgKFhtbE5vZGVU
eXBlLldoaXRlc3BhY2UsICJhIiwgImIiLCAiYyIpOwoJCQlBc3NlcnRFcXVhbHMgKFN0cmluZy5F
bXB0eSwgKChYbWxXaGl0ZXNwYWNlKW5vZGUpLlZhbHVlKTsKCgkJCW5vZGUgPSBkb2N1bWVudC5D
cmVhdGVOb2RlIChYbWxOb2RlVHlwZS5YbWxEZWNsYXJhdGlvbiwgImEiLCAiYiIsICJjIik7CgkJ
CUFzc2VydEVxdWFscyAoInZlcnNpb249XCIxLjBcIiIsICgoWG1sRGVjbGFyYXRpb24pbm9kZSku
VmFsdWUpOwoJCX0KCgkJcHVibGljIHZvaWQgVGVzdENyZWF0ZU5vZGVOb2RlVHlwZU5hbWUgKCkK
CQl7CgkJCVhtbE5vZGUgbm9kZTsKCgkJCXRyeSB7CgkJCQlub2RlID0gZG9jdW1lbnQuQ3JlYXRl
Tm9kZSAoImZvbyIsIG51bGwsIG51bGwpOwoJCQkJRmFpbCAoIkV4cGVjdGVkIGFuIEFyZ3VtZW50
RXhjZXB0aW9uIHRvIGJlIHRocm93bi4iKTsKCQkJfSBjYXRjaCAoQXJndW1lbnRFeGNlcHRpb24p
IHt9CgoJCQlub2RlID0gZG9jdW1lbnQuQ3JlYXRlTm9kZSgiYXR0cmlidXRlIiwgImZvbyIsIG51
bGwpOwoJCQlBc3NlcnRFcXVhbHMgKFhtbE5vZGVUeXBlLkF0dHJpYnV0ZSwgbm9kZS5Ob2RlVHlw
ZSk7CgoJCQlub2RlID0gZG9jdW1lbnQuQ3JlYXRlTm9kZSgiY2RhdGFzZWN0aW9uIiwgbnVsbCwg
bnVsbCk7CgkJCUFzc2VydEVxdWFscyAoWG1sTm9kZVR5cGUuQ0RBVEEsIG5vZGUuTm9kZVR5cGUp
OwoKCQkJbm9kZSA9IGRvY3VtZW50LkNyZWF0ZU5vZGUoImNvbW1lbnQiLCBudWxsLCBudWxsKTsK
CQkJQXNzZXJ0RXF1YWxzIChYbWxOb2RlVHlwZS5Db21tZW50LCBub2RlLk5vZGVUeXBlKTsKCgkJ
CW5vZGUgPSBkb2N1bWVudC5DcmVhdGVOb2RlKCJkb2N1bWVudCIsIG51bGwsIG51bGwpOwoJCQlB
c3NlcnRFcXVhbHMgKFhtbE5vZGVUeXBlLkRvY3VtZW50LCBub2RlLk5vZGVUeXBlKTsKCQkJLy8g
VE9ETzogdGVzdCB3aGljaCBjb25zdHJ1Y3RvciB0aGlzIGVuZGVkIHVwIGNhbGxpbmcsCgkJCS8v
IGkuZS4gcmV1c2UgdW5kZXJseWluZyBOYW1lVGFibGUgb3Igbm90PwoKLy8gVE9ETzogYWRkIHRo
aXMgYmFjayBpbiB0byB0ZXN0IHdoZW4gaXQncyBpbXBsZW1lbnRlZC4KLy8JCQlub2RlID0gZG9j
dW1lbnQuQ3JlYXRlTm9kZSgiZG9jdW1lbnRmcmFnbWVudCIsIG51bGwsIG51bGwpOwovLwkJCUFz
c2VydEVxdWFscyAoWG1sTm9kZVR5cGUuRG9jdW1lbnRGcmFnbWVudCwgbm9kZS5Ob2RlVHlwZSk7
CgoJCQlub2RlID0gZG9jdW1lbnQuQ3JlYXRlTm9kZSgiZG9jdW1lbnR0eXBlIiwgbnVsbCwgbnVs
bCk7CgkJCUFzc2VydEVxdWFscyAoWG1sTm9kZVR5cGUuRG9jdW1lbnRUeXBlLCBub2RlLk5vZGVU
eXBlKTsKCgkJCW5vZGUgPSBkb2N1bWVudC5DcmVhdGVOb2RlKCJlbGVtZW50IiwgImZvbyIsIG51
bGwpOwoJCQlBc3NlcnRFcXVhbHMgKFhtbE5vZGVUeXBlLkVsZW1lbnQsIG5vZGUuTm9kZVR5cGUp
OwoKLy8gVE9ETzogYWRkIHRoaXMgYmFjayBpbiB0byB0ZXN0IHdoZW4gaXQncyBpbXBsZW1lbnRl
ZC4KLy8JCQlub2RlID0gZG9jdW1lbnQuQ3JlYXRlTm9kZSgiZW50aXR5cmVmZXJlbmNlIiwgImZv
byIsIG51bGwpOwovLwkJCUFzc2VydEVxdWFscyAoWG1sTm9kZVR5cGUuRW50aXR5UmVmZXJlbmNl
LCBub2RlLk5vZGVUeXBlKTsKCgkJCW5vZGUgPSBkb2N1bWVudC5DcmVhdGVOb2RlKCJwcm9jZXNz
aW5naW5zdHJ1Y3Rpb24iLCBudWxsLCBudWxsKTsKCQkJQXNzZXJ0RXF1YWxzIChYbWxOb2RlVHlw
ZS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sIG5vZGUuTm9kZVR5cGUpOwoKCQkJbm9kZSA9IGRvY3Vt
ZW50LkNyZWF0ZU5vZGUoInNpZ25pZmljYW50d2hpdGVzcGFjZSIsIG51bGwsIG51bGwpOwoJCQlB
c3NlcnRFcXVhbHMgKFhtbE5vZGVUeXBlLlNpZ25pZmljYW50V2hpdGVzcGFjZSwgbm9kZS5Ob2Rl
VHlwZSk7CgoJCQlub2RlID0gZG9jdW1lbnQuQ3JlYXRlTm9kZSgidGV4dCIsIG51bGwsIG51bGwp
OwoJCQlBc3NlcnRFcXVhbHMgKFhtbE5vZGVUeXBlLlRleHQsIG5vZGUuTm9kZVR5cGUpOwoKCQkJ
bm9kZSA9IGRvY3VtZW50LkNyZWF0ZU5vZGUoIndoaXRlc3BhY2UiLCBudWxsLCBudWxsKTsKCQkJ
QXNzZXJ0RXF1YWxzIChYbWxOb2RlVHlwZS5XaGl0ZXNwYWNlLCBub2RlLk5vZGVUeXBlKTsKCQl9
CgoJCXB1YmxpYyB2b2lkIFRlc3REb2N1bWVudEVsZW1lbnQgKCkKCQl7CgkJCUFzc2VydE51bGwg
KGRvY3VtZW50LkRvY3VtZW50RWxlbWVudCk7CgkJCVhtbEVsZW1lbnQgZWxlbWVudCA9IGRvY3Vt
ZW50LkNyZWF0ZUVsZW1lbnQgKCJmb28iLCAiYmFyIiwgImh0dHA6Ly9mb28vIik7CgkJCUFzc2Vy
dE5vdE51bGwgKGVsZW1lbnQpOwoKCQkJQXNzZXJ0RXF1YWxzICgiZm9vIiwgZWxlbWVudC5QcmVm
aXgpOwoJCQlBc3NlcnRFcXVhbHMgKCJiYXIiLCBlbGVtZW50LkxvY2FsTmFtZSk7CgkJCUFzc2Vy
dEVxdWFscyAoImh0dHA6Ly9mb28vIiwgZWxlbWVudC5OYW1lc3BhY2VVUkkpOwoKCQkJQXNzZXJ0
RXF1YWxzICgiZm9vOmJhciIsIGVsZW1lbnQuTmFtZSk7CgoJCQlBc3NlcnRTYW1lIChlbGVtZW50
LCBkb2N1bWVudC5BcHBlbmRDaGlsZCAoZWxlbWVudCkpOwoKCQkJQXNzZXJ0U2FtZSAoZWxlbWVu
dCwgZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50KTsKCQl9CgoJCXB1YmxpYyB2b2lkIFRlc3REb2N1
bWVudEVtcHR5KCkKCQl7CgkJCUFzc2VydEVxdWFscyAoIkluY29ycmVjdCBvdXRwdXQgZm9yIGVt
cHR5IGRvY3VtZW50LiIsICIiLCBkb2N1bWVudC5PdXRlclhtbCk7CgkJfQoKCQlwdWJsaWMgdm9p
ZCBUZXN0RXZlbnROb2RlQ2hhbmdlZCgpCgkJewoJCQlYbWxFbGVtZW50IGVsZW1lbnQ7CgkJCVht
bENvbW1lbnQgY29tbWVudDsKCgkJCWRvY3VtZW50Lk5vZGVDaGFuZ2VkICs9IG5ldyBYbWxOb2Rl
Q2hhbmdlZEV2ZW50SGFuZGxlciAodGhpcy5FdmVudE5vZGVDaGFuZ2VkKTsKCgkJCS8vIE5vZGUg
dGhhdCBpcyBwYXJ0IG9mIHRoZSBkb2N1bWVudC4KCQkJZG9jdW1lbnQuQXBwZW5kQ2hpbGQgKGRv
Y3VtZW50LkNyZWF0ZUVsZW1lbnQgKCJmb28iKSk7CgkJCWNvbW1lbnQgPSBkb2N1bWVudC5DcmVh
dGVDb21tZW50ICgiYmFyIik7CgkJCWRvY3VtZW50LkRvY3VtZW50RWxlbWVudC5BcHBlbmRDaGls
ZCAoY29tbWVudCk7CgkJCUFzc2VydEVxdWFscyAoIjwhLS1iYXItLT4iLCBkb2N1bWVudC5Eb2N1
bWVudEVsZW1lbnQuSW5uZXJYbWwpOwoJCQljb21tZW50LlZhbHVlID0gImJheiI7CgkJCUFzc2Vy
dCAoZXZlbnRTdHJpbmdzLkNvbnRhaW5zICgiTm9kZUNoYW5nZWQsIENoYW5nZSwgPCEtLWJhei0t
PiwgZm9vLCBmb28iKSk7CgkJCUFzc2VydEVxdWFscyAoIjwhLS1iYXotLT4iLCBkb2N1bWVudC5E
b2N1bWVudEVsZW1lbnQuSW5uZXJYbWwpOwoKCQkJLy8gTm9kZSB0aGF0IGlzbid0IHBhcnQgb2Yg
dGhlIGRvY3VtZW50IGJ1dCBjcmVhdGVkIGJ5IHRoZSBkb2N1bWVudC4KCQkJZWxlbWVudCA9IGRv
Y3VtZW50LkNyZWF0ZUVsZW1lbnQgKCJmb28iKTsKCQkJY29tbWVudCA9IGRvY3VtZW50LkNyZWF0
ZUNvbW1lbnQgKCJiYXIiKTsKCQkJZWxlbWVudC5BcHBlbmRDaGlsZCAoY29tbWVudCk7CgkJCUFz
c2VydEVxdWFscyAoIjwhLS1iYXItLT4iLCBlbGVtZW50LklubmVyWG1sKTsKCQkJY29tbWVudC5W
YWx1ZSA9ICJiYXoiOwoJCQlBc3NlcnQgKGV2ZW50U3RyaW5ncy5Db250YWlucyAoIk5vZGVDaGFu
Z2VkLCBDaGFuZ2UsIDwhLS1iYXotLT4sIGZvbywgZm9vIikpOwoJCQlBc3NlcnRFcXVhbHMgKCI8
IS0tYmF6LS0+IiwgZWxlbWVudC5Jbm5lclhtbCk7CgovKgogVE9ETzogIEluc2VydCB0aGlzIHdo
ZW4gWG1sTm9kZS5Jbm5lclRleHQoKSBhbmQgWG1sTm9kZS5Jbm5lclhtbCgpIGhhdmUgYmVlbiBp
bXBsZW1lbnRlZC4KIAoJCQkvLyBOb2RlIHRoYXQgaXMgcGFydCBvZiB0aGUgZG9jdW1lbnQuCgkJ
CWVsZW1lbnQgPSBkb2N1bWVudC5DcmVhdGVFbGVtZW50ICgiZm9vIik7CgkJCWVsZW1lbnQuSW5u
ZXJUZXh0ID0gImJhciI7CgkJCWRvY3VtZW50LkFwcGVuZENoaWxkKGVsZW1lbnQpOwoJCQllbGVt
ZW50LklubmVyVGV4dCA9ICJiYXoiOwoJCQlBc3NlcnQoZXZlbnRTdHJpbmdzLkNvbnRhaW5zKCJO
b2RlQ2hhbmdlZCwgQ2hhbmdlLCBiYXosIGZvbywgZm9vIikpOwoJCQkKCQkJLy8gTm9kZSB0aGF0
IGlzbid0IHBhcnQgb2YgdGhlIGRvY3VtZW50IGJ1dCBjcmVhdGVkIGJ5IHRoZSBkb2N1bWVudC4K
CQkJZWxlbWVudCA9IGRvY3VtZW50LkNyZWF0ZUVsZW1lbnQoInF1eCIpOwoJCQllbGVtZW50Lklu
bmVyVGV4dCA9ICJxdXV4IjsKCQkJZWxlbWVudC5Jbm5lclRleHQgPSAicXV1dXgiOwoJCQlBc3Nl
cnQoZXZlbnRTdHJpbmdzLkNvbnRhaW5zKCJOb2RlQ2hhbmdlZCwgQ2hhbmdlLCBxdXV1eCwgcXV4
LCBxdXgiKSk7CiovCgkJfQoKCQlwdWJsaWMgdm9pZCBUZXN0RXZlbnROb2RlQ2hhbmdpbmcoKQoJ
CXsKCQkJWG1sRWxlbWVudCBlbGVtZW50OwoJCQlYbWxDb21tZW50IGNvbW1lbnQ7CgoJCQlkb2N1
bWVudC5Ob2RlQ2hhbmdpbmcgKz0gbmV3IFhtbE5vZGVDaGFuZ2VkRXZlbnRIYW5kbGVyICh0aGlz
LkV2ZW50Tm9kZUNoYW5naW5nKTsKCgkJCS8vIE5vZGUgdGhhdCBpcyBwYXJ0IG9mIHRoZSBkb2N1
bWVudC4KCQkJZG9jdW1lbnQuQXBwZW5kQ2hpbGQgKGRvY3VtZW50LkNyZWF0ZUVsZW1lbnQgKCJm
b28iKSk7CgkJCWNvbW1lbnQgPSBkb2N1bWVudC5DcmVhdGVDb21tZW50ICgiYmFyIik7CgkJCWRv
Y3VtZW50LkRvY3VtZW50RWxlbWVudC5BcHBlbmRDaGlsZCAoY29tbWVudCk7CgkJCUFzc2VydEVx
dWFscyAoIjwhLS1iYXItLT4iLCBkb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQuSW5uZXJYbWwpOwoJ
CQljb21tZW50LlZhbHVlID0gImJheiI7CgkJCUFzc2VydCAoZXZlbnRTdHJpbmdzLkNvbnRhaW5z
ICgiTm9kZUNoYW5naW5nLCBDaGFuZ2UsIDwhLS1iYXItLT4sIGZvbywgZm9vIikpOwoJCQlBc3Nl
cnRFcXVhbHMgKCI8IS0tYmF6LS0+IiwgZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50LklubmVyWG1s
KTsKCgkJCS8vIE5vZGUgdGhhdCBpc24ndCBwYXJ0IG9mIHRoZSBkb2N1bWVudCBidXQgY3JlYXRl
ZCBieSB0aGUgZG9jdW1lbnQuCgkJCWVsZW1lbnQgPSBkb2N1bWVudC5DcmVhdGVFbGVtZW50ICgi
Zm9vIik7CgkJCWNvbW1lbnQgPSBkb2N1bWVudC5DcmVhdGVDb21tZW50ICgiYmFyIik7CgkJCWVs
ZW1lbnQuQXBwZW5kQ2hpbGQgKGNvbW1lbnQpOwoJCQlBc3NlcnRFcXVhbHMgKCI8IS0tYmFyLS0+
IiwgZWxlbWVudC5Jbm5lclhtbCk7CgkJCWNvbW1lbnQuVmFsdWUgPSAiYmF6IjsKCQkJQXNzZXJ0
IChldmVudFN0cmluZ3MuQ29udGFpbnMgKCJOb2RlQ2hhbmdpbmcsIENoYW5nZSwgPCEtLWJhci0t
PiwgZm9vLCBmb28iKSk7CgkJCUFzc2VydEVxdWFscyAoIjwhLS1iYXotLT4iLCBlbGVtZW50Lklu
bmVyWG1sKTsKCgkJCS8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gdGhlIERvY3VtZW50IHJl
dHVybnMgdG8gb3JpZ2luYWwgc3RhdGUuCgkJCWRvY3VtZW50Lk5vZGVDaGFuZ2luZyArPSBuZXcg
WG1sTm9kZUNoYW5nZWRFdmVudEhhbmRsZXIgKHRoaXMuRXZlbnROb2RlQ2hhbmdpbmdFeGNlcHRp
b24pOwoJCQllbGVtZW50ID0gZG9jdW1lbnQuQ3JlYXRlRWxlbWVudCgiZm9vIik7CgkJCWNvbW1l
bnQgPSBkb2N1bWVudC5DcmVhdGVDb21tZW50ICgiYmFyIik7CgkJCWVsZW1lbnQuQXBwZW5kQ2hp
bGQgKGNvbW1lbnQpOwoJCQlBc3NlcnRFcXVhbHMgKCI8IS0tYmFyLS0+IiwgZWxlbWVudC5Jbm5l
clhtbCk7CgkJCXRyeSAKCQkJewoJCQkJY29tbWVudC5WYWx1ZSA9ICJiYXoiOwoJCQkJRmFpbCgi
RXhwZWN0ZWQgYW4gZXhjZXB0aW9uIHRvIGJlIHRocm93biBieSB0aGUgTm9kZUNoYW5naW5nIGV2
ZW50IGhhbmRsZXIgbWV0aG9kIEV2ZW50Tm9kZUNoYW5naW5nRXhjZXB0aW9uKCkuIik7CgkJCX0g
Y2F0Y2ggKEV4Y2VwdGlvbikge30KCQkJQXNzZXJ0RXF1YWxzICgiPCEtLWJhci0tPiIsIGVsZW1l
bnQuSW5uZXJYbWwpOwoKCQkJLy8gWWVzIGl0J3MgYSBiaXQgYW5hbCBidXQgdGhpcyB0ZXN0cyB3
aGV0aGVyIHRoZSBub2RlIGNoYW5naW5nIGV2ZW50IGV4Y2VwdGlvbiBmaXJlcyBiZWZvcmUgdGhl
CgkJCS8vIEFyZ3VtZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbi4gIFR1cm5zIG91dCBpdCBkb2VzIHNv
IHRoYXQgbWVhbnMgb3VyIGltcGxlbWVudGF0aW9uIG5lZWRzIHRvIHJhaXNlCgkJCS8vIHRoZSBu
b2RlIGNoYW5naW5nIGV2ZW50IGJlZm9yZSBkb2luZyBhbnkgd29yay4KCQkJdHJ5IAoJCQl7CgkJ
CQljb21tZW50LlJlcGxhY2VEYXRhKC0xLCAwLCAicXV4Iik7CgkJCQlGYWlsKCJFeHBlY3RlZCBh
biBBcmd1bWVudE91dE9mUmFuZ2VFeGNlcHRpb24gdG8gYmUgdGhyb3duLiIpOwoJCQl9IAoJCQlj
YXRjaCAoRXhjZXB0aW9uKSB7fQoKCQkJLyoKIFRPRE86ICBJbnNlcnQgdGhpcyB3aGVuIFhtbE5v
ZGUuSW5uZXJUZXh0KCkgYW5kIFhtbE5vZGUuSW5uZXJYbWwoKSBoYXZlIGJlZW4gaW1wbGVtZW50
ZWQuCiAKCQkJLy8gTm9kZSB0aGF0IGlzIHBhcnQgb2YgdGhlIGRvY3VtZW50LgoJCQllbGVtZW50
ID0gZG9jdW1lbnQuQ3JlYXRlRWxlbWVudCAoImZvbyIpOwoJCQllbGVtZW50LklubmVyVGV4dCA9
ICJiYXIiOwoJCQlkb2N1bWVudC5BcHBlbmRDaGlsZChlbGVtZW50KTsKCQkJZWxlbWVudC5Jbm5l
clRleHQgPSAiYmF6IjsKCQkJQXNzZXJ0KGV2ZW50U3RyaW5ncy5Db250YWlucygiTm9kZUNoYW5n
aW5nLCBDaGFuZ2UsIGJhciwgZm9vLCBmb28iKSk7CgoJCQkvLyBOb2RlIHRoYXQgaXNuJ3QgcGFy
dCBvZiB0aGUgZG9jdW1lbnQgYnV0IGNyZWF0ZWQgYnkgdGhlIGRvY3VtZW50LgoJCQllbGVtZW50
ID0gZG9jdW1lbnQuQ3JlYXRlRWxlbWVudCgiZm9vIik7CgkJCWVsZW1lbnQuSW5uZXJUZXh0ID0g
ImJhciI7CgkJCWVsZW1lbnQuSW5uZXJUZXh0ID0gImJheiI7CgkJCUFzc2VydChldmVudFN0cmlu
Z3MuQ29udGFpbnMoIk5vZGVDaGFuZ2luZywgQ2hhbmdlLCBiYXIsIGZvbywgZm9vIikpOwoKCQkJ
Ly8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB0aGUgRG9jdW1lbnQgcmV0dXJucyB0byBvcmln
aW5hbCBzdGF0ZS4KCQkJZG9jdW1lbnQuTm9kZUNoYW5naW5nICs9IG5ldyBYbWxOb2RlQ2hhbmdl
ZEV2ZW50SGFuZGxlciAodGhpcy5FdmVudE5vZGVDaGFuZ2luZ0V4Y2VwdGlvbik7CgkJCWVsZW1l
bnQgPSBkb2N1bWVudC5DcmVhdGVFbGVtZW50KCJmb28iKTsKCQkJZWxlbWVudC5Jbm5lclRleHQg
PSAiYmFyIjsKCQkJdHJ5IHsKCQkJCWVsZW1lbnQuSW5uZXJUZXh0ID0gImJheiI7CgkJCQlGYWls
KCJFeHBlY3RlZCBhbiBleGNlcHRpb24gdG8gYmUgdGhyb3duIGJ5IHRoZSBOb2RlQ2hhbmdpbmcg
ZXZlbnQgaGFuZGxlciBtZXRob2QgRXZlbnROb2RlQ2hhbmdpbmdFeGNlcHRpb24oKS4iKTsKCQkJ
fSBjYXRjaCAoRXhjZXB0aW9uKSB7fQoJCQlBc3NlcnRFcXVhbHMoImJhciIsIGVsZW1lbnQuSW5u
ZXJUZXh0KTsKKi8KCQl9CgoJCXB1YmxpYyB2b2lkIFRlc3RFdmVudE5vZGVJbnNlcnRlZCgpCgkJ
ewoJCQlYbWxFbGVtZW50IGVsZW1lbnQ7CgoJCQlkb2N1bWVudC5Ob2RlSW5zZXJ0ZWQgKz0gbmV3
IFhtbE5vZGVDaGFuZ2VkRXZlbnRIYW5kbGVyICh0aGlzLkV2ZW50Tm9kZUluc2VydGVkKTsKCgkJ
CS8vIEluc2VydGVkICdmb28nIGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LgoJCQllbGVtZW50ID0g
ZG9jdW1lbnQuQ3JlYXRlRWxlbWVudCAoImZvbyIpOwoJCQlkb2N1bWVudC5BcHBlbmRDaGlsZCAo
ZWxlbWVudCk7CgkJCUFzc2VydCAoZXZlbnRTdHJpbmdzLkNvbnRhaW5zICgiTm9kZUluc2VydGVk
LCBJbnNlcnQsIDxmb28gLz4sIDxub25lPiwgI2RvY3VtZW50IikpOwoKCQkJLy8gQXBwZW5kIGNo
aWxkIG9uIG5vZGUgaW4gZG9jdW1lbnQKCQkJZWxlbWVudCA9IGRvY3VtZW50LkNyZWF0ZUVsZW1l
bnQgKCJmb28iKTsKCQkJZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50LkFwcGVuZENoaWxkIChlbGVt
ZW50KTsKCQkJQXNzZXJ0IChldmVudFN0cmluZ3MuQ29udGFpbnMgKCJOb2RlSW5zZXJ0ZWQsIElu
c2VydCwgPGZvbyAvPiwgPG5vbmU+LCBmb28iKSk7CgoJCQkvLyBBcHBlbmQgY2hpbGQgb24gbm9k
ZSBub3QgaW4gZG9jdW1lbnQgYnV0IGNyZWF0ZWQgYnkgZG9jdW1lbnQKCQkJZWxlbWVudCA9IGRv
Y3VtZW50LkNyZWF0ZUVsZW1lbnQgKCJiYXIiKTsKCQkJZWxlbWVudC5BcHBlbmRDaGlsZChkb2N1
bWVudC5DcmVhdGVFbGVtZW50ICgiYmFyIikpOwoJCQlBc3NlcnQoZXZlbnRTdHJpbmdzLkNvbnRh
aW5zKCJOb2RlSW5zZXJ0ZWQsIEluc2VydCwgPGJhciAvPiwgPG5vbmU+LCBiYXIiKSk7CgkJfQoK
CQlwdWJsaWMgdm9pZCBUZXN0RXZlbnROb2RlSW5zZXJ0aW5nKCkKCQl7CgkJCVhtbEVsZW1lbnQg
ZWxlbWVudDsKCgkJCWRvY3VtZW50Lk5vZGVJbnNlcnRpbmcgKz0gbmV3IFhtbE5vZGVDaGFuZ2Vk
RXZlbnRIYW5kbGVyICh0aGlzLkV2ZW50Tm9kZUluc2VydGluZyk7CgoJCQkvLyBJbnNlcnRpbmcg
J2ZvbycgZWxlbWVudCB0byB0aGUgZG9jdW1lbnQuCgkJCWVsZW1lbnQgPSBkb2N1bWVudC5DcmVh
dGVFbGVtZW50ICgiZm9vIik7CgkJCWRvY3VtZW50LkFwcGVuZENoaWxkIChlbGVtZW50KTsKCQkJ
QXNzZXJ0IChldmVudFN0cmluZ3MuQ29udGFpbnMgKCJOb2RlSW5zZXJ0aW5nLCBJbnNlcnQsIDxm
b28gLz4sIDxub25lPiwgI2RvY3VtZW50IikpOwoKCQkJLy8gQXBwZW5kIGNoaWxkIG9uIG5vZGUg
aW4gZG9jdW1lbnQKCQkJZWxlbWVudCA9IGRvY3VtZW50LkNyZWF0ZUVsZW1lbnQgKCJmb28iKTsK
CQkJZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50LkFwcGVuZENoaWxkIChlbGVtZW50KTsKCQkJQXNz
ZXJ0KGV2ZW50U3RyaW5ncy5Db250YWlucyAoIk5vZGVJbnNlcnRpbmcsIEluc2VydCwgPGZvbyAv
PiwgPG5vbmU+LCBmb28iKSk7CgoJCQkvLyBBcHBlbmQgY2hpbGQgb24gbm9kZSBub3QgaW4gZG9j
dW1lbnQgYnV0IGNyZWF0ZWQgYnkgZG9jdW1lbnQKCQkJZWxlbWVudCA9IGRvY3VtZW50LkNyZWF0
ZUVsZW1lbnQgKCJiYXIiKTsKCQkJQXNzZXJ0RXF1YWxzICgwLCBlbGVtZW50LkNoaWxkTm9kZXMu
Q291bnQpOwoJCQllbGVtZW50LkFwcGVuZENoaWxkIChkb2N1bWVudC5DcmVhdGVFbGVtZW50ICgi
YmFyIikpOwoJCQlBc3NlcnQgKGV2ZW50U3RyaW5ncy5Db250YWlucyAoIk5vZGVJbnNlcnRpbmcs
IEluc2VydCwgPGJhciAvPiwgPG5vbmU+LCBiYXIiKSk7CgkJCUFzc2VydEVxdWFscyAoMSwgZWxl
bWVudC5DaGlsZE5vZGVzLkNvdW50KTsKCgkJCS8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24g
dGhlIERvY3VtZW50IHJldHVybnMgdG8gb3JpZ2luYWwgc3RhdGUuCgkJCWRvY3VtZW50Lk5vZGVJ
bnNlcnRpbmcgKz0gbmV3IFhtbE5vZGVDaGFuZ2VkRXZlbnRIYW5kbGVyICh0aGlzLkV2ZW50Tm9k
ZUluc2VydGluZ0V4Y2VwdGlvbik7CgkJCUFzc2VydEVxdWFscyAoMSwgZWxlbWVudC5DaGlsZE5v
ZGVzLkNvdW50KTsKCQkJdHJ5IAoJCQl7CgkJCQllbGVtZW50LkFwcGVuZENoaWxkIChkb2N1bWVu
dC5DcmVhdGVFbGVtZW50KCJiYXoiKSk7CgkJCQlGYWlsICgiRXhwZWN0ZWQgYW4gZXhjZXB0aW9u
IHRvIGJlIHRocm93biBieSB0aGUgTm9kZUluc2VydGluZyBldmVudCBoYW5kbGVyIG1ldGhvZCBF
dmVudE5vZGVJbnNlcnRpbmdFeGNlcHRpb24oKS4iKTsKCQkJfSAKCQkJY2F0Y2ggKEV4Y2VwdGlv
bikge30KCQkJQXNzZXJ0RXF1YWxzICgxLCBlbGVtZW50LkNoaWxkTm9kZXMuQ291bnQpOwoJCX0K
CgkJcHVibGljIHZvaWQgVGVzdEV2ZW50Tm9kZVJlbW92ZWQoKQoJCXsKCQkJWG1sRWxlbWVudCBl
bGVtZW50OwoJCQlYbWxFbGVtZW50IGVsZW1lbnQyOwoKCQkJZG9jdW1lbnQuTm9kZVJlbW92ZWQg
Kz0gbmV3IFhtbE5vZGVDaGFuZ2VkRXZlbnRIYW5kbGVyICh0aGlzLkV2ZW50Tm9kZVJlbW92ZWQp
OwoKCQkJLy8gUmVtb3ZlZCAnYmFyJyBlbGVtZW50IGZyb20gJ2Zvbycgb3V0c2lkZSBkb2N1bWVu
dC4KCQkJZWxlbWVudCA9IGRvY3VtZW50LkNyZWF0ZUVsZW1lbnQgKCJmb28iKTsKCQkJZWxlbWVu
dDIgPSBkb2N1bWVudC5DcmVhdGVFbGVtZW50ICgiYmFyIik7CgkJCWVsZW1lbnQuQXBwZW5kQ2hp
bGQgKGVsZW1lbnQyKTsKCQkJQXNzZXJ0RXF1YWxzICgxLCBlbGVtZW50LkNoaWxkTm9kZXMuQ291
bnQpOwoJCQllbGVtZW50LlJlbW92ZUNoaWxkIChlbGVtZW50Mik7CgkJCUFzc2VydCAoZXZlbnRT
dHJpbmdzLkNvbnRhaW5zICgiTm9kZVJlbW92ZWQsIFJlbW92ZSwgPGJhciAvPiwgZm9vLCA8bm9u
ZT4iKSk7CgkJCUFzc2VydEVxdWFscyAoMCwgZWxlbWVudC5DaGlsZE5vZGVzLkNvdW50KTsKCi8q
CiAqIFRPRE86ICBwdXQgdGhpcyB0ZXN0IGJhY2sgaW4gd2hlbiBBdHRyaWJ1dGVDb2xsZWN0aW9u
LlJlbW92ZUFsbCgpIGlzIGltcGxlbWVudGVkLgoKCQkJLy8gUmVtb3ZlQWxsLgoJCQllbGVtZW50
ID0gZG9jdW1lbnQuQ3JlYXRlRWxlbWVudCAoImZvbyIpOwoJCQllbGVtZW50MiA9IGRvY3VtZW50
LkNyZWF0ZUVsZW1lbnQgKCJiYXIiKTsKCQkJZWxlbWVudC5BcHBlbmRDaGlsZChlbGVtZW50Mik7
CgkJCUFzc2VydEVxdWFscygxLCBlbGVtZW50LkNoaWxkTm9kZXMuQ291bnQpOwoJCQllbGVtZW50
LlJlbW92ZUFsbCgpOwoJCQlBc3NlcnQgKGV2ZW50U3RyaW5ncy5Db250YWlucyAoIk5vZGVSZW1v
dmVkLCBSZW1vdmUsIDxiYXIgLz4sIGZvbywgPG5vbmU+IikpOwoJCQlBc3NlcnRFcXVhbHMoMCwg
ZWxlbWVudC5DaGlsZE5vZGVzLkNvdW50KTsKKi8KCgkJCS8vIFJlbW92ZWQgJ2JhcicgZWxlbWVu
dCBmcm9tICdmb28nIGluc2lkZSBkb2N1bWVudC4KCQkJZWxlbWVudCA9IGRvY3VtZW50LkNyZWF0
ZUVsZW1lbnQgKCJmb28iKTsKCQkJZG9jdW1lbnQuQXBwZW5kQ2hpbGQgKGVsZW1lbnQpOwoJCQll
bGVtZW50ID0gZG9jdW1lbnQuQ3JlYXRlRWxlbWVudCAoImJhciIpOwoJCQlkb2N1bWVudC5Eb2N1
bWVudEVsZW1lbnQuQXBwZW5kQ2hpbGQgKGVsZW1lbnQpOwoJCQlBc3NlcnRFcXVhbHMgKDEsIGRv
Y3VtZW50LkRvY3VtZW50RWxlbWVudC5DaGlsZE5vZGVzLkNvdW50KTsKCQkJZG9jdW1lbnQuRG9j
dW1lbnRFbGVtZW50LlJlbW92ZUNoaWxkIChlbGVtZW50KTsKCQkJQXNzZXJ0IChldmVudFN0cmlu
Z3MuQ29udGFpbnMgKCJOb2RlUmVtb3ZlZCwgUmVtb3ZlLCA8YmFyIC8+LCBmb28sIDxub25lPiIp
KTsKCQkJQXNzZXJ0RXF1YWxzICgwLCBkb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQuQ2hpbGROb2Rl
cy5Db3VudCk7CgkJfQoJCgkJcHVibGljIHZvaWQgVGVzdEV2ZW50Tm9kZVJlbW92aW5nKCkKCQl7
CgkJCVhtbEVsZW1lbnQgZWxlbWVudDsKCQkJWG1sRWxlbWVudCBlbGVtZW50MjsKCgkJCWRvY3Vt
ZW50Lk5vZGVSZW1vdmluZyArPSBuZXcgWG1sTm9kZUNoYW5nZWRFdmVudEhhbmRsZXIgKHRoaXMu
RXZlbnROb2RlUmVtb3ZpbmcpOwoKCQkJLy8gUmVtb3ZpbmcgJ2JhcicgZWxlbWVudCBmcm9tICdm
b28nIG91dHNpZGUgZG9jdW1lbnQuCgkJCWVsZW1lbnQgPSBkb2N1bWVudC5DcmVhdGVFbGVtZW50
ICgiZm9vIik7CgkJCWVsZW1lbnQyID0gZG9jdW1lbnQuQ3JlYXRlRWxlbWVudCAoImJhciIpOwoJ
CQllbGVtZW50LkFwcGVuZENoaWxkIChlbGVtZW50Mik7CgkJCUFzc2VydEVxdWFscyAoMSwgZWxl
bWVudC5DaGlsZE5vZGVzLkNvdW50KTsKCQkJZWxlbWVudC5SZW1vdmVDaGlsZCAoZWxlbWVudDIp
OwoJCQlBc3NlcnQgKGV2ZW50U3RyaW5ncy5Db250YWlucyAoIk5vZGVSZW1vdmluZywgUmVtb3Zl
LCA8YmFyIC8+LCBmb28sIDxub25lPiIpKTsKCQkJQXNzZXJ0RXF1YWxzICgwLCBlbGVtZW50LkNo
aWxkTm9kZXMuQ291bnQpOwoKLyoKICogVE9ETzogIHB1dCB0aGlzIHRlc3QgYmFjayBpbiB3aGVu
IEF0dHJpYnV0ZUNvbGxlY3Rpb24uUmVtb3ZlQWxsKCkgaXMgaW1wbGVtZW50ZWQuCgoJCQkvLyBS
ZW1vdmVBbGwuCgkJCWVsZW1lbnQgPSBkb2N1bWVudC5DcmVhdGVFbGVtZW50ICgiZm9vIik7CgkJ
CWVsZW1lbnQyID0gZG9jdW1lbnQuQ3JlYXRlRWxlbWVudCAoImJhciIpOwoJCQllbGVtZW50LkFw
cGVuZENoaWxkKGVsZW1lbnQyKTsKCQkJQXNzZXJ0RXF1YWxzKDEsIGVsZW1lbnQuQ2hpbGROb2Rl
cy5Db3VudCk7CgkJCWVsZW1lbnQuUmVtb3ZlQWxsKCk7CgkJCUFzc2VydCAoZXZlbnRTdHJpbmdz
LkNvbnRhaW5zICgiTm9kZVJlbW92aW5nLCBSZW1vdmUsIDxiYXIgLz4sIGZvbywgPG5vbmU+Iikp
OwoJCQlBc3NlcnRFcXVhbHMoMCwgZWxlbWVudC5DaGlsZE5vZGVzLkNvdW50KTsKKi8KCgkJCS8v
IFJlbW92aW5nICdiYXInIGVsZW1lbnQgZnJvbSAnZm9vJyBpbnNpZGUgZG9jdW1lbnQuCgkJCWVs
ZW1lbnQgPSBkb2N1bWVudC5DcmVhdGVFbGVtZW50ICgiZm9vIik7CgkJCWRvY3VtZW50LkFwcGVu
ZENoaWxkIChlbGVtZW50KTsKCQkJZWxlbWVudCA9IGRvY3VtZW50LkNyZWF0ZUVsZW1lbnQgKCJi
YXIiKTsKCQkJZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50LkFwcGVuZENoaWxkIChlbGVtZW50KTsK
CQkJQXNzZXJ0RXF1YWxzICgxLCBkb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQuQ2hpbGROb2Rlcy5D
b3VudCk7CgkJCWRvY3VtZW50LkRvY3VtZW50RWxlbWVudC5SZW1vdmVDaGlsZCAoZWxlbWVudCk7
CgkJCUFzc2VydCAoZXZlbnRTdHJpbmdzLkNvbnRhaW5zICgiTm9kZVJlbW92aW5nLCBSZW1vdmUs
IDxiYXIgLz4sIGZvbywgPG5vbmU+IikpOwoJCQlBc3NlcnRFcXVhbHMgKDAsIGRvY3VtZW50LkRv
Y3VtZW50RWxlbWVudC5DaGlsZE5vZGVzLkNvdW50KTsKCgkJCS8vIElmIGFuIGV4Y2VwdGlvbiBp
cyB0aHJvd24gdGhlIERvY3VtZW50IHJldHVybnMgdG8gb3JpZ2luYWwgc3RhdGUuCgkJCWRvY3Vt
ZW50Lk5vZGVSZW1vdmluZyArPSBuZXcgWG1sTm9kZUNoYW5nZWRFdmVudEhhbmRsZXIgKHRoaXMu
RXZlbnROb2RlUmVtb3ZpbmdFeGNlcHRpb24pOwoJCQllbGVtZW50LkFwcGVuZENoaWxkIChlbGVt
ZW50Mik7CgkJCUFzc2VydEVxdWFscyAoMSwgZWxlbWVudC5DaGlsZE5vZGVzLkNvdW50KTsKCQkJ
dHJ5IAoJCQl7CgkJCQllbGVtZW50LlJlbW92ZUNoaWxkKGVsZW1lbnQyKTsKCQkJCUZhaWwgKCJF
eHBlY3RlZCBhbiBleGNlcHRpb24gdG8gYmUgdGhyb3duIGJ5IHRoZSBOb2RlUmVtb3ZpbmcgZXZl
bnQgaGFuZGxlciBtZXRob2QgRXZlbnROb2RlUmVtb3ZpbmdFeGNlcHRpb24oKS4iKTsKCQkJfSAK
CQkJY2F0Y2ggKEV4Y2VwdGlvbikge30KCQkJQXNzZXJ0RXF1YWxzICgxLCBlbGVtZW50LkNoaWxk
Tm9kZXMuQ291bnQpOwoJCX0KCgkJcHVibGljIHZvaWQgVGVzdEdldEVsZW1lbnRzQnlUYWdOYW1l
Tm9OYW1lU3BhY2UgKCkKCQl7CgkJCXN0cmluZyB4bWwgPSBAIjxsaWJyYXJ5Pjxib29rPjx0aXRs
ZT5YTUwgRnVuPC90aXRsZT48YXV0aG9yPkpvaG4gRG9lPC9hdXRob3I+CgkJCQk8cHJpY2U+MzQu
OTU8L3ByaWNlPjwvYm9vaz48Ym9vaz48dGl0bGU+QmVhciBhbmQgdGhlIERyYWdvbjwvdGl0bGU+
CgkJCQk8YXV0aG9yPlRvbSBDbGFuY3k8L2F1dGhvcj48cHJpY2U+Ni45NTwvcHJpY2U+PC9ib29r
Pjxib29rPgoJCQkJPHRpdGxlPkJvdXJuZSBJZGVudGl0eTwvdGl0bGU+PGF1dGhvcj5Sb2JlcnQg
THVkbHVtPC9hdXRob3I+CgkJCQk8cHJpY2U+OS45NTwvcHJpY2U+PC9ib29rPjxGbHVmZmVyPjxO
dXR0ZXI+PGJvb2s+CgkJCQk8dGl0bGU+Qm91cm5lIFVsdGltYXR1bTwvdGl0bGU+PGF1dGhvcj5S
b2JlcnQgTHVkbHVtPC9hdXRob3I+CgkJCQk8cHJpY2U+OS45NTwvcHJpY2U+PC9ib29rPjwvTnV0
dGVyPjwvRmx1ZmZlcj48L2xpYnJhcnk+IjsKCgkJCU1lbW9yeVN0cmVhbSBtZW1vcnlTdHJlYW0g
PSBuZXcgTWVtb3J5U3RyZWFtIChFbmNvZGluZy5VVEY4LkdldEJ5dGVzICh4bWwpKTsKCQkJZG9j
dW1lbnQgPSBuZXcgWG1sRG9jdW1lbnQgKCk7CgkJCWRvY3VtZW50LkxvYWQgKG1lbW9yeVN0cmVh
bSk7CgkJCVhtbE5vZGVMaXN0IGJvb2tMaXN0ID0gZG9jdW1lbnQuR2V0RWxlbWVudHNCeVRhZ05h
bWUgKCJib29rIik7CgkJCUFzc2VydEVxdWFscyAoIkdldEVsZW1lbnRzQnlUYWdOYW1lIChzdHJp
bmcpIHJldHVybmVkIGluY29ycmVjdCBjb3VudC4iLCA0LCBib29rTGlzdC5Db3VudCk7CgkJfQoK
CQlwdWJsaWMgdm9pZCBUZXN0R2V0RWxlbWVudHNCeVRhZ05hbWVVc2luZ05hbWVTcGFjZSAoKQoJ
CXsKCQkJU3RyaW5nQnVpbGRlciB4bWwgPSBuZXcgU3RyaW5nQnVpbGRlciAoKTsKCQkJeG1sLkFw
cGVuZCAoIjw/eG1sIHZlcnNpb249XCIxLjBcIiA/PjxsaWJyYXJ5IHhtbG5zOk5vcnRoPVwiaHR0
cDovL3d3dy5mb28uY29tXCIgIik7CgkJCXhtbC5BcHBlbmQgKCJ4bWxuczpTb3V0aD1cImh0dHA6
Ly93d3cuZ29vLmNvbVwiPjxOb3J0aDpib29rIHR5cGU9XCJub24tZmljdGlvblwiPiAiKTsKCQkJ
eG1sLkFwcGVuZCAoIjxOb3J0aDp0aXRsZSB0eXBlPVwiaW50cm9cIj5YTUwgRnVuPC9Ob3J0aDp0
aXRsZT4gIiApOwoJCQl4bWwuQXBwZW5kICgiPE5vcnRoOmF1dGhvcj5Kb2huIERvZTwvTm9ydGg6
YXV0aG9yPiAiICk7CgkJCXhtbC5BcHBlbmQgKCI8Tm9ydGg6cHJpY2U+MzQuOTU8L05vcnRoOnBy
aWNlPjwvTm9ydGg6Ym9vaz4gIiApOwoJCQl4bWwuQXBwZW5kICgiPFNvdXRoOmJvb2sgdHlwZT1c
ImZpY3Rpb25cIj4gIiApOwoJCQl4bWwuQXBwZW5kICgiPFNvdXRoOnRpdGxlPkJlYXIgYW5kIHRo
ZSBEcmFnb248L1NvdXRoOnRpdGxlPiAiICk7CgkJCXhtbC5BcHBlbmQgKCI8U291dGg6YXV0aG9y
PlRvbSBDbGFuY3k8L1NvdXRoOmF1dGhvcj4gIiApOwogICAgICAgICAgICAgICAgICAgICAgICB4
bWwuQXBwZW5kICgiPFNvdXRoOnByaWNlPjYuOTU8L1NvdXRoOnByaWNlPjwvU291dGg6Ym9vaz4g
IiApOwoJCQl4bWwuQXBwZW5kICgiPFNvdXRoOmJvb2sgdHlwZT1cImZpY3Rpb25cIj48U291dGg6
dGl0bGU+Qm91cm5lIElkZW50aXR5PC9Tb3V0aDp0aXRsZT4gIiApOwoJCQl4bWwuQXBwZW5kICgi
PFNvdXRoOmF1dGhvcj5Sb2JlcnQgTHVkbHVtPC9Tb3V0aDphdXRob3I+ICIgKTsKCQkJeG1sLkFw
cGVuZCAoIjxTb3V0aDpwcmljZT45Ljk1PC9Tb3V0aDpwcmljZT48L1NvdXRoOmJvb2s+PC9saWJy
YXJ5PiIpOwoKCQkJTWVtb3J5U3RyZWFtIG1lbW9yeVN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0g
KEVuY29kaW5nLlVURjguR2V0Qnl0ZXMgKHhtbC5Ub1N0cmluZyAoKSkpOwoJCQlkb2N1bWVudCA9
IG5ldyBYbWxEb2N1bWVudCAoKTsKCQkJZG9jdW1lbnQuTG9hZCAobWVtb3J5U3RyZWFtKTsKCQkJ
WG1sTm9kZUxpc3QgYm9va0xpc3QgPSBkb2N1bWVudC5HZXRFbGVtZW50c0J5VGFnTmFtZSAoImJv
b2siLCAiaHR0cDovL3d3dy5nb28uY29tIik7CgkJCUFzc2VydEVxdWFscyAoIkdldEVsZW1lbnRz
QnlUYWdOYW1lIChzdHJpbmcsIHVyaSkgcmV0dXJuZWQgaW5jb3JyZWN0IGNvdW50LiIsIDIsIGJv
b2tMaXN0LkNvdW50KTsKCQl9CgoJCgkJcHVibGljIHZvaWQgVGVzdElubmVyQW5kT3V0ZXJYbWwg
KCkKCQl7CgkJCUFzc2VydEVxdWFscyAoU3RyaW5nLkVtcHR5LCBkb2N1bWVudC5Jbm5lclhtbCk7
CgkJCUFzc2VydEVxdWFscyAoZG9jdW1lbnQuSW5uZXJYbWwsIGRvY3VtZW50Lk91dGVyWG1sKTsK
CgkJCVhtbERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0gZG9jdW1lbnQuQ3JlYXRlWG1sRGVjbGFy
YXRpb24gKCIxLjAiLCBudWxsLCBudWxsKTsKCQkJZG9jdW1lbnQuQXBwZW5kQ2hpbGQgKGRlY2xh
cmF0aW9uKTsKCQkJQXNzZXJ0RXF1YWxzICgiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz4iLCBkb2N1
bWVudC5Jbm5lclhtbCk7CgkJCUFzc2VydEVxdWFscyAoZG9jdW1lbnQuSW5uZXJYbWwsIGRvY3Vt
ZW50Lk91dGVyWG1sKTsKCgkJCVhtbEVsZW1lbnQgZWxlbWVudCA9IGRvY3VtZW50LkNyZWF0ZUVs
ZW1lbnQgKCJmb28iKTsKCQkJZG9jdW1lbnQuQXBwZW5kQ2hpbGQgKGVsZW1lbnQpOwoJCQlBc3Nl
cnRFcXVhbHMgKCI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/Pjxmb28gLz4iLCBkb2N1bWVudC5Jbm5l
clhtbCk7CgkJCUFzc2VydEVxdWFscyAoZG9jdW1lbnQuSW5uZXJYbWwsIGRvY3VtZW50Lk91dGVy
WG1sKTsKCgkJCVhtbENvbW1lbnQgY29tbWVudCA9IGRvY3VtZW50LkNyZWF0ZUNvbW1lbnQgKCJi
YXIiKTsKCQkJZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50LkFwcGVuZENoaWxkIChjb21tZW50KTsK
CQkJQXNzZXJ0RXF1YWxzICgiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz48Zm9vPjwhLS1iYXItLT48
L2Zvbz4iLCBkb2N1bWVudC5Jbm5lclhtbCk7CgkJCUFzc2VydEVxdWFscyAoZG9jdW1lbnQuSW5u
ZXJYbWwsIGRvY3VtZW50Lk91dGVyWG1sKTsKCgkJCVhtbFRleHQgdGV4dCA9IGRvY3VtZW50LkNy
ZWF0ZVRleHROb2RlICgiYmF6Iik7CgkJCWRvY3VtZW50LkRvY3VtZW50RWxlbWVudC5BcHBlbmRD
aGlsZCAodGV4dCk7CgkJCUFzc2VydEVxdWFscyAoIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+PGZv
bz48IS0tYmFyLS0+YmF6PC9mb28+IiwgZG9jdW1lbnQuSW5uZXJYbWwpOwoJCQlBc3NlcnRFcXVh
bHMgKGRvY3VtZW50LklubmVyWG1sLCBkb2N1bWVudC5PdXRlclhtbCk7CgoJCQllbGVtZW50ID0g
ZG9jdW1lbnQuQ3JlYXRlRWxlbWVudCAoInF1dXgiKTsKCQkJZWxlbWVudC5TZXRBdHRyaWJ1dGUg
KCJxdXV1eCIsICJzcXVvbmsiKTsKCQkJZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50LkFwcGVuZENo
aWxkIChlbGVtZW50KTsKCQkJQXNzZXJ0RXF1YWxzICgiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz48
Zm9vPjwhLS1iYXItLT5iYXo8cXV1eCBxdXV1eD1cInNxdW9ua1wiIC8+PC9mb28+IiwgZG9jdW1l
bnQuSW5uZXJYbWwpOwoJCQlBc3NlcnRFcXVhbHMgKGRvY3VtZW50LklubmVyWG1sLCBkb2N1bWVu
dC5PdXRlclhtbCk7CgkJfQoKCQlwdWJsaWMgdm9pZCBUZXN0TG9hZFdpdGhTeXN0ZW1JT1N0cmVh
bSAoKQoJCXsJCQkKCQkJc3RyaW5nIHhtbCA9IEAiPGxpYnJhcnk+PGJvb2s+PHRpdGxlPlhNTCBG
dW48L3RpdGxlPjxhdXRob3I+Sm9obiBEb2U8L2F1dGhvcj4KCQkJCTxwcmljZT4zNC45NTwvcHJp
Y2U+PC9ib29rPjxib29rPjx0aXRsZT5CZWFyIGFuZCB0aGUgRHJhZ29uPC90aXRsZT4KCQkJCTxh
dXRob3I+VG9tIENsYW5jeTwvYXV0aG9yPjxwcmljZT42Ljk1PC9wcmljZT48L2Jvb2s+PGJvb2s+
CgkJCQk8dGl0bGU+Qm91cm5lIElkZW50aXR5PC90aXRsZT48YXV0aG9yPlJvYmVydCBMdWRsdW08
L2F1dGhvcj4KCQkJCTxwcmljZT45Ljk1PC9wcmljZT48L2Jvb2s+PEZsdWZmZXI+PE51dHRlcj48
Ym9vaz4KCQkJCTx0aXRsZT5Cb3VybmUgVWx0aW1hdHVtPC90aXRsZT48YXV0aG9yPlJvYmVydCBM
dWRsdW08L2F1dGhvcj4KCQkJCTxwcmljZT45Ljk1PC9wcmljZT48L2Jvb2s+PC9OdXR0ZXI+PC9G
bHVmZmVyPjwvbGlicmFyeT4iOwoKCQkJTWVtb3J5U3RyZWFtIG1lbW9yeVN0cmVhbSA9IG5ldyBN
ZW1vcnlTdHJlYW0gKEVuY29kaW5nLlVURjguR2V0Qnl0ZXMgKHhtbCkpOwoJCQlkb2N1bWVudCA9
IG5ldyBYbWxEb2N1bWVudCAoKTsKCQkJZG9jdW1lbnQuTG9hZCAobWVtb3J5U3RyZWFtKTsKCQkJ
QXNzZXJ0RXF1YWxzICgiTm90IExvYWRlZCBGcm9tIElPU3RyZWFtIiwgdHJ1ZSwgZG9jdW1lbnQu
SGFzQ2hpbGROb2Rlcyk7CgkJfQoKCQlwdWJsaWMgdm9pZCBUZXN0TG9hZFhtbENEQVRBICgpCgkJ
ewoJCQlkb2N1bWVudC5Mb2FkWG1sICgiPGZvbz48IVtDREFUQVtiYXJdXT48L2Zvbz4iKTsKCQkJ
QXNzZXJ0IChkb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQuRmlyc3RDaGlsZC5Ob2RlVHlwZSA9PSBY
bWxOb2RlVHlwZS5DREFUQSk7CgkJCUFzc2VydEVxdWFscyAoImJhciIsIGRvY3VtZW50LkRvY3Vt
ZW50RWxlbWVudC5GaXJzdENoaWxkLlZhbHVlKTsKCQl9CgoJCXB1YmxpYyB2b2lkIFRlc3RMb2Fk
WE1MQ29tbWVudCgpCgkJewovLyBYbWxUZXh0UmVhZGVyIG5lZWRzIHRvIHRocm93IHRoaXMgZXhj
ZXB0aW9uCi8vCQkJdHJ5IHsKLy8JCQkJZG9jdW1lbnQuTG9hZFhtbCgiPCEtLWZvby0tPiIpOwov
LwkJCQlGYWlsKCJYbWxFeGNlcHRpb24gc2hvdWxkIGhhdmUgYmVlbiB0aHJvd24uIik7Ci8vCQkJ
fQovLwkJCWNhdGNoIChYbWxFeGNlcHRpb24gZSkgewovLwkJCQlBc3NlcnRFcXVhbHMoIkV4Y2Vw
dGlvbiBtZXNzYWdlIGRvZXNuJ3QgbWF0Y2guIiwgIlRoZSByb290IGVsZW1lbnQgaXMgbWlzc2lu
Zy4iLCBlLk1lc3NhZ2UpOwovLwkJCX0KCgkJCWRvY3VtZW50LkxvYWRYbWwgKCI8Zm9vPjwhLS1D
b21tZW50LS0+PC9mb28+Iik7CgkJCUFzc2VydCAoZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50LkZp
cnN0Q2hpbGQuTm9kZVR5cGUgPT0gWG1sTm9kZVR5cGUuQ29tbWVudCk7CgkJCUFzc2VydEVxdWFs
cyAoIkNvbW1lbnQiLCBkb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQuRmlyc3RDaGlsZC5WYWx1ZSk7
CgoJCQlkb2N1bWVudC5Mb2FkWG1sIChAIjxmb28+PCEtLWJhci0tPjwvZm9vPiIpOwoJCQlBc3Nl
cnRFcXVhbHMgKCJJbmNvcnJlY3QgdGFyZ2V0LiIsICJiYXIiLCAoKFhtbENvbW1lbnQpZG9jdW1l
bnQuRmlyc3RDaGlsZC5GaXJzdENoaWxkKS5EYXRhKTsKCQl9CgoJCXB1YmxpYyB2b2lkIFRlc3RM
b2FkWG1sRWxlbWVudFNpbmdsZSAoKQoJCXsKCQkJQXNzZXJ0TnVsbCAoZG9jdW1lbnQuRG9jdW1l
bnRFbGVtZW50KTsKCQkJZG9jdW1lbnQuTG9hZFhtbCAoIjxmb28vPiIpOwoKCQkJQXNzZXJ0Tm90
TnVsbCAoZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50KTsKCQkJQXNzZXJ0U2FtZSAoZG9jdW1lbnQu
Rmlyc3RDaGlsZCwgZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50KTsKCgkJCUFzc2VydEVxdWFscyAo
U3RyaW5nLkVtcHR5LCBkb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQuUHJlZml4KTsKCQkJQXNzZXJ0
RXF1YWxzICgiZm9vIiwgZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50LkxvY2FsTmFtZSk7CgkJCUFz
c2VydEVxdWFscyAoU3RyaW5nLkVtcHR5LCBkb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQuTmFtZXNw
YWNlVVJJKTsKCQkJQXNzZXJ0RXF1YWxzICgiZm9vIiwgZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50
Lk5hbWUpOwoJCX0KCgkJcHVibGljIHZvaWQgVGVzdExvYWRYbWxFbGVtZW50V2l0aEF0dHJpYnV0
ZXMgKCkKCQl7CgkJCUFzc2VydE51bGwgKGRvY3VtZW50LkRvY3VtZW50RWxlbWVudCk7CgkJCWRv
Y3VtZW50LkxvYWRYbWwgKCI8Zm9vIGJhcj0nYmF6JyBxdXV4PSdxdXV1eCcvPiIpOwoKCQkJWG1s
RWxlbWVudCBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7CgoJCQlB
c3NlcnRFcXVhbHMgKCJiYXoiLCBkb2N1bWVudEVsZW1lbnQuR2V0QXR0cmlidXRlICgiYmFyIikp
OwoJCQlBc3NlcnRFcXVhbHMgKCJxdXV1eCIsIGRvY3VtZW50RWxlbWVudC5HZXRBdHRyaWJ1dGUg
KCJxdXV4IikpOwoJCX0KCQlwdWJsaWMgdm9pZCBUZXN0TG9hZFhtbEVsZW1lbnRXaXRoQ2hpbGRF
bGVtZW50ICgpCgkJewoJCQlkb2N1bWVudC5Mb2FkWG1sICgiPGZvbz48YmFyLz48L2Zvbz4iKTsK
CQkJQXNzZXJ0IChkb2N1bWVudC5DaGlsZE5vZGVzLkNvdW50ID09IDEpOwoJCQlBc3NlcnQgKGRv
Y3VtZW50LkZpcnN0Q2hpbGQuQ2hpbGROb2Rlcy5Db3VudCA9PSAxKTsKCQkJQXNzZXJ0RXF1YWxz
ICgiZm9vIiwgZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50LkxvY2FsTmFtZSk7CgkJCUFzc2VydEVx
dWFscyAoImJhciIsIGRvY3VtZW50LkRvY3VtZW50RWxlbWVudC5GaXJzdENoaWxkLkxvY2FsTmFt
ZSk7CgkJfQoKCQlwdWJsaWMgdm9pZCBUZXN0TG9hZFhtbEVsZW1lbnRXaXRoVGV4dE5vZGUgKCkK
CQl7CgkJCWRvY3VtZW50LkxvYWRYbWwgKCI8Zm9vPmJhcjwvZm9vPiIpOwoJCQlBc3NlcnQgKGRv
Y3VtZW50LkRvY3VtZW50RWxlbWVudC5GaXJzdENoaWxkLk5vZGVUeXBlID09IFhtbE5vZGVUeXBl
LlRleHQpOwoJCQlBc3NlcnRFcXVhbHMgKCJiYXIiLCBkb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQu
Rmlyc3RDaGlsZC5WYWx1ZSk7CgkJfQoKCQlwdWJsaWMgdm9pZCBUZXN0TG9hZFhtbEV4Y2VwdGlv
bkNsZWFyc0RvY3VtZW50ICgpCgkJewoJCQlkb2N1bWVudC5Mb2FkWG1sICgiPGZvby8+Iik7CgkJ
CUFzc2VydCAoZG9jdW1lbnQuRmlyc3RDaGlsZCAhPSBudWxsKTsKCQkJCgkJCXRyeSB7CgkJCQlk
b2N1bWVudC5Mb2FkWG1sICgiPDEyMy8+Iik7CgkJCQlGYWlsICgiQW4gWG1sRXhjZXB0aW9uIHNo
b3VsZCBoYXZlIGJlZW4gdGhyb3duLiIpOwoJCQl9IGNhdGNoIChYbWxFeGNlcHRpb24pIHt9CgoJ
CQlBc3NlcnQgKGRvY3VtZW50LkZpcnN0Q2hpbGQgPT0gbnVsbCk7CgkJfQoKCQlwdWJsaWMgdm9p
ZCBUZXN0TG9hZFhtbFByb2Nlc3NpbmdJbnN0cnVjdGlvbiAoKQoJCXsKCQkJZG9jdW1lbnQuTG9h
ZFhtbCAoQCI8P2ZvbyBiYXI9J2JhYXonIHF1dXg9J3F1dXV4Jz8+PHF1dXV1eD48L3F1dXV1eD4i
KTsKCQkJQXNzZXJ0RXF1YWxzICgiSW5jb3JyZWN0IHRhcmdldC4iLCAiZm9vIiwgKChYbWxQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24pZG9jdW1lbnQuRmlyc3RDaGlsZCkuVGFyZ2V0KTsKCQkJQXNzZXJ0
RXF1YWxzICgiSW5jb3JyZWN0IGRhdGEuIiwgImJhcj0nYmFheicgcXV1eD0ncXV1dXgnIiwgKChY
bWxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pZG9jdW1lbnQuRmlyc3RDaGlsZCkuRGF0YSk7CgkJfQoK
CQlwdWJsaWMgdm9pZCBUZXN0T3V0ZXJYbWwgKCkKCQl7CgkJCXN0cmluZyB4bWw7CgkJCQoJCQl4
bWwgPSAiPHJvb3Q+PCFbQ0RBVEFbZm9vXV0+PC9yb290PiI7CgkJCWRvY3VtZW50LkxvYWRYbWwg
KHhtbCk7CgkJCUFzc2VydEVxdWFscygiWG1sRG9jdW1lbnQgd2l0aCBjZGF0YSBPdXRlclhtbCBp
cyBpbmNvcnJlY3QuIiwgeG1sLCBkb2N1bWVudC5PdXRlclhtbCk7CgoJCQl4bWwgPSAiPHJvb3Q+
PCEtLWZvby0tPjwvcm9vdD4iOwoJCQlkb2N1bWVudC5Mb2FkWG1sICh4bWwpOwoJCQlBc3NlcnRF
cXVhbHMoIlhtbERvY3VtZW50IHdpdGggY29tbWVudCBPdXRlclhtbCBpcyBpbmNvcnJlY3QuIiwg
eG1sLCBkb2N1bWVudC5PdXRlclhtbCk7CgoJCQl4bWwgPSAiPHJvb3Q+PD9mb28gYmFyPz48L3Jv
b3Q+IjsKCQkJZG9jdW1lbnQuTG9hZFhtbCAoeG1sKTsKCQkJQXNzZXJ0RXF1YWxzKCJYbWxEb2N1
bWVudCB3aXRoIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gT3V0ZXJYbWwgaXMgaW5jb3JyZWN0LiIs
IHhtbCwgZG9jdW1lbnQuT3V0ZXJYbWwpOwoJCX0KCgkJcHVibGljIHZvaWQgVGVzdFBhcmVudE5v
ZGVzICgpCgkJewoJCQlkb2N1bWVudC5Mb2FkWG1sICgiPGZvbz48YmFyPjxiYXovPjwvYmFyPjwv
Zm9vPiIpOwoJCQlYbWxOb2RlIG5vZGUgPSBkb2N1bWVudC5GaXJzdENoaWxkLkZpcnN0Q2hpbGQu
Rmlyc3RDaGlsZDsKCQkJQXNzZXJ0RXF1YWxzICgiV3JvbmcgY2hpbGQgZm91bmQuIiwgImJheiIs
IG5vZGUuTG9jYWxOYW1lKTsKCQkJQXNzZXJ0RXF1YWxzICgiV3JvbmcgcGFyZW50LiIsICJiYXIi
LCBub2RlLlBhcmVudE5vZGUuTG9jYWxOYW1lKTsKCQkJQXNzZXJ0RXF1YWxzICgiV3JvbmcgcGFy
ZW50LiIsICJmb28iLCBub2RlLlBhcmVudE5vZGUuUGFyZW50Tm9kZS5Mb2NhbE5hbWUpOwoJCQlB
c3NlcnRFcXVhbHMgKCJXcm9uZyBwYXJlbnQuIiwgIiNkb2N1bWVudCIsIG5vZGUuUGFyZW50Tm9k
ZS5QYXJlbnROb2RlLlBhcmVudE5vZGUuTG9jYWxOYW1lKTsKCQkJQXNzZXJ0TnVsbCAoIkV4cGVj
dGVkIHBhcmVudCB0byBiZSBudWxsLiIsIG5vZGUuUGFyZW50Tm9kZS5QYXJlbnROb2RlLlBhcmVu
dE5vZGUuUGFyZW50Tm9kZSk7CgkJfQoKCQlwdWJsaWMgdm9pZCBUZXN0UmVtb3ZlZEVsZW1lbnRO
ZXh0U2libGluZyAoKQoJCXsKCQkJWG1sTm9kZSBub2RlOwoJCQlYbWxOb2RlIG5leHRTaWJsaW5n
OwoKCQkJZG9jdW1lbnQuTG9hZFhtbCAoIjxmb28+PGNoaWxkMS8+PGNoaWxkMi8+PC9mb28+Iik7
CgkJCW5vZGUgPSBkb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQuRmlyc3RDaGlsZDsKCQkJZG9jdW1l
bnQuRG9jdW1lbnRFbGVtZW50LlJlbW92ZUNoaWxkIChub2RlKTsKCQkJbmV4dFNpYmxpbmcgPSBu
b2RlLk5leHRTaWJsaW5nOwoJCQlBc3NlcnROdWxsICgiRXhwZWN0ZWQgcmVtb3ZlZCBub2RlJ3Mg
bmV4dCBzaWJsaW5nIHRvIGJlIG51bGwuIiwgbmV4dFNpYmxpbmcpOwoJCX0KCgkJLy8gSW1wb3J0
Tm9kZQoJCXB1YmxpYyB2b2lkIFRlc3RJbXBvcnROb2RlICgpCgkJewoJCQlYbWxOb2RlIG47CgoJ
CQlzdHJpbmcgeGxpbmtVUkkgPSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YTGluayI7CgkJCXN0
cmluZyB4bWwxID0gIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J3V0Zi04JyA/Pjxmb28g
eG1sbnM6eGxpbms9JyIgKyB4bGlua1VSSSArICInPjxiYXIgYTE9J3YxJyB4bGluazpocmVmPScj
Zm9vJz48YmF6PjwhW0NEQVRBW2NkYXRhIHNlY3Rpb24uXG5cdGl0ZW0gMVxuXHRpdGVtIDJcbl1d
PkZyb20gaGVyZSwgc2ltcGxlIHRleHQgbm9kZS48L2Jhej48L2Jhcj48L2Zvbz4iOwoJCQlkb2N1
bWVudC5Mb2FkWG1sKHhtbDEpOwoJCQlYbWxEb2N1bWVudCBuZXdEb2MgPSBuZXcgWG1sRG9jdW1l
bnQoKTsKCQkJbmV3RG9jLkxvYWRYbWwoIjxob2dlPjxmdWdhIC8+PC9ob2dlPiIpOwoJCQlYbWxF
bGVtZW50IGJhciA9IGRvY3VtZW50LkRvY3VtZW50RWxlbWVudC5GaXJzdENoaWxkIGFzIFhtbEVs
ZW1lbnQ7CgoJCQkvLyBBdHRyaWJ1dGUKCQkJbiA9IG5ld0RvYy5JbXBvcnROb2RlKGJhci5HZXRB
dHRyaWJ1dGVOb2RlKCJocmVmIiwgeGxpbmtVUkkpLCB0cnVlKTsKCQkJQXNzZXJ0RXF1YWxzKCIj
SW1wb3J0Tm9kZS5BdHRyLk5TLkxvY2FsTmFtZSIsICJocmVmIiwgbi5Mb2NhbE5hbWUpOwoJCQlB
c3NlcnRFcXVhbHMoIiNJbXBvcnROb2RlLkF0dHIuTlMuTlNVUkkiLCB4bGlua1VSSSwgbi5OYW1l
c3BhY2VVUkkpOwoJCQlBc3NlcnRFcXVhbHMoIiNJbXBvcnROb2RlLkF0dHIuTlMuVmFsdWUiLCAi
I2ZvbyIsIG4uVmFsdWUpOwoKCQkJLy8gQ0RBVEEKCQkJbiA9IG5ld0RvYy5JbXBvcnROb2RlKGJh
ci5GaXJzdENoaWxkLkZpcnN0Q2hpbGQsIHRydWUpOwoJCQlBc3NlcnRFcXVhbHMoIiNJbXBvcnRO
b2RlLkNEQVRBIiwgImNkYXRhIHNlY3Rpb24uXG5cdGl0ZW0gMVxuXHRpdGVtIDJcbiIsIG4uVmFs
dWUpOwoKCQkJLy8gRWxlbWVudAoJCQlYbWxFbGVtZW50IGUgPSBuZXdEb2MuSW1wb3J0Tm9kZShi
YXIsIHRydWUpIGFzIFhtbEVsZW1lbnQ7CgkJCUFzc2VydEVxdWFscygiI0ltcG9ydE5vZGUuRWxl
bWVudC5OYW1lIiwgImJhciIsIGUuTmFtZSk7CgkJCUFzc2VydEVxdWFscygiI0ltcG9ydE5vZGUu
RWxlbWVudC5BdHRyIiwgIiNmb28iLCBlLkdldEF0dHJpYnV0ZSgiaHJlZiIsIHhsaW5rVVJJKSk7
CgkJCUFzc2VydEVxdWFscygiI0ltcG9ydE5vZGUuRWxlbWVudC5kZWVwIiwgImJheiIsIGUuRmly
c3RDaGlsZC5OYW1lKTsKCgkJCS8vIEVudGl0eSBSZWZlcmVuY2U6CgkJCS8vICAgWzIwMDIvMTAv
MTRdIENyZWF0ZUVudGl0eVJlZmVyZW5jZSB3YXMgbm90IGltcGxlbWVudGVkLgovLwkJCWRvY3Vt
ZW50LkxvYWRYbWwoIjwhRE9DVFlQRSB0ZXN0IFBVQkxJQyAnZHVtbXknIFs8IUVOVElUWSBGT09F
TlQgJ2Zvbyc+XT48cm9vdD4mRk9PRU5UOzwvcm9vdD4iKTsKLy8JCQluID0gbmV3RG9jLkltcG9y
dE5vZGUoZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50LkZpcnN0Q2hpbGQpOwovLwkJCUFzc2VydEVx
dWFscygiI0ltcG9ydE5vZGUuRW50aXR5UmVmZXJlbmNlIiwgIkZPT0VOVCIsIG4uTmFtZSk7Ci8v
CQkJQXNzZXJ0RXF1YWxzKCIjSW1wb3J0Tm9kZS5FbnRpdHlSZWZlcmVuY2UiLCAiZm9vXyIsIG4u
VmFsdWUpOwoKCQkJLy8gUHJvY2Vzc2luZyBJbnN0cnVjdGlvbgoJCQlkb2N1bWVudC5Mb2FkWG1s
KCI8Zm9vPjw/eG1sLXN0eWxlc2hlZXQgaHJlZj0nZm9vLnhzbCcgPz48L2Zvbz4iKTsKCQkJWG1s
UHJvY2Vzc2luZ0luc3RydWN0aW9uIHBpID0gKFhtbFByb2Nlc3NpbmdJbnN0cnVjdGlvbiluZXdE
b2MuSW1wb3J0Tm9kZShkb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQuRmlyc3RDaGlsZCwgZmFsc2Up
OwoJCQlBc3NlcnRFcXVhbHMoIiNJbXBvcnROb2RlLlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5OYW1l
IiwgInhtbC1zdHlsZXNoZWV0IiwgcGkuTmFtZSk7CgkJCUFzc2VydEVxdWFscygiI0ltcG9ydE5v
ZGUuUHJvY2Vzc2luZ0luc3RydWN0aW9uLkRhdGEiLCAiaHJlZj0nZm9vLnhzbCciLCBwaS5EYXRh
LlRyaW0oKSk7CgkJCQoJCQkvLyBUZXh0CgkJCWRvY3VtZW50LkxvYWRYbWwoeG1sMSk7CgkJCW4g
PSBuZXdEb2MuSW1wb3J0Tm9kZSgoWG1sVGV4dCliYXIuRmlyc3RDaGlsZC5DaGlsZE5vZGVzWzFd
LCB0cnVlKTsKCQkJQXNzZXJ0RXF1YWxzKCIjSW1wb3J0Tm9kZS5UZXh0IiwgIkZyb20gaGVyZSwg
c2ltcGxlIHRleHQgbm9kZS4iLCBuLlZhbHVlKTsKCgkJCS8vIFdoaXRlc3BhY2UKCQl9Cgl9Cn0K

--------_3DAAC39652B30519E008_MULTIPART_MIXED_--