[COMMIT] Import the #'clear-string API from GNU, use it in tls.c

Aidan Kehoe <[email protected]> Sat, 18 Apr 2015 23:15:28 +0100
Newsgroups gmane.emacs.xemacs.patches
Message-ID <[email protected]>
CiBBciBhbiBzZWFjaHTDuiBsw6EgZMOpYWcgZGUgbcOtIEFpYnLDqWFuLCBzY3LDrW9iaCBKZXJy
eSBKYW1lczogCgogPiBBaCwgZ29vZCBjYXRjaC4gIFllcywgcGxlYXNlIGNvbW1pdCB0aGlzLgoK
TXVsbGluZyBpdCBzb21lIG1vcmUsIEkgc2VlIHRoZXJl4oCZcyBubyB3YXkgZm9yIExpc3AgdG8g
ZG8gd2hhdCB3ZSB3YW50IHRvIGRvLAp3aGljaCBpcyBhIGxpbWl0YXRpb24sIGVzcGVjaWFsbHkg
Z2l2ZW4gdGhhdCAjJ3JlYWQtcGFzc3dkIGlzIGluIExpc3AuIEnigJl2ZQpjb21taXR0ZWQgdGhl
IGJlbG93OyBHTlUgaGF2ZSBhICMnY2xlYXItc3RyaW5nIGFscmVhZHksIHRoaXMgaW1wbGVtZW50
YXRpb24KZG9lcyB0aGUgc2FtZSB0aGluZyB3aGlsZSBhdm9pZGluZyB0aGVpciBleHBvc3VyZSBv
ZiB0aGUgYnl0ZS9jaGFyIGRpZmZlcmVuY2UKdG8gTGlzcC4KCiMgSEcgY2hhbmdlc2V0IHBhdGNo
CiMgVXNlciBBaWRhbiBLZWhvZSA8a2Vob2VhQHBhcmhhc2FyZC5uZXQ+CiMgRGF0ZSAxNDI5Mzk0
NDE0IC0zNjAwCiMgICAgICBTYXQgQXByIDE4IDIzOjAwOjE0IDIwMTUgKzAxMDAKIyBOb2RlIElE
IDA1M2VmMDFiNzFhODY0YzE5NzY2ODFkYWYxMDI1M2UzNzA4MjE4Y2UKIyBQYXJlbnQgIDg3MDRi
Nzk1NzU4NWM5ODYwMWZlODFlODRkMmU5NmYwNWQ2MjA2YjQKSW1wb3J0IHRoZSAjJ2NsZWFyLXN0
cmluZyBBUEkgZnJvbSBHTlUsIHVzZSBpdCBpbiB0bHMuYwoKc3JjL0NoYW5nZUxvZyBhZGRpdGlv
bjoKCjIwMTUtMDQtMTggIEFpZGFuIEtlaG9lICA8a2Vob2VhQHBhcmhhc2FyZC5uZXQ+CgoJKiBz
ZXF1ZW5jZS5jIChGY2xlYXJfc3RyaW5nKTogTmV3LCBBUEkgZnJvbSBHTlUuICBaZXJvIGEgc3Ry
aW5nJ3MKCWNvbnRlbnRzLCBtYWtpbmcgc3VyZSB0aGUgdGV4dCBpcyBub3Qga2VwdCBhcm91bmQg
ZXZlbiB3aGVuIHRoZQoJc3RyaW5nJ3MgZGF0YSBpcyByZWFsbG9jYXRlZCBiZWNhdXNlIG9mIGEg
Y2hhbmdlZCBjaGFyYWN0ZXIKCWxlbmd0aC4KCSogc2VxdWVuY2UuYyAoc3ltc19vZl9zZXF1ZW5j
ZSk6IE1ha2UgaXQgYXZhaWxhYmxlIHRvIExpc3AuCgkqIGxpc3AuaDogTWFrZSBpdCBhdmFpbGFi
bGUgdG8gQyBjb2RlLgoJKiB0bHMuYyAobnNzX3BrMTFfcGFzc3dvcmQpOiBVc2UgaXQuCgkqIHRs
cy5jIChnbnV0bHNfcGsxMV9wYXNzd29yZCk6IFVzZSBpdC4KCSogdGxzLmMgKG9wZW5zc2xfcGFz
c3dvcmQpOiBVc2UgaXQuCgp0ZXN0cy9DaGFuZ2VMb2cgYWRkaXRpb246CgoyMDE1LTA0LTE4ICBB
aWRhbiBLZWhvZSAgPGtlaG9lYUBwYXJoYXNhcmQubmV0PgoKCSogYXV0b21hdGVkL2xpc3AtdGVz
dHMuZWw6CglUZXN0ICMnY2xlYXItc3RyaW5nLCBqdXN0IGFkZGVkLiBVbmZvcnR1bmF0ZWx5IHRo
ZXJlJ3Mgbm8gd2F5IHRvCgliZSBjZXJ0YWluIGZyb20gTGlzcCB0aGF0IHRoZSBvbGQgcGFzc3dv
cmQgZGF0YSBoYXMgYmVlbiBlcmFzZWQKCWFmdGVyIHJlYWxsb2M7IGl0IG1heSBiZSB3b3J0aCBh
ZGRpbmcgYSB0ZXN0IHRvIHRlc3RzLmMsIGJ1dAoJKndlJ2xsIGJlIHJlYWRpbmcgbWVtb3J5IHdl
IHNob3VsZG4ndCBiZSosIHNvIHRoYXQgZ2l2ZXMgbWUgcGF1c2UuCgpkaWZmIC1yIDg3MDRiNzk1
NzU4NSAtciAwNTNlZjAxYjcxYTggc3JjL0NoYW5nZUxvZwotLS0gYS9zcmMvQ2hhbmdlTG9nCVNh
dCBBcHIgMTEgMTg6MzQ6MTQgMjAxNSArMDEwMAorKysgYi9zcmMvQ2hhbmdlTG9nCVNhdCBBcHIg
MTggMjM6MDA6MTQgMjAxNSArMDEwMApAQCAtMSwzICsxLDE1IEBACisyMDE1LTA0LTE4ICBBaWRh
biBLZWhvZSAgPGtlaG9lYUBwYXJoYXNhcmQubmV0PgorCisJKiBzZXF1ZW5jZS5jIChGY2xlYXJf
c3RyaW5nKTogTmV3LCBBUEkgZnJvbSBHTlUuICBaZXJvIGEgc3RyaW5nJ3MKKwljb250ZW50cywg
bWFraW5nIHN1cmUgdGhlIHRleHQgaXMgbm90IGtlcHQgYXJvdW5kIGV2ZW4gd2hlbiB0aGUKKwlz
dHJpbmcncyBkYXRhIGlzIHJlYWxsb2NhdGVkIGJlY2F1c2Ugb2YgYSBjaGFuZ2VkIGNoYXJhY3Rl
cgorCWxlbmd0aC4KKwkqIHNlcXVlbmNlLmMgKHN5bXNfb2Zfc2VxdWVuY2UpOiBNYWtlIGl0IGF2
YWlsYWJsZSB0byBMaXNwLgorCSogbGlzcC5oOiBNYWtlIGl0IGF2YWlsYWJsZSB0byBDIGNvZGUu
CisJKiB0bHMuYyAobnNzX3BrMTFfcGFzc3dvcmQpOiBVc2UgaXQuCisJKiB0bHMuYyAoZ251dGxz
X3BrMTFfcGFzc3dvcmQpOiBVc2UgaXQuCisJKiB0bHMuYyAob3BlbnNzbF9wYXNzd29yZCk6IFVz
ZSBpdC4KKwogMjAxNS0wNC0wOSAgQWlkYW4gS2Vob2UgIDxrZWhvZWFAcGFyaGFzYXJkLm5ldD4K
IAogCSogdGxzLmMgKG5zc19wazExX3Bhc3N3b3JkKToKZGlmZiAtciA4NzA0Yjc5NTc1ODUgLXIg
MDUzZWYwMWI3MWE4IHNyYy9saXNwLmgKLS0tIGEvc3JjL2xpc3AuaAlTYXQgQXByIDExIDE4OjM0
OjE0IDIwMTUgKzAxMDAKKysrIGIvc3JjL2xpc3AuaAlTYXQgQXByIDE4IDIzOjAwOjE0IDIwMTUg
KzAxMDAKQEAgLTU3ODgsNiArNTc4OCw3IEBACiAKIC8qIERlZmluZWQgaW4gc2VxdWVuY2UuYyAq
LwogRVhGVU4gKEZmaWxsLCBNQU5ZKTsKK0VYRlVOIChGY2xlYXJfc3RyaW5nLCAxKTsKIEVYRlVO
IChGcmVwbGFjZSwgTUFOWSk7CiAKIC8qIERlZmluZWQgaW4gc2lnbmFsLmMgKi8KZGlmZiAtciA4
NzA0Yjc5NTc1ODUgLXIgMDUzZWYwMWI3MWE4IHNyYy9zZXF1ZW5jZS5jCi0tLSBhL3NyYy9zZXF1
ZW5jZS5jCVNhdCBBcHIgMTEgMTg6MzQ6MTQgMjAxNSArMDEwMAorKysgYi9zcmMvc2VxdWVuY2Uu
YwlTYXQgQXByIDE4IDIzOjAwOjE0IDIwMTUgKzAxMDAKQEAgLTQxNTQsNiArNDE1NCw1MiBAQAog
ICByZXR1cm4gc2VxdWVuY2U7CiB9CiAKK0RFRlVOICgiY2xlYXItc3RyaW5nIiwgRmNsZWFyX3N0
cmluZywgMSwgMSwgMCwgLyoKK0ZpbGwgU1RSSU5HIHdpdGggP1xceDAwIGNoYXJhY3RlcnMuICBS
ZXR1cm4gbmlsLgorCitUaGlzIGRpZmZlcnMgZnJvbSBgZmlsbCcgd2l0aCBhID9cXHgwMCBhcmd1
bWVudCBpbiB0aGF0IGl0IGVuc3VyZXMgdGhhdAorU1RSSU5HJ3MgZXhpc3RpbmcgY29udGVudHMg
YXJlIGRpc2NhcmRlZCwgZXZlbiBpbiB0aGUgZXZlbnQgb2YgcmVhbGxvY2F0aW9uCitkdWUgdG8g
YSBjaGFuZ2UgaW4gdGhlIGJ5dGUgbGVuZ3RoIG9mIFNUUklORy4gIEluIHRoaXMgaW1wbGVtZW50
YXRpb24sIHRoZQorY2hhcmFjdGVyIGxlbmd0aCBvZiBTVFJJTkcgaXMgbm90IGNoYW5nZWQuCisq
LworICAgICAgIChzdHJpbmcpKQoreworICBJYnl0ZSBudWxsYnl0ZVtNQVhfSUNIQVJfTEVOXTsK
KyAgQnl0ZWNvdW50IHplcm9sZW4gPSBzZXRfaXRleHRfaWNoYXIgKG51bGxieXRlLCAwKTsKKyAg
Q2hhcmNvdW50IHNjb3VudDsKKworICBDSEVDS19TVFJJTkcgKHN0cmluZyk7CisKKyAgc2NvdW50
ID0gc3RyaW5nX2NoYXJfbGVuZ3RoIChzdHJpbmcpOworCisgIC8qIEZpcnN0LCBjbGVhciB0aGUg
b3JpZ2luYWwgc3RyaW5nIGRhdGEuICovCisgIG1lbXNldCAoWFNUUklOR19EQVRBIChzdHJpbmcp
LCAwLCBYU1RSSU5HX0xFTkdUSCAoc3RyaW5nKSk7CisKKyAgLyogTm93LCByZXNpemUgaWYgdGhh
dCdzIG5lY2Vzc2FyeSwgdG8gbWFrZSBzdXJlIExpc3AgaXNuJ3QgY29uZnVzZWQgYnkgdGhlCisg
ICAgIGNoYXJhY3RlciBsZW5ndGggb2YgYSBzdHJpbmcgY2hhbmdpbmcuICovCisgIGlmIChzdHJp
bmdfY2hhcl9sZW5ndGggKHN0cmluZykgIT0gc2NvdW50KQorICAgIHsKKyAgICAgIElieXRlICpw
LCAqcGVuZDsKKyAgICAgIEJ5dGVjb3VudCBkZWx0YSA9ICh6ZXJvbGVuICogc2NvdW50KSAtIFhT
VFJJTkdfTEVOR1RIIChzdHJpbmcpOworCisgICAgICByZXNpemVfc3RyaW5nIChzdHJpbmcsIDAs
IGRlbHRhKTsKKyAgICAgIHAgPSBYU1RSSU5HX0RBVEEgKHN0cmluZyk7CisgICAgICBwZW5kID0g
cCArIFhTVFJJTkdfTEVOR1RIIChzdHJpbmcpOworCisgICAgICB3aGlsZSAocCA8IHBlbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICBtZW1jcHkgKHAsIG51bGxieXRlLCB6ZXJvbGVuKTsKKyAgICAg
ICAgICBwICs9IHplcm9sZW47CisgICAgICAgIH0KKyAgICB9CisKKyAgaW5pdF9zdHJpbmdfYXNj
aWlfYmVnaW4gKHN0cmluZyk7CisgIGJ1bXBfc3RyaW5nX21vZGlmZiAoc3RyaW5nKTsKKyAgc2xl
ZGdlaGFtbWVyX2NoZWNrX2FzY2lpX2JlZ2luIChzdHJpbmcpOworCisgIHJldHVybiBRbmlsOwor
fQorCiAMCiAvKiBSZXBsYWNlIHRoZSBzdWJzdHJpbmcgb2YgREVTVCBiZWdpbm5pbmcgYXQgU1RB
UlQgYW5kIGVuZGluZyBiZWZvcmUgRU5ECiAgICB3aXRoIHRoZSB0ZXh0IGF0IFNPVVJDRSwgd2hp
Y2ggaXMgRU5EIC0gU1RBUlQgY2hhcmFjdGVycyBsb25nIGFuZApAQCAtODMxNiw2ICs4MzYyLDcg
QEAKICAgREVGU1VCUiAoRm1lcmdlKTsKICAgREVGU1VCUiAoRnNvcnRYKTsKICAgREVGU1VCUiAo
RmZpbGwpOworICBERUZTVUJSIChGY2xlYXJfc3RyaW5nKTsKICAgREVGU1VCUiAoRm1hcGNvbmNh
dCk7CiAgIERFRlNVQlIgKEZtYXBjYXJYKTsKICAgREVGU1VCUiAoRm1hcHZlY3Rvcik7CmRpZmYg
LXIgODcwNGI3OTU3NTg1IC1yIDA1M2VmMDFiNzFhOCBzcmMvdGxzLmMKLS0tIGEvc3JjL3Rscy5j
CVNhdCBBcHIgMTEgMTg6MzQ6MTQgMjAxNSArMDEwMAorKysgYi9zcmMvdGxzLmMJU2F0IEFwciAx
OCAyMzowMDoxNCAyMDE1ICswMTAwCkBAIC0zMDIsNyArMzAyLDcgQEAKIHN0YXRpYyBjaGFyICoK
IG5zc19wazExX3Bhc3N3b3JkIChQSzExU2xvdEluZm8gKnNsb3QsIFBSQm9vbCByZXRyeSwgdm9p
ZCAqIFVOVVNFRCAoYXJnKSkKIHsKLSAgTGlzcF9PYmplY3QgbHNwX3Bhc3N3b3JkLCBhcmdzWzJd
OworICBMaXNwX09iamVjdCBsc3BfcGFzc3dvcmQ7CiAgIEV4dGJ5dGUgKmNfcGFzc3dvcmQsICpu
c3NfcGFzc3dvcmQ7CiAgIGNvbnN0IEV4dGJ5dGUgKnRva2VuX25hbWU7CiAKQEAgLTMxOSwxMCAr
MzE5LDkgQEAKICAgbnNzX3Bhc3N3b3JkID0gUExfc3RyZHVwIChjX3Bhc3N3b3JkKTsKIAogICAv
KiBXaXBlIG91dCB0aGUgcGFzc3dvcmQgb24gdGhlIHN0YWNrIGFuZCBpbiB0aGUgTGlzcCBzdHJp
bmcgKi8KLSAgYXJnc1swXSA9IGxzcF9wYXNzd29yZDsKLSAgYXJnc1sxXSA9IG1ha2VfY2hhciAo
JyonKTsKLSAgRmZpbGwgKDIsIGFyZ3MpOworICBGY2xlYXJfc3RyaW5nIChsc3BfcGFzc3dvcmQp
OwogICBtZW1zZXQgKGNfcGFzc3dvcmQsICcqJywgc3RybGVuIChjX3Bhc3N3b3JkKSk7CisKICAg
cmV0dXJuIG5zc19wYXNzd29yZDsKIH0KIApAQCAtNzI5LDEwICs3MjgsOSBAQAogICBwaW5bbGVu
XSA9ICdcMCc7CiAKICAgLyogV2lwZSBvdXQgdGhlIHBhc3N3b3JkIG9uIHRoZSBzdGFjayBhbmQg
aW4gdGhlIExpc3Agc3RyaW5nICovCi0gIGFyZ3NbMF0gPSBsc3BfcGFzc3dvcmQ7Ci0gIGFyZ3Nb
MV0gPSBtYWtlX2NoYXIgKCcqJyk7Ci0gIEZmaWxsICgyLCBhcmdzKTsKKyAgRmNsZWFyX3N0cmlu
ZyAobHNwX3Bhc3N3b3JkKTsKICAgbWVtc2V0IChjX3Bhc3N3b3JkLCAnKicsIHN0cmxlbiAoY19w
YXNzd29yZCkpOworCiAgIHJldHVybiBHTlVUTFNfRV9TVUNDRVNTOwogfQogCkBAIC0xMDc1LDcg
KzEwNzMsNyBAQAogb3BlbnNzbF9wYXNzd29yZCAoY2hhciAqYnVmLCBpbnQgc2l6ZSwgaW50IFVO
VVNFRCAocndmbGFnKSwKIAkJICB2b2lkICpVTlVTRUQgKHVzZXJkYXRhKSkKIHsKLSAgTGlzcF9P
YmplY3QgbHNwX3Bhc3N3b3JkLCBhcmdzWzJdOworICBMaXNwX09iamVjdCBsc3BfcGFzc3dvcmQ7
CiAgIEV4dGJ5dGUgKmNfcGFzc3dvcmQ7CiAKICAgbHNwX3Bhc3N3b3JkID0KQEAgLTEwODQsMTAg
KzEwODIsOSBAQAogICBzdHJuY3B5IChidWYsIGNfcGFzc3dvcmQsIHNpemUpOwogCiAgIC8qIFdp
cGUgb3V0IHRoZSBwYXNzd29yZCBvbiB0aGUgc3RhY2sgYW5kIGluIHRoZSBMaXNwIHN0cmluZyAq
LwotICBhcmdzWzBdID0gbHNwX3Bhc3N3b3JkOwotICBhcmdzWzFdID0gbWFrZV9jaGFyICgnKicp
OwotICBGZmlsbCAoMiwgYXJncyk7CisgIEZjbGVhcl9zdHJpbmcgKGxzcF9wYXNzd29yZCk7CiAg
IG1lbXNldCAoY19wYXNzd29yZCwgJyonLCBzdHJsZW4gKGNfcGFzc3dvcmQpKTsKKwogICByZXR1
cm4gKGludCkgc3RybGVuIChidWYpOwogfQogCmRpZmYgLXIgODcwNGI3OTU3NTg1IC1yIDA1M2Vm
MDFiNzFhOCB0ZXN0cy9DaGFuZ2VMb2cKLS0tIGEvdGVzdHMvQ2hhbmdlTG9nCVNhdCBBcHIgMTEg
MTg6MzQ6MTQgMjAxNSArMDEwMAorKysgYi90ZXN0cy9DaGFuZ2VMb2cJU2F0IEFwciAxOCAyMzow
MDoxNCAyMDE1ICswMTAwCkBAIC0zLDYgKzMsMTQgQEAKIAkqIGF1dG9tYXRlZC9saXNwLXRlc3Rz
LmVsOgogCUNoZWNrIGZvciBhIGJ1ZyBqdXN0IGZpeGVkIGluIGNsLW1hY3MuZWwuCiAKKzIwMTUt
MDQtMTggIEFpZGFuIEtlaG9lICA8a2Vob2VhQHBhcmhhc2FyZC5uZXQ+CisKKwkqIGF1dG9tYXRl
ZC9saXNwLXRlc3RzLmVsOgorCVRlc3QgIydjbGVhci1zdHJpbmcsIGp1c3QgYWRkZWQuIFVuZm9y
dHVuYXRlbHkgdGhlcmUncyBubyB3YXkgdG8KKwliZSBjZXJ0YWluIGZyb20gTGlzcCB0aGF0IHRo
ZSBvbGQgcGFzc3dvcmQgZGF0YSBoYXMgYmVlbiBlcmFzZWQKKwlhZnRlciByZWFsbG9jOyBpdCBt
YXkgYmUgd29ydGggYWRkaW5nIGEgdGVzdCB0byB0ZXN0cy5jLCBidXQKKwkqd2UnbGwgYmUgcmVh
ZGluZyBtZW1vcnkgd2Ugc2hvdWxkbid0IGJlKiwgc28gdGhhdCBnaXZlcyBtZSBwYXVzZS4KKwog
MjAxNS0wNC0wOCAgQWlkYW4gS2Vob2UgIDxrZWhvZWFAcGFyaGFzYXJkLm5ldD4KIAogCSogYXV0
b21hdGVkL2xpc3AtdGVzdHMuZWw6CmRpZmYgLXIgODcwNGI3OTU3NTg1IC1yIDA1M2VmMDFiNzFh
OCB0ZXN0cy9hdXRvbWF0ZWQvbGlzcC10ZXN0cy5lbAotLS0gYS90ZXN0cy9hdXRvbWF0ZWQvbGlz
cC10ZXN0cy5lbAlTYXQgQXByIDExIDE4OjM0OjE0IDIwMTUgKzAxMDAKKysrIGIvdGVzdHMvYXV0
b21hdGVkL2xpc3AtdGVzdHMuZWwJU2F0IEFwciAxOCAyMzowMDoxNCAyMDE1ICswMTAwCkBAIC0z
Nzk2LDYgKzM3OTYsMzUgQEAKICAgKEFzc2VydCAoZXFsID9ceDA5IChkaWdpdC1jaGFyIDkgbmls
IGJpbmFyeS10YWJsZSkpCiAgICAgICAgICAgImNoZWNraW5nIGBkaWdpdC1jaGFyJyByZWZsZWN0
cyBSQURJWC1UQUJMRSwgOSwgYmFzZSAxMCIpKQogCis7OyBUZXN0ICMnY2xlYXItc3RyaW5nLgor
CisoQ2hlY2stRXJyb3Igd3JvbmctdHlwZS1hcmd1bWVudCAoY2xlYXItc3RyaW5nIFs/XHgwMCA/
XHhmZl0pKQorKENoZWNrLUVycm9yIHdyb25nLXR5cGUtYXJndW1lbnQgKGNsZWFyLXN0cmluZyAn
KD9ceDAwID9ceGZmKSkpCisoQ2hlY2stRXJyb3Igd3JvbmctdHlwZS1hcmd1bWVudCAoY2xlYXIt
c3RyaW5nICMqMTAxMCkpCisoQ2hlY2stRXJyb3Igd3JvbmctbnVtYmVyLW9mLWFyZ3VtZW50cyAo
Y2xlYXItc3RyaW5nICJoZWxsbyIgPyopKQorCisobGV0KiAoKHRlbXBsYXRlIChjb25jYXQKKyAg
ICAgICAgICAgICAgICAgICJ0aGlzIGlzIGEgdGVtcGxhdGUgc3RyaW5nLCAiCisgICAgICAgICAg
ICAgICAgICAoaWYgKHVuaWNvZGUtdG8tY2hhciAjeDA2YWYpCisgICAgICAgICAgICAgICAgICAg
ICAgKGRlY29kZS1jb2Rpbmctc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgIChjb25jYXQK
KyAgICAgICAgICAgICAgICAgICAgICAgICJceGQ4XHhhOFx4ZDlceDg3IFx4ZDlceDg2XHhkOFx4
YjhceGQ4XHhiMSAiCisgICAgICAgICAgICAgICAgICAgICAgICAiXHhkOVx4ODVceGQ5XHg4NiBc
eGQ4XHhhZVx4ZDlceDg4XHhkYVx4YTkgIgorICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZDhc
eGFlXHhkOVx4ODhceGQ4XHhiNFx4ZDlceDg1XHhkOFx4YjJceGQ5XHg4NyAiCisgICAgICAgICAg
ICAgICAgICAgICAgICAiXHhkOFx4YTdceGQ4XHhiM1x4ZDhceGFhIikKKyAgICAgICAgICAgICAg
ICAgICAgICAgJ3V0Zi04KSkpKQorICAgICAgIChsZW5ndGggKGxlbmd0aCB0ZW1wbGF0ZSkpCisg
ICAgICAgKG51bGwgKG1ha2Utc3RyaW5nIGxlbmd0aCA/XHgwMCkpKQorICAoQXNzZXJ0IChudWxs
IChjbGVhci1zdHJpbmcgKGNvcHktc2VxdWVuY2UgdGVtcGxhdGUpKSkpCisgIChBc3NlcnQgKGVx
bCBsZW5ndGggKGxldCAoKHN0cmluZyAoY29weS1zZXF1ZW5jZSB0ZW1wbGF0ZSkpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgKGNsZWFyLXN0cmluZyBzdHJpbmcpCisgICAgICAgICAgICAgICAg
ICAgICAgICAobGVuZ3RoIHN0cmluZykpKSkKKyAgKEFzc2VydCAoZXF1YWwgbnVsbCAobGV0ICgo
c3RyaW5nIChjb3B5LXNlcXVlbmNlIHRlbXBsYXRlKSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAoY2xlYXItc3RyaW5nIHN0cmluZykKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZykp
KSkKKworOzsgTm8gd2F5IHRvIGNoZWNrIGZyb20gTGlzcCB3aGV0aGVyIHRoZSBkYXRhIHdhcyBh
Y3R1YWxseSBudWxsZWQuCisKIDs7IENoZWNrIHRoYXQgYSBidWcgaW4gIydjaGVjay10eXBlIHdp
dGggbm9uLXNldGZhYmxlIFBMQUNFIChzb21ldGhpbmcgbm90CiA7OyBhY3R1YWxseSBzcGVjaWZp
ZWQgYnkgQ29tbW9uIExpc3ApIGhhcyBiZWVuIGZpeGVkLgogKEFzc2VydCAocHJvZzEgdCAoY2hl
Y2stdHlwZSAzMDAgZml4bnVtKSkKCgoKLS0gCuKAmFRyYW1hZG9sIGlzIGZ1cnRoZXIgZmVkIHRv
IGNhdHRsZSBb4oCmXSB3aGVuIHdvcmtpbmcgdGhlbSBb4oCmXSAoYXMgZHJhZnQKYW5pbWFscykg
c28gdGhhdCB0aGUgYW5pbWFscyBkbyBub3QgZ2V0IHRpcmVkIHF1aWNrbHkuIOKApuKAmQoJ4oCU
IEFuZ2V3YW5kdGUgQ2hlbWllLCBTZXB0IDIwMTQsIGRlc2NyaWJpbmcgdGhlIHNvY2lhbCBjb250
ZXh0IG9mCgkoc3ludGhldGljKSB0cmFtYWRvbCBoYXZpbmcgYmVlbiBmb3VuZCBpbiBDYW1lcm9v
biB0cmVlIHJvb3RzLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KWEVtYWNzLVBhdGNoZXMgbWFpbGluZyBsaXN0ClhFbWFjcy1QYXRjaGVzQHhlbWFjcy5v
cmcKaHR0cDovL2xpc3RzLnhlbWFjcy5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW1hY3MtcGF0Y2hl
cwo=