Date: Wed, 9 Mar 2011 17:00:40 GMT From: Oleg Gawriloff <barzog@telecom.by> To: freebsd-ports-bugs@FreeBSD.org Subject: Re: ports/150493: Update for: security/openssh-portable port from 5.2p1 to 5.6p1 Message-ID: <201103091700.p29H0dC4054843@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR ports/150493; it has been noted by GNATS. From: Oleg Gawriloff <barzog@telecom.by> To: bug-followup@FreeBSD.org, magik@roorback.net Cc: Subject: Re: ports/150493: Update for: security/openssh-portable port from 5.2p1 to 5.6p1 Date: Wed, 09 Mar 2011 18:37:54 +0200 This is a multi-part message in MIME format. --------------090100050300010803050402 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Is there any news? Because sftp is also broken in 5.2pl1. [gawriloff@martin /usr/ports]$ sftp gawriloff@falcon-cl4 Connecting to falcon-cl4... Password: sftp> ls -l Bus error: 10 5.3pl1 is working perfectly. Patch attached. -- Signed, Oleg Gawriloff. --------------090100050300010803050402 Content-Type: text/plain; name="openssh-5.3pl1.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="openssh-5.3pl1.diff" ZGlmZiAtTnJ1IC9ob21lL2dhd3JpbG9mZi9scGsvb3BlbnNzaC1wb3J0YWJsZS9NYWtlZmls ZSAvaG9tZS9nYXdyaWxvZmYvb3BlbnNzaC1wb3J0YWJsZS9NYWtlZmlsZQ0KLS0tIC9ob21l L2dhd3JpbG9mZi9scGsvb3BlbnNzaC1wb3J0YWJsZS9NYWtlZmlsZQkyMDEwLTExLTIyIDAx OjQ4OjQ5LjAwMDAwMDAwMCArMDIwMA0KKysrIC9ob21lL2dhd3JpbG9mZi9vcGVuc3NoLXBv cnRhYmxlL01ha2VmaWxlCTIwMTAtMTItMjEgMTE6MzA6MzYuMDAwMDAwMDAwICswMjAwDQpA QCAtNiw3ICs2LDcgQEANCiAjDQogDQogUE9SVE5BTUU9CW9wZW5zc2gNCi1ESVNUVkVSU0lP Tj0JNS4ycDENCitESVNUVkVSU0lPTj0JNS4zcDENCiBQT1JUUkVWSVNJT049CTMNCiBQT1JU RVBPQ0g9CTENCiBDQVRFR09SSUVTPQlzZWN1cml0eSBpcHY2DQpAQCAtMTYxLDcgKzE2MSw3 IEBADQogDQogIyBTZWUgaHR0cDovL2Rldi5pbnZlcnNlcGF0aC5jb20vdHJhYy9vcGVuc3No LWxwaw0KIC5pZiBkZWZpbmVkKFdJVEhfTFBLKQ0KLUVYVFJBX1BBVENIRVMrPQkJJHtGSUxF U0RJUn0vY29udHJpYi1vcGVuc3NoLWxway01LjFwMS0wLjMuMTAucGF0Y2gNCitFWFRSQV9Q QVRDSEVTKz0JCSR7RklMRVNESVJ9L2NvbnRyaWItb3BlbnNzaC1scGstNS4zcDEtMC4zLjEw LnBhdGNoDQogVVNFX09QRU5MREFQPQkJeWVzDQogQ1BQRkxBR1MrPQkJIi1JJHtMT0NBTEJB U0V9L2luY2x1ZGUgLURXSVRIX0xEQVBfUFVCS0VZIg0KIENPTkZJR1VSRV9BUkdTKz0JLS13 aXRoLWxpYnM9Jy1sbGRhcCcgLS13aXRoLWxkZmxhZ3M9Jy1MJHtMT0NBTEJBU0V9L2xpYicg XA0KQEAgLTE3NCwxMiArMTc0LDYgQEANCiBFWFRSQV9QQVRDSEVTKz0JCSR7RklMRVNESVJ9 L2xwaytocG4tc2VydmNvbmYuYy5wYXRjaA0KIC5lbGlmIGRlZmluZWQoV0lUSF9IUE4pICYm ICFkZWZpbmVkKFdJVEhfTFBLKQ0KIEVYVFJBX1BBVENIRVMrPQkJJHtGSUxFU0RJUn0vb3Bl bnNzaC01LjJwMS1ocG4xM3Y2LXNlcnZjb25mLmMuZGlmZg0KLS5lbGlmIGRlZmluZWQoV0lU SF9MUEspICYmICFkZWZpbmVkKFdJVEhfSFBOKQ0KLUVYVFJBX1BBVENIRVMrPQkJJHtGSUxF U0RJUn0vY29udHJpYi1vcGVuc3NoLWxway01LjFwMS0wLjMuMTAtc2VydmNvbmYuYy5wYXRj aA0KLS5lbmRpZg0KLQ0KLS5pZiBkZWZpbmVkKFdJVEhfTFBLKSAmJiAke0FSQ0h9ID09ICJh bWQ2NCINCi1FWFRSQV9QQVRDSEVTKz0JCSR7RklMRVNESVJ9L2NvbnRyaWItb3BlbnNzaC01 LjFfcDEtbHBrLTY0Yml0LnBhdGNoDQogLmVuZGlmDQogDQogIyBTZWUgaHR0cDovL3d3dy5y b3VtZW5wZXRyb3YuaW5mby9vcGVuc3NoLw0KZGlmZiAtTnJ1IC9ob21lL2dhd3JpbG9mZi9s cGsvb3BlbnNzaC1wb3J0YWJsZS9kaXN0aW5mbyAvaG9tZS9nYXdyaWxvZmYvb3BlbnNzaC1w b3J0YWJsZS9kaXN0aW5mbw0KLS0tIC9ob21lL2dhd3JpbG9mZi9scGsvb3BlbnNzaC1wb3J0 YWJsZS9kaXN0aW5mbwkyMDA5LTA5LTE4IDE3OjA1OjUyLjAwMDAwMDAwMCArMDMwMA0KKysr IC9ob21lL2dhd3JpbG9mZi9vcGVuc3NoLXBvcnRhYmxlL2Rpc3RpbmZvCTIwMTAtMTItMjEg MTE6MTY6MTcuMDAwMDAwMDAwICswMjAwDQpAQCAtMSw2ICsxLDYgQEANCi1NRDUgKG9wZW5z c2gtNS4ycDEudGFyLmd6KSA9IGFkYTc5YzczMjhhODU1MWJkZjU1Yzk1ZTYzMWU3ZGFkDQot U0hBMjU2IChvcGVuc3NoLTUuMnAxLnRhci5neikgPSA0MDIzNzEwYzM3ZDBiM2Q3OWU2Mjk5 Y2I3OWI2ZGUyYTMxZGI3ZDU4MWZlNTllNzc1YTUzNTE3ODQwMzRlY2FlDQotU0laRSAob3Bl bnNzaC01LjJwMS50YXIuZ3opID0gMTAxNjYxMg0KK01ENSAob3BlbnNzaC01LjNwMS50YXIu Z3opID0gMTM1NjNkYmY2MWYzNmNhOWExZTQyNTQyNjAxMzEwNDENCitTSEEyNTYgKG9wZW5z c2gtNS4zcDEudGFyLmd6KSA9IGQwYzkxNzQ2Mjg5Njk3NDQ4MGIxNDQ1NGE4ZTFjYjhiODA5 MjkxZjY3ZTViOTc3OWM5YjRkYzQxNTZjNWVmMTINCitTSVpFIChvcGVuc3NoLTUuM3AxLnRh ci5neikgPSAxMDI3MTMwDQogTUQ1IChvcGVuc3NoLTUuMnAxK3g1MDktNi4yLmRpZmYuZ3op ID0gOGRiYmZiNzQzMjI2ODY0ZjZiYjQ5YjU2ZTc3Nzc2ZDkNCiBTSEEyNTYgKG9wZW5zc2gt NS4ycDEreDUwOS02LjIuZGlmZi5neikgPSA3MmNmYjFlMjMyYjZhZTBhOWRmNmU4NTM5YTlm NmI1M2RiN2MwYTIxNDFjZjJlNGRkNjViNDA3NzQ4ZmE5ZjM0DQogU0laRSAob3BlbnNzaC01 LjJwMSt4NTA5LTYuMi5kaWZmLmd6KSA9IDE1MzAxMA0KZGlmZiAtTnJ1IC9ob21lL2dhd3Jp bG9mZi9scGsvb3BlbnNzaC1wb3J0YWJsZS9maWxlcy9jb250cmliLW9wZW5zc2gtNS4xX3Ax LWxway02NGJpdC5wYXRjaCAvaG9tZS9nYXdyaWxvZmYvb3BlbnNzaC1wb3J0YWJsZS9maWxl cy9jb250cmliLW9wZW5zc2gtNS4xX3AxLWxway02NGJpdC5wYXRjaA0KLS0tIC9ob21lL2dh d3JpbG9mZi9scGsvb3BlbnNzaC1wb3J0YWJsZS9maWxlcy9jb250cmliLW9wZW5zc2gtNS4x X3AxLWxway02NGJpdC5wYXRjaAkyMDA5LTA2LTIxIDIzOjM2OjE1LjAwMDAwMDAwMCArMDMw MA0KKysrIC9ob21lL2dhd3JpbG9mZi9vcGVuc3NoLXBvcnRhYmxlL2ZpbGVzL2NvbnRyaWIt b3BlbnNzaC01LjFfcDEtbHBrLTY0Yml0LnBhdGNoCTE5NzAtMDEtMDEgMDM6MDA6MDAuMDAw MDAwMDAwICswMzAwDQpAQCAtMSw0NCArMCwwIEBADQotZGlmZiAtTnVhciAtLWV4Y2x1ZGUg JyoucmVqJyBzZXJ2Y29uZi5jLm9yaWcgc2VydmNvbmYuYw0KLS0tLSBzZXJ2Y29uZi5jLm9y aWcJMjAwOC0wOC0yMyAxNTowMjo0Ny4wMDAwMDAwMDAgLTA3MDANCi0rKysgc2VydmNvbmYu YwkyMDA4LTA4LTIzIDE1OjA0OjIxLjAwMDAwMDAwMCAtMDcwMA0KLUBAIC03MDEsNiArNzAx LDcgQEANCi0gCWludCBjbWRsaW5lID0gMCwgKmludHB0ciwgdmFsdWUsIG47DQotIAlTeXNs b2dGYWNpbGl0eSAqbG9nX2ZhY2lsaXR5X3B0cjsNCi0gCUxvZ0xldmVsICpsb2dfbGV2ZWxf cHRyOw0KLSsgCXVuc2lnbmVkIGxvbmcgbHZhbHVlLCAqbG9uZ3B0cjsNCi0gCVNlcnZlck9w Q29kZXMgb3Bjb2RlOw0KLSAJdV9zaG9ydCBwb3J0Ow0KLSAJdV9pbnQgaSwgZmxhZ3MgPSAw Ow0KLUBAIC03MTUsNiArNzE2LDcgQEANCi0gCWlmICghYXJnIHx8ICEqYXJnIHx8ICphcmcg PT0gJyMnKQ0KLSAJCXJldHVybiAwOw0KLSAJaW50cHRyID0gTlVMTDsNCi0rCWxvbmdwdHIg PSBOVUxMOw0KLSAJY2hhcnB0ciA9IE5VTEw7DQotIAlvcGNvZGUgPSBwYXJzZV90b2tlbihh cmcsIGZpbGVuYW1lLCBsaW5lbnVtLCAmZmxhZ3MpOw0KLSANCi1AQCAtMTQ0OSwxMSArMTQ1 MSwyMCBAQA0KLSAJCQkqaW50cHRyID0gdmFsdWU7DQotIAkJYnJlYWs7DQotIAljYXNlIHNC aW5kVGltZW91dDoNCi0tCQlpbnRwdHIgPSAoaW50ICopICZvcHRpb25zLT5scGsuYl90aW1l b3V0LnR2X3NlYzsNCi0tCQlnb3RvIHBhcnNlX2ludDsNCi0rCQlsb25ncHRyID0gKHVuc2ln bmVkIGxvbmcgKikgJm9wdGlvbnMtPmxway5iX3RpbWVvdXQudHZfc2VjOw0KLStwYXJzZV91 bG9uZzoNCi0rCQlhcmcgPSBzdHJkZWxpbSgmY3ApOw0KLSsJCWlmICghYXJnIHx8ICphcmcg PT0gJ1wwJykNCi0rCQkJZmF0YWwoIiVzIGxpbmUgJWQ6IG1pc3NpbmcgaW50ZWdlciB2YWx1 ZS4iLA0KLSsJCQkgICAgZmlsZW5hbWUsIGxpbmVudW0pOw0KLSsJCWx2YWx1ZSA9IGF0b2wo YXJnKTsNCi0rCQlpZiAoKmFjdGl2ZXAgJiYgKmxvbmdwdHIgPT0gLTEpDQotKwkJCSpsb25n cHRyID0gbHZhbHVlOw0KLSsJCWJyZWFrOw0KLSsNCi0gCWNhc2Ugc1NlYXJjaFRpbWVvdXQ6 DQotLQkJaW50cHRyID0gKGludCAqKSAmb3B0aW9ucy0+bHBrLnNfdGltZW91dC50dl9zZWM7 DQotLQkJZ290byBwYXJzZV9pbnQ7DQotKwkJbG9uZ3B0ciA9ICh1bnNpZ25lZCBsb25nICop ICZvcHRpb25zLT5scGsuc190aW1lb3V0LnR2X3NlYzsNCi0rCQlnb3RvIHBhcnNlX3Vsb25n Ow0KLSAJCWJyZWFrOw0KLSAJY2FzZSBzTGRhcENvbmY6DQotIAkJYXJnID0gY3A7DQpkaWZm IC1OcnUgL2hvbWUvZ2F3cmlsb2ZmL2xway9vcGVuc3NoLXBvcnRhYmxlL2ZpbGVzL2NvbnRy aWItb3BlbnNzaC1scGstNS4xcDEtMC4zLjEwLXNlcnZjb25mLmMucGF0Y2ggL2hvbWUvZ2F3 cmlsb2ZmL29wZW5zc2gtcG9ydGFibGUvZmlsZXMvY29udHJpYi1vcGVuc3NoLWxway01LjFw MS0wLjMuMTAtc2VydmNvbmYuYy5wYXRjaA0KLS0tIC9ob21lL2dhd3JpbG9mZi9scGsvb3Bl bnNzaC1wb3J0YWJsZS9maWxlcy9jb250cmliLW9wZW5zc2gtbHBrLTUuMXAxLTAuMy4xMC1z ZXJ2Y29uZi5jLnBhdGNoCTIwMDktMDYtMjEgMjM6MzY6MTUuMDAwMDAwMDAwICswMzAwDQor KysgL2hvbWUvZ2F3cmlsb2ZmL29wZW5zc2gtcG9ydGFibGUvZmlsZXMvY29udHJpYi1vcGVu c3NoLWxway01LjFwMS0wLjMuMTAtc2VydmNvbmYuYy5wYXRjaAkxOTcwLTAxLTAxIDAzOjAw OjAwLjAwMDAwMDAwMCArMDMwMA0KQEAgLTEsMjEzICswLDAgQEANCi0tLS0gc2VydmNvbmYu Yy5vcmlnCTIwMDktMDUtMjYgMTU6MTM6MzIuMDAwMDAwMDAwICswNDAwDQotKysrIHNlcnZj b25mLmMJMjAwOS0wNS0yNiAxNToyNDozOS4wMDAwMDAwMDAgKzA0MDANCi1AQCAtNDIsNiAr NDIsMTAgQEANCi0gI2luY2x1ZGUgImNoYW5uZWxzLmgiDQotICNpbmNsdWRlICJncm91cGFj Y2Vzcy5oIg0KLSANCi0rI2lmZGVmIFdJVEhfTERBUF9QVUJLRVkNCi0rI2luY2x1ZGUgImxk YXBhdXRoLmgiDQotKyNlbmRpZg0KLSsNCi0gc3RhdGljIHZvaWQgYWRkX2xpc3Rlbl9hZGRy KFNlcnZlck9wdGlvbnMgKiwgY2hhciAqLCBpbnQpOw0KLSBzdGF0aWMgdm9pZCBhZGRfb25l X2xpc3Rlbl9hZGRyKFNlcnZlck9wdGlvbnMgKiwgY2hhciAqLCBpbnQpOw0KLSANCi1AQCAt MTI4LDYgKzEzMiwyNCBAQA0KLSAJb3B0aW9ucy0+YWRtX2ZvcmNlZF9jb21tYW5kID0gTlVM TDsNCi0gCW9wdGlvbnMtPmNocm9vdF9kaXJlY3RvcnkgPSBOVUxMOw0KLSAJb3B0aW9ucy0+ emVyb19rbm93bGVkZ2VfcGFzc3dvcmRfYXV0aGVudGljYXRpb24gPSAtMTsNCi0rI2lmZGVm IFdJVEhfTERBUF9QVUJLRVkNCi0rIAkvKiBYWFggZGlydHkgKi8NCi0rIAlvcHRpb25zLT5s cGsubGQgPSBOVUxMOw0KLSsgCW9wdGlvbnMtPmxway5vbiA9IC0xOw0KLSsgCW9wdGlvbnMt Pmxway5zZXJ2ZXJzID0gTlVMTDsNCi0rIAlvcHRpb25zLT5scGsudV9iYXNlZG4gPSBOVUxM Ow0KLSsgCW9wdGlvbnMtPmxway5nX2Jhc2VkbiA9IE5VTEw7DQotKyAJb3B0aW9ucy0+bHBr LmJpbmRkbiA9IE5VTEw7DQotKyAJb3B0aW9ucy0+bHBrLmJpbmRwdyA9IE5VTEw7DQotKyAJ b3B0aW9ucy0+bHBrLnNncm91cCA9IE5VTEw7DQotKyAJb3B0aW9ucy0+bHBrLmZpbHRlciA9 IE5VTEw7DQotKyAJb3B0aW9ucy0+bHBrLmZncm91cCA9IE5VTEw7DQotKyAJb3B0aW9ucy0+ bHBrLmxfY29uZiA9IE5VTEw7DQotKyAJb3B0aW9ucy0+bHBrLnRscyA9IC0xOw0KLSsgCW9w dGlvbnMtPmxway5iX3RpbWVvdXQudHZfc2VjID0gLTE7DQotKyAJb3B0aW9ucy0+bHBrLnNf dGltZW91dC50dl9zZWMgPSAtMTsNCi0rIAlvcHRpb25zLT5scGsuZmxhZ3MgPSBGTEFHX0VN UFRZOw0KLSsjZW5kaWYNCi0gfQ0KLSANCi0gdm9pZA0KLUBAIC0yNjUsNiArMjg3LDMyIEBA DQotIAkJb3B0aW9ucy0+cGVybWl0X3R1biA9IFNTSF9UVU5NT0RFX05POw0KLSAJaWYgKG9w dGlvbnMtPnplcm9fa25vd2xlZGdlX3Bhc3N3b3JkX2F1dGhlbnRpY2F0aW9uID09IC0xKQ0K LSAJCW9wdGlvbnMtPnplcm9fa25vd2xlZGdlX3Bhc3N3b3JkX2F1dGhlbnRpY2F0aW9uID0g MDsNCi0rI2lmZGVmIFdJVEhfTERBUF9QVUJLRVkNCi0rCWlmIChvcHRpb25zLT5scGsub24g PT0gLTEpDQotKwkgICAgb3B0aW9ucy0+bHBrLm9uID0gX0RFRkFVTFRfTFBLX09OOw0KLSsJ aWYgKG9wdGlvbnMtPmxway5zZXJ2ZXJzID09IE5VTEwpDQotKwkgICAgb3B0aW9ucy0+bHBr LnNlcnZlcnMgPSBfREVGQVVMVF9MUEtfU0VSVkVSUzsNCi0rCWlmIChvcHRpb25zLT5scGsu dV9iYXNlZG4gPT0gTlVMTCkNCi0rCSAgICBvcHRpb25zLT5scGsudV9iYXNlZG4gPSBfREVG QVVMVF9MUEtfVUROOw0KLSsJaWYgKG9wdGlvbnMtPmxway5nX2Jhc2VkbiA9PSBOVUxMKQ0K LSsJICAgIG9wdGlvbnMtPmxway5nX2Jhc2VkbiA9IF9ERUZBVUxUX0xQS19HRE47DQotKwlp ZiAob3B0aW9ucy0+bHBrLmJpbmRkbiA9PSBOVUxMKQ0KLSsJICAgIG9wdGlvbnMtPmxway5i aW5kZG4gPSBfREVGQVVMVF9MUEtfQklOREROOw0KLSsJaWYgKG9wdGlvbnMtPmxway5iaW5k cHcgPT0gTlVMTCkNCi0rCSAgICBvcHRpb25zLT5scGsuYmluZHB3ID0gX0RFRkFVTFRfTFBL X0JJTkRQVzsNCi0rCWlmIChvcHRpb25zLT5scGsuc2dyb3VwID09IE5VTEwpDQotKwkgICAg b3B0aW9ucy0+bHBrLnNncm91cCA9IF9ERUZBVUxUX0xQS19TR1JPVVA7DQotKwlpZiAob3B0 aW9ucy0+bHBrLmZpbHRlciA9PSBOVUxMKQ0KLSsJICAgIG9wdGlvbnMtPmxway5maWx0ZXIg PSBfREVGQVVMVF9MUEtfRklMVEVSOw0KLSsJaWYgKG9wdGlvbnMtPmxway50bHMgPT0gLTEp DQotKwkgICAgb3B0aW9ucy0+bHBrLnRscyA9IF9ERUZBVUxUX0xQS19UTFM7DQotKwlpZiAo b3B0aW9ucy0+bHBrLmJfdGltZW91dC50dl9zZWMgPT0gLTEpDQotKwkgICAgb3B0aW9ucy0+ bHBrLmJfdGltZW91dC50dl9zZWMgPSBfREVGQVVMVF9MUEtfQlRJTUVPVVQ7DQotKwlpZiAo b3B0aW9ucy0+bHBrLnNfdGltZW91dC50dl9zZWMgPT0gLTEpDQotKwkgICAgb3B0aW9ucy0+ bHBrLnNfdGltZW91dC50dl9zZWMgPSBfREVGQVVMVF9MUEtfU1RJTUVPVVQ7DQotKwlpZiAo b3B0aW9ucy0+bHBrLmxfY29uZiA9PSBOVUxMKQ0KLSsJICAgIG9wdGlvbnMtPmxway5sX2Nv bmYgPSBfREVGQVVMVF9MUEtfTERQOw0KLSsjZW5kaWYNCi0gDQotIAkvKiBUdXJuIHByaXZp bGVnZSBzZXBhcmF0aW9uIG9uIGJ5IGRlZmF1bHQgKi8NCi0gCWlmICh1c2VfcHJpdnNlcCA9 PSAtMSkNCi1AQCAtMzExLDYgKzM1OSwxMiBAQA0KLSAJc1VzZVByaXZpbGVnZVNlcGFyYXRp b24sIHNBbGxvd0FnZW50Rm9yd2FyZGluZywNCi0gCXNaZXJvS25vd2xlZGdlUGFzc3dvcmRB dXRoZW50aWNhdGlvbiwNCi0gCXNEZXByZWNhdGVkLCBzVW5zdXBwb3J0ZWQNCi0rI2lmZGVm IFdJVEhfTERBUF9QVUJLRVkNCi0rCSxzTGRhcFB1YmxpY2tleSwgc0xkYXBTZXJ2ZXJzLCBz TGRhcFVzZXJETg0KLSsJLHNMZGFwR3JvdXBETiwgc0JpbmRETiwgc0JpbmRQdywgc015R3Jv dXANCi0rCSxzTGRhcEZpbHRlciwgc0ZvcmNlVExTLCBzQmluZFRpbWVvdXQNCi0rCSxzU2Vh cmNoVGltZW91dCwgc0xkYXBDb25mDQotKyNlbmRpZg0KLSB9IFNlcnZlck9wQ29kZXM7DQot IA0KLSAjZGVmaW5lIFNTSENGR19HTE9CQUwJMHgwMQkvKiBhbGxvd2VkIGluIG1haW4gc2Vj dGlvbiBvZiBzc2hkX2NvbmZpZyAqLw0KLUBAIC00MjEsNiArNDc1LDIwIEBADQotIAl7ICJj bGllbnRhbGl2ZWNvdW50bWF4Iiwgc0NsaWVudEFsaXZlQ291bnRNYXgsIFNTSENGR19HTE9C QUwgfSwNCi0gCXsgImF1dGhvcml6ZWRrZXlzZmlsZSIsIHNBdXRob3JpemVkS2V5c0ZpbGUs IFNTSENGR19HTE9CQUwgfSwNCi0gCXsgImF1dGhvcml6ZWRrZXlzZmlsZTIiLCBzQXV0aG9y aXplZEtleXNGaWxlMiwgU1NIQ0ZHX0dMT0JBTCB9LA0KLSsjaWZkZWYgV0lUSF9MREFQX1BV QktFWQ0KLSsJeyBfREVGQVVMVF9MUEtfVE9LRU4sIHNMZGFwUHVibGlja2V5LCBTU0hDRkdf R0xPQkFMIH0sDQotKwl7IF9ERUZBVUxUX1NSVl9UT0tFTiwgc0xkYXBTZXJ2ZXJzLCBTU0hD RkdfR0xPQkFMIH0sDQotKwl7IF9ERUZBVUxUX1VTUl9UT0tFTiwgc0xkYXBVc2VyRE4sIFNT SENGR19HTE9CQUwgfSwNCi0rCXsgX0RFRkFVTFRfR1JQX1RPS0VOLCBzTGRhcEdyb3VwRE4s IFNTSENGR19HTE9CQUwgfSwNCi0rCXsgX0RFRkFVTFRfQkROX1RPS0VOLCBzQmluZEROLCBT U0hDRkdfR0xPQkFMIH0sDQotKwl7IF9ERUZBVUxUX0JQV19UT0tFTiwgc0JpbmRQdywgU1NI Q0ZHX0dMT0JBTCB9LA0KLSsJeyBfREVGQVVMVF9NWUdfVE9LRU4sIHNNeUdyb3VwLCBTU0hD RkdfR0xPQkFMIH0sDQotKwl7IF9ERUZBVUxUX0ZJTF9UT0tFTiwgc0xkYXBGaWx0ZXIsIFNT SENGR19HTE9CQUwgfSwNCi0rCXsgX0RFRkFVTFRfVExTX1RPS0VOLCBzRm9yY2VUTFMsIFNT SENGR19HTE9CQUwgfSwNCi0rCXsgX0RFRkFVTFRfQlRJX1RPS0VOLCBzQmluZFRpbWVvdXQs IFNTSENGR19HTE9CQUwgfSwNCi0rCXsgX0RFRkFVTFRfU1RJX1RPS0VOLCBzU2VhcmNoVGlt ZW91dCwgU1NIQ0ZHX0dMT0JBTCB9LA0KLSsJeyBfREVGQVVMVF9MRFBfVE9LRU4sIHNMZGFw Q29uZiwgU1NIQ0ZHX0dMT0JBTCB9LA0KLSsjZW5kaWYNCi0gCXsgInVzZXByaXZpbGVnZXNl cGFyYXRpb24iLCBzVXNlUHJpdmlsZWdlU2VwYXJhdGlvbiwgU1NIQ0ZHX0dMT0JBTCB9LA0K LSAJeyAiYWNjZXB0ZW52Iiwgc0FjY2VwdEVudiwgU1NIQ0ZHX0dMT0JBTCB9LA0KLSAJeyAi cGVybWl0dHVubmVsIiwgc1Blcm1pdFR1bm5lbCwgU1NIQ0ZHX0dMT0JBTCB9LA0KLUBAIC0x MzExLDYgKzEzNzksMTA3IEBADQotIAkJd2hpbGUgKGFyZykNCi0gCQkgICAgYXJnID0gc3Ry ZGVsaW0oJmNwKTsNCi0gCQlicmVhazsNCi0rI2lmZGVmIFdJVEhfTERBUF9QVUJLRVkNCi0r CWNhc2Ugc0xkYXBQdWJsaWNrZXk6DQotKwkJaW50cHRyID0gJm9wdGlvbnMtPmxway5vbjsN Ci0rCQlnb3RvIHBhcnNlX2ZsYWc7DQotKwljYXNlIHNMZGFwU2VydmVyczoNCi0rCQkvKiBh cmcgPSBzdHJkZWxpbSgmY3ApOyAqLw0KLSsJCXAgPSBsaW5lOw0KLSsJCXdoaWxlKCpwKysp Ow0KLSsJCWFyZyA9IHA7DQotKwkJaWYgKCFhcmcgfHwgKmFyZyA9PSAnXDAnKQ0KLSsJCSAg ICBmYXRhbCgiJXMgbGluZSAlZDogbWlzc2luZyBsZGFwIHNlcnZlciIsZmlsZW5hbWUsbGlu ZW51bSk7DQotKwkJYXJnW3N0cmxlbihhcmcpXSA9ICdcMCc7DQotKwkJaWYgKChvcHRpb25z LT5scGsuc2VydmVycyA9IGxkYXBfcGFyc2Vfc2VydmVycyhhcmcpKSA9PSBOVUxMKQ0KLSsJ CSAgICBmYXRhbCgiJXMgbGluZSAlZDogZXJyb3IgaW4gbGRhcCBzZXJ2ZXJzIiwgZmlsZW5h bWUsIGxpbmVudW0pOw0KLSsJCW1lbXNldChhcmcsMCxzdHJsZW4oYXJnKSk7DQotKwkJYnJl YWs7DQotKwljYXNlIHNMZGFwVXNlckROOg0KLSsJCWFyZyA9IGNwOw0KLSsJCWlmICghYXJn IHx8ICphcmcgPT0gJ1wwJykNCi0rCQkgICAgZmF0YWwoIiVzIGxpbmUgJWQ6IG1pc3Npbmcg bGRhcCBzZXJ2ZXIiLGZpbGVuYW1lLGxpbmVudW0pOw0KLSsJCWFyZ1tzdHJsZW4oYXJnKV0g PSAnXDAnOw0KLSsJCW9wdGlvbnMtPmxway51X2Jhc2VkbiA9IHhzdHJkdXAoYXJnKTsNCi0r CQltZW1zZXQoYXJnLDAsc3RybGVuKGFyZykpOw0KLSsJCWJyZWFrOw0KLSsJY2FzZSBzTGRh cEdyb3VwRE46DQotKwkJYXJnID0gY3A7DQotKwkJaWYgKCFhcmcgfHwgKmFyZyA9PSAnXDAn KQ0KLSsJCSAgICBmYXRhbCgiJXMgbGluZSAlZDogbWlzc2luZyBsZGFwIHNlcnZlciIsZmls ZW5hbWUsbGluZW51bSk7DQotKwkJYXJnW3N0cmxlbihhcmcpXSA9ICdcMCc7DQotKwkJb3B0 aW9ucy0+bHBrLmdfYmFzZWRuID0geHN0cmR1cChhcmcpOw0KLSsJCW1lbXNldChhcmcsMCxz dHJsZW4oYXJnKSk7DQotKwkJYnJlYWs7DQotKwljYXNlIHNCaW5kRE46DQotKwkJYXJnID0g Y3A7DQotKwkJaWYgKCFhcmcgfHwgKmFyZyA9PSAnXDAnKQ0KLSsJCSAgICBmYXRhbCgiJXMg bGluZSAlZDogbWlzc2luZyBiaW5kZG4iLGZpbGVuYW1lLGxpbmVudW0pOw0KLSsJCWFyZ1tz dHJsZW4oYXJnKV0gPSAnXDAnOw0KLSsJCW9wdGlvbnMtPmxway5iaW5kZG4gPSB4c3RyZHVw KGFyZyk7DQotKwkJbWVtc2V0KGFyZywwLHN0cmxlbihhcmcpKTsNCi0rCQlicmVhazsNCi0r CWNhc2Ugc0JpbmRQdzoNCi0rCQlhcmcgPSBjcDsNCi0rCQlpZiAoIWFyZyB8fCAqYXJnID09 ICdcMCcpDQotKwkJICAgIGZhdGFsKCIlcyBsaW5lICVkOiBtaXNzaW5nIGJpbmRwdyIsZmls ZW5hbWUsbGluZW51bSk7DQotKwkJYXJnW3N0cmxlbihhcmcpXSA9ICdcMCc7DQotKwkJb3B0 aW9ucy0+bHBrLmJpbmRwdyA9IHhzdHJkdXAoYXJnKTsNCi0rCQltZW1zZXQoYXJnLDAsc3Ry bGVuKGFyZykpOw0KLSsJCWJyZWFrOw0KLSsJY2FzZSBzTXlHcm91cDoNCi0rCQlhcmcgPSBj cDsNCi0rCQlpZiAoIWFyZyB8fCAqYXJnID09ICdcMCcpDQotKwkJICAgIGZhdGFsKCIlcyBs aW5lICVkOiBtaXNzaW5nIGdyb3VwbmFtZSIsZmlsZW5hbWUsIGxpbmVudW0pOw0KLSsJCWFy Z1tzdHJsZW4oYXJnKV0gPSAnXDAnOw0KLSsJCW9wdGlvbnMtPmxway5zZ3JvdXAgPSB4c3Ry ZHVwKGFyZyk7DQotKwkJaWYgKG9wdGlvbnMtPmxway5zZ3JvdXApDQotKwkJICAgIG9wdGlv bnMtPmxway5mZ3JvdXAgPSBsZGFwX3BhcnNlX2dyb3VwcyhvcHRpb25zLT5scGsuc2dyb3Vw KTsNCi0rCQltZW1zZXQoYXJnLDAsc3RybGVuKGFyZykpOw0KLSsJCWJyZWFrOw0KLSsJY2Fz ZSBzTGRhcEZpbHRlcjoNCi0rCQlhcmcgPSBjcDsNCi0rCQlpZiAoIWFyZyB8fCAqYXJnID09 ICdcMCcpDQotKwkJICAgIGZhdGFsKCIlcyBsaW5lICVkOiBtaXNzaW5nIGZpbHRlciIsZmls ZW5hbWUsIGxpbmVudW0pOw0KLSsJCWFyZ1tzdHJsZW4oYXJnKV0gPSAnXDAnOw0KLSsJCW9w dGlvbnMtPmxway5maWx0ZXIgPSB4c3RyZHVwKGFyZyk7DQotKwkJbWVtc2V0KGFyZywwLHN0 cmxlbihhcmcpKTsNCi0rCQlicmVhazsNCi0rCWNhc2Ugc0ZvcmNlVExTOg0KLSsJCWludHB0 ciA9ICZvcHRpb25zLT5scGsudGxzOw0KLSsJCWFyZyA9IHN0cmRlbGltKCZjcCk7DQotKwkJ aWYgKCFhcmcgfHwgKmFyZyA9PSAnXDAnKQ0KLSsJCQlmYXRhbCgiJXMgbGluZSAlZDogbWlz c2luZyB5ZXMvbm8gYXJndW1lbnQuIiwNCi0rCQkJICAgIGZpbGVuYW1lLCBsaW5lbnVtKTsN Ci0rCQl2YWx1ZSA9IDA7CS8qIHNpbGVuY2UgY29tcGlsZXIgKi8NCi0rCQlpZiAoc3RyY21w KGFyZywgInllcyIpID09IDApDQotKwkJCXZhbHVlID0gMTsNCi0rCQllbHNlIGlmIChzdHJj bXAoYXJnLCAibm8iKSA9PSAwKQ0KLSsJCQl2YWx1ZSA9IDA7DQotKwkJZWxzZSBpZiAoc3Ry Y21wKGFyZywgInRyeSIpID09IDApDQotKwkJCXZhbHVlID0gLTE7DQotKwkJZWxzZQ0KLSsJ CQlmYXRhbCgiJXMgbGluZSAlZDogQmFkIHllcy9ubyBhcmd1bWVudDogJXMiLA0KLSsJCQkJ ZmlsZW5hbWUsIGxpbmVudW0sIGFyZyk7DQotKwkJaWYgKCppbnRwdHIgPT0gLTEpDQotKwkJ CSppbnRwdHIgPSB2YWx1ZTsNCi0rCQlicmVhazsNCi0rCWNhc2Ugc0JpbmRUaW1lb3V0Og0K LSsJCWludHB0ciA9IChpbnQgKikgJm9wdGlvbnMtPmxway5iX3RpbWVvdXQudHZfc2VjOw0K LSsJCWdvdG8gcGFyc2VfaW50Ow0KLSsJY2FzZSBzU2VhcmNoVGltZW91dDoNCi0rCQlpbnRw dHIgPSAoaW50ICopICZvcHRpb25zLT5scGsuc190aW1lb3V0LnR2X3NlYzsNCi0rCQlnb3Rv IHBhcnNlX2ludDsNCi0rCQlicmVhazsNCi0rCWNhc2Ugc0xkYXBDb25mOg0KLSsJCWFyZyA9 IGNwOw0KLSsJCWlmICghYXJnIHx8ICphcmcgPT0gJ1wwJykNCi0rCQkgICAgZmF0YWwoIiVz IGxpbmUgJWQ6IG1pc3NpbmcgTHBrTGRhcENvbmYiLCBmaWxlbmFtZSwgbGluZW51bSk7DQot KwkJYXJnW3N0cmxlbihhcmcpXSA9ICdcMCc7DQotKwkJb3B0aW9ucy0+bHBrLmxfY29uZiA9 IHhzdHJkdXAoYXJnKTsNCi0rCQltZW1zZXQoYXJnLCAwLCBzdHJsZW4oYXJnKSk7DQotKwkJ YnJlYWs7DQotKyNlbmRpZg0KLSANCi0gCWRlZmF1bHQ6DQotIAkJZmF0YWwoIiVzIGxpbmUg JWQ6IE1pc3NpbmcgaGFuZGxlciBmb3Igb3Bjb2RlICVzICglZCkiLA0KZGlmZiAtTnJ1IC9o b21lL2dhd3JpbG9mZi9scGsvb3BlbnNzaC1wb3J0YWJsZS9maWxlcy9jb250cmliLW9wZW5z c2gtbHBrLTUuMXAxLTAuMy4xMC5wYXRjaCAvaG9tZS9nYXdyaWxvZmYvb3BlbnNzaC1wb3J0 YWJsZS9maWxlcy9jb250cmliLW9wZW5zc2gtbHBrLTUuMXAxLTAuMy4xMC5wYXRjaA0KLS0t IC9ob21lL2dhd3JpbG9mZi9scGsvb3BlbnNzaC1wb3J0YWJsZS9maWxlcy9jb250cmliLW9w ZW5zc2gtbHBrLTUuMXAxLTAuMy4xMC5wYXRjaAkyMDA5LTA2LTIxIDIzOjM2OjE1LjAwMDAw MDAwMCArMDMwMA0KKysrIC9ob21lL2dhd3JpbG9mZi9vcGVuc3NoLXBvcnRhYmxlL2ZpbGVz L2NvbnRyaWItb3BlbnNzaC1scGstNS4xcDEtMC4zLjEwLnBhdGNoCTE5NzAtMDEtMDEgMDM6 MDA6MDAuMDAwMDAwMDAwICswMzAwDQpAQCAtMSwxNjgyICswLDAgQEANCi1UaGlzIGlzIGEg Zm9yd2FyZC1wb3J0IG9mIHRoZSBPcGVuU1NIIExQSyBzdXBwb3J0IHBhdGNoLg0KLQ0KLUl0 IGFkZHMgc3VwcG9ydCBmb3Igc3RvcmluZyBPcGVuU1NIIHB1YmxpYyBrZXlzIGluIExEQVAu IEl0IGFsc28gc3VwcG9ydHMNCi1ncm91cGluZyBvZiBtYWNoaW5lcyBpbiB0aGUgTERBUCBk YXRhIHRvIGxpbWl0IHVzZXJzIHRvIHNwZWNpZmljIG1hY2hpbmVzLg0KLQ0KLVRoZSBsYXRl c3QgaG9tZXBhZ2UgZm9yIHRoZSBMUEsgcHJvamVjdCBpczoNCi1odHRwOi8vY29kZS5nb29n bGUuY29tL3Avb3BlbnNzaC1scGsvDQotDQotVGhlIDAuMy4xMCB2ZXJzaW9uIG9mIHRoZSBw YXRjaCBpbmNsdWRlcyBhIGZpeCBmb3IgNjQtYml0IHBsYXRmb3JtcywgYXMNCi1kaXNjb3Zl cmVkIGJ5IEdlbnRvbywgd2hlcmUgdGhlIGJpbmQgdGltZW91dCBhbmQgc2VhcmNoIHRpbWVv dXQgdmFsdWVzIHdlcmUgbm90DQotYmVpbmcgcGFyc2VkIGNvcnJlY3RseTogaHR0cDovL2J1 Z3MuZ2VudG9vLm9yZy8yMTAxMTANCi0NCi1Gb3J3YXJkLXBvcnRlZC1mcm9tOiBvcGVuc3No LWxway01LjFwMS0wLjMuOS5wYXRjaA0KLVNpZ25lZC1vZmYtYnk6IFJvYmluIEguIEpvaG5z b24gPHJvYmJhdDJAZ2VudG9vLm9yZz4NCi0NCi1kaWZmIC1OdWFyIC0tZXhjbHVkZSAnKi5v cmlnJyAtLWV4Y2x1ZGUgJyoucmVqJyBhdXRoMi1wdWJrZXkuYyBhdXRoMi1wdWJrZXkuYw0K LS0tLSBhdXRoMi1wdWJrZXkuYwkyMDA4LTA3LTAzIDE5OjU0OjI1LjAwMDAwMDAwMCAtMDcw MA0KLSsrKyBhdXRoMi1wdWJrZXkuYwkyMDA4LTA4LTIzIDE1OjAyOjQ3LjAwMDAwMDAwMCAt MDcwMA0KLUBAIC01NSw2ICs1NSwxMCBAQA0KLSAjaW5jbHVkZSAibW9uaXRvcl93cmFwLmgi DQotICNpbmNsdWRlICJtaXNjLmgiDQotIA0KLSsjaWZkZWYgV0lUSF9MREFQX1BVQktFWQ0K LSsjaW5jbHVkZSAibGRhcGF1dGguaCINCi0rI2VuZGlmDQotKw0KLSAvKiBpbXBvcnQgKi8N Ci0gZXh0ZXJuIFNlcnZlck9wdGlvbnMgb3B0aW9uczsNCi0gZXh0ZXJuIHVfY2hhciAqc2Vz c2lvbl9pZDI7DQotQEAgLTE4NywxMCArMTkxLDc5IEBADQotIAl1X2xvbmcgbGluZW51bSA9 IDA7DQotIAlLZXkgKmZvdW5kOw0KLSAJY2hhciAqZnA7DQotKyNpZmRlZiBXSVRIX0xEQVBf UFVCS0VZDQotKwlsZGFwX2tleV90ICogazsNCi0rCXVuc2lnbmVkIGludCBpID0gMDsNCi0r I2VuZGlmDQotIA0KLSAJLyogVGVtcG9yYXJpbHkgdXNlIHRoZSB1c2VyJ3MgdWlkLiAqLw0K LSAJdGVtcG9yYXJpbHlfdXNlX3VpZChwdyk7DQotIA0KLSsjaWZkZWYgV0lUSF9MREFQX1BV QktFWQ0KLSsgCWZvdW5kX2tleSA9IDA7DQotKyAJLyogYWxsb2NhdGUgYSBuZXcga2V5IHR5 cGUgKi8NCi0rIAlmb3VuZCA9IGtleV9uZXcoa2V5LT50eXBlKTsNCi0rIA0KLSsgCS8qIGZp cnN0IGNoZWNrIGlmIHRoZSBvcHRpb25zIGlzIGVuYWJsZWQsIHRoZW4gdHJ5Li4gKi8NCi0r CWlmIChvcHRpb25zLmxway5vbikgew0KLSsJICAgIGRlYnVnKCJbTERBUF0gdHJ5aW5nIExE QVAgZmlyc3QgdWlkPSVzIixwdy0+cHdfbmFtZSk7DQotKwkgICAgaWYgKGxkYXBfaXNtZW1i ZXIoJm9wdGlvbnMubHBrLCBwdy0+cHdfbmFtZSkgPiAwKSB7DQotKwkJaWYgKChrID0gbGRh cF9nZXR1c2Vya2V5KCZvcHRpb25zLmxwaywgcHctPnB3X25hbWUpKSAhPSBOVUxMKSB7DQot KwkJICAgIC8qIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlLCBlbXB0eSBhbmQgY29tbWVudCBs aW5lcy4gKi8NCi0rCQkgICAgZm9yIChpID0gMCA7IGkgPCBrLT5udW0gOyBpKyspIHsNCi0r CQkJLyogZG9udCBmb3JnZXQgaWYgbXVsdGlwbGUga2V5cyB0byByZXNldCBvcHRpb25zICov DQotKwkJCWNoYXIgKmNwLCAqb3B0aW9ucyA9IE5VTEw7DQotKw0KLSsJCQlmb3IgKGNwID0g KGNoYXIgKilrLT5rZXlzW2ldLT5idl92YWw7ICpjcCA9PSAnICcgfHwgKmNwID09ICdcdCc7 IGNwKyspDQotKwkJCSAgICA7DQotKwkJCWlmICghKmNwIHx8ICpjcCA9PSAnXG4nIHx8ICpj cCA9PSAnIycpDQotKwkJCSAgICBjb250aW51ZTsNCi0rDQotKwkJCWlmIChrZXlfcmVhZChm b3VuZCwgJmNwKSAhPSAxKSB7DQotKwkJCSAgICAvKiBubyBrZXk/ICBjaGVjayBpZiB0aGVy ZSBhcmUgb3B0aW9ucyBmb3IgdGhpcyBrZXkgKi8NCi0rCQkJICAgIGludCBxdW90ZWQgPSAw Ow0KLSsJCQkgICAgZGVidWcyKCJbTERBUF0gdXNlcl9rZXlfYWxsb3dlZDogY2hlY2sgb3B0 aW9uczogJyVzJyIsIGNwKTsNCi0rCQkJICAgIG9wdGlvbnMgPSBjcDsNCi0rCQkJICAgIGZv ciAoOyAqY3AgJiYgKHF1b3RlZCB8fCAoKmNwICE9ICcgJyAmJiAqY3AgIT0gJ1x0JykpOyBj cCsrKSB7DQotKwkJCQlpZiAoKmNwID09ICdcXCcgJiYgY3BbMV0gPT0gJyInKQ0KLSsJCQkJ ICAgIGNwKys7CS8qIFNraXAgYm90aCAqLw0KLSsJCQkJZWxzZSBpZiAoKmNwID09ICciJykN Ci0rCQkJCSAgICBxdW90ZWQgPSAhcXVvdGVkOw0KLSsJCQkgICAgfQ0KLSsJCQkgICAgLyog U2tpcCByZW1haW5pbmcgd2hpdGVzcGFjZS4gKi8NCi0rCQkJICAgIGZvciAoOyAqY3AgPT0g JyAnIHx8ICpjcCA9PSAnXHQnOyBjcCsrKQ0KLSsJCQkJOw0KLSsJCQkgICAgaWYgKGtleV9y ZWFkKGZvdW5kLCAmY3ApICE9IDEpIHsNCi0rCQkJCWRlYnVnMigiW0xEQVBdIHVzZXJfa2V5 X2FsbG93ZWQ6IGFkdmFuY2U6ICclcyciLCBjcCk7DQotKwkJCQkvKiBzdGlsbCBubyBrZXk/ ICBhZHZhbmNlIHRvIG5leHQgbGluZSovDQotKwkJCQljb250aW51ZTsNCi0rCQkJICAgIH0N Ci0rCQkJfQ0KLSsNCi0rCQkJaWYgKGtleV9lcXVhbChmb3VuZCwga2V5KSAmJg0KLSsJCQkJ YXV0aF9wYXJzZV9vcHRpb25zKHB3LCBvcHRpb25zLCBmaWxlLCBsaW5lbnVtKSA9PSAxKSB7 DQotKwkJCSAgICBmb3VuZF9rZXkgPSAxOw0KLSsJCQkgICAgZGVidWcoIltMREFQXSBtYXRj aGluZyBrZXkgZm91bmQiKTsNCi0rCQkJICAgIGZwID0ga2V5X2ZpbmdlcnByaW50KGZvdW5k LCBTU0hfRlBfTUQ1LCBTU0hfRlBfSEVYKTsNCi0rCQkJICAgIHZlcmJvc2UoIltMREFQXSBG b3VuZCBtYXRjaGluZyAlcyBrZXk6ICVzIiwga2V5X3R5cGUoZm91bmQpLCBmcCk7DQotKw0K LSsJCQkgICAgLyogcmVzdG9yaW5nIG1lbW9yeSAqLw0KLSsJCQkgICAgbGRhcF9rZXlzX2Zy ZWUoayk7DQotKwkJCSAgICB4ZnJlZShmcCk7DQotKwkJCSAgICByZXN0b3JlX3VpZCgpOw0K LSsJCQkgICAga2V5X2ZyZWUoZm91bmQpOw0KLSsJCQkgICAgcmV0dXJuIGZvdW5kX2tleTsN Ci0rCQkJICAgIGJyZWFrOw0KLSsJCQl9DQotKwkJICAgIH0vKiBlbmQgb2YgTERBUCBmb3Io KSAqLw0KLSsJCX0gZWxzZSB7DQotKwkJICAgIGxvZ2l0KCJbTERBUF0gbm8ga2V5cyBmb3Vu ZCBmb3IgJyVzJyEiLCBwdy0+cHdfbmFtZSk7DQotKwkJfQ0KLSsJICAgIH0gZWxzZSB7DQot KwkJbG9naXQoIltMREFQXSAnJXMnIGlzIG5vdCBpbiAnJXMnIiwgcHctPnB3X25hbWUsIG9w dGlvbnMubHBrLnNncm91cCk7DQotKwkgICAgfQ0KLSsJfQ0KLSsjZW5kaWYNCi0gCWRlYnVn KCJ0cnlpbmcgcHVibGljIGtleSBmaWxlICVzIiwgZmlsZSk7DQotIAlmID0gYXV0aF9vcGVu a2V5ZmlsZShmaWxlLCBwdywgb3B0aW9ucy5zdHJpY3RfbW9kZXMpOw0KLSANCi1kaWZmIC1O dWFyIC0tZXhjbHVkZSAnKi5vcmlnJyAtLWV4Y2x1ZGUgJyoucmVqJyBhdXRoLXJzYS5jIGF1 dGgtcnNhLmMNCi0tLS0gYXV0aC1yc2EuYwkyMDA4LTA3LTAyIDA1OjM3OjMwLjAwMDAwMDAw MCAtMDcwMA0KLSsrKyBhdXRoLXJzYS5jCTIwMDgtMDgtMjMgMTU6MDI6NDcuMDAwMDAwMDAw IC0wNzAwDQotQEAgLTE3NCwxMCArMTc0LDk2IEBADQotIAlGSUxFICpmOw0KLSAJdV9sb25n IGxpbmVudW0gPSAwOw0KLSAJS2V5ICprZXk7DQotKyNpZmRlZiBXSVRIX0xEQVBfUFVCS0VZ DQotKwlsZGFwX2tleV90ICogazsNCi0rCXVuc2lnbmVkIGludCBpID0gMDsNCi0rI2VuZGlm DQotIA0KLSAJLyogVGVtcG9yYXJpbHkgdXNlIHRoZSB1c2VyJ3MgdWlkLiAqLw0KLSAJdGVt cG9yYXJpbHlfdXNlX3VpZChwdyk7DQotIA0KLSsjaWZkZWYgV0lUSF9MREFQX1BVQktFWQ0K LSsJLyogaGVyZSBpcyB0aGUgam9iICovDQotKwlrZXkgPSBrZXlfbmV3KEtFWV9SU0ExKTsN Ci0rDQotKwlpZiAob3B0aW9ucy5scGsub24pIHsNCi0rCSAgICBkZWJ1ZygiW0xEQVBdIHRy eWluZyBMREFQIGZpcnN0IHVpZD0lcyIsIHB3LT5wd19uYW1lKTsNCi0rCSAgICBpZiAoIGxk YXBfaXNtZW1iZXIoJm9wdGlvbnMubHBrLCBwdy0+cHdfbmFtZSkgPiAwKSB7DQotKwkJaWYg KCAoayA9IGxkYXBfZ2V0dXNlcmtleSgmb3B0aW9ucy5scGssIHB3LT5wd19uYW1lKSkgIT0g TlVMTCkgew0KLSsJCSAgICBmb3IgKGkgPSAwIDsgaSA8IGstPm51bSA7IGkrKykgew0KLSsJ CQljaGFyICpjcCwgKm9wdGlvbnMgPSBOVUxMOw0KLSsNCi0rCQkJZm9yIChjcCA9IGstPmtl eXNbaV0tPmJ2X3ZhbDsgKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JzsgY3ArKykNCi0rCQkJ ICAgIDsNCi0rCQkJaWYgKCEqY3AgfHwgKmNwID09ICdcbicgfHwgKmNwID09ICcjJykNCi0r CQkJICAgIGNvbnRpbnVlOw0KLSsNCi0rCQkJLyoNCi0rCQkJKiBDaGVjayBpZiB0aGVyZSBh cmUgb3B0aW9ucyBmb3IgdGhpcyBrZXksIGFuZCBpZiBzbywNCi0rCQkJKiBzYXZlIHRoZWly IHN0YXJ0aW5nIGFkZHJlc3MgYW5kIHNraXAgdGhlIG9wdGlvbiBwYXJ0DQotKwkJCSogZm9y IG5vdy4gIElmIHRoZXJlIGFyZSBubyBvcHRpb25zLCBzZXQgdGhlIHN0YXJ0aW5nDQotKwkJ CSogYWRkcmVzcyB0byBOVUxMLg0KLSsJCQkgKi8NCi0rCQkJaWYgKCpjcCA8ICcwJyB8fCAq Y3AgPiAnOScpIHsNCi0rCQkJICAgIGludCBxdW90ZWQgPSAwOw0KLSsJCQkgICAgb3B0aW9u cyA9IGNwOw0KLSsJCQkgICAgZm9yICg7ICpjcCAmJiAocXVvdGVkIHx8ICgqY3AgIT0gJyAn ICYmICpjcCAhPSAnXHQnKSk7IGNwKyspIHsNCi0rCQkJCWlmICgqY3AgPT0gJ1xcJyAmJiBj cFsxXSA9PSAnIicpDQotKwkJCQkgICAgY3ArKzsJLyogU2tpcCBib3RoICovDQotKwkJCQll bHNlIGlmICgqY3AgPT0gJyInKQ0KLSsJCQkJICAgIHF1b3RlZCA9ICFxdW90ZWQ7DQotKwkJ CSAgICB9DQotKwkJCX0gZWxzZQ0KLSsJCQkgICAgb3B0aW9ucyA9IE5VTEw7DQotKw0KLSsJ CQkvKiBQYXJzZSB0aGUga2V5IGZyb20gdGhlIGxpbmUuICovDQotKwkJCWlmIChob3N0Zmls ZV9yZWFkX2tleSgmY3AsICZiaXRzLCBrZXkpID09IDApIHsNCi0rCQkJICAgIGRlYnVnKCJb TERBUF0gbGluZSAlZDogbm9uIHNzaDEga2V5IHN5bnRheCIsIGkpOw0KLSsJCQkgICAgY29u dGludWU7DQotKwkJCX0NCi0rCQkJLyogY3Agbm93IHBvaW50cyB0byB0aGUgY29tbWVudCBw YXJ0LiAqLw0KLSsNCi0rCQkJLyogQ2hlY2sgaWYgdGhlIHdlIGhhdmUgZm91bmQgdGhlIGRl c2lyZWQga2V5IChpZGVudGlmaWVkIGJ5IGl0cyBtb2R1bHVzKS4gKi8NCi0rCQkJaWYgKEJO X2NtcChrZXktPnJzYS0+biwgY2xpZW50X24pICE9IDApDQotKwkJCSAgICBjb250aW51ZTsN Ci0rDQotKwkJCS8qIGNoZWNrIHRoZSByZWFsIGJpdHMgICovDQotKwkJCWlmIChiaXRzICE9 ICh1bnNpZ25lZCBpbnQpQk5fbnVtX2JpdHMoa2V5LT5yc2EtPm4pKQ0KLSsJCQkgICAgbG9n aXQoIltMREFQXSBXYXJuaW5nOiBsZGFwLCBsaW5lICVsdToga2V5c2l6ZSBtaXNtYXRjaDog Ig0KLSsJCQkJICAgICJhY3R1YWwgJWQgdnMuIGFubm91bmNlZCAlZC4iLCAodW5zaWduZWQg bG9uZylpLCBCTl9udW1fYml0cyhrZXktPnJzYS0+biksIGJpdHMpOw0KLSsNCi0rCQkJLyog V2UgaGF2ZSBmb3VuZCB0aGUgZGVzaXJlZCBrZXkuICovDQotKwkJCS8qDQotKwkJCSogSWYg b3VyIG9wdGlvbnMgZG8gbm90IGFsbG93IHRoaXMga2V5IHRvIGJlIHVzZWQsDQotKwkJCSog ZG8gbm90IHNlbmQgY2hhbGxlbmdlLg0KLSsJCQkgKi8NCi0rCQkJaWYgKCFhdXRoX3BhcnNl X29wdGlvbnMocHcsIG9wdGlvbnMsICJbTERBUF0iLCAodW5zaWduZWQgbG9uZykgaSkpDQot KwkJCSAgICBjb250aW51ZTsNCi0rDQotKwkJCS8qIGJyZWFrIG91dCwgdGhpcyBrZXkgaXMg YWxsb3dlZCAqLw0KLSsJCQlhbGxvd2VkID0gMTsNCi0rDQotKwkJCS8qIGFkZCB0aGUgcmV0 dXJuIHN0dWZmIGV0Yy4uLiAqLw0KLSsJCQkvKiBSZXN0b3JlIHRoZSBwcml2aWxlZ2VkIHVp ZC4gKi8NCi0rCQkJcmVzdG9yZV91aWQoKTsNCi0rDQotKwkJCS8qIHJldHVybiBrZXkgaWYg YWxsb3dlZCAqLw0KLSsJCQlpZiAoYWxsb3dlZCAmJiBya2V5ICE9IE5VTEwpDQotKwkJCSAg ICAqcmtleSA9IGtleTsNCi0rCQkJZWxzZQ0KLSsJCQkgICAga2V5X2ZyZWUoa2V5KTsNCi0r DQotKwkJCWxkYXBfa2V5c19mcmVlKGspOw0KLSsJCQlyZXR1cm4gKGFsbG93ZWQpOw0KLSsJ CSAgICB9DQotKwkJfSBlbHNlIHsNCi0rCQkgICAgbG9naXQoIltMREFQXSBubyBrZXlzIGZv dW5kIGZvciAnJXMnISIsIHB3LT5wd19uYW1lKTsNCi0rCQl9DQotKwkgICAgfSBlbHNlIHsN Ci0rCQlsb2dpdCgiW0xEQVBdICclcycgaXMgbm90IGluICclcyciLCBwdy0+cHdfbmFtZSwg b3B0aW9ucy5scGsuc2dyb3VwKTsNCi0rCSAgICB9DQotKwl9DQotKyNlbmRpZg0KLSAJLyog VGhlIGF1dGhvcml6ZWQga2V5cy4gKi8NCi0gCWZpbGUgPSBhdXRob3JpemVkX2tleXNfZmls ZShwdyk7DQotIAlkZWJ1ZygidHJ5aW5nIHB1YmxpYyBSU0Ega2V5IGZpbGUgJXMiLCBmaWxl KTsNCi1kaWZmIC1OdWFyIC0tZXhjbHVkZSAnKi5vcmlnJyAtLWV4Y2x1ZGUgJyoucmVqJyBj b25maWcuaC5pbiBjb25maWcuaC5pbg0KLS0tLSBjb25maWcuaC5pbgkyMDA4LTA3LTIxIDAx OjMwOjQ5LjAwMDAwMDAwMCAtMDcwMA0KLSsrKyBjb25maWcuaC5pbgkyMDA4LTA4LTIzIDE1 OjAyOjQ3LjAwMDAwMDAwMCAtMDcwMA0KLUBAIC01NjAsNiArNTYwLDkgQEANCi0gLyogRGVm aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9pZl90dW4uaD4gaGVhZGVyIGZpbGUu ICovDQotICN1bmRlZiBIQVZFX0xJTlVYX0lGX1RVTl9IDQotIA0KLSsvKiBEZWZpbmUgaWYg eW91IHdhbnQgTERBUCBzdXBwb3J0ICovDQotKyN1bmRlZiBXSVRIX0xEQVBfUFVCS0VZDQot Kw0KLSAvKiBEZWZpbmUgaWYgeW91ciBsaWJyYXJpZXMgZGVmaW5lIGxvZ2luKCkgKi8NCi0g I3VuZGVmIEhBVkVfTE9HSU4NCi0gDQotZGlmZiAtTnVhciAtLWV4Y2x1ZGUgJyoub3JpZycg LS1leGNsdWRlICcqLnJlaicgY29uZmlndXJlIGNvbmZpZ3VyZQ0KLS0tLSBjb25maWd1cmUJ MjAwOC0wNy0yMSAwMTozMDo1MC4wMDAwMDAwMDAgLTA3MDANCi0rKysgY29uZmlndXJlCTIw MDgtMDgtMjMgMTU6MDI6NDcuMDAwMDAwMDAwIC0wNzAwDQotQEAgLTEzNDAsNiArMTM0MCw3 IEBADQotICAgLS13aXRoLXRjcC13cmFwcGVyc1s9UEFUSF0gRW5hYmxlIHRjcHdyYXBwZXJz IHN1cHBvcnQgKG9wdGlvbmFsbHkgaW4gUEFUSCkNCi0gICAtLXdpdGgtbGliZWRpdFs9UEFU SF0gICBFbmFibGUgbGliZWRpdCBzdXBwb3J0IGZvciBzZnRwDQotICAgLS13aXRoLWF1ZGl0 PW1vZHVsZSAgICAgRW5hYmxlIEVYUEVSSU1FTlRBTCBhdWRpdCBzdXBwb3J0IChtb2R1bGVz PWRlYnVnLGJzbSkNCi0rICAtLXdpdGgtbGRhcFs9UEFUSF0gICAgICBFbmFibGUgTERBUCBw dWJrZXkgc3VwcG9ydCAob3B0aW9uYWxseSBpbiBQQVRIKQ0KLSAgIC0td2l0aC1zc2wtZGly PVBBVEggICAgIFNwZWNpZnkgcGF0aCB0byBPcGVuU1NMIGluc3RhbGxhdGlvbg0KLSAgIC0t d2l0aG91dC1vcGVuc3NsLWhlYWRlci1jaGVjayBEaXNhYmxlIE9wZW5TU0wgdmVyc2lvbiBj b25zaXN0ZW5jeSBjaGVjaw0KLSAgIC0td2l0aC1zc2wtZW5naW5lICAgICAgIEVuYWJsZSBP cGVuU1NMIChoYXJkd2FyZSkgRU5HSU5FIHN1cHBvcnQNCi1AQCAtMTI1NjgsNiArMTI1Njks ODUgQEANCi0gZmkNCi0gDQotIA0KLSsjIENoZWNrIHdoZXRoZXIgdXNlciB3YW50cyBMREFQ IHN1cHBvcnQNCi0rTERBUF9NU0c9Im5vIg0KLSsNCi0rIyBDaGVjayB3aGV0aGVyIC0td2l0 aC1sZGFwIHdhcyBnaXZlbi4NCi0raWYgdGVzdCAiJHt3aXRoX2xkYXArc2V0fSIgPSBzZXQ7 IHRoZW4NCi0rICB3aXRodmFsPSR3aXRoX2xkYXA7DQotKwkJaWYgdGVzdCAieCR3aXRodmFs IiAhPSAieG5vIiA7IHRoZW4NCi0rDQotKwkJCWlmIHRlc3QgIngkd2l0aHZhbCIgIT0gInh5 ZXMiIDsgdGhlbg0KLSsJCQkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSR7d2l0aHZhbH0vaW5j bHVkZSINCi0rCQkJCUxERkxBR1M9IiRMREZMQUdTIC1MJHt3aXRodmFsfS9saWIiDQotKwkJ CWZpDQotKw0KLSsNCi0rY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YNCi0rI2RlZmluZSBX SVRIX0xEQVBfUFVCS0VZIDENCi0rX0FDRU9GDQotKw0KLSsJCQlMSUJTPSItbGxkYXAgJExJ QlMiDQotKwkJCUxEQVBfTVNHPSJ5ZXMiDQotKw0KLSsJCQl7IGVjaG8gIiRhc19tZTokTElO RU5POiBjaGVja2luZyBmb3IgTERBUCBzdXBwb3J0IiA+JjUNCi0rZWNobyAkRUNIT19OICJj aGVja2luZyBmb3IgTERBUCBzdXBwb3J0Li4uICRFQ0hPX0MiID4mNjsgfQ0KLSsJCQljYXQg PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YNCi0rLyogY29uZmRlZnMuaC4gICovDQotK19B Q0VPRg0KLStjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQNCi0rY2F0ID4+Y29u ZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRg0KLSsvKiBlbmQgY29uZmRlZnMuaC4gICovDQotKyNp bmNsdWRlIDxzeXMvdHlwZXMuaD4NCi0rCQkJCSAjaW5jbHVkZSA8bGRhcC5oPg0KLStpbnQN Ci0rbWFpbiAoKQ0KLSt7DQotKyh2b2lkKWxkYXBfaW5pdCgwLCAwKTsNCi0rICA7DQotKyAg cmV0dXJuIDA7DQotK30NCi0rX0FDRU9GDQotK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQN Ci0raWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSINCi0rY2FzZSAiKCgkYWNfdHJ5IiBpbg0K LSsgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7Ow0KLSsgICop IGFjX3RyeV9lY2hvPSRhY190cnk7Ow0KLStlc2FjDQotK2V2YWwgImVjaG8gXCJcJGFzX21l OiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1DQotKyAgKGV2YWwgIiRhY19jb21waWxl IikgMj5jb25mdGVzdC5lcjENCi0rICBhY19zdGF0dXM9JD8NCi0rICBncmVwIC12ICdeICor JyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycg0KLSsgIHJtIC1mIGNvbmZ0ZXN0LmVyMQ0K LSsgIGNhdCBjb25mdGVzdC5lcnIgPiY1DQotKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwk PyA9ICRhY19zdGF0dXMiID4mNQ0KLSsgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsNCi0r CSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwNCi0rCSB0ZXN0ICEgLXMgY29uZnRl c3QuZXJyDQotKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhl bg0KLSsgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUNCi0rZWNo byAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0NCi0rZWxzZQ0KLSsgIGVjaG8gIiRhc19tZTogZmFp bGVkIHByb2dyYW0gd2FzOiIgPiY1DQotK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4 dCA+JjUNCi0rDQotKw0KLSsJCQkJICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3Vs dDogbm8iID4mNQ0KLStlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9DQotKwkJCQkJeyB7IGVj aG8gIiRhc19tZTokTElORU5POiBlcnJvcjogKiogSW5jb21wbGV0ZSBvciBtaXNzaW5nIGxk YXAgbGlicmFyaWVzICoqIiA+JjUNCi0rZWNobyAiJGFzX21lOiBlcnJvcjogKiogSW5jb21w bGV0ZSBvciBtaXNzaW5nIGxkYXAgbGlicmFyaWVzICoqIiA+JjI7fQ0KLSsgICB7IChleGl0 IDEpOyBleGl0IDE7IH07IH0NCi0rDQotKw0KLStmaQ0KLSsNCi0rcm0gLWYgY29yZSBjb25m dGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQotKwkJZmkN Ci0rDQotKw0KLStmaQ0KLSsNCi0rDQotIA0KLSANCi0gDQotQEAgLTMwMTM1LDYgKzMwMjE1 LDcgQEANCi0gZWNobyAiICAgICAgICAgICAgICAgICBTbWFydGNhcmQgc3VwcG9ydDogJFND QVJEX01TRyINCi0gZWNobyAiICAgICAgICAgICAgICAgICAgICAgUy9LRVkgc3VwcG9ydDog JFNLRVlfTVNHIg0KLSBlY2hvICIgICAgICAgICAgICAgIFRDUCBXcmFwcGVycyBzdXBwb3J0 OiAkVENQV19NU0ciDQotK2VjaG8gIiAgICAgICAgICAgICAgICAgICAgICBMREFQIHN1cHBv cnQ6ICRMREFQX01TRyINCi0gZWNobyAiICAgICAgICAgICAgICBNRDUgcGFzc3dvcmQgc3Vw cG9ydDogJE1ENV9NU0ciDQotIGVjaG8gIiAgICAgICAgICAgICAgICAgICBsaWJlZGl0IHN1 cHBvcnQ6ICRMSUJFRElUX01TRyINCi0gZWNobyAiICBTb2xhcmlzIHByb2Nlc3MgY29udHJh Y3Qgc3VwcG9ydDogJFNQQ19NU0ciDQotZGlmZiAtTnVhciAtLWV4Y2x1ZGUgJyoub3JpZycg LS1leGNsdWRlICcqLnJlaicgY29uZmlndXJlLmFjIGNvbmZpZ3VyZS5hYw0KLS0tLSBjb25m aWd1cmUuYWMJMjAwOC0wNy0wOSAwNDowNzoxOS4wMDAwMDAwMDAgLTA3MDANCi0rKysgY29u ZmlndXJlLmFjCTIwMDgtMDgtMjMgMTU6MDI6NDcuMDAwMDAwMDAwIC0wNzAwDQotQEAgLTEy OTksNiArMTI5OSwzNyBAQA0KLSAJZXNhYyBdDQotICkNCi0gDQotKyMgQ2hlY2sgd2hldGhl ciB1c2VyIHdhbnRzIExEQVAgc3VwcG9ydA0KLStMREFQX01TRz0ibm8iDQotK0FDX0FSR19X SVRIKGxkYXAsDQotKwlbICAtLXdpdGgtbGRhcFtbPVBBVEhdXSAgICAgIEVuYWJsZSBMREFQ IHB1YmtleSBzdXBwb3J0IChvcHRpb25hbGx5IGluIFBBVEgpXSwNCi0rCVsNCi0rCQlpZiB0 ZXN0ICJ4JHdpdGh2YWwiICE9ICJ4bm8iIDsgdGhlbg0KLSsNCi0rCQkJaWYgdGVzdCAieCR3 aXRodmFsIiAhPSAieHllcyIgOyB0aGVuDQotKwkJCQlDUFBGTEFHUz0iJENQUEZMQUdTIC1J JHt3aXRodmFsfS9pbmNsdWRlIg0KLSsJCQkJTERGTEFHUz0iJExERkxBR1MgLUwke3dpdGh2 YWx9L2xpYiINCi0rCQkJZmkNCi0rDQotKwkJCUFDX0RFRklORShbV0lUSF9MREFQX1BVQktF WV0sIDEsIFtFbmFibGUgTERBUCBwdWJrZXkgc3VwcG9ydF0pDQotKwkJCUxJQlM9Ii1sbGRh cCAkTElCUyINCi0rCQkJTERBUF9NU0c9InllcyINCi0rCQ0KLSsJCQlBQ19NU0dfQ0hFQ0tJ TkcoW2ZvciBMREFQIHN1cHBvcnRdKQ0KLSsJCQlBQ19UUllfQ09NUElMRSgNCi0rCQkJCVsj aW5jbHVkZSA8c3lzL3R5cGVzLmg+DQotKwkJCQkgI2luY2x1ZGUgPGxkYXAuaD5dLA0KLSsJ CQkJWyh2b2lkKWxkYXBfaW5pdCgwLCAwKTtdLA0KLSsJCQkJW0FDX01TR19SRVNVTFQoeWVz KV0sDQotKwkJCQlbDQotKwkJCQkgICAgQUNfTVNHX1JFU1VMVChubykgDQotKwkJCQkJQUNf TVNHX0VSUk9SKFsqKiBJbmNvbXBsZXRlIG9yIG1pc3NpbmcgbGRhcCBsaWJyYXJpZXMgKipd KQ0KLSsJCQkJXQ0KLSsgICAgICAgIAkpDQotKwkJZmkNCi0rCV0NCi0rKQ0KLSsNCi0gZG5s ICAgIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuIFBsZWFzZSBrZWVwIGluIGFscGhh YmV0aWNhbCBvcmRlcg0KLSBBQ19DSEVDS19GVU5DUyggXA0KLSAJYXJjNHJhbmRvbSBcDQot QEAgLTQxMzcsNiArNDE2OCw3IEBADQotIGVjaG8gIiAgICAgICAgICAgICAgICAgU21hcnRj YXJkIHN1cHBvcnQ6ICRTQ0FSRF9NU0ciDQotIGVjaG8gIiAgICAgICAgICAgICAgICAgICAg IFMvS0VZIHN1cHBvcnQ6ICRTS0VZX01TRyINCi0gZWNobyAiICAgICAgICAgICAgICBUQ1Ag V3JhcHBlcnMgc3VwcG9ydDogJFRDUFdfTVNHIg0KLStlY2hvICIgICAgICAgICAgICAgICAg ICAgICAgTERBUCBzdXBwb3J0OiAkTERBUF9NU0ciDQotIGVjaG8gIiAgICAgICAgICAgICAg TUQ1IHBhc3N3b3JkIHN1cHBvcnQ6ICRNRDVfTVNHIg0KLSBlY2hvICIgICAgICAgICAgICAg ICAgICAgbGliZWRpdCBzdXBwb3J0OiAkTElCRURJVF9NU0ciDQotIGVjaG8gIiAgU29sYXJp cyBwcm9jZXNzIGNvbnRyYWN0IHN1cHBvcnQ6ICRTUENfTVNHIg0KLWRpZmYgLU51YXIgLS1l eGNsdWRlICcqLm9yaWcnIC0tZXhjbHVkZSAnKi5yZWonIGxkYXBhdXRoLmMgbGRhcGF1dGgu Yw0KLS0tLSBsZGFwYXV0aC5jCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAw DQotKysrIGxkYXBhdXRoLmMJMjAwOC0wOC0yMyAxNTowMjo0Ny4wMDAwMDAwMDAgLTA3MDAN Ci1AQCAtMCwwICsxLDU3NSBAQA0KLSsvKiANCi0rICogJElkOiBvcGVuc3NoLWxway00LjNw MS0wLjMuNy5wYXRjaCx2IDEuMyAyMDA2LzA0LzE4IDE1OjI5OjA5IGVhdSBFeHAgJA0KLSsg Ki8NCi0rDQotKy8qDQotKyAqDQotKyAqIENvcHlyaWdodCAoYykgMjAwNSwgRXJpYyBBVUdF IDxlYXVAcGhlYXIub3JnPg0KLSsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLSsgKg0KLSsg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQotKyAqDQotKyAqIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4NCi0rICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0 aW9uLg0KLSsgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwaGVhci5vcmcgbm9yIHRoZSBu YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCi0rICoNCi0rICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S UyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgDQotKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiANCi0rICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS SUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCANCi0rICogT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgDQotKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgDQotKyAqIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuDQotKyAqDQotKyAqDQotKyAqLw0KLSsNCi0rI2luY2x1 ZGUgImluY2x1ZGVzLmgiDQotKw0KLSsjaWZkZWYgV0lUSF9MREFQX1BVQktFWQ0KLSsNCi0r I2luY2x1ZGUgPHN0ZGlvLmg+DQotKyNpbmNsdWRlIDxzdGRsaWIuaD4NCi0rI2luY2x1ZGUg PHVuaXN0ZC5oPg0KLSsjaW5jbHVkZSA8c3RyaW5nLmg+DQotKw0KLSsjaW5jbHVkZSAibGRh cGF1dGguaCINCi0rI2luY2x1ZGUgImxvZy5oIg0KLSsNCi0rc3RhdGljIGNoYXIgKmF0dHJz W10gPSB7DQotKyAgICBQVUJLRVlBVFRSLA0KLSsgICAgTlVMTA0KLSt9Ow0KLSsNCi0rLyog ZmlsdGVyIGJ1aWxkaW5nIGluZm9zICovDQotKyNkZWZpbmUgRklMVEVSX0dST1VQX1BSRUZJ WCAiKCYob2JqZWN0Y2xhc3M9cG9zaXhHcm91cCkiDQotKyNkZWZpbmUgRklMVEVSX09SX1BS RUZJWCAiKHwiDQotKyNkZWZpbmUgRklMVEVSX09SX1NVRkZJWCAiKSINCi0rI2RlZmluZSBG SUxURVJfQ05fUFJFRklYICIoY249Ig0KLSsjZGVmaW5lIEZJTFRFUl9DTl9TVUZGSVggIiki DQotKyNkZWZpbmUgRklMVEVSX1VJRF9GT1JNQVQgIihtZW1iZXJVaWQ9JXMpIg0KLSsjZGVm aW5lIEZJTFRFUl9HUk9VUF9TVUZGSVggIikiDQotKyNkZWZpbmUgRklMVEVSX0dST1VQX1NJ WkUoZ3JvdXApIChzaXplX3QpIChzdHJsZW4oZ3JvdXApKyhsZGFwX2NvdW50X2dyb3VwKGdy b3VwKSo1KSs1MikNCi0rDQotKy8qIGp1c3QgZmlsdGVyIGJ1aWxkaW5nIHN0dWZmICovDQot KyNkZWZpbmUgUkVRVUVTVF9HUk9VUF9TSVpFKGZpbHRlciwgdWlkKSAoc2l6ZV90KSAoc3Ry bGVuKGZpbHRlcikrc3RybGVuKHVpZCkrMSkNCi0rI2RlZmluZSBSRVFVRVNUX0dST1VQKGJ1 ZmZlciwgcHJlZmlsdGVyLCBwd25hbWUpIFwNCi0rICAgIGJ1ZmZlciA9IChjaGFyICopIGNh bGxvYyhSRVFVRVNUX0dST1VQX1NJWkUocHJlZmlsdGVyLCBwd25hbWUpLCBzaXplb2YoY2hh cikpOyBcDQotKyAgICBpZiAoIWJ1ZmZlcikgeyBcDQotKyAgICAgICAgcGVycm9yKCJjYWxs b2MoKSIpOyBcDQotKyAgICAgICAgcmV0dXJuIEZBSUxVUkU7IFwNCi0rICAgIH0gXA0KLSsg ICAgc25wcmludGYoYnVmZmVyLCBSRVFVRVNUX0dST1VQX1NJWkUocHJlZmlsdGVyLHB3bmFt ZSksIHByZWZpbHRlciwgcHduYW1lKQ0KLSsvKg0KLStYWFggT0xEIGdyb3VwIGJ1aWxkaW5n IG1hY3Jvcw0KLSsjZGVmaW5lIFJFUVVFU1RfR1JPVVBfU0laRShncnAsIHVpZCkgKHNpemVf dCkgKHN0cmxlbihncnApK3N0cmxlbih1aWQpKzQ2KQ0KLSsjZGVmaW5lIFJFUVVFU1RfR1JP VVAoYnVmZmVyLHB3bmFtZSxncnApIFwNCi0rICAgIGJ1ZmZlciA9IChjaGFyICopIGNhbGxv YyhSRVFVRVNUX0dST1VQX1NJWkUoZ3JwLCBwd25hbWUpLCBzaXplb2YoY2hhcikpOyBcDQot KyAgICBpZiAoIWJ1ZmZlcikgeyBcDQotKyAgICAgICAgcGVycm9yKCJjYWxsb2MoKSIpOyBc DQotKyAgICAgICAgcmV0dXJuIEZBSUxVUkU7IFwNCi0rICAgIH0gXA0KLSsgICAgc25wcmlu dGYoYnVmZmVyLFJFUVVFU1RfR1JPVVBfU0laRShncnAscHduYW1lKSwiKCYob2JqZWN0Y2xh c3M9cG9zaXhHcm91cCkoY249JXMpKG1lbWJlclVpZD0lcykpIixncnAscHduYW1lKQ0KLSsg ICAgKi8NCi0rDQotKy8qDQotK1hYWCBzdG9jayB1cHN0cmVhbSB2ZXJzaW9uIHdpdGhvdXQg ZXh0cmEgZmlsdGVyIHN1cHBvcnQNCi0rI2RlZmluZSBSRVFVRVNUX1VTRVJfU0laRSh1aWQp IChzaXplX3QpIChzdHJsZW4odWlkKSs2NCkNCi0rI2RlZmluZSBSRVFVRVNUX1VTRVIoYnVm ZmVyLCBwd25hbWUpIFwNCi0rICAgIGJ1ZmZlciA9IChjaGFyICopIGNhbGxvYyhSRVFVRVNU X1VTRVJfU0laRShwd25hbWUpLCBzaXplb2YoY2hhcikpOyBcDQotKyAgICBpZiAoIWJ1ZmZl cikgeyBcDQotKyAgICAgICAgcGVycm9yKCJjYWxsb2MoKSIpOyBcDQotKyAgICAgICAgcmV0 dXJuIE5VTEw7IFwNCi0rICAgIH0gXA0KLSsgICAgc25wcmludGYoYnVmZmVyLFJFUVVFU1Rf VVNFUl9TSVpFKHB3bmFtZSksIigmKG9iamVjdGNsYXNzPXBvc2l4QWNjb3VudCkob2JqZWN0 Y2xhc3M9bGRhcFB1YmxpY0tleSkodWlkPSVzKSkiLHB3bmFtZSkNCi0rICAgKi8NCi0rDQot KyNkZWZpbmUgUkVRVUVTVF9VU0VSX1NJWkUodWlkLCBmaWx0ZXIpIChzaXplX3QpIChzdHJs ZW4odWlkKSs2NCsoZmlsdGVyICE9IE5VTEwgPyBzdHJsZW4oZmlsdGVyKSA6IDApKQ0KLSsj ZGVmaW5lIFJFUVVFU1RfVVNFUihidWZmZXIsIHB3bmFtZSwgY3VzdG9tZmlsdGVyKSBcDQot KyAgICBidWZmZXIgPSAoY2hhciAqKSBjYWxsb2MoUkVRVUVTVF9VU0VSX1NJWkUocHduYW1l LCBjdXN0b21maWx0ZXIpLCBzaXplb2YoY2hhcikpOyBcDQotKyAgICBpZiAoIWJ1ZmZlcikg eyBcDQotKyAgICAgICAgcGVycm9yKCJjYWxsb2MoKSIpOyBcDQotKyAgICAgICAgcmV0dXJu IE5VTEw7IFwNCi0rICAgIH0gXA0KLSsgICAgc25wcmludGYoYnVmZmVyLCBSRVFVRVNUX1VT RVJfU0laRShwd25hbWUsIGN1c3RvbWZpbHRlciksIFwNCi0rICAgIAkiKCYob2JqZWN0Y2xh c3M9cG9zaXhBY2NvdW50KShvYmplY3RjbGFzcz1sZGFwUHVibGljS2V5KSh1aWQ9JXMpJXMp IiwgXA0KLSsJcHduYW1lLCAoY3VzdG9tZmlsdGVyICE9IE5VTEwgPyBjdXN0b21maWx0ZXIg OiAiIikpDQotKw0KLSsvKiBzb21lIHBvcnRhYmxlIGFuZCB3b3JraW5nIHRva2VuaXplciwg bGFtZSB0aG91Z2ggKi8NCi0rc3RhdGljIGludCB0b2tlbml6ZShjaGFyICoqIG8sIHNpemVf dCBzaXplLCBjaGFyICogaW5wdXQpIHsNCi0rICAgIHVuc2lnbmVkIGludCBpID0gMCwgbnVt Ow0KLSsgICAgY29uc3QgY2hhciAqIGNoYXJzZXQgPSAiIFx0IjsNCi0rICAgIGNoYXIgKiBw dHIgPSBpbnB1dDsNCi0rDQotKyAgICAvKiBsZWFkaW5nIHdoaXRlIHNwYWNlcyBhcmUgaWdu b3JlZCAqLw0KLSsgICAgbnVtID0gc3Ryc3BuKHB0ciwgY2hhcnNldCk7DQotKyAgICBwdHIg Kz0gbnVtOw0KLSsNCi0rICAgIHdoaWxlICgobnVtID0gc3RyY3NwbihwdHIsIGNoYXJzZXQp KSkgew0KLSsgICAgICAgIGlmIChpIDwgc2l6ZS0xKSB7DQotKyAgICAgICAgICAgIG9baSsr XSA9IHB0cjsNCi0rICAgICAgICAgICAgcHRyICs9IG51bTsNCi0rICAgICAgICAgICAgaWYg KCpwdHIpDQotKyAgICAgICAgICAgICAgICAqcHRyKysgPSAnXDAnOw0KLSsgICAgICAgIH0N Ci0rICAgIH0NCi0rICAgIG9baV0gPSBOVUxMOw0KLSsgICAgcmV0dXJuIFNVQ0NFU1M7DQot K30NCi0rDQotK3ZvaWQgbGRhcF9jbG9zZShsZGFwX29wdF90ICogbGRhcCkgew0KLSsNCi0r ICAgIGlmICghbGRhcCkNCi0rICAgICAgICByZXR1cm47DQotKw0KLSsgICAgaWYgKCBsZGFw X3VuYmluZF9leHQobGRhcC0+bGQsIE5VTEwsIE5VTEwpIDwgMCkNCi0rCWxkYXBfcGVycm9y KGxkYXAtPmxkLCAibGRhcF91bmJpbmQoKSIpOw0KLSsNCi0rICAgIGxkYXAtPmxkID0gTlVM TDsNCi0rICAgIEZMQUdfU0VUX0RJU0NPTk5FQ1RFRChsZGFwLT5mbGFncyk7DQotKw0KLSsg ICAgcmV0dXJuOw0KLSt9DQotKw0KLSsvKiBpbml0ICYmIGJpbmQgKi8NCi0raW50IGxkYXBf Y29ubmVjdChsZGFwX29wdF90ICogbGRhcCkgew0KLSsgICAgaW50IHZlcnNpb24gPSBMREFQ X1ZFUlNJT04zOw0KLSsNCi0rICAgIGlmICghbGRhcC0+c2VydmVycykNCi0rICAgICAgICBy ZXR1cm4gRkFJTFVSRTsNCi0rDQotKyAgICAvKiBDb25uZWN0aW9uIEluaXQgYW5kIHNldHVw ICovDQotKyAgICBsZGFwLT5sZCA9IGxkYXBfaW5pdChsZGFwLT5zZXJ2ZXJzLCBMREFQX1BP UlQpOw0KLSsgICAgaWYgKCFsZGFwLT5sZCkgew0KLSsgICAgICAgIGxkYXBfcGVycm9yKGxk YXAtPmxkLCAibGRhcF9pbml0KCkiKTsNCi0rICAgICAgICByZXR1cm4gRkFJTFVSRTsNCi0r ICAgIH0NCi0rDQotKyAgICBpZiAoIGxkYXBfc2V0X29wdGlvbihsZGFwLT5sZCwgTERBUF9P UFRfUFJPVE9DT0xfVkVSU0lPTiwgJnZlcnNpb24pICE9IExEQVBfT1BUX1NVQ0NFU1MpIHsN Ci0rICAgICAgICBsZGFwX3BlcnJvcihsZGFwLT5sZCwgImxkYXBfc2V0X29wdGlvbihMREFQ X09QVF9QUk9UT0NPTF9WRVJTSU9OKSIpOw0KLSsgICAgICAgIHJldHVybiBGQUlMVVJFOw0K LSsgICAgfQ0KLSsNCi0rICAgIC8qIFRpbWVvdXRzIHNldHVwICovDQotKyAgICBpZiAobGRh cF9zZXRfb3B0aW9uKGxkYXAtPmxkLCBMREFQX09QVF9ORVRXT1JLX1RJTUVPVVQsICZsZGFw LT5iX3RpbWVvdXQpICE9IExEQVBfU1VDQ0VTUykgew0KLSsgICAgICAgIGxkYXBfcGVycm9y KGxkYXAtPmxkLCAibGRhcF9zZXRfb3B0aW9uKExEQVBfT1BUX05FVFdPUktfVElNRU9VVCki KTsNCi0rICAgIH0NCi0rICAgIGlmIChsZGFwX3NldF9vcHRpb24obGRhcC0+bGQsIExEQVBf T1BUX1RJTUVPVVQsICZsZGFwLT5zX3RpbWVvdXQpICE9IExEQVBfU1VDQ0VTUykgew0KLSsg ICAgICAgIGxkYXBfcGVycm9yKGxkYXAtPmxkLCAibGRhcF9zZXRfb3B0aW9uKExEQVBfT1BU X1RJTUVPVVQpIik7DQotKyAgICB9DQotKw0KLSsgICAgLyogVExTIHN1cHBvcnQgKi8NCi0r ICAgIGlmICggKGxkYXAtPnRscyA9PSAtMSkgfHwgKGxkYXAtPnRscyA9PSAxKSApIHsNCi0r ICAgICAgICBpZiAobGRhcF9zdGFydF90bHNfcyhsZGFwLT5sZCwgTlVMTCwgTlVMTCApICE9 IExEQVBfU1VDQ0VTUykgew0KLSsgICAgICAgICAgICAvKiBmYWlsZWQgdGhlbiByZWluaXQg dGhlIGluaXRpYWwgY29ubmVjdCAqLw0KLSsgICAgICAgICAgICBsZGFwX3BlcnJvcihsZGFw LT5sZCwgImxkYXBfY29ubmVjdDogKFRMUykgbGRhcF9zdGFydF90bHMoKSIpOw0KLSsgICAg ICAgICAgICBpZiAobGRhcC0+dGxzID09IDEpDQotKyAgICAgICAgICAgICAgICByZXR1cm4g RkFJTFVSRTsNCi0rDQotKyAgICAgICAgICAgIGxkYXAtPmxkID0gbGRhcF9pbml0KGxkYXAt PnNlcnZlcnMsIExEQVBfUE9SVCk7DQotKyAgICAgICAgICAgIGlmICghbGRhcC0+bGQpIHsg DQotKyAgICAgICAgICAgICAgICBsZGFwX3BlcnJvcihsZGFwLT5sZCwgImxkYXBfaW5pdCgp Iik7DQotKyAgICAgICAgICAgICAgICByZXR1cm4gRkFJTFVSRTsNCi0rICAgICAgICAgICAg fQ0KLSsNCi0rICAgICAgICAgICAgaWYgKCBsZGFwX3NldF9vcHRpb24obGRhcC0+bGQsIExE QVBfT1BUX1BST1RPQ09MX1ZFUlNJT04sICZ2ZXJzaW9uKSAhPSBMREFQX09QVF9TVUNDRVNT KSB7DQotKyAgICAgICAgICAgICAgICAgbGRhcF9wZXJyb3IobGRhcC0+bGQsICJsZGFwX3Nl dF9vcHRpb24oKSIpOw0KLSsgICAgICAgICAgICAgICAgIHJldHVybiBGQUlMVVJFOw0KLSsg ICAgICAgICAgICB9DQotKyAgICAgICAgfQ0KLSsgICAgfQ0KLSsNCi0rDQotKyAgICBpZiAo IGxkYXBfc2ltcGxlX2JpbmRfcyhsZGFwLT5sZCwgbGRhcC0+YmluZGRuLCBsZGFwLT5iaW5k cHcpICE9IExEQVBfU1VDQ0VTUykgew0KLSsgICAgICAgIGxkYXBfcGVycm9yKGxkYXAtPmxk LCAibGRhcF9zaW1wbGVfYmluZF9zKCkiKTsNCi0rICAgICAgICByZXR1cm4gRkFJTFVSRTsN Ci0rICAgIH0NCi0rDQotKyAgICAvKiBzYXlzIGl0IGlzIGNvbm5lY3RlZCAqLw0KLSsgICAg RkxBR19TRVRfQ09OTkVDVEVEKGxkYXAtPmZsYWdzKTsNCi0rDQotKyAgICByZXR1cm4gU1VD Q0VTUzsNCi0rfQ0KLSsNCi0rLyogbXVzdCBmcmVlIGFsbG9jYXRlZCByZXNzb3VyY2UgKi8N Ci0rc3RhdGljIGNoYXIgKiBsZGFwX2J1aWxkX2hvc3QoY2hhciAqaG9zdCwgaW50IHBvcnQp IHsNCi0rICAgIHVuc2lnbmVkIGludCBzaXplID0gc3RybGVuKGhvc3QpKzExOw0KLSsgICAg Y2hhciAqIGggPSAoY2hhciAqKSBjYWxsb2MgKHNpemUsIHNpemVvZihjaGFyKSk7DQotKyAg ICBpbnQgcmM7DQotKyAgICBpZiAoIWgpDQotKyAgICAgICAgIHJldHVybiBOVUxMOw0KLSsN Ci0rICAgIHJjID0gc25wcmludGYoaCwgc2l6ZSwgIiVzOiVkICIsIGhvc3QsIHBvcnQpOw0K LSsgICAgaWYgKHJjID09IC0xKQ0KLSsgICAgICAgIHJldHVybiBOVUxMOw0KLSsgICAgcmV0 dXJuIGg7DQotK30NCi0rDQotK3N0YXRpYyBpbnQgbGRhcF9jb3VudF9ncm91cChjb25zdCBj aGFyICogaW5wdXQpIHsNCi0rICAgIGNvbnN0IGNoYXIgKiBjaGFyc2V0ID0gIiBcdCI7DQot KyAgICBjb25zdCBjaGFyICogcHRyID0gaW5wdXQ7DQotKyAgICB1bnNpZ25lZCBpbnQgY291 bnQgPSAwOw0KLSsgICAgdW5zaWduZWQgaW50IG51bTsNCi0rDQotKyAgICBudW0gPSBzdHJz cG4ocHRyLCBjaGFyc2V0KTsNCi0rICAgIHB0ciArPSBudW07DQotKw0KLSsgICAgd2hpbGUg KChudW0gPSBzdHJjc3BuKHB0ciwgY2hhcnNldCkpKSB7DQotKyAgICBjb3VudCsrOw0KLSsg ICAgcHRyICs9IG51bTsNCi0rICAgIHB0cisrOw0KLSsgICAgfQ0KLSsNCi0rICAgIHJldHVy biBjb3VudDsNCi0rfQ0KLSsNCi0rLyogZm9ybWF0IGZpbHRlciAqLw0KLStjaGFyICogbGRh cF9wYXJzZV9ncm91cHMoY29uc3QgY2hhciAqIGdyb3Vwcykgew0KLSsgICAgdW5zaWduZWQg aW50IGJ1ZmZlcl9zaXplID0gRklMVEVSX0dST1VQX1NJWkUoZ3JvdXBzKTsNCi0rICAgIGNo YXIgKiBidWZmZXIgPSAoY2hhciAqKSBjYWxsb2MoYnVmZmVyX3NpemUsIHNpemVvZihjaGFy KSk7DQotKyAgICBjaGFyICogZyA9IE5VTEw7DQotKyAgICBjaGFyICogZ2FycmF5WzMyXTsN Ci0rICAgIHVuc2lnbmVkIGludCBpID0gMDsNCi0rDQotKyAgICBpZiAoKCFncm91cHMpfHwo IWJ1ZmZlcikpDQotKyAgICAgICAgcmV0dXJuIE5VTEw7DQotKw0KLSsgICAgZyA9IHN0cmR1 cChncm91cHMpOw0KLSsgICAgaWYgKCFnKSB7DQotKyAgICAgICAgZnJlZShidWZmZXIpOw0K LSsgICAgICAgIHJldHVybiBOVUxMOw0KLSsgICAgfQ0KLSsNCi0rICAgIC8qIGZpcnN0IHNl cGFyYXRlIGludG8gbiB0b2tlbnMgKi8NCi0rICAgIGlmICggdG9rZW5pemUoZ2FycmF5LCBz aXplb2YoZ2FycmF5KS9zaXplb2YoKmdhcnJheSksIGcpIDwgMCkgew0KLSsgICAgICAgIGZy ZWUoZyk7DQotKyAgICAgICAgZnJlZShidWZmZXIpOw0KLSsgICAgICAgIHJldHVybiBOVUxM Ow0KLSsgICAgfQ0KLSsNCi0rICAgIC8qIGJ1aWxkIHRoZSBmaW5hbCBmaWx0ZXIgZm9ybWF0 ICovDQotKyAgICBzdHJsY2F0KGJ1ZmZlciwgRklMVEVSX0dST1VQX1BSRUZJWCwgYnVmZmVy X3NpemUpOw0KLSsgICAgc3RybGNhdChidWZmZXIsIEZJTFRFUl9PUl9QUkVGSVgsIGJ1ZmZl cl9zaXplKTsNCi0rICAgIGkgPSAwOw0KLSsgICAgd2hpbGUgKGdhcnJheVtpXSkgew0KLSsg ICAgICAgIHN0cmxjYXQoYnVmZmVyLCBGSUxURVJfQ05fUFJFRklYLCBidWZmZXJfc2l6ZSk7 DQotKyAgICAgICAgc3RybGNhdChidWZmZXIsIGdhcnJheVtpXSwgYnVmZmVyX3NpemUpOw0K LSsgICAgICAgIHN0cmxjYXQoYnVmZmVyLCBGSUxURVJfQ05fU1VGRklYLCBidWZmZXJfc2l6 ZSk7DQotKyAgICAgICAgaSsrOw0KLSsgICAgfQ0KLSsgICAgc3RybGNhdChidWZmZXIsIEZJ TFRFUl9PUl9TVUZGSVgsIGJ1ZmZlcl9zaXplKTsNCi0rICAgIHN0cmxjYXQoYnVmZmVyLCBG SUxURVJfVUlEX0ZPUk1BVCwgYnVmZmVyX3NpemUpOw0KLSsgICAgc3RybGNhdChidWZmZXIs IEZJTFRFUl9HUk9VUF9TVUZGSVgsIGJ1ZmZlcl9zaXplKTsNCi0rDQotKyAgICBmcmVlKGcp Ow0KLSsgICAgcmV0dXJuIGJ1ZmZlcjsNCi0rfQ0KLSsNCi0rLyogYSBiaXQgZGlydHkgYnV0 IGxlYWsgZnJlZSAgKi8NCi0rY2hhciAqIGxkYXBfcGFyc2Vfc2VydmVycyhjb25zdCBjaGFy ICogc2VydmVycykgew0KLSsgICAgY2hhciAqIHMgPSBOVUxMOw0KLSsgICAgY2hhciAqIHRt cCA9IE5VTEwsICp1cmxzWzMyXTsNCi0rICAgIHVuc2lnbmVkIGludCBudW0gPSAwICwgaSA9 IDAgLCBhc2l6ZSA9IDA7DQotKyAgICBMREFQVVJMRGVzYyAqdXJsZFszMl07DQotKw0KLSsg ICAgaWYgKCFzZXJ2ZXJzKQ0KLSsgICAgICAgIHJldHVybiBOVUxMOw0KLSsNCi0rICAgIC8q IGxvY2FsIGNvcHkgb2YgdGhlIGFyZyAqLw0KLSsgICAgcyA9IHN0cmR1cChzZXJ2ZXJzKTsN Ci0rICAgIGlmICghcykNCi0rICAgICAgICByZXR1cm4gTlVMTDsNCi0rDQotKyAgICAvKiBm aXJzdCBzZXBhcmF0ZSBpbnRvIFVSTCB0b2tlbnMgKi8NCi0rICAgIGlmICggdG9rZW5pemUo dXJscywgc2l6ZW9mKHVybHMpL3NpemVvZigqdXJscyksIHMpIDwgMCkNCi0rICAgICAgICBy ZXR1cm4gTlVMTDsNCi0rDQotKyAgICBpID0gMDsNCi0rICAgIHdoaWxlICh1cmxzW2ldKSB7 DQotKyAgICAgICAgaWYgKCEgbGRhcF9pc19sZGFwX3VybCh1cmxzW2ldKSB8fA0KLSsgICAg ICAgICAgIChsZGFwX3VybF9wYXJzZSh1cmxzW2ldLCAmdXJsZFtpXSkgIT0gMCkpIHsNCi0r ICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSsgICAgICAgIH0NCi0rICAgICAgICBp Kys7DQotKyAgICB9DQotKw0KLSsgICAgLyogbm93IGZyZWUocykgKi8NCi0rICAgIGZyZWUg KHMpOw0KLSsNCi0rICAgIC8qIGhvdyBtdWNoIG1lbW9yeSBkbyB3ZSBuZWVkICovDQotKyAg ICBudW0gPSBpOw0KLSsgICAgZm9yIChpID0gMCA7IGkgPCBudW0gOyBpKyspDQotKyAgICAg ICAgYXNpemUgKz0gc3RybGVuKHVybGRbaV0tPmx1ZF9ob3N0KSsxMTsNCi0rDQotKyAgICAv KiBhbGxvYyAqLw0KLSsgICAgcyA9IChjaGFyICopIGNhbGxvYyggYXNpemUrMSAsIHNpemVv ZihjaGFyKSk7DQotKyAgICBpZiAoIXMpIHsNCi0rICAgICAgICBmb3IgKGkgPSAwIDsgaSA8 IG51bSA7IGkrKykNCi0rICAgICAgICAgICAgbGRhcF9mcmVlX3VybGRlc2ModXJsZFtpXSk7 DQotKyAgICAgICAgcmV0dXJuIE5VTEw7DQotKyAgICB9DQotKw0KLSsgICAgLyogdGhlbiBi dWlsZCB0aGUgZmluYWwgaG9zdCBzdHJpbmcgKi8NCi0rICAgIGZvciAoaSA9IDAgOyBpIDwg bnVtIDsgaSsrKSB7DQotKyAgICAgICAgLyogYnVpbHQgaG9zdCBwYXJ0ICovDQotKyAgICAg ICAgdG1wID0gbGRhcF9idWlsZF9ob3N0KHVybGRbaV0tPmx1ZF9ob3N0LCB1cmxkW2ldLT5s dWRfcG9ydCk7DQotKyAgICAgICAgc3RybmNhdChzLCB0bXAsIHN0cmxlbih0bXApKTsNCi0r ICAgICAgICBsZGFwX2ZyZWVfdXJsZGVzYyh1cmxkW2ldKTsNCi0rICAgICAgICBmcmVlKHRt cCk7DQotKyAgICB9DQotKw0KLSsgICAgcmV0dXJuIHM7DQotK30NCi0rDQotK3ZvaWQgbGRh cF9vcHRpb25zX3ByaW50KGxkYXBfb3B0X3QgKiBsZGFwKSB7DQotKyAgICBkZWJ1ZygibGRh cCBvcHRpb25zOiIpOw0KLSsgICAgZGVidWcoInNlcnZlcnM6ICVzIiwgbGRhcC0+c2VydmVy cyk7DQotKyAgICBpZiAobGRhcC0+dV9iYXNlZG4pDQotKyAgICAgICAgZGVidWcoInVzZXIg YmFzZWRuOiAlcyIsIGxkYXAtPnVfYmFzZWRuKTsNCi0rICAgIGlmIChsZGFwLT5nX2Jhc2Vk bikNCi0rICAgICAgICBkZWJ1ZygiZ3JvdXAgYmFzZWRuOiAlcyIsIGxkYXAtPmdfYmFzZWRu KTsNCi0rICAgIGlmIChsZGFwLT5iaW5kZG4pDQotKyAgICAgICAgZGVidWcoImJpbmRkbjog JXMiLCBsZGFwLT5iaW5kZG4pOw0KLSsgICAgaWYgKGxkYXAtPmJpbmRwdykNCi0rICAgICAg ICBkZWJ1ZygiYmluZHB3OiAlcyIsIGxkYXAtPmJpbmRwdyk7DQotKyAgICBpZiAobGRhcC0+ c2dyb3VwKQ0KLSsgICAgICAgIGRlYnVnKCJncm91cDogJXMiLCBsZGFwLT5zZ3JvdXApOw0K LSsgICAgaWYgKGxkYXAtPmZpbHRlcikNCi0rICAgICAgICBkZWJ1ZygiZmlsdGVyOiAlcyIs IGxkYXAtPmZpbHRlcik7DQotK30NCi0rDQotK3ZvaWQgbGRhcF9vcHRpb25zX2ZyZWUobGRh cF9vcHRfdCAqIGwpIHsNCi0rICAgIGlmICghbCkNCi0rICAgICAgICByZXR1cm47DQotKyAg ICBpZiAobC0+c2VydmVycykNCi0rICAgICAgICBmcmVlKGwtPnNlcnZlcnMpOw0KLSsgICAg aWYgKGwtPnVfYmFzZWRuKQ0KLSsgICAgICAgIGZyZWUobC0+dV9iYXNlZG4pOw0KLSsgICAg aWYgKGwtPmdfYmFzZWRuKQ0KLSsgICAgICAgIGZyZWUobC0+Z19iYXNlZG4pOw0KLSsgICAg aWYgKGwtPmJpbmRkbikNCi0rICAgICAgICBmcmVlKGwtPmJpbmRkbik7DQotKyAgICBpZiAo bC0+YmluZHB3KQ0KLSsgICAgICAgIGZyZWUobC0+YmluZHB3KTsNCi0rICAgIGlmIChsLT5z Z3JvdXApDQotKyAgICAgICAgZnJlZShsLT5zZ3JvdXApOw0KLSsgICAgaWYgKGwtPmZncm91 cCkNCi0rICAgICAgICBmcmVlKGwtPmZncm91cCk7DQotKyAgICBpZiAobC0+ZmlsdGVyKQ0K LSsgICAgICAgIGZyZWUobC0+ZmlsdGVyKTsNCi0rICAgIGlmIChsLT5sX2NvbmYpDQotKyAg ICAgICAgZnJlZShsLT5sX2NvbmYpOw0KLSsgICAgZnJlZShsKTsNCi0rfQ0KLSsNCi0rLyog ZnJlZSBrZXlzICovDQotK3ZvaWQgbGRhcF9rZXlzX2ZyZWUobGRhcF9rZXlfdCAqIGspIHsN Ci0rICAgIGxkYXBfdmFsdWVfZnJlZV9sZW4oay0+a2V5cyk7DQotKyAgICBmcmVlKGspOw0K LSsgICAgcmV0dXJuOw0KLSt9DQotKw0KLStsZGFwX2tleV90ICogbGRhcF9nZXR1c2Vya2V5 KGxkYXBfb3B0X3QgKmwsIGNvbnN0IGNoYXIgKiB1c2VyKSB7DQotKyAgICBsZGFwX2tleV90 ICogayA9IChsZGFwX2tleV90ICopIGNhbGxvYyAoMSwgc2l6ZW9mKGxkYXBfa2V5X3QpKTsN Ci0rICAgIExEQVBNZXNzYWdlICpyZXMsICplOw0KLSsgICAgY2hhciAqIGZpbHRlcjsNCi0r ICAgIGludCBpOw0KLSsNCi0rICAgIGlmICgoIWspIHx8ICghbCkpDQotKyAgICAgICAgIHJl dHVybiBOVUxMOw0KLSsNCi0rICAgIC8qIEFtIGkgc3RpbGwgY29ubmVjdGVkID8gUkVUUlkg biB0aW1lcyAqLw0KLSsgICAgLyogWFhYIFRPRE86IHNldHVwIHNvbWUgY29uZiB2YWx1ZSBm b3IgcmV0cnlpbmcgKi8NCi0rICAgIGlmICghKGwtPmZsYWdzICYgRkxBR19DT05ORUNURUQp KQ0KLSsgICAgICAgIGZvciAoaSA9IDAgOyBpIDwgMiA7IGkrKykNCi0rICAgICAgICAgICAg aWYgKGxkYXBfY29ubmVjdChsKSA9PSAwKQ0KLSsgICAgICAgICAgICAgICAgYnJlYWs7DQot Kw0KLSsgICAgLyogcXVpY2sgY2hlY2sgZm9yIGF0dGVtcHRzIHRvIGJlIGV2aWwgKi8NCi0r ICAgIGlmICgoc3RyY2hyKHVzZXIsICcoJykgIT0gTlVMTCkgfHwgKHN0cmNocih1c2VyLCAn KScpICE9IE5VTEwpIHx8DQotKyAgICAgICAgKHN0cmNocih1c2VyLCAnKicpICE9IE5VTEwp IHx8IChzdHJjaHIodXNlciwgJ1xcJykgIT0gTlVMTCkpDQotKyAgICAgICAgcmV0dXJuIE5V TEw7DQotKw0KLSsgICAgLyogYnVpbGQgIGZpbHRlciBmb3IgTERBUCByZXF1ZXN0ICovDQot KyAgICBSRVFVRVNUX1VTRVIoZmlsdGVyLCB1c2VyLCBsLT5maWx0ZXIpOw0KLSsNCi0rICAg IGlmICggbGRhcF9zZWFyY2hfc3QoIGwtPmxkLA0KLSsgICAgICAgIGwtPnVfYmFzZWRuLA0K LSsgICAgICAgIExEQVBfU0NPUEVfU1VCVFJFRSwNCi0rICAgICAgICBmaWx0ZXIsDQotKyAg ICAgICAgYXR0cnMsIDAsICZsLT5zX3RpbWVvdXQsICZyZXMgKSAhPSBMREFQX1NVQ0NFU1Mp IHsNCi0rICAgICAgICANCi0rICAgICAgICBsZGFwX3BlcnJvcihsLT5sZCwgImxkYXBfc2Vh cmNoX3N0KCkiKTsNCi0rDQotKyAgICAgICAgZnJlZShmaWx0ZXIpOw0KLSsgICAgICAgIGZy ZWUoayk7DQotKw0KLSsgICAgICAgIC8qIFhYWCBlcnJvciBvbiBzZWFyY2gsIHRpbWVvdXQg ZXRjLi4gY2xvc2UgYXNrIGZvciByZWNvbm5lY3QgKi8NCi0rICAgICAgICBsZGFwX2Nsb3Nl KGwpOw0KLSsNCi0rICAgICAgICByZXR1cm4gTlVMTDsNCi0rICAgIH0gDQotKw0KLSsgICAg LyogZnJlZSAqLw0KLSsgICAgZnJlZShmaWx0ZXIpOw0KLSsNCi0rICAgIC8qIGNoZWNrIGlm IGFueSByZXN1bHRzICovDQotKyAgICBpID0gbGRhcF9jb3VudF9lbnRyaWVzKGwtPmxkLHJl cyk7DQotKyAgICBpZiAoaSA8PSAwKSB7DQotKyAgICAgICAgbGRhcF9tc2dmcmVlKHJlcyk7 DQotKyAgICAgICAgZnJlZShrKTsNCi0rICAgICAgICByZXR1cm4gTlVMTDsNCi0rICAgIH0N Ci0rDQotKyAgICBpZiAoaSA+IDEpDQotKyAgICAgICAgZGVidWcoIltMREFQXSBkdXBsaWNh dGUgZW50cmllcywgdXNpbmcgdGhlIEZJUlNUIGVudHJ5IHJldHVybmVkIik7DQotKw0KLSsg ICAgZSA9IGxkYXBfZmlyc3RfZW50cnkobC0+bGQsIHJlcyk7DQotKyAgICBrLT5rZXlzID0g bGRhcF9nZXRfdmFsdWVzX2xlbihsLT5sZCwgZSwgUFVCS0VZQVRUUik7DQotKyAgICBrLT5u dW0gPSBsZGFwX2NvdW50X3ZhbHVlc19sZW4oay0+a2V5cyk7DQotKw0KLSsgICAgbGRhcF9t c2dmcmVlKHJlcyk7DQotKyAgICByZXR1cm4gazsNCi0rfQ0KLSsNCi0rDQotKy8qIC0xIGlm IHRyb3VibGUNCi0rICAgMCBpZiB1c2VyIGlzIE5PVCBtZW1iZXIgb2YgY3VycmVudCBzZXJ2 ZXIgZ3JvdXANCi0rICAgMSBpZiB1c2VyIElTIE1FTUJFUiBvZiBjdXJyZW50IHNlcnZlciBn cm91cCANCi0rICovDQotK2ludCBsZGFwX2lzbWVtYmVyKGxkYXBfb3B0X3QgKiBsLCBjb25z dCBjaGFyICogdXNlcikgew0KLSsgICAgTERBUE1lc3NhZ2UgKnJlczsNCi0rICAgIGNoYXIg KiBmaWx0ZXI7DQotKyAgICBpbnQgaTsNCi0rDQotKyAgICBpZiAoKCFsLT5zZ3JvdXApIHx8 ICEobC0+Z19iYXNlZG4pKQ0KLSsgICAgICAgIHJldHVybiAxOw0KLSsNCi0rICAgIC8qIEFt IGkgc3RpbGwgY29ubmVjdGVkID8gUkVUUlkgbiB0aW1lcyAqLw0KLSsgICAgLyogWFhYIFRP RE86IHNldHVwIHNvbWUgY29uZiB2YWx1ZSBmb3IgcmV0cnlpbmcgKi8NCi0rICAgIGlmICgh KGwtPmZsYWdzICYgRkxBR19DT05ORUNURUQpKSANCi0rICAgICAgICBmb3IgKGkgPSAwIDsg aSA8IDIgOyBpKyspDQotKyAgICAgICAgICAgIGlmIChsZGFwX2Nvbm5lY3QobCkgPT0gMCkN Ci0rICAgICAgICAgICAgICAgICBicmVhazsNCi0rDQotKyAgICAvKiBxdWljayBjaGVjayBm b3IgYXR0ZW1wdHMgdG8gYmUgZXZpbCAqLw0KLSsgICAgaWYgKChzdHJjaHIodXNlciwgJygn KSAhPSBOVUxMKSB8fCAoc3RyY2hyKHVzZXIsICcpJykgIT0gTlVMTCkgfHwNCi0rICAgICAg ICAoc3RyY2hyKHVzZXIsICcqJykgIT0gTlVMTCkgfHwgKHN0cmNocih1c2VyLCAnXFwnKSAh PSBOVUxMKSkNCi0rICAgICAgICByZXR1cm4gRkFJTFVSRTsNCi0rDQotKyAgICAvKiBidWls ZCBmaWx0ZXIgZm9yIExEQVAgcmVxdWVzdCAqLw0KLSsgICAgUkVRVUVTVF9HUk9VUChmaWx0 ZXIsIGwtPmZncm91cCwgdXNlcik7DQotKw0KLSsgICAgaWYgKGxkYXBfc2VhcmNoX3N0KCBs LT5sZCwgDQotKyAgICAgICAgbC0+Z19iYXNlZG4sDQotKyAgICAgICAgTERBUF9TQ09QRV9T VUJUUkVFLA0KLSsgICAgICAgIGZpbHRlciwNCi0rICAgICAgICBOVUxMLCAwLCAmbC0+c190 aW1lb3V0LCAmcmVzKSAhPSBMREFQX1NVQ0NFU1MpIHsNCi0rICAgIA0KLSsgICAgICAgIGxk YXBfcGVycm9yKGwtPmxkLCAibGRhcF9zZWFyY2hfc3QoKSIpOw0KLSsNCi0rICAgICAgICBm cmVlKGZpbHRlcik7DQotKw0KLSsgICAgICAgIC8qIFhYWCBlcnJvciBvbiBzZWFyY2gsIHRp bWVvdXQgZXRjLi4gY2xvc2UgYXNrIGZvciByZWNvbm5lY3QgKi8NCi0rICAgICAgICBsZGFw X2Nsb3NlKGwpOw0KLSsNCi0rICAgICAgICByZXR1cm4gRkFJTFVSRTsNCi0rICAgIH0NCi0r DQotKyAgICBmcmVlKGZpbHRlcik7DQotKw0KLSsgICAgLyogY2hlY2sgaWYgYW55IHJlc3Vs dHMgKi8NCi0rICAgIGlmIChsZGFwX2NvdW50X2VudHJpZXMobC0+bGQsIHJlcykgPiAwKSB7 DQotKyAgICAgICAgbGRhcF9tc2dmcmVlKHJlcyk7DQotKyAgICAgICAgcmV0dXJuIDE7DQot KyAgICB9DQotKw0KLSsgICAgbGRhcF9tc2dmcmVlKHJlcyk7DQotKyAgICByZXR1cm4gMDsN Ci0rfQ0KLSsNCi0rLyoNCi0rICogbGRhcC5jb25mIHNpbXBsZSBwYXJzZXINCi0rICogWFhY IFRPRE86ICBzYW5pdHkgY2hlY2tzDQotKyAqIG11c3QgZWl0aGVyDQotKyAqIC0gZnJlZSB0 aGUgcHJldmlvdXMgbGRhcF9vcHRfYmVmb3JlIHJlcGxhY2luZyBlbnRyaWVzDQotKyAqIC0g ZnJlZSBlYWNoIG5lY2Vzc2FyeSBwcmV2aW91c2x5IHBhcnNlZCBlbGVtZW50cw0KLSsgKiBy ZXQ6DQotKyAqIC0xIG9uIEZBSUxVUkUsIDAgb24gU1VDQ0VTUw0KLSsgKi8NCi0raW50IGxk YXBfcGFyc2VfbGNvbmYobGRhcF9vcHRfdCAqIGwpIHsNCi0rICAgIEZJTEUgKiBsY2Q7IC8q IGxkYXAuY29uZiBkZXNjcmlwdG9yICovDQotKyAgICBjaGFyIGJ1ZltCVUZTSVpdOw0KLSsg ICAgY2hhciAqIHMgPSBOVUxMLCAqIGsgPSBOVUxMLCAqIHYgPSBOVUxMOw0KLSsgICAgaW50 IGxpLCBsZW47DQotKw0KLSsgICAgbGNkID0gZm9wZW4gKGwtPmxfY29uZiwgInIiKTsNCi0r ICAgIGlmIChsY2QgPT0gTlVMTCkgew0KLSsgICAgICAgIC8qIGRlYnVnKCJDYW5ub3Qgb3Bl biAlcyIsIGwtPmxfY29uZik7ICovDQotKyAgICAgICAgcGVycm9yKCJsZGFwX3BhcnNlX2xj b25mKCkiKTsNCi0rICAgICAgICByZXR1cm4gRkFJTFVSRTsNCi0rICAgIH0NCi0rICAgIA0K LSsgICAgd2hpbGUgKGZnZXRzIChidWYsIHNpemVvZiAoYnVmKSwgbGNkKSAhPSBOVUxMKSB7 DQotKw0KLSsgICAgICAgIGlmICgqYnVmID09ICdcbicgfHwgKmJ1ZiA9PSAnIycpDQotKyAg ICAgICAgICAgIGNvbnRpbnVlOw0KLSsNCi0rICAgICAgICBrID0gYnVmOw0KLSsgICAgICAg IHYgPSBrOw0KLSsgICAgICAgIHdoaWxlICgqdiAhPSAnXDAnICYmICp2ICE9ICcgJyAmJiAq diAhPSAnXHQnKQ0KLSsgICAgICAgICAgICB2Kys7DQotKw0KLSsgICAgICAgIGlmICgqdiA9 PSAnXDAnKQ0KLSsgICAgICAgICAgICBjb250aW51ZTsNCi0rDQotKyAgICAgICAgKih2Kysp ID0gJ1wwJzsNCi0rDQotKyAgICAgICAgd2hpbGUgKCp2ID09ICcgJyB8fCAqdiA9PSAnXHQn KQ0KLSsgICAgICAgICAgICB2Kys7DQotKw0KLSsgICAgICAgIGxpID0gc3RybGVuICh2KSAt IDE7DQotKyAgICAgICAgd2hpbGUgKHZbbGldID09ICcgJyB8fCB2W2xpXSA9PSAnXHQnIHx8 IHZbbGldID09ICdcbicpDQotKyAgICAgICAgICAgIC0tbGk7DQotKyAgICAgICAgdltsaSAr IDFdID0gJ1wwJzsNCi0rDQotKyAgICAgICAgaWYgKCFzdHJjYXNlY21wIChrLCAidXJpIikp IHsNCi0rICAgICAgICAgICAgaWYgKChsLT5zZXJ2ZXJzID0gbGRhcF9wYXJzZV9zZXJ2ZXJz KHYpKSA9PSBOVUxMKSB7DQotKyAgICAgICAgICAgICAgICBmYXRhbCgiZXJyb3IgaW4gbGRh cCBzZXJ2ZXJzIik7DQotKyAgICAgICAgICAgIHJldHVybiBGQUlMVVJFOw0KLSsgICAgICAg ICAgICB9DQotKw0KLSsgICAgICAgIH0NCi0rICAgICAgICBlbHNlIGlmICghc3RyY2FzZWNt cCAoaywgImJhc2UiKSkgeyANCi0rICAgICAgICAgICAgcyA9IHN0cmNociAodiwgJz8nKTsN Ci0rICAgICAgICAgICAgaWYgKHMgIT0gTlVMTCkgew0KLSsgICAgICAgICAgICAgICAgbGVu ID0gcyAtIHY7DQotKyAgICAgICAgICAgICAgICBsLT51X2Jhc2VkbiA9IG1hbGxvYyAobGVu ICsgMSk7DQotKyAgICAgICAgICAgICAgICBzdHJuY3B5IChsLT51X2Jhc2VkbiwgdiwgbGVu KTsNCi0rICAgICAgICAgICAgICAgIGwtPnVfYmFzZWRuW2xlbl0gPSAnXDAnOw0KLSsgICAg ICAgICAgICB9IGVsc2Ugew0KLSsgICAgICAgICAgICAgICAgbC0+dV9iYXNlZG4gPSBzdHJk dXAgKHYpOw0KLSsgICAgICAgICAgICB9DQotKyAgICAgICAgfQ0KLSsgICAgICAgIGVsc2Ug aWYgKCFzdHJjYXNlY21wIChrLCAiYmluZGRuIikpIHsNCi0rICAgICAgICAgICAgbC0+Ymlu ZGRuID0gc3RyZHVwICh2KTsNCi0rICAgICAgICB9DQotKyAgICAgICAgZWxzZSBpZiAoIXN0 cmNhc2VjbXAgKGssICJiaW5kcHciKSkgew0KLSsgICAgICAgICAgICBsLT5iaW5kcHcgPSBz dHJkdXAgKHYpOw0KLSsgICAgICAgIH0NCi0rICAgICAgICBlbHNlIGlmICghc3RyY2FzZWNt cCAoaywgInRpbWVsaW1pdCIpKSB7DQotKyAgICAgICAgICAgIGwtPnNfdGltZW91dC50dl9z ZWMgPSBhdG9pICh2KTsNCi0rICAgICAgICAgICAgICAgIH0NCi0rICAgICAgICBlbHNlIGlm ICghc3RyY2FzZWNtcCAoaywgImJpbmRfdGltZWxpbWl0IikpIHsNCi0rICAgICAgICAgICAg bC0+Yl90aW1lb3V0LnR2X3NlYyA9IGF0b2kgKHYpOw0KLSsgICAgICAgIH0NCi0rICAgICAg ICBlbHNlIGlmICghc3RyY2FzZWNtcCAoaywgInNzbCIpKSB7DQotKyAgICAgICAgICAgIGlm ICghc3RyY2FzZWNtcCAodiwgInN0YXJ0X3RscyIpKQ0KLSsgICAgICAgICAgICAgICAgbC0+ dGxzID0gMTsNCi0rICAgICAgICB9DQotKyAgICB9DQotKw0KLSsgICAgZmNsb3NlIChsY2Qp Ow0KLSsgICAgcmV0dXJuIFNVQ0NFU1M7DQotK30NCi0rDQotKyNlbmRpZiAvKiBXSVRIX0xE QVBfUFVCS0VZICovDQotZGlmZiAtTnVhciAtLWV4Y2x1ZGUgJyoub3JpZycgLS1leGNsdWRl ICcqLnJlaicgbGRhcGF1dGguaCBsZGFwYXV0aC5oDQotLS0tIGxkYXBhdXRoLmgJMTk2OS0x Mi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDANCi0rKysgbGRhcGF1dGguaAkyMDA4LTA4 LTIzIDE1OjAyOjQ3LjAwMDAwMDAwMCAtMDcwMA0KLUBAIC0wLDAgKzEsMTI0IEBADQotKy8q DQotKyAqICRJZDogb3BlbnNzaC1scGstNC4zcDEtMC4zLjcucGF0Y2gsdiAxLjMgMjAwNi8w NC8xOCAxNToyOTowOSBlYXUgRXhwICQgDQotKyAqLw0KLSsNCi0rLyoNCi0rICoNCi0rICog Q29weXJpZ2h0IChjKSAyMDA1LCBFcmljIEFVR0UgPGVhdUBwaGVhci5vcmc+DQotKyAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuDQotKyAqDQotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMgYXJlIG1ldDoNCi0rICoNCi0rICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KLSsgKiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQotKyAqIE5laXRoZXIgdGhlIG5h bWUgb2YgdGhlIHBoZWFyLm9yZyBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMg bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLg0KLSsgKg0KLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCANCi0rICogQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIA0KLSsg KiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD SUFMLCBFWEVNUExBUlksIA0KLSsgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOyANCi0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM SVRZLCANCi0rICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCi0r ICoNCi0rICoNCi0rICovDQotKw0KLSsjaWZuZGVmIExEQVBBVVRIX0gNCi0rI2RlZmluZSBM REFQQVVUSF9IDQotKw0KLSsjZGVmaW5lIExEQVBfREVQUkVDQVRFRCAxDQotKw0KLSsjaW5j bHVkZSA8c3RyaW5nLmg+DQotKyNpbmNsdWRlIDx0aW1lLmg+DQotKyNpbmNsdWRlIDxsZGFw Lmg+DQotKyNpbmNsdWRlIDxsYmVyLmg+DQotKw0KLSsvKiB0b2tlbnMgaW4gdXNlIGZvciBj b25maWcgKi8NCi0rI2RlZmluZSBfREVGQVVMVF9MUEtfVE9LRU4gIlVzZUxQSyINCi0rI2Rl ZmluZSBfREVGQVVMVF9TUlZfVE9LRU4gIkxwa1NlcnZlcnMiDQotKyNkZWZpbmUgX0RFRkFV TFRfVVNSX1RPS0VOICJMcGtVc2VyRE4iDQotKyNkZWZpbmUgX0RFRkFVTFRfR1JQX1RPS0VO ICJMcGtHcm91cEROIg0KLSsjZGVmaW5lIF9ERUZBVUxUX0JETl9UT0tFTiAiTHBrQmluZERO Ig0KLSsjZGVmaW5lIF9ERUZBVUxUX0JQV19UT0tFTiAiTHBrQmluZFB3Ig0KLSsjZGVmaW5l IF9ERUZBVUxUX01ZR19UT0tFTiAiTHBrU2VydmVyR3JvdXAiDQotKyNkZWZpbmUgX0RFRkFV TFRfRklMX1RPS0VOICJMcGtGaWx0ZXIiDQotKyNkZWZpbmUgX0RFRkFVTFRfVExTX1RPS0VO ICJMcGtGb3JjZVRMUyINCi0rI2RlZmluZSBfREVGQVVMVF9CVElfVE9LRU4gIkxwa0JpbmRU aW1lbGltaXQiDQotKyNkZWZpbmUgX0RFRkFVTFRfU1RJX1RPS0VOICJMcGtTZWFyY2hUaW1l bGltaXQiDQotKyNkZWZpbmUgX0RFRkFVTFRfTERQX1RPS0VOICJMcGtMZGFwQ29uZiINCi0r DQotKy8qIGRlZmF1bHQgb3B0aW9ucyAqLw0KLSsjZGVmaW5lIF9ERUZBVUxUX0xQS19PTiAw DQotKyNkZWZpbmUgX0RFRkFVTFRfTFBLX1NFUlZFUlMgTlVMTA0KLSsjZGVmaW5lIF9ERUZB VUxUX0xQS19VRE4gTlVMTA0KLSsjZGVmaW5lIF9ERUZBVUxUX0xQS19HRE4gTlVMTA0KLSsj ZGVmaW5lIF9ERUZBVUxUX0xQS19CSU5ERE4gTlVMTA0KLSsjZGVmaW5lIF9ERUZBVUxUX0xQ S19CSU5EUFcgTlVMTA0KLSsjZGVmaW5lIF9ERUZBVUxUX0xQS19TR1JPVVAgTlVMTA0KLSsj ZGVmaW5lIF9ERUZBVUxUX0xQS19GSUxURVIgTlVMTA0KLSsjZGVmaW5lIF9ERUZBVUxUX0xQ S19UTFMgLTENCi0rI2RlZmluZSBfREVGQVVMVF9MUEtfQlRJTUVPVVQgMTANCi0rI2RlZmlu ZSBfREVGQVVMVF9MUEtfU1RJTUVPVVQgMTANCi0rI2RlZmluZSBfREVGQVVMVF9MUEtfTERQ IE5VTEwNCi0rDQotKy8qIGZsYWdzICovDQotKyNkZWZpbmUgRkxBR19FTVBUWQkgICAgMHgw MDAwMDAwMA0KLSsjZGVmaW5lIEZMQUdfQ09OTkVDVEVECSAgICAweDAwMDAwMDAxDQotKw0K LSsvKiBmbGFnIG1hY3JvcyAqLw0KLSsjZGVmaW5lIEZMQUdfU0VUX0VNUFRZKHgpCQl4Jj0o RkxBR19FTVBUWSkNCi0rI2RlZmluZSBGTEFHX1NFVF9DT05ORUNURUQoeCkJCXh8PShGTEFH X0NPTk5FQ1RFRCkNCi0rI2RlZmluZSBGTEFHX1NFVF9ESVNDT05ORUNURUQoeCkJeCY9fihG TEFHX0NPTk5FQ1RFRCkNCi0rDQotKy8qIGRlZmluZXMgKi8NCi0rI2RlZmluZSBGQUlMVVJF IC0xDQotKyNkZWZpbmUgU1VDQ0VTUyAwDQotKyNkZWZpbmUgUFVCS0VZQVRUUiAic3NoUHVi bGljS2V5Ig0KLSsNCi0rLyogDQotKyAqDQotKyAqIGRlZmluZWQgZmlsZXMgcGF0aCANCi0r ICogKHNob3VsZCBiZSByZWxvY2F0ZWQgdG8gcGF0aG5hbWVzLmgsDQotKyAqIGlmIG9uZSBk YXkgaXQncyBpbmNsdWRlZCB3aXRoaW4gdGhlIHRyZWUpIA0KLSsgKg0KLSsgKi8NCi0rI2Rl ZmluZSBfUEFUSF9MREFQX0NPTkZJR19GSUxFICIvZXRjL2xkYXAuY29uZiINCi0rDQotKy8q IHN0cnVjdHVyZXMgKi8NCi0rdHlwZWRlZiBzdHJ1Y3QgbGRhcF9vcHRpb25zIHsNCi0rICAg IGludCBvbjsJCQkvKiBVc2UgaXQgb3IgTk9UICovDQotKyAgICBMREFQICogbGQ7CQkJLyog TERBUCBmaWxlIGRlc2MgKi8NCi0rICAgIGNoYXIgKiBzZXJ2ZXJzOwkJLyogcGFyc2VkIHNl cnZlcnMgZm9yIGxkYXBsaWIgZmFpbG92ZXIgaGFuZGxpbmcgKi8NCi0rICAgIGNoYXIgKiB1 X2Jhc2VkbjsJCS8qIHVzZXIgYmFzZWRuICovDQotKyAgICBjaGFyICogZ19iYXNlZG47CQkv KiBncm91cCBiYXNlZG4gKi8NCi0rICAgIGNoYXIgKiBiaW5kZG47CQkvKiBiaW5kZG4gKi8N Ci0rICAgIGNoYXIgKiBiaW5kcHc7CQkvKiBiaW5kIHBhc3N3b3JkICovDQotKyAgICBjaGFy ICogc2dyb3VwOwkJLyogc2VydmVyIGdyb3VwICovDQotKyAgICBjaGFyICogZmdyb3VwOwkJ LyogZ3JvdXAgZmlsdGVyICovDQotKyAgICBjaGFyICogZmlsdGVyOwkJLyogYWRkaXRpb25h bCBmaWx0ZXIgKi8NCi0rICAgIGNoYXIgKiBsX2NvbmY7CQkvKiB1c2UgbGRhcC5jb25mICov DQotKyAgICBpbnQgdGxzOwkJCS8qIFRMUyBvbmx5ICovDQotKyAgICBzdHJ1Y3QgdGltZXZh bCBiX3RpbWVvdXQ7ICAgLyogYmluZCB0aW1lb3V0ICovDQotKyAgICBzdHJ1Y3QgdGltZXZh bCBzX3RpbWVvdXQ7ICAgLyogc2VhcmNoIHRpbWVvdXQgKi8NCi0rICAgIHVuc2lnbmVkIGlu dCBmbGFnczsJCS8qIG1pc2MgZmxhZ3MgKHJlY29ubmVjdGlvbiwgZnV0dXJlIHVzZT8pICov DQotK30gbGRhcF9vcHRfdDsNCi0rDQotK3R5cGVkZWYgc3RydWN0IGxkYXBfa2V5cyB7DQot KyAgICBzdHJ1Y3QgYmVydmFsICoqIGtleXM7CS8qIHRoZSBwdWJsaWMga2V5cyByZXRyaWV2 ZWQgKi8NCi0rICAgIHVuc2lnbmVkIGludCBudW07CQkvKiBudW1iZXIgb2Yga2V5cyAqLw0K LSt9IGxkYXBfa2V5X3Q7DQotKw0KLSsNCi0rLyogZnVuY3Rpb24gaGVhZGVycyAqLw0KLSt2 b2lkIGxkYXBfY2xvc2UobGRhcF9vcHRfdCAqKTsNCi0raW50IGxkYXBfY29ubmVjdChsZGFw X29wdF90ICopOw0KLStjaGFyICogbGRhcF9wYXJzZV9ncm91cHMoY29uc3QgY2hhciAqKTsN Ci0rY2hhciAqIGxkYXBfcGFyc2Vfc2VydmVycyhjb25zdCBjaGFyICopOw0KLSt2b2lkIGxk YXBfb3B0aW9uc19wcmludChsZGFwX29wdF90ICopOw0KLSt2b2lkIGxkYXBfb3B0aW9uc19m cmVlKGxkYXBfb3B0X3QgKik7DQotK3ZvaWQgbGRhcF9rZXlzX2ZyZWUobGRhcF9rZXlfdCAq KTsNCi0raW50IGxkYXBfcGFyc2VfbGNvbmYobGRhcF9vcHRfdCAqKTsNCi0rbGRhcF9rZXlf dCAqIGxkYXBfZ2V0dXNlcmtleShsZGFwX29wdF90ICosIGNvbnN0IGNoYXIgKik7DQotK2lu dCBsZGFwX2lzbWVtYmVyKGxkYXBfb3B0X3QgKiwgY29uc3QgY2hhciAqKTsNCi0rDQotKyNl bmRpZg0KLWRpZmYgLU51YXIgLS1leGNsdWRlICcqLm9yaWcnIC0tZXhjbHVkZSAnKi5yZWon IGxway11c2VyLWV4YW1wbGUudHh0IGxway11c2VyLWV4YW1wbGUudHh0DQotLS0tIGxway11 c2VyLWV4YW1wbGUudHh0CTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwDQot KysrIGxway11c2VyLWV4YW1wbGUudHh0CTIwMDgtMDgtMjMgMTU6MDI6NDcuMDAwMDAwMDAw IC0wNzAwDQotQEAgLTAsMCArMSwxMTcgQEANCi0rDQotK1Bvc3QgdG8gTUwgLT4gVXNlciBN YWRlIFF1aWNrIEluc3RhbGwgRG9jLg0KLStDb250cmlidXRpb24gZnJvbSBKb2huIExhbmUg PGpvaG5AbGFuZS51ay5uZXQ+DQotKw0KLSsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQotKw0K LStPcGVuU1NIIExEQVAga2V5c3RvcmUgUGF0Y2gNCi0rPT09PT09PT09PT09PT09PT09PT09 PT09PT09DQotKw0KLStOT1RFOiB0aGVzZSBub3RlcyBhcmUgYSB0cmFuc2NyaXB0IG9mIGEg c3BlY2lmaWMgaW5zdGFsbGF0aW9uDQotKyAgICAgIHRoZXkgd29yayBmb3IgbWUsIHlvdXIg c3BlY2lmaWNzIG1heSBiZSBkaWZmZXJlbnQhDQotKyAgICAgIGZyb20gSm9obiBMYW5lIE1h cmNoIDE3dGggMjAwNSAgICAgICAgIGpvaG5AbGFuZS51ay5uZXQNCi0rDQotK1RoaXMgaXMg YSBwYXRjaCB0byBPcGVuU1NIIDQuMHAxIHRvIGFsbG93IGl0IHRvIG9idGFpbiB1c2Vycycg cHVibGljIGtleXMNCi0rZnJvbSB0aGVpciBMREFQIHJlY29yZCBhcyBhbiBhbHRlcm5hdGl2 ZSB0byB+Ly5zc2gvYXV0aG9yaXplZF9rZXlzLg0KLSsNCi0rKEFzc3VtaW5nIGhlcmUgdGhh dCBuZWNlc3NhcnkgYnVpbGQgc3R1ZmYgaXMgaW4gJEJVSUxEKQ0KLSsNCi0rY2QgJEJVSUxE L29wZW5zc2gtNC4wcDENCi0rcGF0Y2ggLU5wMSAtaSAkQlVJTEQvb3BlbnNzaC1scGstNC4w cDEtMC4zLnBhdGNoDQotK21rZGlyIC1wIC92YXIvZW1wdHkgJiYNCi0rLi9jb25maWd1cmUg LS1wcmVmaXg9L3VzciAtLXN5c2NvbmZkaXI9L2V0Yy9zc2ggXA0KLSsgICAgLS1saWJleGVj ZGlyPS91c3Ivc2JpbiAtLXdpdGgtbWQ1LXBhc3N3b3JkcyAtLXdpdGgtcGFtIFwNCi0rICAg IC0td2l0aC1saWJzPSItbGxkYXAiIC0td2l0aC1jcHBmbGFncz0iLURXSVRIX0xEQVBfUFVC S0VZIg0KLStOb3cgZG8uDQotK21ha2UgJiYNCi0rbWFrZSBpbnN0YWxsDQotKw0KLStBZGQg dGhlIGZvbGxvd2luZyBjb25maWcgdG8gL2V0Yy9zc2gvc3NoX2NvbmZpZw0KLStVc2VMUEsg eWVzDQotK0xwa1NlcnZlcnMgbGRhcDovL215aG9zdC5teWRvbWFpbi5jb20NCi0rTHBrVXNl ckROICBvdT1QZW9wbGUsZGM9bXlkb21haW4sZGM9Y29tDQotKw0KLStXZSBuZWVkIHRvIHRl bGwgc3NoZCBhYm91dCB0aGUgU1NMIGtleXMgZHVyaW5nIGJvb3QsIGFzIHJvb3Qncw0KLStl bnZpcm9ubWVudCBkb2VzIG5vdCBleGlzdCBhdCB0aGF0IHRpbWUuIEVkaXQgL2V0Yy9yYy5k L2luaXQuZC9zc2hkLg0KLStDaGFuZ2UgdGhlIHN0YXJ0dXAgY29kZSBmcm9tIHRoaXM6DQot KyAgICAgICAgICAgICAgICBlY2hvICJTdGFydGluZyBTU0ggU2VydmVyLi4uIg0KLSsgICAg ICAgICAgICAgICAgbG9hZHByb2MgL3Vzci9zYmluL3NzaGQNCi0rICAgICAgICAgICAgICAg IDs7DQotK3RvIHRoaXM6DQotKyAgICAgICAgICAgICAgICBlY2hvICJTdGFydGluZyBTU0gg U2VydmVyLi4uIg0KLSsgICAgICAgICAgICAgICAgTERBUFJDPSIvcm9vdC8ubGRhcHJjIiBs b2FkcHJvYyAvdXNyL3NiaW4vc3NoZA0KLSsgICAgICAgICAgICAgICAgOzsNCi0rDQotK1Jl LXN0YXJ0IHRoZSBzc2hkIGRhZW1vbjoNCi0rL2V0Yy9yYy5kL2luaXQuZC9zc2hkIHJlc3Rh cnQNCi0rDQotK0luc3RhbGwgdGhlIGFkZGl0aW9uYWwgTERBUCBzY2hlbWENCi0rY3AgJEJV SUxEL29wZW5zc2gtbHBrLTAuMi5zY2hlbWEgIC9ldGMvb3BlbmxkYXAvc2NoZW1hL29wZW5z c2guc2NoZW1hDQotKw0KLStOb3cgYWRkIHRoZSBvcGVuU1NIIExEQVAgc2NoZW1hIHRvIC9l dGMvb3BlbmxkYXAvc2xhcGQuY29uZjoNCi0rQWRkIHRoZSBmb2xsb3dpbmcgdG8gdGhlIGVu ZCBvZiB0aGUgZXhpc3RpbmcgYmxvY2sgb2Ygc2NoZW1hIGluY2x1ZGVzDQotK2luY2x1ZGUg ICAgICAgICAvZXRjL29wZW5sZGFwL3NjaGVtYS9vcGVuc3NoLnNjaGVtYQ0KLSsNCi0rUmUt c3RhcnQgdGhlIExEQVAgc2VydmVyOg0KLSsvZXRjL3JjLmQvaW5pdC5kL3NsYXBkIHJlc3Rh cnQNCi0rDQotK1RvIGFkZCBvbmUgb3IgbW9yZSBwdWJsaWMga2V5cyB0byBhIHVzZXIsIGVn ICJ0ZXN0dXNlciIgOg0KLStsZGFwc2VhcmNoIC14IC1XIC1aIC1MTEwgLWIgInVpZD10ZXN0 dXNlcixvdT1QZW9wbGUsZGM9bXlkb21haW4sZGM9Y29tIiAtRA0KLSsidWlkPXRlc3R1c2Vy LG91PVBlb3BsZSxkYz1teWRvbWFpbixkYz1jb20iID4gL3RtcC90ZXN0dXNlcg0KLSsNCi0r YXBwZW5kIHRoZSBmb2xsb3dpbmcgdG8gdGhpcyAvdG1wL3Rlc3R1c2VyIGZpbGUNCi0rb2Jq ZWN0Y2xhc3M6IGxkYXBQdWJsaWNLZXkNCi0rc3NoUHVibGljS2V5OiBzc2gtcnNhDQotK0FB QUFCM056YUMxeWMyRUFBQUFCSlFBQUFJQjNkc3J3cVhxRDdFNHpZWXJ4d2RES0JVUXhLTWlv WHk5cHhGVmFpNjRrQVB4alU5S1MNCi0rcUlvN1Fma2pzbGZzamZsa3NqZmxkZmtqc2xkZmpM WC81emt6Um1UMjhJNXBpR3p1blB2MTdTODl6OFh3U3N1QW9SMXQ4NnQrNWRsSQ0KLSs3ZVpF L2dWYm4yVVFrUXE3K2tkRFRTMnlYVjZWbkM1Mk4va0tMRzNjaUJrQkF3PT0gR2VuZXJhbCBQ dXJwb3NlIFJTQSBLZXkNCi0rDQotK1RoZW4gZG8gYSBtb2RpZnk6DQotK2xkYXBtb2RpZnkg LXggLUQgInVpZD10ZXN0dXNlcixvdT1QZW9wbGUsZGM9bXlkb21haW4sZGM9Y29tIiAtVyAt Zg0KLSsvdG1wL3Rlc3R1c2VyIC1aDQotK0VudGVyIExEQVAgUGFzc3dvcmQ6DQotK21vZGlm eWluZyBlbnRyeSAidWlkPXRlc3R1c2VyLG91PVBlb3BsZSxkYz1teWRvbWFpbixkYz1jb20i DQotK0FuZCBjaGVjayB0aGUgbW9kaWZ5IGlzIG9rOg0KLStsZGFwc2VhcmNoIC14IC1XIC1a IC1iICJ1aWQ9dGVzdHVzZXIsb3U9UGVvcGxlLGRjPW15ZG9tYWluLGRjPWNvbSIgLUQNCi0r InVpZD10ZXN0dXNlcixvdT1QZW9wbGUsZGM9bXlkb21haW4sZGM9Y29tIg0KLStFbnRlciBM REFQIFBhc3N3b3JkOg0KLSsjIGV4dGVuZGVkIExESUYNCi0rIw0KLSsjIExEQVB2Mw0KLSsj IGJhc2UgPHVpZD10ZXN0dXNlcixvdT1QZW9wbGUsZGM9bXlkb21haW4sZGM9Y29tPiB3aXRo IHNjb3BlIHN1Yg0KLSsjIGZpbHRlcjogKG9iamVjdGNsYXNzPSopDQotKyMgcmVxdWVzdGlu ZzogQUxMDQotKyMNCi0rDQotKyMgdGVzdHVzZXIsIFBlb3BsZSwgbXlkb21haW4uY29tDQot K2RuOiB1aWQ9dGVzdHVzZXIsb3U9UGVvcGxlLGRjPW15ZG9tYWluLGRjPWNvbQ0KLSt1aWQ6 IHRlc3R1c2VyDQotK2NuOiB0ZXN0dXNlcg0KLStvYmplY3RDbGFzczogYWNjb3VudA0KLStv YmplY3RDbGFzczogcG9zaXhBY2NvdW50DQotK29iamVjdENsYXNzOiB0b3ANCi0rb2JqZWN0 Q2xhc3M6IHNoYWRvd0FjY291bnQNCi0rb2JqZWN0Q2xhc3M6IGxkYXBQdWJsaWNLZXkNCi0r c2hhZG93TGFzdENoYW5nZTogMTI3NTcNCi0rc2hhZG93TWF4OiA5OTk5OQ0KLStzaGFkb3dX YXJuaW5nOiA3DQotK2xvZ2luU2hlbGw6IC9iaW4vYmFzaA0KLSt1aWROdW1iZXI6IDk5OTkN Ci0rZ2lkTnVtYmVyOiA1MDENCi0raG9tZURpcmVjdG9yeTogL2hvbWUvdGVzdHVzZXINCi0r dXNlclBhc3N3b3JkOjogZTFOVFNFRjlVRGd3VjFobk0xVmpVRFJKSzBrMVluRmlMMWQ0WlVK T2JYbFpaM1ozVVRVPQ0KLStzc2hQdWJsaWNLZXk6IHNzaC1yc2ENCi0rQUFBQUIzTnphQzF5 YzJFQUFBQUJKUUFBQUlCM2RzcndxWHFEN0U0ellZcnh3ZERLQlVReEtNaW9YeTlweEZWYWk2 NGtBUHhqVTlLU3FJbzdRZmtqc2xmc2pmbGtzamZsZGZranNsZGZqTFgvNXprelJtVDI4STVw aUd6dW5QdjE3Uzg5eg0KLSs4WHdTc3VBb1IxdDg2dCs1ZGxJN2VaRS9nVmJuMlVRa1FxNytr ZERUUzJ5WFY2Vm5DNTJOL2tLTEczY2lCa0JBdz09IEdlbmVyYWwgUHVycG9zZSBSU0EgS2V5 DQotKw0KLSsjIHNlYXJjaCByZXN1bHQNCi0rc2VhcmNoOiAzDQotK3Jlc3VsdDogMCBTdWNj ZXNzDQotKw0KLSsjIG51bVJlc3BvbnNlczogMg0KLSsjIG51bUVudHJpZXM6IDENCi0rDQot K05vdyBzdGFydCBhIHNzaCBzZXNzaW9uIHRvIHVzZXIgInRlc3R1c2VyIiBmcm9tIHVzdWFs IHNzaCBjbGllbnQgKGUuZy4NCi0rcHVUVFkpLiBMb2dpbiBzaG91bGQgc3VjY2VlZC4NCi0r DQotKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysNCi1kaWZmIC1OdWFyIC0tZXhjbHVkZSAnKi5v cmlnJyAtLWV4Y2x1ZGUgJyoucmVqJyBNYWtlZmlsZS5pbiBNYWtlZmlsZS5pbg0KLS0tLSBN YWtlZmlsZS5pbgkyMDA4LTA3LTA4IDA3OjIxOjEyLjAwMDAwMDAwMCAtMDcwMA0KLSsrKyBN YWtlZmlsZS5pbgkyMDA4LTA4LTIzIDE1OjAyOjQ3LjAwMDAwMDAwMCAtMDcwMA0KLUBAIC04 Niw3ICs4Niw3IEBADQotIAlhdXRoLWtyYjUubyBcDQotIAlhdXRoMi1nc3MubyBnc3Mtc2Vy di5vIGdzcy1zZXJ2LWtyYjUubyBcDQotIAlsb2dpbnJlYy5vIGF1dGgtcGFtLm8gYXV0aC1z aGFkb3cubyBhdXRoLXNpYS5vIG1kNWNyeXB0Lm8gXA0KLS0JYXVkaXQubyBhdWRpdC1ic20u byBwbGF0Zm9ybS5vIHNmdHAtc2VydmVyLm8gc2Z0cC1jb21tb24ubw0KLSsJYXVkaXQubyBh dWRpdC1ic20ubyBwbGF0Zm9ybS5vIGxkYXBhdXRoLm8gc2Z0cC1zZXJ2ZXIubyBzZnRwLWNv bW1vbi5vDQotIA0KLSBNQU5QQUdFUwk9IG1vZHVsaS41Lm91dCBzY3AuMS5vdXQgc3NoLWFk ZC4xLm91dCBzc2gtYWdlbnQuMS5vdXQgc3NoLWtleWdlbi4xLm91dCBzc2gta2V5c2Nhbi4x Lm91dCBzc2guMS5vdXQgc3NoZC44Lm91dCBzZnRwLXNlcnZlci44Lm91dCBzZnRwLjEub3V0 IHNzaC1yYW5kLWhlbHBlci44Lm91dCBzc2gta2V5c2lnbi44Lm91dCBzc2hkX2NvbmZpZy41 Lm91dCBzc2hfY29uZmlnLjUub3V0DQotIE1BTlBBR0VTX0lOCT0gbW9kdWxpLjUgc2NwLjEg c3NoLWFkZC4xIHNzaC1hZ2VudC4xIHNzaC1rZXlnZW4uMSBzc2gta2V5c2Nhbi4xIHNzaC4x IHNzaGQuOCBzZnRwLXNlcnZlci44IHNmdHAuMSBzc2gtcmFuZC1oZWxwZXIuOCBzc2gta2V5 c2lnbi44IHNzaGRfY29uZmlnLjUgc3NoX2NvbmZpZy41DQotZGlmZiAtTnVhciAtLWV4Y2x1 ZGUgJyoub3JpZycgLS1leGNsdWRlICcqLnJlaicgb3BlbnNzaC1scGtfb3BlbmxkYXAuc2No ZW1hIG9wZW5zc2gtbHBrX29wZW5sZGFwLnNjaGVtYQ0KLS0tLSBvcGVuc3NoLWxwa19vcGVu bGRhcC5zY2hlbWEJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDANCi0rKysg b3BlbnNzaC1scGtfb3BlbmxkYXAuc2NoZW1hCTIwMDgtMDgtMjMgMTU6MDI6NDcuMDAwMDAw MDAwIC0wNzAwDQotQEAgLTAsMCArMSwxOSBAQA0KLSsjDQotKyMgTERBUCBQdWJsaWMgS2V5 IFBhdGNoIHNjaGVtYSBmb3IgdXNlIHdpdGggb3BlbnNzaC1sZGFwcHVia2V5DQotKyMgQXV0 aG9yOiBFcmljIEFVR0UgPGVhdUBwaGVhci5vcmc+DQotKyMgDQotKyMgQmFzZWQgb24gdGhl IHByb3Bvc2FsIG9mIDogTWFyayBSdWlqdGVyDQotKyMNCi0rDQotKw0KLSsjIG9jdGV0U3Ry aW5nIFNZTlRBWA0KLSthdHRyaWJ1dGV0eXBlICggMS4zLjYuMS40LjEuMjQ1NTIuNTAwLjEu MS4xLjEzIE5BTUUgJ3NzaFB1YmxpY0tleScgDQotKwlERVNDICdNQU5EQVRPUlk6IE9wZW5T U0ggUHVibGljIGtleScgDQotKwlFUVVBTElUWSBvY3RldFN0cmluZ01hdGNoDQotKwlTWU5U QVggMS4zLjYuMS40LjEuMTQ2Ni4xMTUuMTIxLjEuNDAgKQ0KLSsNCi0rIyBwcmludGFibGVT dHJpbmcgU1lOVEFYIHllc3xubw0KLStvYmplY3RjbGFzcyAoIDEuMy42LjEuNC4xLjI0NTUy LjUwMC4xLjEuMi4wIE5BTUUgJ2xkYXBQdWJsaWNLZXknIFNVUCB0b3AgQVVYSUxJQVJZDQot KwlERVNDICdNQU5EQVRPUlk6IE9wZW5TU0ggTFBLIG9iamVjdGNsYXNzJw0KLSsJTVVTVCAo IHNzaFB1YmxpY0tleSAkIHVpZCApIA0KLSsJKQ0KLWRpZmYgLU51YXIgLS1leGNsdWRlICcq Lm9yaWcnIC0tZXhjbHVkZSAnKi5yZWonIG9wZW5zc2gtbHBrX3N1bi5zY2hlbWEgb3BlbnNz aC1scGtfc3VuLnNjaGVtYQ0KLS0tLSBvcGVuc3NoLWxwa19zdW4uc2NoZW1hCTE5NjktMTIt MzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwDQotKysrIG9wZW5zc2gtbHBrX3N1bi5zY2hl bWEJMjAwOC0wOC0yMyAxNTowMjo0Ny4wMDAwMDAwMDAgLTA3MDANCi1AQCAtMCwwICsxLDIx IEBADQotKyMNCi0rIyBMREFQIFB1YmxpYyBLZXkgUGF0Y2ggc2NoZW1hIGZvciB1c2Ugd2l0 aCBvcGVuc3NoLWxkYXBwdWJrZXkNCi0rIyBBdXRob3I6IEVyaWMgQVVHRSA8ZWF1QHBoZWFy Lm9yZz4NCi0rIyANCi0rIyBTY2hlbWEgZm9yIFN1biBEaXJlY3RvcnkgU2VydmVyLg0KLSsj IEJhc2VkIG9uIHRoZSBvcmlnaW5hbCBzY2hlbWEsIG1vZGlmaWVkIGJ5IFN0ZWZhbiBGaXNj aGVyLg0KLSsjDQotKw0KLStkbjogY249c2NoZW1hDQotKw0KLSsjIG9jdGV0U3RyaW5nIFNZ TlRBWA0KLSthdHRyaWJ1dGVUeXBlczogKCAxLjMuNi4xLjQuMS4yNDU1Mi41MDAuMS4xLjEu MTMgTkFNRSAnc3NoUHVibGljS2V5JyANCi0rCURFU0MgJ01BTkRBVE9SWTogT3BlblNTSCBQ dWJsaWMga2V5JyANCi0rCUVRVUFMSVRZIG9jdGV0U3RyaW5nTWF0Y2gNCi0rCVNZTlRBWCAx LjMuNi4xLjQuMS4xNDY2LjExNS4xMjEuMS40MCApDQotKw0KLSsjIHByaW50YWJsZVN0cmlu ZyBTWU5UQVggeWVzfG5vDQotK29iamVjdENsYXNzZXM6ICggMS4zLjYuMS40LjEuMjQ1NTIu NTAwLjEuMS4yLjAgTkFNRSAnbGRhcFB1YmxpY0tleScgU1VQIHRvcCBBVVhJTElBUlkNCi0r CURFU0MgJ01BTkRBVE9SWTogT3BlblNTSCBMUEsgb2JqZWN0Y2xhc3MnDQotKwlNVVNUICgg c3NoUHVibGljS2V5ICQgdWlkICkgDQotKwkpDQotZGlmZiAtTnVhciAtLWV4Y2x1ZGUgJyou b3JpZycgLS1leGNsdWRlICcqLnJlaicgUkVBRE1FLmxwayBSRUFETUUubHBrDQotLS0tIFJF QURNRS5scGsJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDANCi0rKysgUkVB RE1FLmxwawkyMDA4LTA4LTIzIDE1OjAyOjQ3LjAwMDAwMDAwMCAtMDcwMA0KLUBAIC0wLDAg KzEsMjY3IEBADQotK09wZW5TU0ggTERBUCBQVUJMSUMgS0VZIFBBVENIIA0KLStDb3B5cmln aHQgKGMpIDIwMDMgRXJpYyBBVUdFIChlYXVAcGhlYXIub3JnKQ0KLStBbGwgcmlnaHRzIHJl c2VydmVkLg0KLSsNCi0rUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQotK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KLSthcmUgbWV0 Og0KLSsxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodA0KLSsgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQotKzIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQotKyAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUNCi0rICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCi0rMy4gVGhlIG5hbWUgb2Yg dGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzDQotKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KLSsNCi0rVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1INCi0rSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN UExJRUQgV0FSUkFOVElFUw0KLStPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELg0KLStJTiBOTyBFVkVOVCBT SEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQot K0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVA0KLStOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQotK0RBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWQ0KLStUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQotKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRg0KLStUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLg0KLSsNCi0rcHVycG9zZXMgb2YgdGhpcyBwYXRjaDoNCi0rDQotK1RoaXMgcGF0 Y2ggd291bGQgaGVscCB0byBoYXZlIGF1dGhlbnRpY2F0aW9uIGNlbnRyYWxpemF0aW9uIHBv bGljeQ0KLSt1c2luZyBzc2ggcHVibGljIGtleSBhdXRoZW50aWNhdGlvbi4NCi0rVGhpcyBw YXRjaCBjb3VsZCBiZSBhbiBhbHRlcm5hdGl2ZSB0byBvdGhlciAic2VjdXJlIiBhdXRoZW50 aWNhdGlvbiBzeXN0ZW0NCi0rd29ya2luZyBpbiBhIHNpbWlsYXIgd2F5IChLZXJiZXJvcywg U2VjdXJJRCwgZXRjLi4uKSwgZXhjZXB0IHRoZSBmYWN0IA0KLSt0aGF0IGl0J3MgYmFzZWQg b24gT3BlblNTSCBhbmQgaXRzIHB1YmxpYyBrZXkgYWJpbGl0aWVzLg0KLSsNCi0rPj4gRllJ OiA8PA0KLSsndWlkJzogbWVhbnMgdW5peCBhY2NvdW50cyBleGlzdGluZyBvbiB0aGUgY3Vy cmVudCBzZXJ2ZXINCi0rJ2xwa1NlcnZlckdyb3VwOicgbWVhbiBzZXJ2ZXIgZ3JvdXAgY29u ZmlndXJlZCBvbiB0aGUgY3VycmVudCBzZXJ2ZXIgKCdscGtTZXJ2ZXJHcm91cCcgaW4gc3No ZF9jb25maWcpDQotKw0KLStleGFtcGxlIHNjaGVtYToNCi0rDQotKw0KLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyMSAodWlkOiBlYXUscml2YWwsdG90bykg KGxwa1NlcnZlckdyb3VwOiB1bml4KQ0KLSsgICAgICAgICAgICAgICAgX19fX19fX19fX18g ICAgICAvDQotKyAgICAgICAgICAgICAgIC8gICAgICAgICAgIFwgLS0tIC0gc2VydmVyMyAo dWlkOiBlYXUsIHRpdGkpIChscGtTZXJ2ZXJHcm91cDogdW5peCkNCi0rICAgICAgICAgICAg ICB8IExEQVAgU2VydmVyIHwgICAgXA0KLSsJICAgICAgfCBlYXUgICxyaXZhbCB8ICAgICBz ZXJ2ZXIyICh1aWQ6IHJpdmFsLCBlYXUpIChscGtTZXJ2ZXJHcm91cDogdW5peCkNCi0rCSAg ICAgIHwgdGl0aSAsdG90byAgfA0KLSsJICAgICAgfCB1c2VyeCwuLi4uICB8ICAgICAgICAg c2VydmVyNSAodWlkOiBlYXUpICAobHBrU2VydmVyR3JvdXA6IG1haWwpDQotKyAgICAgICAg ICAgICAgIFxfX19fX19fX19fXy8gXCAgICAgICAvDQotKwkgICAgICAgICAgICAgICAgICAg ICAgIC0tLS0tIC0gc2VydmVyNCAodWlkOiBlYXUsIHJpdmFsKSAgKG5vIGdyb3VwIGNvbmZp Z3VyZWQpDQotKwkJCSAgICAgICAgICAgICBcDQotKwkJCQkgICAgICAgIGV0Yy4uLg0KLSsN Ci0rLSBXSEFUIFdFIE5FRUQgOg0KLSsNCi0rICAqIGNvbmZpZ3VyZWQgTERBUCBzZXJ2ZXIg c29tZXdoZXJlIG9uIHRoZSBuZXR3b3JrIChpLmUuIE9wZW5MREFQKQ0KLSsgICogcGF0Y2hl ZCBzc2hkICh3aXRoIHRoaXMgcGF0Y2ggOykNCi0rICAqIExEQVAgdXNlcigvZ3JvdXApIGVu dHJ5IChsb29rIGF0IHVzZXJzLmxkaWYgKCYgZ3JvdXBzLmxkaWYpKToNCi0rICAgICAgICBV c2VyIGVudHJ5Og0KLSsJLSBhdHRhY2hlZCB0byB0aGUgJ2xkYXBQdWJsaWNLZXknIG9iamVj dGNsYXNzDQotKwktIGF0dGFjaGVkIHRvIHRoZSAncG9zaXhBY2NvdW50JyBvYmplY3RjbGFz cw0KLSsJLSB3aXRoIGEgZmlsbGVkICdzc2hQdWJsaWNLZXknIGF0dHJpYnV0ZSANCi0rCUV4 YW1wbGU6DQotKwkJZG46IHVpZD1lYXUsb3U9dXNlcnMsZGM9Y3Vja29vcyxkYz1uZXQNCi0r CQlvYmplY3RjbGFzczogdG9wDQotKwkJb2JqZWN0Y2xhc3M6IHBlcnNvbg0KLSsJCW9iamVj dGNsYXNzOiBvcmdhbml6YXRpb25hbFBlcnNvbg0KLSsJCW9iamVjdGNsYXNzOiBwb3NpeEFj Y291bnQNCi0rCQlvYmplY3RjbGFzczogbGRhcFB1YmxpY0tleQ0KLSsJCWRlc2NyaXB0aW9u OiBFcmljIEFVR0UgQWNjb3VudA0KLSsJCXVzZXJQYXNzd29yZDogYmxhaA0KLSsJCWNuOiBF cmljIEFVR0UNCi0rCQlzbjogRXJpYyBBVUdFDQotKwkJdWlkOiBlYXUNCi0rCQl1aWROdW1i ZXI6IDEwMzQNCi0rCQlnaWROdW1iZXI6IDENCi0rCQlob21lRGlyZWN0b3J5OiAvZXhwb3J0 L2hvbWUvZWF1DQotKwkJc3NoUHVibGljS2V5OiBzc2gtZHNzIEFBQUFCMy4uLg0KLSsJCXNz aFB1YmxpY0tleTogc3NoLWRzcyBBQUFBTTUuLi4NCi0rDQotKwlHcm91cCBlbnRyeToNCi0r CS0gYXR0YWNoZWQgdG8gdGhlICdwb3NpeEdyb3VwJyBvYmplY3RjbGFzcw0KLSsJLSB3aXRo IGEgJ2NuJyBncm91cG5hbWUgYXR0cmlidXRlDQotKwktIHdpdGggbXVsdGlwbGUgJ21lbWJl clVpZCcgYXR0cmlidXRlcyBmaWxsZWQgd2l0aCB1c2VybmFtZXMgYWxsb3dlZCBpbiB0aGlz IGdyb3VwDQotKwlFeGFtcGxlOg0KLSsJCSMgZmV3IG1lbWJlcnMNCi0rCQlkbjogY249dW5p eCxvdT1ncm91cHMsZGM9Y3Vja29vcyxkYz1uZXQNCi0rCQlvYmplY3RjbGFzczogdG9wDQot KwkJb2JqZWN0Y2xhc3M6IHBvc2l4R3JvdXANCi0rCQlkZXNjcmlwdGlvbjogVW5peCBiYXNl ZCBzZXJ2ZXJzIGdyb3VwDQotKwkJY246IHVuaXgNCi0rCQlnaWROdW1iZXI6IDEwMDINCi0r CQltZW1iZXJVaWQ6IGVhdQ0KLSsJCW1lbWJlclVpZDogdXNlcjENCi0rCQltZW1iZXJVaWQ6 IHVzZXIyDQotKw0KLSsNCi0rLSBIT1cgSVQgV09SS1MgOg0KLSsNCi0rICAqIHdpdGhvdXQg cGF0Y2gNCi0rICBJZiBhIHVzZXIgd2FudHMgdG8gYXV0aGVudGljYXRlIHRvIGxvZyBpbiBh IHNlcnZlciB0aGUgc3NoZCwgd2lsbCBmaXJzdCBsb29rIGZvciBhdXRoZW50aWNhdGlvbiBt ZXRob2QgYWxsb3dlZCAoUlNBYXV0aCxrZXJiZXJvcyxldGMuLikNCi0rICBhbmQgaWYgUlNB YXV0aCBhbmQgdGlja2V0cyBiYXNlZCBhdXRoIGZhaWxzLCBpdCB3aWxsIGZhbGxiYWNrIHRv IHN0YW5kYXJkIHBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uIChpZiBlbmFibGVkKS4NCi0rDQot KyAgKiB3aXRoIHRoZSBwYXRjaA0KLSsgIElmIGEgdXNlciB3YW50IHRvIGF1dGhlbnRpY2F0 ZSB0byBsb2cgaW4gYSBzZXJ2ZXIsIHRoZSBzc2hkIHdpbGwgZmlyc3QgbG9vayBmb3IgYXV0 aCBtZXRob2QgaW5jbHVkaW5nIExEQVAgcHVia2V5LCBpZiB0aGUgbGRhcHB1YmtleSBvcHRp b25zIGlzIGVuYWJsZWQuDQotKyAgSXQgd2lsbCBkbyBhbiBsZGFwc2VhcmNoIHRvIGdldCB0 aGUgcHVibGljIGtleSBkaXJlY3RseSBmcm9tIHRoZSBMREFQIGluc3RlYWQgb2YgcmVhZGlu ZyBpdCBmcm9tIHRoZSBzZXJ2ZXIgZmlsZXN5c3RlbS4gDQotKyAgKHVzdWFsbHkgaW4gJEhP TUUvLnNzaC9hdXRob3JpemVkX2tleXMpDQotKw0KLSsgIElmIGdyb3VwcyBhcmUgZW5hYmxl ZCwgaXQgd2lsbCBhbHNvIGNoZWNrIGlmIHRoZSB1c2VyIHRoYXQgd2FudHMgdG8gbG9naW4g aXMgaW4gdGhlIGdyb3VwIG9mIHRoZSBzZXJ2ZXIgaGUgaXMgdHJ5aW5nIHRvIGxvZyBpbnRv Lg0KLSsgIElmIGl0IGZhaWxzLCBpdCBmYWxscyBiYWNrIG9uIFJTQSBhdXRoIGZpbGVzICgk SE9NRS8uc3NoL2F1dGhvcml6ZWRfa2V5cyksIGV0Yy4uIGFuZCBmaW5hbGx5IHRvIHN0YW5k YXJkIHBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uIChpZiBlbmFibGVkKS4NCi0rDQotKyAgNyB0 b2tlbnMgYXJlIGFkZGVkIHRvIHNzaGRfY29uZmlnIDoNCi0rICAjIGhlcmUgaXMgdGhlIG5l dyBwYXRjaGVkIGxkYXAgcmVsYXRlZCB0b2tlbnMNCi0rICAjIGVudHJpZXMgaW4geW91ciBM REFQIG11c3QgYmUgcG9zaXhBY2NvdW50ICYgc3Ryb25nQXV0aGVudGljYXRpb25Vc2VyICYg cG9zaXhHcm91cA0KLSsgIFVzZUxQSyB5ZXMJCQkJCQkJCSMgbG9vayB0aGUgcHViIGtleSBp bnRvIExEQVANCi0rICBMcGtTZXJ2ZXJzIGxkYXA6Ly8xMC4zMS4zMi41LyBsZGFwOi8vMTAu MzEuMzIuNCBsZGFwOi8vMTAuMzEuMzIuMwkjIHdoaWNoIExEQVAgc2VydmVyIGZvciB1c2Vy cyA/IChVUkwgZm9ybWF0KQ0KLSsgIExwa1VzZXJETiAgb3U9dXNlcnMsZGM9Zm9vYmFyLGRj PW5ldAkJCQkJIyB3aGljaCBiYXNlIEROIGZvciB1c2VycyA/DQotKyAgTHBrR3JvdXBETiBv dT1ncm91cHMsZGM9Zm9vYmFyLGRjPW5ldAkJCQkJIyB3aGljaCBiYXNlIEROIGZvciBncm91 cHMgPyANCi0rICBMcGtCaW5kRE4gY249bWFuYWdlcixkYz1mb29iYXIsZGM9bmV0CQkJCQkj IHdoaWNoIGJpbmQgRE4gPw0KLSsgIExwa0JpbmRQdyBhc2VjcmV0CQkJCQkJCSMgYmluZCBE TiBjcmVkaWRlbnRpYWxzDQotKyAgTHBrU2VydmVyR3JvdXAgYWdyb3VwbmFtZQkJCQkJCSMg dGhlIGdyb3VwIHRoZSBzZXJ2ZXIgaXMgcGFydCBvZg0KLSsNCi0rICBSaWdodCBub3cgaSdt IHVzaW5nIGFub255bW91cyBiaW5kaW5nIHRvIGdldCBwdWJsaWMga2V5cywgYmVjYXVzZSBn ZXR0aW5nIHB1YmxpYyBrZXlzIG9mIHNvbWVvbmUgZG9lc24ndCBpbXBlcnNvbmF0ZSBoaW24 IGJ1dCB0aGVyZSBpcyBzb21lDQotKyAgZmxhd3MgeW91IGhhdmUgdG8gdGFrZSBjYXJlIG9m Lg0KLSsNCi0rLSBIT1cgVE8gSU5TRVJUIEEgVVNFUi9LRVkgSU5UTyBBTiBMREFQIEVOVFJZ DQotKw0KLSsgICogbXkgd2F5ICh0aGVyZSBpcyBwbGVudHkgOikNCi0rICAtIGNyZWF0ZSBs ZGlmIGZpbGUgKGkuZS4gdXNlcnMubGRpZikNCi0rICAtIGNhdCB+Ly5zc2gvaWRfZHNhLnB1 YiBPUiBjYXQgfi8uc3NoL2lkX3JzYS5wdWIgT1IgY2F0IH4vLnNzaC9pZGVudGl0eS5wdWIN Ci0rICAtIG15IHdheSBpbiA0IHN0ZXBzIDoNCi0rICBFeGFtcGxlOg0KLSsNCi0rICAjIHlv dSBhZGQgdGhpcyB0byB0aGUgdXNlciBlbnRyeSBpbiB0aGUgTERJRiBmaWxlIDoNCi0rICBb Li4uXQ0KLSsgIG9iamVjdGNsYXNzOiBwb3NpeEFjY291bnQNCi0rICBvYmplY3RjbGFzczog bGRhcFB1YmxpY0tleQ0KLSsgIFsuLi5dDQotKyAgc3NoUHVibGlLZXk6IHNzaC1kc3MgQUFB QUJEaDEyRERVUjIuLi4NCi0rICBbLi4uXQ0KLSsNCi0rICAjIGluc2VydCB5b3VyIGVudHJ5 IGFuZCB5b3UncmUgZG9uZSA6KQ0KLSsgIGxkYXBhZGQgLUQgYmFsYmxhYmxhIC13IGJsZWgg PCBmaWxlLmxkaWYgDQotKyAgDQotKyAgYWxsIHN0YW5kYXJkIG9wdGlvbnMgY2FuIGJlIHBy ZXNlbnQgaW4gdGhlICdzc2hQdWJsaWNLZXknIGF0dHJpYnV0ZS4NCi0rDQotKy0gV0hZIDoN Ci0rDQotKyAgU2ltcGx5IGJlY2F1c2UsIGkgd2FzIGxvb2tpbmcgZm9yIGEgd2F5IHRvIGNl bnRyYWxpemUgYWxsIHN5c2FkbWlucyBhdXRoZW50aWNhdGlvbiwgZWFzaWx5LCAgd2l0aG91 dCBjb21wbGV0ZWx5IHVzaW5nIExEQVAgDQotKyAgYXMgYXV0aGVudGljYXRpb24gbWV0aG9k IChsaWtlIHBhbV9sZGFwIGV0Yy4uKS4gIA0KLSsgIA0KLSsgIEFmdGVyIGxvb2tpbmcgaW50 byBLZXJiZXJvcywgU2VjdXJJRCwgYW5kIG90aGVyIGNlbnRyYWxpemVkIHNlY3VyZSBhdXRo ZW50aWNhdGlvbnMgc3lzdGVtcywgdGhlIHVzZSBvZiBSU0EgYW5kIExEQVAgdG8gZ2V0IA0K LSsgIHB1YmxpYyBrZXkgZm9yIGF1dGhlbnRpY2F0aW9uIGFsbG93cyB1cyB0byBjb250cm9s IHdobyBoYXMgYWNjZXNzIHRvIHdoaWNoIHNlcnZlciAodGhlIHVzZXIgbmVlZHMgYW4gYWNj b3VudCBhbmQgdG8gYmUgaW4gJ3N0cm9uZ0F1dGhlbnRpY2F0aW9uVXNlcicNCi0rICBvYmpl Y3RjbGFzcyB3aXRoaW4gTERBUCBhbmQgcGFydCBvZiB0aGUgZ3JvdXAgdGhlIFNTSCBzZXJ2 ZXIgaXMgaW4pLiANCi0rDQotKyAgUGFzc3dvcmRzIHVwZGF0ZSBhcmUgbm8gbG9uZ2VyIGEg bmlnaHRtYXJlIGZvciBhIHNlcnZlciBmYXJtIChrZXkgcGFpciBwYXNzcGhyYXNlIGlzIHN0 b3JlZCBvbiBlYWNoIHVzZXIncyBib3ggYW5kIHByaXZhdGUga2V5IGlzIGxvY2FsbHkgZW5j cnlwdGVkIHVzaW5nIGhpcyBwYXNzcGhyYXNlIA0KLSsgIHNvIGVhY2ggdXNlciBjYW4gY2hh bmdlIGl0IGFzIG11Y2ggYXMgaGUgd2FudHMpLiANCi0rDQotKyAgQmxvY2tpbmcgYSB1c2Vy IGFjY291bnQgY2FuIGJlIGRvbmUgZGlyZWN0bHkgZnJvbSB0aGUgTERBUCAoaWYgc3NoZCBp cyB1c2luZyBSU0FBdXRoICsgbGRhcCBvbmx5KS4NCi0rDQotKy0gUlVMRVMgOiAgDQotKyAg RW50cnkgaW4gdGhlIExEQVAgc2VydmVyIG11c3QgcmVzcGVjdCAncG9zaXhBY2NvdW50JyBh bmQgJ2xkYXBQdWJsaWNLZXknIHdoaWNoIGFyZSBkZWZpbmVkIGluIGNvcmUuc2NoZW1hLiAN Ci0rICBhbmQgdGhlIGFkZGl0aW9ubmFsIGxway5zY2hlbWEuDQotKw0KLSsgIFRoaXMgcGF0 Y2ggY291bGQgYWxsb3cgYSBzbW9vdGggdHJhbnNpdGlvbiBiZXR3ZWVuIHN0YW5kYXJkIGF1 dGggKC9ldGMvcGFzc3dkKSBhbmQgY29tcGxldGUgTERBUCBiYXNlZCBhdXRoZW50aWNhdGlv biANCi0rICAocGFtbGRhcCwgbnNzX2xkYXAsIGV0Yy4uKS4NCi0rDQotKyAgVGhpcyBjYW4g YmUgYW4gYWx0ZXJuYXRpdmUgdG8gb3RoZXIgKG9sZD8vZXhwZW5zaXZlPykgYXV0aGVudGlj YXRpb24gbWV0aG9kcyAoS2VyYmVyb3MvU2VjdXJJRC8uLikuDQotKyAgDQotKyAgUmVmZXJy aW5nIHRvIHNjaGVtYSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgZmlsZSBpZiB1c2VyICdl YXUnIGlzIG9ubHkgaW4gZ3JvdXAgJ3VuaXgnDQotKyAgJ2VhdScgd291bGQgT05MWSBhY2Nl c3MgJ3NlcnZlcjEnLCAnc2VydmVyMicsICdzZXJ2ZXIzJyBBTkQgJ3NlcnZlcjQnIEJVVCBO T1QgJ3NlcnZlcjUnLg0KLSsgIElmIHlvdSB0aGVuIG1vZGlmeSB0aGUgTERBUCAnbWFpbCcg Z3JvdXAgZW50cnkgdG8gYWRkICdtZW1iZXJVaWQ6IGVhdScgVEhFTiB1c2VyICdlYXUnIHdv dWxkIGJlIGFibGUNCi0rICB0byBsb2cgaW4gJ3NlcnZlcjUnIChpIGhvcGUgeW91IGdvdCB0 aGUgaWRlYSwgbXkgZW5nbGlzaCBpcyBiYWQgOikuDQotKw0KLSsgIEVhY2ggc2VydmVyJ3Mg c3NoZCBpcyBwYXRjaGVkIGFuZCBjb25maWd1cmVkIHRvIGFzayB0aGUgcHVibGljIGtleSBh bmQgdGhlIGdyb3VwIGluZm9zIGluIHRoZSBMREFQDQotKyAgc2VydmVyLg0KLSsgIFdoZW4g eW91IHdhbnQgdG8gYWxsb3cgYSBuZXcgdXNlciB0byBoYXZlIGFjY2VzcyB0byB0aGUgc2Vy dmVyIHBhcmMsIHlvdSBqdXN0IGFkZCBoaW0gYW4gYWNjb3VudCBvbiANCi0rICB5b3VyIHNl cnZlcnMsIHlvdSBhZGQgaGlzIHB1YmxpYyBrZXkgaW50byBoaXMgZW50cnkgb24gdGhlIExE QVAgc2VydmVyLCBpdCdzIGRvbmUuIA0KLSsNCi0rICBCZWNhdXNlIHNzaGRzIGFyZSBsb29r aW5nIHB1YmxpYyBrZXlzIGludG8gdGhlIExEQVAgZGlyZWN0bHkgaW5zdGVhZCBvZiBhIGZp bGUgKCRIT01FLy5zc2gvYXV0aG9yaXplZF9rZXlzKS4NCi0rDQotKyAgV2hlbiB0aGUgdXNl ciBuZWVkcyB0byBjaGFuZ2UgaGlzIHBhc3NwaHJhc2UgaGUgY2FuIGRvIGl0IGRpcmVjdGx5 IGZyb20gaGlzIHdvcmtzdGF0aW9uIGJ5IGNoYW5naW5nIA0KLSsgIGhpcyBvd24ga2V5IHNl dCBsb2NrIHBhc3NwaHJhc2UsIGFuZCBhbGwgc2VydmVycyBhcmUgYXV0b21hdGljYWxseSBh d2FyZS4NCi0rIA0KLSsgIFdpdGggYSBDQVJFRlVMIExEQVAgc2VydmVyIGNvbmZpZ3VyYXRp b24geW91IGNvdWxkIGFsbG93IGEgdXNlciB0byBhZGQvZGVsZXRlL21vZGlmeSBoaXMgb3du IGVudHJ5IGhpbXNlbGYNCi0rICBzbyBoZSBjYW4gYWRkL21vZGlmeS9kZWxldGUgaGltc2Vs ZiBoaXMgcHVibGljIGtleSB3aGVuIG5lZWRlZC4NCi0rDQotK60gRkxBV1MgOg0KLSsgIExE QVAgbXVzdCBiZSB3ZWxsIGNvbmZpZ3VyZWQsIGdldHRpbmcgdGhlIHB1YmxpYyBrZXkgb2Yg c29tZSB1c2VyIGlzIG5vdCBhIHByb2JsZW0sIGJ1dCBpZiBhbm9ueW1vdXMgTERBUCANCi0r ICBhbGxvdyB3cml0ZSB0byB1c2VycyBkbiwgc29tZWJvZHkgY291bGQgcmVwbGFjZSBzb21l dXNlcidzIHB1YmxpYyBrZXkgYnkgaXRzIG93biBhbmQgaW1wZXJzb25hdGUgc29tZSANCi0r ICBvZiB5b3VyIHVzZXJzIGluIGFsbCB5b3VyIHNlcnZlciBmYXJtIGJlIFZFUlkgQ0FSRUZV TC4NCi0rICANCi0rICBNSVRNIGF0dGFjayB3aGVuIHNzaGQgaXMgcmVxdWVzdGluZyB0aGUg cHVibGljIGtleSwgY291bGQgbGVhZCB0byBhIGNvbXByb21pc2Ugb2YgeW91ciBzZXJ2ZXJz IGFsbG93aW5nIGxvZ2luIA0KLSsgIGFzIHRoZSBpbXBlcnNvbm5hdGVkIHVzZXIuDQotKw0K LSsgIElmIExEQVAgc2VydmVyIGlzIGRvd24gdGhlbiwgZmFsbGJhY2sgb24gcGFzc3dkIGF1 dGguDQotKyAgDQotKyAgdGhlIGxkYXAgY29kZSBwYXJ0IGhhcyBub3QgYmVlbiB3ZWxsIGF1 ZGl0ZWQgeWV0Lg0KLSsNCi0rLSBMREFQIFVTRVIgRU5UUlkgRVhBTVBMRVMgKExESUYgRm9y bWF0LCBsb29rIGluIHVzZXJzLmxkaWYpDQotKyAgICAtLS0gQ1VUIEhFUkUgLS0tDQotKyAg ICBkbjogdWlkPWpkb2Usb3U9dXNlcnMsZGM9Zm9vYmFyLGRjPW5ldA0KLSsgICAgb2JqZWN0 Y2xhc3M6IHRvcA0KLSsgICAgb2JqZWN0Y2xhc3M6IHBlcnNvbg0KLSsgICAgb2JqZWN0Y2xh c3M6IG9yZ2FuaXphdGlvbmFsUGVyc29uDQotKyAgICBvYmplY3RjbGFzczogcG9zaXhBY2Nv dW50DQotKyAgICBvYmplY3RjbGFzczogbGRhcFB1YmxpY0tleQ0KLSsgICAgZGVzY3JpcHRp b246IE15IGFjY291bnQNCi0rICAgIGNuOiBKb2huIERvZQ0KLSsgICAgc246IEpvaG4gRG9l DQotKyAgICB1aWQ6IGpkb2UNCi0rICAgIHVpZE51bWJlcjogMTAwDQotKyAgICBnaWROdW1i ZXI6IDEwMA0KLSsgICAgaG9tZURpcmVjdG9yeTogL2hvbWUvamRvZQ0KLSsgICAgc3NoUHVi bGljS2V5OiBzc2gtZHNzIEFBQUFCM056YUMxa2MzTUFBQUVCQU92TDhwUkVVZzl3U3kvOCto UUo1NFlGM0FYa0IwT1pyWEIuLi4uDQotKyAgICBbLi4uXQ0KLSsgICAgLS0tIENVVCBIRVJF IC0tLQ0KLSsNCi0rLSBMREFQIEdST1VQIEVOVFJZIEVYQU1QTEVTIChMRElGIEZvcm1hdCwg bG9vayBpbiBncm91cHMubGRpZikNCi0rICAgIC0tLSBDVVQgSEVSRSAtLS0NCi0rICAgIGRu OiBjbj11bml4LG91PWdyb3VwcyxkYz1jdWNrb29zLGRjPW5ldA0KLSsgICAgb2JqZWN0Y2xh c3M6IHRvcA0KLSsgICAgb2JqZWN0Y2xhc3M6IHBvc2l4R3JvdXANCi0rICAgIGRlc2NyaXB0 aW9uOiBVbml4IGJhc2VkIHNlcnZlcnMgZ3JvdXANCi0rICAgIGNuOiB1bml4DQotKyAgICBn aWROdW1iZXI6IDEwMDINCi0rICAgIG1lbWJlclVpZDogamRvZQ0KLSsgICAgbWVtYmVyVWlk OiB1c2VyMQ0KLSsgICAgbWVtYmVyVWlkOiB1c2VyMg0KLSsgICAgWy4uLl0NCi0rICAgIC0t LSBDVVQgSEVSRSAtLS0NCi0rDQotKz4+IEZZSTogPDwgDQotK011bHRpcGxlICdzc2hQdWJs aWNLZXknIGluIGEgdXNlciBlbnRyeSBhcmUgYWxsb3dlZCwgYXMgd2VsbCBhcyBtdWx0aXBs ZSAnbWVtYmVyVWlkJyBhdHRyaWJ1dGVzIGluIGEgZ3JvdXAgZW50cnkNCi0rDQotKy0gQ09N UElMSU5HOg0KLSsgIDEuIEFwcGx5IHRoZSBwYXRjaA0KLSsgIDIuIC4vY29uZmlndXJlIC0t d2l0aC15b3VyLW9wdGlvbnMgLS13aXRoLWxkYXA9L3ByZWZpeC90by9sZGFwX2xpYnNfYW5k X2luY2x1ZGVzDQotKyAgMy4gbWFrZQ0KLSsgIDQuIGl0J3MgZG9uZS4NCi0rDQotKy0gQkxB IDoNCi0rICBJIGhvcGUgdGhpcyBjb3VsZCBoZWxwLCBhbmQgaSBob3BlIHRvIGJlIGNsZWFy IGVub3VnaCwsIG9yIGdpdmUgaWRlYXMuICBxdWVzdGlvbnMvY29tbWVudHMvaW1wcm92ZW1l bnRzIGFyZSB3ZWxjb21lLg0KLSsgIA0KLSstIFRPRE8gOg0KLSsgIFJlZGVzaWduIGRpZmZl cmVudGx5Lg0KLSsNCi0rLSBET0NTL0xJTksgOg0KLSsgIGh0dHA6Ly9wYWNzZWMuanAvY29y ZTA1L3BzajA1LWJhcmlzYW5pLWVuLnBkZg0KLSsgIGh0dHA6Ly9mcml0ei5wb3RzZGFtLmVk dS9wcm9qZWN0cy9vcGVuc3NoLWxway8NCi0rICBodHRwOi8vZnJpdHoucG90c2RhbS5lZHUv cHJvamVjdHMvc3NoZ2F0ZS8NCi0rICBodHRwOi8vZGV2LmludmVyc2VwYXRoLmNvbS90cmFj L29wZW5zc2gtbHBrDQotKyAgaHR0cDovL2xhbS5zZi5uZXQvICggaHR0cDovL2xhbS5zb3Vy Y2Vmb3JnZS5uZXQvZG9jdW1lbnRhdGlvbi9zdXBwb3J0ZWRTY2hlbWFzLmh0bSApDQotKw0K LSstIENPTlRSSUJVVE9SUy9JREVBUy9HUkVFVFMgOg0KLSsgIC0gRmFsayBTaWVtb25zbWVp ZXIuDQotKyAgLSBKYWNvYiBSaWVmLg0KLSsgIC0gTWljaGFlbCBEdXJjaGdyYWYuDQotKyAg LSBmcmVkZXJpYyBwZXRlcnMuDQotKyAgLSBGaW5sYXkgZG9iYmllLg0KLSsgIC0gU3RlZmFu IEZpc2hlci4NCi0rICAtIFJvYmluIEguIEpvaG5zb24uDQotKyAgLSBBZHJpYW4gQnJpZGdl dHQuDQotKw0KLSstIENPTlRBQ1QgOg0KLSsgIC0gRXJpYyBBVUdFIDxlYXVAcGhlYXIub3Jn Pg0KLSsgIC0gQW5kcmVhIEJhcmlzYW5pIDxhbmRyZWFAaW52ZXJzZXBhdGguY29tPg0KLQ0K LWRpZmYgLU51YXIgLS1leGNsdWRlICcqLm9yaWcnIC0tZXhjbHVkZSAnKi5yZWonIHNlcnZj b25mLmggc2VydmNvbmYuaA0KLS0tLSBzZXJ2Y29uZi5oCTIwMDgtMDYtMTAgMDY6MDE6NTEu MDAwMDAwMDAwIC0wNzAwDQotKysrIHNlcnZjb25mLmgJMjAwOC0wOC0yMyAxNTowMjo0Ny4w MDAwMDAwMDAgLTA3MDANCi1AQCAtMTYsNiArMTYsMTAgQEANCi0gI2lmbmRlZiBTRVJWQ09O Rl9IDQotICNkZWZpbmUgU0VSVkNPTkZfSA0KLSANCi0rI2lmZGVmIFdJVEhfTERBUF9QVUJL RVkNCi0rI2luY2x1ZGUgImxkYXBhdXRoLmgiDQotKyNlbmRpZg0KLSsNCi0gI2RlZmluZSBN QVhfUE9SVFMJCTI1NgkvKiBNYXggIyBwb3J0cy4gKi8NCi0gDQotICNkZWZpbmUgTUFYX0FM TE9XX1VTRVJTCQkyNTYJLyogTWF4ICMgdXNlcnMgb24gYWxsb3cgbGlzdC4gKi8NCi1AQCAt MTQ1LDYgKzE0OSw5IEBADQotIAlpbnQJdXNlX3BhbTsJCS8qIEVuYWJsZSBhdXRoIHZpYSBQ QU0gKi8NCi0gDQotIAlpbnQJcGVybWl0X3R1bjsNCi0rI2lmZGVmIFdJVEhfTERBUF9QVUJL RVkNCi0rICAgICAgICBsZGFwX29wdF90IGxwazsNCi0rI2VuZGlmDQotIA0KLSAJaW50CW51 bV9wZXJtaXR0ZWRfb3BlbnM7DQotIA0KLWRpZmYgLU51YXIgLS1leGNsdWRlICcqLm9yaWcn IC0tZXhjbHVkZSAnKi5yZWonIHNzaGQuYyBzc2hkLmMNCi0tLS0gc3NoZC5jCTIwMDgtMDct MTEgMDA6MzY6NDkuMDAwMDAwMDAwIC0wNzAwDQotKysrIHNzaGQuYwkyMDA4LTA4LTIzIDE1 OjAyOjQ3LjAwMDAwMDAwMCAtMDcwMA0KLUBAIC0xMjcsNiArMTI3LDEwIEBADQotIGludCBk ZW55X3NldmVyaXR5Ow0KLSAjZW5kaWYgLyogTElCV1JBUCAqLw0KLSANCi0rI2lmZGVmIFdJ VEhfTERBUF9QVUJLRVkNCi0rI2luY2x1ZGUgImxkYXBhdXRoLmgiDQotKyNlbmRpZg0KLSsN Ci0gI2lmbmRlZiBPX05PQ1RUWQ0KLSAjZGVmaW5lIE9fTk9DVFRZCTANCi0gI2VuZGlmDQot QEAgLTE0ODQsNiArMTQ4OCwxNiBAQA0KLSAJCWV4aXQoMSk7DQotIAl9DQotIA0KLSsjaWZk ZWYgV0lUSF9MREFQX1BVQktFWQ0KLSsgICAgLyogbGRhcF9vcHRpb25zX3ByaW50KCZvcHRp b25zLmxwayk7ICovDQotKyAgICAvKiBYWFggaW5pdGlhbGl6ZS9jaGVjayBsZGFwIGNvbm5l Y3Rpb24gYW5kIHNldCAqTEQgKi8NCi0rICAgIGlmIChvcHRpb25zLmxway5vbikgew0KLSsg ICAgICAgIGlmIChvcHRpb25zLmxway5sX2NvbmYgJiYgKGxkYXBfcGFyc2VfbGNvbmYoJm9w dGlvbnMubHBrKSA8IDApICkNCi0rICAgICAgICAgICAgZXJyb3IoIltMREFQXSBjb3VsZCBu b3QgcGFyc2UgJXMiLCBvcHRpb25zLmxway5sX2NvbmYpOw0KLSsgICAgICAgIGlmIChsZGFw X2Nvbm5lY3QoJm9wdGlvbnMubHBrKSA8IDApDQotKyAgICAgICAgICAgIGVycm9yKCJbTERB UF0gY291bGQgbm90IGluaXRpYWxpemUgbGRhcCBjb25uZWN0aW9uIik7DQotKyAgICB9DQot KyNlbmRpZg0KLSAJZGVidWcoInNzaGQgdmVyc2lvbiAlLjEwMHMiLCBTU0hfUkVMRUFTRSk7 DQotIA0KLSAJLyogU3RvcmUgcHJpdmlsZWdlIHNlcGFyYXRpb24gdXNlciBmb3IgbGF0ZXIg dXNlIGlmIHJlcXVpcmVkLiAqLw0KLWRpZmYgLU51YXIgLS1leGNsdWRlICcqLm9yaWcnIC0t ZXhjbHVkZSAnKi5yZWonIHNzaGRfY29uZmlnIHNzaGRfY29uZmlnDQotLS0tIHNzaGRfY29u ZmlnCTIwMDgtMDctMDIgMDU6MzU6NDMuMDAwMDAwMDAwIC0wNzAwDQotKysrIHNzaGRfY29u ZmlnCTIwMDgtMDgtMjMgMTU6MDI6NDcuMDAwMDAwMDAwIC0wNzAwDQotQEAgLTEwOSw2ICsx MDksMjEgQEANCi0gIyBubyBkZWZhdWx0IGJhbm5lciBwYXRoDQotICNCYW5uZXIgbm9uZQ0K LSANCi0rIyBoZXJlIGFyZSB0aGUgbmV3IHBhdGNoZWQgbGRhcCByZWxhdGVkIHRva2Vucw0K LSsjIGVudHJpZXMgaW4geW91ciBMREFQIG11c3QgaGF2ZSBwb3NpeEFjY291bnQgJiBsZGFw UHVibGljS2V5IG9iamVjdGNsYXNzDQotKyNVc2VMUEsgeWVzDQotKyNMcGtMZGFwQ29uZiAv ZXRjL2xkYXAuY29uZg0KLSsjTHBrU2VydmVycyAgbGRhcDovLzEwLjEuNy4xLyBsZGFwOi8v MTAuMS43LjIvDQotKyNMcGtVc2VyRE4gICBvdT11c2VycyxkYz1waGVhcixkYz1vcmcNCi0r I0xwa0dyb3VwRE4gIG91PWdyb3VwcyxkYz1waGVhcixkYz1vcmcNCi0rI0xwa0JpbmRETiBj bj1NYW5hZ2VyLGRjPXBoZWFyLGRjPW9yZw0KLSsjTHBrQmluZFB3IHNlY3JldA0KLSsjTHBr U2VydmVyR3JvdXAgbWFpbA0KLSsjTHBrRmlsdGVyIChob3N0QWNjZXNzPW1hc3Rlci5waGVh ci5vcmcpDQotKyNMcGtGb3JjZVRMUyBubw0KLSsjTHBrU2VhcmNoVGltZWxpbWl0IDMNCi0r I0xwa0JpbmRUaW1lbGltaXQgMw0KLSsNCi0gIyBvdmVycmlkZSBkZWZhdWx0IG9mIG5vIHN1 YnN5c3RlbXMNCi0gU3Vic3lzdGVtCXNmdHAJL3Vzci9saWJleGVjL3NmdHAtc2VydmVyDQot IA0KLWRpZmYgLU51YXIgLS1leGNsdWRlICcqLm9yaWcnIC0tZXhjbHVkZSAnKi5yZWonIHNz aGRfY29uZmlnLjUgc3NoZF9jb25maWcuNQ0KLS0tLSBzc2hkX2NvbmZpZy41CTIwMDgtMDct MDIgMDU6MzU6NDMuMDAwMDAwMDAwIC0wNzAwDQotKysrIHNzaGRfY29uZmlnLjUJMjAwOC0w OC0yMyAxNTowMjo0Ny4wMDAwMDAwMDAgLTA3MDANCi1AQCAtMTAwMyw2ICsxMDAzLDYyIEBA DQotIHByb2dyYW0uDQotIFRoZSBkZWZhdWx0IGlzDQotIC5QYSAvdXNyL1gxMVI2L2Jpbi94 YXV0aCAuDQotKy5JdCBDbSBVc2VMUEsNCi0rU3BlY2lmaWVzIHdoZXRoZXIgTERBUCBwdWJs aWMga2V5IHJldHJpZXZhbCBtdXN0IGJlIHVzZWQgb3Igbm90LiBJdCBhbGxvdw0KLSthbiBl YXN5IGNlbnRyYWxpc2F0aW9uIG9mIHB1YmxpYyBrZXlzIHdpdGhpbiBhbiBMREFQIGRpcmVj dG9yeS4gVGhlIGFyZ3VtZW50IG11c3QgYmUNCi0rLkRxIHllcw0KLStvcg0KLSsuRHEgbm8g Lg0KLSsuSXQgQ20gTHBrTGRhcENvbmYNCi0rU3BlY2lmaWVzIHdoZXRoZXIgTERBUCBQdWJs aWMga2V5cyBzaG91bGQgcGFyc2UgdGhlIHNwZWNpZmllZCBsZGFwLmNvbmYgZmlsZQ0KLStp bnN0ZWFkIG9mIHNzaGRfY29uZmlnIFRva2Vucy4gVGhlIGFyZ3VtZW50IG11c3QgYmUgYSB2 YWxpZCBwYXRoIHRvIGFuIGxkYXAuY29uZg0KLStmaWxlIGxpa2UNCi0rLlBhIC9ldGMvbGRh cC5jb25mDQotKy5JdCBDbSBMcGtTZXJ2ZXJzDQotK1NwZWNpZmllcyBMREFQIG9uZSBvciBt b3JlIFs6c3BhY2U6XSBzZXBhcmF0ZWQgc2VydmVyJ3MgdXJsIHRoZSBmb2xsb3dpbmcgZm9y bSBtYXkgYmUgdXNlZDoNCi0rLlBwDQotK0xwa1NlcnZlcnMgbGRhcHM6Ly8xMjcuMC4wLjEg bGRhcDovLzEyNy4wLjAuMiBsZGFwOi8vMTI3LjAuMC4zDQotKy5JdCBDbSBMcGtVc2VyRE4N Ci0rU3BlY2lmaWVzIHRoZSBMREFQIHVzZXIgRE4uDQotKy5QcA0KLStMcGtVc2VyRE4gb3U9 dXNlcnMsZGM9cGhlYXIsZGM9b3JnDQotKy5JdCBDbSBMcGtHcm91cERODQotK1NwZWNpZmll cyB0aGUgTERBUCBncm91cHMgRE4uDQotKy5QcA0KLStMcGtHcm91cEROIG91PWdyb3Vwcyxk Yz1waGVhcixkYz1vcmcNCi0rLkl0IENtIExwa0JpbmRETg0KLStTcGVjaWZpZXMgdGhlIExE QVAgYmluZCBETiB0byB1c2UgaWYgbmVjZXNzYXJ5Lg0KLSsuUHANCi0rTHBrQmluZEROIGNu PU1hbmFnZXIsZGM9cGhlYXIsZGM9b3JnDQotKy5JdCBDbSBMcGtCaW5kUHcNCi0rU3BlY2lm aWVzIHRoZSBMREFQIGJpbmQgY3JlZGVudGlhbC4gDQotKy5QcA0KLStMcGtCaW5kUHcgc2Vj cmV0DQotKy5JdCBDbSBMcGtTZXJ2ZXJHcm91cA0KLStTcGVjaWZpZXMgb25lIG9yIG1vcmUg WzpzcGFjZTpdIHNlcGFyYXRlZCBncm91cCB0aGUgc2VydmVyIGlzIHBhcnQgb2YuIA0KLSsu UHANCi0rTHBrU2VydmVyR3JvdXAgdW5peCBtYWlsIHByb2QNCi0rLkl0IENtIExwa0ZpbHRl cg0KLStTcGVjaWZpZXMgYW4gYWRkaXRpb25hbCBMREFQIGZpbHRlciB0byB1c2UgZm9yIGZp bmRpbmcgU1NIIGtleXMNCi0rLlBwDQotK0xwa0ZpbHRlciAoaG9zdEFjY2Vzcz1tYXN0ZXIu cGhlYXIub3JnKQ0KLSsuSXQgQ20gTHBrRm9yY2VUTFMNCi0rU3BlY2lmaWVzIGlmIHRoZSBM REFQIHNlcnZlciBjb25uZWN0aW9uIG11c3QgYmUgdHJpZWQsIGZvcmNlZCBvciBub3QgdXNl ZC4gVGhlIGFyZ3VtZW50IG11c3QgYmUgDQotKy5EcSB5ZXMNCi0rb3INCi0rLkRxIG5vDQot K29yDQotKy5EcSB0cnkgLg0KLSsuSXQgQ20gTHBrU2VhcmNoVGltZWxpbWl0DQotK1NlcGNp ZmllcyB0aGUgc2VhcmNoIHRpbWUgbGltaXQgYmVmb3JlIHRoZSBzZWFyY2ggaXMgY29uc2lk ZXJlZCBvdmVyLiB2YWx1ZSBpcw0KLStpbiBzZWNvbmRzLg0KLSsuUHANCi0rTHBrU2VhcmNo VGltZWxpbWl0IDMNCi0rLkl0IENtIExwa0JpbmRUaW1lbGltaXQNCi0rU2VwY2lmaWVzIHRo ZSBiaW5kIHRpbWUgbGltaXQgYmVmb3JlIHRoZSBjb25uZWN0aW9uIGlzIGNvbnNpZGVyZWQg ZGVhZC4gdmFsdWUgaXMNCi0raW4gc2Vjb25kcy4NCi0rLlBwDQotK0xwa0JpbmRUaW1lbGlt aXQgMw0KLSAuRWwNCi0gLlNoIFRJTUUgRk9STUFUUw0KLSAuWHIgc3NoZCA4DQpkaWZmIC1O cnUgL2hvbWUvZ2F3cmlsb2ZmL2xway9vcGVuc3NoLXBvcnRhYmxlL2ZpbGVzL2NvbnRyaWIt b3BlbnNzaC1scGstNS4zcDEtMC4zLjEwLnBhdGNoIC9ob21lL2dhd3JpbG9mZi9vcGVuc3No LXBvcnRhYmxlL2ZpbGVzL2NvbnRyaWItb3BlbnNzaC1scGstNS4zcDEtMC4zLjEwLnBhdGNo DQotLS0gL2hvbWUvZ2F3cmlsb2ZmL2xway9vcGVuc3NoLXBvcnRhYmxlL2ZpbGVzL2NvbnRy aWItb3BlbnNzaC1scGstNS4zcDEtMC4zLjEwLnBhdGNoCTE5NzAtMDEtMDEgMDM6MDA6MDAu MDAwMDAwMDAwICswMzAwDQorKysgL2hvbWUvZ2F3cmlsb2ZmL29wZW5zc2gtcG9ydGFibGUv ZmlsZXMvY29udHJpYi1vcGVuc3NoLWxway01LjNwMS0wLjMuMTAucGF0Y2gJMjAxMC0xMi0y MSAxMTozMDowMi4wMDAwMDAwMDAgKzAyMDANCkBAIC0wLDAgKzEsMTg4MSBAQA0KK2RpZmYg LU51YXIgLS1leGNsdWRlICcqLm9yaWcnIC0tZXhjbHVkZSAnKi5yZWonIGF1dGgyLXB1Ymtl eS5jIGF1dGgyLXB1YmtleS5jDQorLS0tIGF1dGgyLXB1YmtleS5jCTIwMDgtMDctMDMgMTk6 NTQ6MjUuMDAwMDAwMDAwIC0wNzAwDQorKysrIGF1dGgyLXB1YmtleS5jCTIwMDgtMDgtMjMg MTU6MDI6NDcuMDAwMDAwMDAwIC0wNzAwDQorQEAgLTU1LDYgKzU1LDEwIEBADQorICNpbmNs dWRlICJtb25pdG9yX3dyYXAuaCINCisgI2luY2x1ZGUgIm1pc2MuaCINCisgDQorKyNpZmRl ZiBXSVRIX0xEQVBfUFVCS0VZDQorKyNpbmNsdWRlICJsZGFwYXV0aC5oIg0KKysjZW5kaWYN CisrDQorIC8qIGltcG9ydCAqLw0KKyBleHRlcm4gU2VydmVyT3B0aW9ucyBvcHRpb25zOw0K KyBleHRlcm4gdV9jaGFyICpzZXNzaW9uX2lkMjsNCitAQCAtMTgzLDEwICsxODcsNzkgQEAN CisgCXVfbG9uZyBsaW5lbnVtID0gMDsNCisgCUtleSAqZm91bmQ7DQorIAljaGFyICpmcDsN CisrI2lmZGVmIFdJVEhfTERBUF9QVUJLRVkNCisrCWxkYXBfa2V5X3QgKiBrOw0KKysJdW5z aWduZWQgaW50IGkgPSAwOw0KKysjZW5kaWYNCisgDQorIAkvKiBUZW1wb3JhcmlseSB1c2Ug dGhlIHVzZXIncyB1aWQuICovDQorIAl0ZW1wb3JhcmlseV91c2VfdWlkKHB3KTsNCisgDQor KyNpZmRlZiBXSVRIX0xEQVBfUFVCS0VZDQorKyAJZm91bmRfa2V5ID0gMDsNCisrIAkvKiBh bGxvY2F0ZSBhIG5ldyBrZXkgdHlwZSAqLw0KKysgCWZvdW5kID0ga2V5X25ldyhrZXktPnR5 cGUpOw0KKysgDQorKyAJLyogZmlyc3QgY2hlY2sgaWYgdGhlIG9wdGlvbnMgaXMgZW5hYmxl ZCwgdGhlbiB0cnkuLiAqLw0KKysJaWYgKG9wdGlvbnMubHBrLm9uKSB7DQorKwkgICAgZGVi dWcoIltMREFQXSB0cnlpbmcgTERBUCBmaXJzdCB1aWQ9JXMiLHB3LT5wd19uYW1lKTsNCisr CSAgICBpZiAobGRhcF9pc21lbWJlcigmb3B0aW9ucy5scGssIHB3LT5wd19uYW1lKSA+IDAp IHsNCisrCQlpZiAoKGsgPSBsZGFwX2dldHVzZXJrZXkoJm9wdGlvbnMubHBrLCBwdy0+cHdf bmFtZSkpICE9IE5VTEwpIHsNCisrCQkgICAgLyogU2tpcCBsZWFkaW5nIHdoaXRlc3BhY2Us IGVtcHR5IGFuZCBjb21tZW50IGxpbmVzLiAqLw0KKysJCSAgICBmb3IgKGkgPSAwIDsgaSA8 IGstPm51bSA7IGkrKykgew0KKysJCQkvKiBkb250IGZvcmdldCBpZiBtdWx0aXBsZSBrZXlz IHRvIHJlc2V0IG9wdGlvbnMgKi8NCisrCQkJY2hhciAqY3AsICpvcHRpb25zID0gTlVMTDsN CisrDQorKwkJCWZvciAoY3AgPSAoY2hhciAqKWstPmtleXNbaV0tPmJ2X3ZhbDsgKmNwID09 ICcgJyB8fCAqY3AgPT0gJ1x0JzsgY3ArKykNCisrCQkJICAgIDsNCisrCQkJaWYgKCEqY3Ag fHwgKmNwID09ICdcbicgfHwgKmNwID09ICcjJykNCisrCQkJICAgIGNvbnRpbnVlOw0KKysN CisrCQkJaWYgKGtleV9yZWFkKGZvdW5kLCAmY3ApICE9IDEpIHsNCisrCQkJICAgIC8qIG5v IGtleT8gIGNoZWNrIGlmIHRoZXJlIGFyZSBvcHRpb25zIGZvciB0aGlzIGtleSAqLw0KKysJ CQkgICAgaW50IHF1b3RlZCA9IDA7DQorKwkJCSAgICBkZWJ1ZzIoIltMREFQXSB1c2VyX2tl eV9hbGxvd2VkOiBjaGVjayBvcHRpb25zOiAnJXMnIiwgY3ApOw0KKysJCQkgICAgb3B0aW9u cyA9IGNwOw0KKysJCQkgICAgZm9yICg7ICpjcCAmJiAocXVvdGVkIHx8ICgqY3AgIT0gJyAn ICYmICpjcCAhPSAnXHQnKSk7IGNwKyspIHsNCisrCQkJCWlmICgqY3AgPT0gJ1xcJyAmJiBj cFsxXSA9PSAnIicpDQorKwkJCQkgICAgY3ArKzsJLyogU2tpcCBib3RoICovDQorKwkJCQll bHNlIGlmICgqY3AgPT0gJyInKQ0KKysJCQkJICAgIHF1b3RlZCA9ICFxdW90ZWQ7DQorKwkJ CSAgICB9DQorKwkJCSAgICAvKiBTa2lwIHJlbWFpbmluZyB3aGl0ZXNwYWNlLiAqLw0KKysJ CQkgICAgZm9yICg7ICpjcCA9PSAnICcgfHwgKmNwID09ICdcdCc7IGNwKyspDQorKwkJCQk7 DQorKwkJCSAgICBpZiAoa2V5X3JlYWQoZm91bmQsICZjcCkgIT0gMSkgew0KKysJCQkJZGVi dWcyKCJbTERBUF0gdXNlcl9rZXlfYWxsb3dlZDogYWR2YW5jZTogJyVzJyIsIGNwKTsNCisr CQkJCS8qIHN0aWxsIG5vIGtleT8gIGFkdmFuY2UgdG8gbmV4dCBsaW5lKi8NCisrCQkJCWNv bnRpbnVlOw0KKysJCQkgICAgfQ0KKysJCQl9DQorKw0KKysJCQlpZiAoa2V5X2VxdWFsKGZv dW5kLCBrZXkpICYmDQorKwkJCQlhdXRoX3BhcnNlX29wdGlvbnMocHcsIG9wdGlvbnMsIGZp bGUsIGxpbmVudW0pID09IDEpIHsNCisrCQkJICAgIGZvdW5kX2tleSA9IDE7DQorKwkJCSAg ICBkZWJ1ZygiW0xEQVBdIG1hdGNoaW5nIGtleSBmb3VuZCIpOw0KKysJCQkgICAgZnAgPSBr ZXlfZmluZ2VycHJpbnQoZm91bmQsIFNTSF9GUF9NRDUsIFNTSF9GUF9IRVgpOw0KKysJCQkg ICAgdmVyYm9zZSgiW0xEQVBdIEZvdW5kIG1hdGNoaW5nICVzIGtleTogJXMiLCBrZXlfdHlw ZShmb3VuZCksIGZwKTsNCisrDQorKwkJCSAgICAvKiByZXN0b3JpbmcgbWVtb3J5ICovDQor KwkJCSAgICBsZGFwX2tleXNfZnJlZShrKTsNCisrCQkJICAgIHhmcmVlKGZwKTsNCisrCQkJ ICAgIHJlc3RvcmVfdWlkKCk7DQorKwkJCSAgICBrZXlfZnJlZShmb3VuZCk7DQorKwkJCSAg ICByZXR1cm4gZm91bmRfa2V5Ow0KKysJCQkgICAgYnJlYWs7DQorKwkJCX0NCisrCQkgICAg fS8qIGVuZCBvZiBMREFQIGZvcigpICovDQorKwkJfSBlbHNlIHsNCisrCQkgICAgbG9naXQo IltMREFQXSBubyBrZXlzIGZvdW5kIGZvciAnJXMnISIsIHB3LT5wd19uYW1lKTsNCisrCQl9 DQorKwkgICAgfSBlbHNlIHsNCisrCQlsb2dpdCgiW0xEQVBdICclcycgaXMgbm90IGluICcl cyciLCBwdy0+cHdfbmFtZSwgb3B0aW9ucy5scGsuc2dyb3VwKTsNCisrCSAgICB9DQorKwl9 DQorKyNlbmRpZg0KKyAJZGVidWcoInRyeWluZyBwdWJsaWMga2V5IGZpbGUgJXMiLCBmaWxl KTsNCisgCWYgPSBhdXRoX29wZW5rZXlmaWxlKGZpbGUsIHB3LCBvcHRpb25zLnN0cmljdF9t b2Rlcyk7DQorIA0KK2RpZmYgLU51YXIgLS1leGNsdWRlICcqLm9yaWcnIC0tZXhjbHVkZSAn Ki5yZWonIGF1dGgtcnNhLmMgYXV0aC1yc2EuYw0KKy0tLSBhdXRoLXJzYS5jCTIwMDgtMDct MDIgMDU6Mzc6MzAuMDAwMDAwMDAwIC0wNzAwDQorKysrIGF1dGgtcnNhLmMJMjAwOC0wOC0y MyAxNTowMjo0Ny4wMDAwMDAwMDAgLTA3MDANCitAQCAtMTc0LDEwICsxNzQsOTYgQEANCisg CUZJTEUgKmY7DQorIAl1X2xvbmcgbGluZW51bSA9IDA7DQorIAlLZXkgKmtleTsNCisrI2lm ZGVmIFdJVEhfTERBUF9QVUJLRVkNCisrCWxkYXBfa2V5X3QgKiBrOw0KKysJdW5zaWduZWQg aW50IGkgPSAwOw0KKysjZW5kaWYNCisgDQorIAkvKiBUZW1wb3JhcmlseSB1c2UgdGhlIHVz ZXIncyB1aWQuICovDQorIAl0ZW1wb3JhcmlseV91c2VfdWlkKHB3KTsNCisgDQorKyNpZmRl ZiBXSVRIX0xEQVBfUFVCS0VZDQorKwkvKiBoZXJlIGlzIHRoZSBqb2IgKi8NCisrCWtleSA9 IGtleV9uZXcoS0VZX1JTQTEpOw0KKysNCisrCWlmIChvcHRpb25zLmxway5vbikgew0KKysJ ICAgIGRlYnVnKCJbTERBUF0gdHJ5aW5nIExEQVAgZmlyc3QgdWlkPSVzIiwgcHctPnB3X25h bWUpOw0KKysJICAgIGlmICggbGRhcF9pc21lbWJlcigmb3B0aW9ucy5scGssIHB3LT5wd19u YW1lKSA+IDApIHsNCisrCQlpZiAoIChrID0gbGRhcF9nZXR1c2Vya2V5KCZvcHRpb25zLmxw aywgcHctPnB3X25hbWUpKSAhPSBOVUxMKSB7DQorKwkJICAgIGZvciAoaSA9IDAgOyBpIDwg ay0+bnVtIDsgaSsrKSB7DQorKwkJCWNoYXIgKmNwLCAqb3B0aW9ucyA9IE5VTEw7DQorKw0K KysJCQlmb3IgKGNwID0gay0+a2V5c1tpXS0+YnZfdmFsOyAqY3AgPT0gJyAnIHx8ICpjcCA9 PSAnXHQnOyBjcCsrKQ0KKysJCQkgICAgOw0KKysJCQlpZiAoISpjcCB8fCAqY3AgPT0gJ1xu JyB8fCAqY3AgPT0gJyMnKQ0KKysJCQkgICAgY29udGludWU7DQorKw0KKysJCQkvKg0KKysJ CQkqIENoZWNrIGlmIHRoZXJlIGFyZSBvcHRpb25zIGZvciB0aGlzIGtleSwgYW5kIGlmIHNv LA0KKysJCQkqIHNhdmUgdGhlaXIgc3RhcnRpbmcgYWRkcmVzcyBhbmQgc2tpcCB0aGUgb3B0 aW9uIHBhcnQNCisrCQkJKiBmb3Igbm93LiAgSWYgdGhlcmUgYXJlIG5vIG9wdGlvbnMsIHNl dCB0aGUgc3RhcnRpbmcNCisrCQkJKiBhZGRyZXNzIHRvIE5VTEwuDQorKwkJCSAqLw0KKysJ CQlpZiAoKmNwIDwgJzAnIHx8ICpjcCA+ICc5Jykgew0KKysJCQkgICAgaW50IHF1b3RlZCA9 IDA7DQorKwkJCSAgICBvcHRpb25zID0gY3A7DQorKwkJCSAgICBmb3IgKDsgKmNwICYmIChx dW90ZWQgfHwgKCpjcCAhPSAnICcgJiYgKmNwICE9ICdcdCcpKTsgY3ArKykgew0KKysJCQkJ aWYgKCpjcCA9PSAnXFwnICYmIGNwWzFdID09ICciJykNCisrCQkJCSAgICBjcCsrOwkvKiBT a2lwIGJvdGggKi8NCisrCQkJCWVsc2UgaWYgKCpjcCA9PSAnIicpDQorKwkJCQkgICAgcXVv dGVkID0gIXF1b3RlZDsNCisrCQkJICAgIH0NCisrCQkJfSBlbHNlDQorKwkJCSAgICBvcHRp b25zID0gTlVMTDsNCisrDQorKwkJCS8qIFBhcnNlIHRoZSBrZXkgZnJvbSB0aGUgbGluZS4g Ki8NCisrCQkJaWYgKGhvc3RmaWxlX3JlYWRfa2V5KCZjcCwgJmJpdHMsIGtleSkgPT0gMCkg ew0KKysJCQkgICAgZGVidWcoIltMREFQXSBsaW5lICVkOiBub24gc3NoMSBrZXkgc3ludGF4 IiwgaSk7DQorKwkJCSAgICBjb250aW51ZTsNCisrCQkJfQ0KKysJCQkvKiBjcCBub3cgcG9p bnRzIHRvIHRoZSBjb21tZW50IHBhcnQuICovDQorKw0KKysJCQkvKiBDaGVjayBpZiB0aGUg d2UgaGF2ZSBmb3VuZCB0aGUgZGVzaXJlZCBrZXkgKGlkZW50aWZpZWQgYnkgaXRzIG1vZHVs dXMpLiAqLw0KKysJCQlpZiAoQk5fY21wKGtleS0+cnNhLT5uLCBjbGllbnRfbikgIT0gMCkN CisrCQkJICAgIGNvbnRpbnVlOw0KKysNCisrCQkJLyogY2hlY2sgdGhlIHJlYWwgYml0cyAg Ki8NCisrCQkJaWYgKGJpdHMgIT0gKHVuc2lnbmVkIGludClCTl9udW1fYml0cyhrZXktPnJz YS0+bikpDQorKwkJCSAgICBsb2dpdCgiW0xEQVBdIFdhcm5pbmc6IGxkYXAsIGxpbmUgJWx1 OiBrZXlzaXplIG1pc21hdGNoOiAiDQorKwkJCQkgICAgImFjdHVhbCAlZCB2cy4gYW5ub3Vu Y2VkICVkLiIsICh1bnNpZ25lZCBsb25nKWksIEJOX251bV9iaXRzKGtleS0+cnNhLT5uKSwg Yml0cyk7DQorKw0KKysJCQkvKiBXZSBoYXZlIGZvdW5kIHRoZSBkZXNpcmVkIGtleS4gKi8N CisrCQkJLyoNCisrCQkJKiBJZiBvdXIgb3B0aW9ucyBkbyBub3QgYWxsb3cgdGhpcyBrZXkg dG8gYmUgdXNlZCwNCisrCQkJKiBkbyBub3Qgc2VuZCBjaGFsbGVuZ2UuDQorKwkJCSAqLw0K KysJCQlpZiAoIWF1dGhfcGFyc2Vfb3B0aW9ucyhwdywgb3B0aW9ucywgIltMREFQXSIsICh1 bnNpZ25lZCBsb25nKSBpKSkNCisrCQkJICAgIGNvbnRpbnVlOw0KKysNCisrCQkJLyogYnJl YWsgb3V0LCB0aGlzIGtleSBpcyBhbGxvd2VkICovDQorKwkJCWFsbG93ZWQgPSAxOw0KKysN CisrCQkJLyogYWRkIHRoZSByZXR1cm4gc3R1ZmYgZXRjLi4uICovDQorKwkJCS8qIFJlc3Rv cmUgdGhlIHByaXZpbGVnZWQgdWlkLiAqLw0KKysJCQlyZXN0b3JlX3VpZCgpOw0KKysNCisr CQkJLyogcmV0dXJuIGtleSBpZiBhbGxvd2VkICovDQorKwkJCWlmIChhbGxvd2VkICYmIHJr ZXkgIT0gTlVMTCkNCisrCQkJICAgICpya2V5ID0ga2V5Ow0KKysJCQllbHNlDQorKwkJCSAg ICBrZXlfZnJlZShrZXkpOw0KKysNCisrCQkJbGRhcF9rZXlzX2ZyZWUoayk7DQorKwkJCXJl dHVybiAoYWxsb3dlZCk7DQorKwkJICAgIH0NCisrCQl9IGVsc2Ugew0KKysJCSAgICBsb2dp dCgiW0xEQVBdIG5vIGtleXMgZm91bmQgZm9yICclcychIiwgcHctPnB3X25hbWUpOw0KKysJ CX0NCisrCSAgICB9IGVsc2Ugew0KKysJCWxvZ2l0KCJbTERBUF0gJyVzJyBpcyBub3QgaW4g JyVzJyIsIHB3LT5wd19uYW1lLCBvcHRpb25zLmxway5zZ3JvdXApOw0KKysJICAgIH0NCisr CX0NCisrI2VuZGlmDQorIAkvKiBUaGUgYXV0aG9yaXplZCBrZXlzLiAqLw0KKyAJZmlsZSA9 IGF1dGhvcml6ZWRfa2V5c19maWxlKHB3KTsNCisgCWRlYnVnKCJ0cnlpbmcgcHVibGljIFJT QSBrZXkgZmlsZSAlcyIsIGZpbGUpOw0KK2RpZmYgLU51YXIgLS1leGNsdWRlICcqLm9yaWcn IC0tZXhjbHVkZSAnKi5yZWonIGNvbmZpZy5oLmluIGNvbmZpZy5oLmluDQorLS0tIGNvbmZp Zy5oLmluCTIwMDgtMDctMjEgMDE6MzA6NDkuMDAwMDAwMDAwIC0wNzAwDQorKysrIGNvbmZp Zy5oLmluCTIwMDgtMDgtMjMgMTU6MDI6NDcuMDAwMDAwMDAwIC0wNzAwDQorQEAgLTU3NSw2 ICs1NzUsOSBAQA0KKyAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2lm X3R1bi5oPiBoZWFkZXIgZmlsZS4gKi8NCisgI3VuZGVmIEhBVkVfTElOVVhfSUZfVFVOX0gN CisgDQorKy8qIERlZmluZSBpZiB5b3Ugd2FudCBMREFQIHN1cHBvcnQgKi8NCisrI3VuZGVm IFdJVEhfTERBUF9QVUJLRVkNCisrDQorIC8qIERlZmluZSBpZiB5b3VyIGxpYnJhcmllcyBk ZWZpbmUgbG9naW4oKSAqLw0KKyAjdW5kZWYgSEFWRV9MT0dJTg0KKyANCitkaWZmIC1OdWFy IC0tZXhjbHVkZSAnKi5vcmlnJyAtLWV4Y2x1ZGUgJyoucmVqJyBjb25maWd1cmUgY29uZmln dXJlDQorLS0tIGNvbmZpZ3VyZQkyMDA4LTA3LTIxIDAxOjMwOjUwLjAwMDAwMDAwMCAtMDcw MA0KKysrKyBjb25maWd1cmUJMjAwOC0wOC0yMyAxNTowMjo0Ny4wMDAwMDAwMDAgLTA3MDAN CitAQCAtMTQ2OCw2ICsxNDY4LDcgQEANCisgICAtLXdpdGgtdGNwLXdyYXBwZXJzWz1QQVRI XSBFbmFibGUgdGNwd3JhcHBlcnMgc3VwcG9ydCAob3B0aW9uYWxseSBpbiBQQVRIKQ0KKyAg IC0td2l0aC1saWJlZGl0Wz1QQVRIXSAgIEVuYWJsZSBsaWJlZGl0IHN1cHBvcnQgZm9yIHNm dHANCisgICAtLXdpdGgtYXVkaXQ9bW9kdWxlICAgICBFbmFibGUgRVhQRVJJTUVOVEFMIGF1 ZGl0IHN1cHBvcnQgKG1vZHVsZXM9ZGVidWcsYnNtKQ0KKysgIC0td2l0aC1sZGFwWz1QQVRI XSAgICAgIEVuYWJsZSBMREFQIHB1YmtleSBzdXBwb3J0IChvcHRpb25hbGx5IGluIFBBVEgp DQorICAgLS13aXRoLXNzbC1kaXI9UEFUSCAgICAgU3BlY2lmeSBwYXRoIHRvIE9wZW5TU0wg aW5zdGFsbGF0aW9uDQorICAgLS13aXRob3V0LW9wZW5zc2wtaGVhZGVyLWNoZWNrIERpc2Fi bGUgT3BlblNTTCB2ZXJzaW9uIGNvbnNpc3RlbmN5IGNoZWNrDQorICAgLS13aXRoLXNzbC1l bmdpbmUgICAgICAgRW5hYmxlIE9wZW5TU0wgKGhhcmR3YXJlKSBFTkdJTkUgc3VwcG9ydA0K K0BAIC0xMzQxMSw2ICsxMzQxMiw4NSBAQA0KKyBmaQ0KKyANCisgDQorKyMgQ2hlY2sgd2hl dGhlciB1c2VyIHdhbnRzIExEQVAgc3VwcG9ydA0KKytMREFQX01TRz0ibm8iDQorKw0KKysj IENoZWNrIHdoZXRoZXIgLS13aXRoLWxkYXAgd2FzIGdpdmVuLg0KKytpZiB0ZXN0ICIke3dp dGhfbGRhcCtzZXR9IiA9IHNldDsgdGhlbg0KKysgIHdpdGh2YWw9JHdpdGhfbGRhcDsNCisr CQlpZiB0ZXN0ICJ4JHdpdGh2YWwiICE9ICJ4bm8iIDsgdGhlbg0KKysNCisrCQkJaWYgdGVz dCAieCR3aXRodmFsIiAhPSAieHllcyIgOyB0aGVuDQorKwkJCQlDUFBGTEFHUz0iJENQUEZM QUdTIC1JJHt3aXRodmFsfS9pbmNsdWRlIg0KKysJCQkJTERGTEFHUz0iJExERkxBR1MgLUwk e3dpdGh2YWx9L2xpYiINCisrCQkJZmkNCisrDQorKw0KKytjYXQgPj5jb25mZGVmcy5oIDw8 XF9BQ0VPRg0KKysjZGVmaW5lIFdJVEhfTERBUF9QVUJLRVkgMQ0KKytfQUNFT0YNCisrDQor KwkJCUxJQlM9Ii1sbGRhcCAkTElCUyINCisrCQkJTERBUF9NU0c9InllcyINCisrDQorKwkJ CXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBMREFQIHN1cHBvcnQiID4m NQ0KKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBMREFQIHN1cHBvcnQuLi4gJEVDSE9f QyIgPiY2OyB9DQorKwkJCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRg0KKysvKiBj b25mZGVmcy5oLiAgKi8NCisrX0FDRU9GDQorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3Qu JGFjX2V4dA0KKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GDQorKy8qIGVuZCBj b25mZGVmcy5oLiAgKi8NCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KKysJCQkJICNpbmNs dWRlIDxsZGFwLmg+DQorK2ludA0KKyttYWluICgpDQorK3sNCisrKHZvaWQpbGRhcF9pbml0 KDAsIDApOw0KKysgIDsNCisrICByZXR1cm4gMDsNCisrfQ0KKytfQUNFT0YNCisrcm0gLWYg Y29uZnRlc3QuJGFjX29iamV4dA0KKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIg0KKytj YXNlICIoKCRhY190cnkiIGluDQorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNo bz1cJGFjX3RyeTs7DQorKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7DQorK2VzYWMNCisr ZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUNCisr ICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQ0KKysgIGFjX3N0YXR1cz0k Pw0KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyDQorKyAg cm0gLWYgY29uZnRlc3QuZXIxDQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUNCisrICBlY2hv ICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1DQorKyAgKGV4aXQgJGFj X3N0YXR1cyk7IH0gJiYgew0KKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fA0K KysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnINCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25m dGVzdC4kYWNfb2JqZXh0OyB0aGVuDQorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVz dWx0OiB5ZXMiID4mNQ0KKytlY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQ0KKytlbHNlDQor KyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUNCisrc2VkICdzL14v fCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQ0KKysNCisrDQorKwkJCQkgICAgeyBlY2hvICIk YXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1DQorK2VjaG8gIiR7RUNIT19UfW5vIiA+ JjY7IH0NCisrCQkJCQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAqKiBJbmNv bXBsZXRlIG9yIG1pc3NpbmcgbGRhcCBsaWJyYXJpZXMgKioiID4mNQ0KKytlY2hvICIkYXNf bWU6IGVycm9yOiAqKiBJbmNvbXBsZXRlIG9yIG1pc3NpbmcgbGRhcCBsaWJyYXJpZXMgKioi ID4mMjt9DQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQ0KKysNCisrDQorK2ZpDQor Kw0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0 ZXN0LiRhY19leHQNCisrCQlmaQ0KKysNCisrDQorK2ZpDQorKw0KKysNCisgDQorIA0KKyAN CitAQCAtMzIyMjUsNiArMzIzMDUsNyBAQA0KKyBlY2hvICIgICAgICAgICAgICAgICAgIFNt YXJ0Y2FyZCBzdXBwb3J0OiAkU0NBUkRfTVNHIg0KKyBlY2hvICIgICAgICAgICAgICAgICAg ICAgICBTL0tFWSBzdXBwb3J0OiAkU0tFWV9NU0ciDQorIGVjaG8gIiAgICAgICAgICAgICAg VENQIFdyYXBwZXJzIHN1cHBvcnQ6ICRUQ1BXX01TRyINCisrZWNobyAiICAgICAgICAgICAg ICAgICAgICAgIExEQVAgc3VwcG9ydDogJExEQVBfTVNHIg0KKyBlY2hvICIgICAgICAgICAg ICAgIE1ENSBwYXNzd29yZCBzdXBwb3J0OiAkTUQ1X01TRyINCisgZWNobyAiICAgICAgICAg ICAgICAgICAgIGxpYmVkaXQgc3VwcG9ydDogJExJQkVESVRfTVNHIg0KKyBlY2hvICIgIFNv bGFyaXMgcHJvY2VzcyBjb250cmFjdCBzdXBwb3J0OiAkU1BDX01TRyINCitkaWZmIC1OdWFy IC0tZXhjbHVkZSAnKi5vcmlnJyAtLWV4Y2x1ZGUgJyoucmVqJyBjb25maWd1cmUuYWMgY29u ZmlndXJlLmFjDQorLS0tIGNvbmZpZ3VyZS5hYwkyMDA4LTA3LTA5IDA0OjA3OjE5LjAwMDAw MDAwMCAtMDcwMA0KKysrKyBjb25maWd1cmUuYWMJMjAwOC0wOC0yMyAxNTowMjo0Ny4wMDAw MDAwMDAgLTA3MDANCitAQCAtMTMxOSw2ICsxMzE5LDM3IEBADQorIAllc2FjIF0NCisgKQ0K KyANCisrIyBDaGVjayB3aGV0aGVyIHVzZXIgd2FudHMgTERBUCBzdXBwb3J0DQorK0xEQVBf TVNHPSJubyINCisrQUNfQVJHX1dJVEgobGRhcCwNCisrCVsgIC0td2l0aC1sZGFwW1s9UEFU SF1dICAgICAgRW5hYmxlIExEQVAgcHVia2V5IHN1cHBvcnQgKG9wdGlvbmFsbHkgaW4gUEFU SCldLA0KKysJWw0KKysJCWlmIHRlc3QgIngkd2l0aHZhbCIgIT0gInhubyIgOyB0aGVuDQor Kw0KKysJCQlpZiB0ZXN0ICJ4JHdpdGh2YWwiICE9ICJ4eWVzIiA7IHRoZW4NCisrCQkJCUNQ UEZMQUdTPSIkQ1BQRkxBR1MgLUkke3dpdGh2YWx9L2luY2x1ZGUiDQorKwkJCQlMREZMQUdT PSIkTERGTEFHUyAtTCR7d2l0aHZhbH0vbGliIg0KKysJCQlmaQ0KKysNCisrCQkJQUNfREVG SU5FKFtXSVRIX0xEQVBfUFVCS0VZXSwgMSwgW0VuYWJsZSBMREFQIHB1YmtleSBzdXBwb3J0 XSkNCisrCQkJTElCUz0iLWxsZGFwICRMSUJTIg0KKysJCQlMREFQX01TRz0ieWVzIg0KKysJ DQorKwkJCUFDX01TR19DSEVDS0lORyhbZm9yIExEQVAgc3VwcG9ydF0pDQorKwkJCUFDX1RS WV9DT01QSUxFKA0KKysJCQkJWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCisrCQkJCSAjaW5j bHVkZSA8bGRhcC5oPl0sDQorKwkJCQlbKHZvaWQpbGRhcF9pbml0KDAsIDApO10sDQorKwkJ CQlbQUNfTVNHX1JFU1VMVCh5ZXMpXSwNCisrCQkJCVsNCisrCQkJCSAgICBBQ19NU0dfUkVT VUxUKG5vKSANCisrCQkJCQlBQ19NU0dfRVJST1IoWyoqIEluY29tcGxldGUgb3IgbWlzc2lu ZyBsZGFwIGxpYnJhcmllcyAqKl0pDQorKwkJCQldDQorKyAgICAgICAgCSkNCisrCQlmaQ0K KysJXQ0KKyspDQorKw0KKyBkbmwgICAgQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucy4g UGxlYXNlIGtlZXAgaW4gYWxwaGFiZXRpY2FsIG9yZGVyDQorIEFDX0NIRUNLX0ZVTkNTKCBc DQorIAlhcmM0cmFuZG9tIFwNCitAQCAtNDIyOSw2ICs0MjYwLDcgQEANCisgZWNobyAiICAg ICAgICAgICAgICAgICBTbWFydGNhcmQgc3VwcG9ydDogJFNDQVJEX01TRyINCisgZWNobyAi ICAgICAgICAgICAgICAgICAgICAgUy9LRVkgc3VwcG9ydDogJFNLRVlfTVNHIg0KKyBlY2hv ICIgICAgICAgICAgICAgIFRDUCBXcmFwcGVycyBzdXBwb3J0OiAkVENQV19NU0ciDQorK2Vj aG8gIiAgICAgICAgICAgICAgICAgICAgICBMREFQIHN1cHBvcnQ6ICRMREFQX01TRyINCisg ZWNobyAiICAgICAgICAgICAgICBNRDUgcGFzc3dvcmQgc3VwcG9ydDogJE1ENV9NU0ciDQor IGVjaG8gIiAgICAgICAgICAgICAgICAgICBsaWJlZGl0IHN1cHBvcnQ6ICRMSUJFRElUX01T RyINCisgZWNobyAiICBTb2xhcmlzIHByb2Nlc3MgY29udHJhY3Qgc3VwcG9ydDogJFNQQ19N U0ciDQorZGlmZiAtTnVhciAtLWV4Y2x1ZGUgJyoub3JpZycgLS1leGNsdWRlICcqLnJlaicg bGRhcGF1dGguYyBsZGFwYXV0aC5jDQorLS0tIGxkYXBhdXRoLmMJMTk2OS0xMi0zMSAxNjow MDowMC4wMDAwMDAwMDAgLTA4MDANCisrKysgbGRhcGF1dGguYwkyMDA4LTA4LTIzIDE1OjAy OjQ3LjAwMDAwMDAwMCAtMDcwMA0KK0BAIC0wLDAgKzEsNTc1IEBADQorKy8qIA0KKysgKiAk SWQ6IG9wZW5zc2gtbHBrLTQuM3AxLTAuMy43LnBhdGNoLHYgMS4zIDIwMDYvMDQvMTggMTU6 Mjk6MDkgZWF1IEV4cCAkDQorKyAqLw0KKysNCisrLyoNCisrICoNCisrICogQ29weXJpZ2h0 IChjKSAyMDA1LCBFcmljIEFVR0UgPGVhdUBwaGVhci5vcmc+DQorKyAqIEFsbCByaWdodHMg cmVzZXJ2ZWQuDQorKyAqDQorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1l dDoNCisrICoNCisrICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKysgKiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorKyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhl IHBoZWFyLm9yZyBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKysg Kg0KKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M REVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCANCisrICogQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIA0KKysgKiBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIA0KKysgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOyANCisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCANCisr ICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisrICoNCisrICoN CisrICovDQorKw0KKysjaW5jbHVkZSAiaW5jbHVkZXMuaCINCisrDQorKyNpZmRlZiBXSVRI X0xEQVBfUFVCS0VZDQorKw0KKysjaW5jbHVkZSA8c3RkaW8uaD4NCisrI2luY2x1ZGUgPHN0 ZGxpYi5oPg0KKysjaW5jbHVkZSA8dW5pc3RkLmg+DQorKyNpbmNsdWRlIDxzdHJpbmcuaD4N CisrDQorKyNpbmNsdWRlICJsZGFwYXV0aC5oIg0KKysjaW5jbHVkZSAibG9nLmgiDQorKw0K KytzdGF0aWMgY2hhciAqYXR0cnNbXSA9IHsNCisrICAgIFBVQktFWUFUVFIsDQorKyAgICBO VUxMDQorK307DQorKw0KKysvKiBmaWx0ZXIgYnVpbGRpbmcgaW5mb3MgKi8NCisrI2RlZmlu ZSBGSUxURVJfR1JPVVBfUFJFRklYICIoJihvYmplY3RjbGFzcz1wb3NpeEdyb3VwKSINCisr I2RlZmluZSBGSUxURVJfT1JfUFJFRklYICIofCINCisrI2RlZmluZSBGSUxURVJfT1JfU1VG RklYICIpIg0KKysjZGVmaW5lIEZJTFRFUl9DTl9QUkVGSVggIihjbj0iDQorKyNkZWZpbmUg RklMVEVSX0NOX1NVRkZJWCAiKSINCisrI2RlZmluZSBGSUxURVJfVUlEX0ZPUk1BVCAiKG1l bWJlclVpZD0lcykiDQorKyNkZWZpbmUgRklMVEVSX0dST1VQX1NVRkZJWCAiKSINCisrI2Rl ZmluZSBGSUxURVJfR1JPVVBfU0laRShncm91cCkgKHNpemVfdCkgKHN0cmxlbihncm91cCkr KGxkYXBfY291bnRfZ3JvdXAoZ3JvdXApKjUpKzUyKQ0KKysNCisrLyoganVzdCBmaWx0ZXIg YnVpbGRpbmcgc3R1ZmYgKi8NCisrI2RlZmluZSBSRVFVRVNUX0dST1VQX1NJWkUoZmlsdGVy LCB1aWQpIChzaXplX3QpIChzdHJsZW4oZmlsdGVyKStzdHJsZW4odWlkKSsxKQ0KKysjZGVm aW5lIFJFUVVFU1RfR1JPVVAoYnVmZmVyLCBwcmVmaWx0ZXIsIHB3bmFtZSkgXA0KKysgICAg YnVmZmVyID0gKGNoYXIgKikgY2FsbG9jKFJFUVVFU1RfR1JPVVBfU0laRShwcmVmaWx0ZXIs IHB3bmFtZSksIHNpemVvZihjaGFyKSk7IFwNCisrICAgIGlmICghYnVmZmVyKSB7IFwNCisr ICAgICAgICBwZXJyb3IoImNhbGxvYygpIik7IFwNCisrICAgICAgICByZXR1cm4gRkFJTFVS RTsgXA0KKysgICAgfSBcDQorKyAgICBzbnByaW50ZihidWZmZXIsIFJFUVVFU1RfR1JPVVBf U0laRShwcmVmaWx0ZXIscHduYW1lKSwgcHJlZmlsdGVyLCBwd25hbWUpDQorKy8qDQorK1hY WCBPTEQgZ3JvdXAgYnVpbGRpbmcgbWFjcm9zDQorKyNkZWZpbmUgUkVRVUVTVF9HUk9VUF9T SVpFKGdycCwgdWlkKSAoc2l6ZV90KSAoc3RybGVuKGdycCkrc3RybGVuKHVpZCkrNDYpDQor KyNkZWZpbmUgUkVRVUVTVF9HUk9VUChidWZmZXIscHduYW1lLGdycCkgXA0KKysgICAgYnVm ZmVyID0gKGNoYXIgKikgY2FsbG9jKFJFUVVFU1RfR1JPVVBfU0laRShncnAsIHB3bmFtZSks IHNpemVvZihjaGFyKSk7IFwNCisrICAgIGlmICghYnVmZmVyKSB7IFwNCisrICAgICAgICBw ZXJyb3IoImNhbGxvYygpIik7IFwNCisrICAgICAgICByZXR1cm4gRkFJTFVSRTsgXA0KKysg ICAgfSBcDQorKyAgICBzbnByaW50ZihidWZmZXIsUkVRVUVTVF9HUk9VUF9TSVpFKGdycCxw d25hbWUpLCIoJihvYmplY3RjbGFzcz1wb3NpeEdyb3VwKShjbj0lcykobWVtYmVyVWlkPSVz KSkiLGdycCxwd25hbWUpDQorKyAgICAqLw0KKysNCisrLyoNCisrWFhYIHN0b2NrIHVwc3Ry ZWFtIHZlcnNpb24gd2l0aG91dCBleHRyYSBmaWx0ZXIgc3VwcG9ydA0KKysjZGVmaW5lIFJF UVVFU1RfVVNFUl9TSVpFKHVpZCkgKHNpemVfdCkgKHN0cmxlbih1aWQpKzY0KQ0KKysjZGVm aW5lIFJFUVVFU1RfVVNFUihidWZmZXIsIHB3bmFtZSkgXA0KKysgICAgYnVmZmVyID0gKGNo YXIgKikgY2FsbG9jKFJFUVVFU1RfVVNFUl9TSVpFKHB3bmFtZSksIHNpemVvZihjaGFyKSk7 IFwNCisrICAgIGlmICghYnVmZmVyKSB7IFwNCisrICAgICAgICBwZXJyb3IoImNhbGxvYygp Iik7IFwNCisrICAgICAgICByZXR1cm4gTlVMTDsgXA0KKysgICAgfSBcDQorKyAgICBzbnBy aW50ZihidWZmZXIsUkVRVUVTVF9VU0VSX1NJWkUocHduYW1lKSwiKCYob2JqZWN0Y2xhc3M9 cG9zaXhBY2NvdW50KShvYmplY3RjbGFzcz1sZGFwUHVibGljS2V5KSh1aWQ9JXMpKSIscHdu YW1lKQ0KKysgICAqLw0KKysNCisrI2RlZmluZSBSRVFVRVNUX1VTRVJfU0laRSh1aWQsIGZp bHRlcikgKHNpemVfdCkgKHN0cmxlbih1aWQpKzY0KyhmaWx0ZXIgIT0gTlVMTCA/IHN0cmxl bihmaWx0ZXIpIDogMCkpDQorKyNkZWZpbmUgUkVRVUVTVF9VU0VSKGJ1ZmZlciwgcHduYW1l LCBjdXN0b21maWx0ZXIpIFwNCisrICAgIGJ1ZmZlciA9IChjaGFyICopIGNhbGxvYyhSRVFV RVNUX1VTRVJfU0laRShwd25hbWUsIGN1c3RvbWZpbHRlciksIHNpemVvZihjaGFyKSk7IFwN CisrICAgIGlmICghYnVmZmVyKSB7IFwNCisrICAgICAgICBwZXJyb3IoImNhbGxvYygpIik7 IFwNCisrICAgICAgICByZXR1cm4gTlVMTDsgXA0KKysgICAgfSBcDQorKyAgICBzbnByaW50 ZihidWZmZXIsIFJFUVVFU1RfVVNFUl9TSVpFKHB3bmFtZSwgY3VzdG9tZmlsdGVyKSwgXA0K KysgICAgCSIoJihvYmplY3RjbGFzcz1wb3NpeEFjY291bnQpKG9iamVjdGNsYXNzPWxkYXBQ dWJsaWNLZXkpKHVpZD0lcyklcykiLCBcDQorKwlwd25hbWUsIChjdXN0b21maWx0ZXIgIT0g TlVMTCA/IGN1c3RvbWZpbHRlciA6ICIiKSkNCisrDQorKy8qIHNvbWUgcG9ydGFibGUgYW5k IHdvcmtpbmcgdG9rZW5pemVyLCBsYW1lIHRob3VnaCAqLw0KKytzdGF0aWMgaW50IHRva2Vu aXplKGNoYXIgKiogbywgc2l6ZV90IHNpemUsIGNoYXIgKiBpbnB1dCkgew0KKysgICAgdW5z aWduZWQgaW50IGkgPSAwLCBudW07DQorKyAgICBjb25zdCBjaGFyICogY2hhcnNldCA9ICIg XHQiOw0KKysgICAgY2hhciAqIHB0ciA9IGlucHV0Ow0KKysNCisrICAgIC8qIGxlYWRpbmcg d2hpdGUgc3BhY2VzIGFyZSBpZ25vcmVkICovDQorKyAgICBudW0gPSBzdHJzcG4ocHRyLCBj aGFyc2V0KTsNCisrICAgIHB0ciArPSBudW07DQorKw0KKysgICAgd2hpbGUgKChudW0gPSBz dHJjc3BuKHB0ciwgY2hhcnNldCkpKSB7DQorKyAgICAgICAgaWYgKGkgPCBzaXplLTEpIHsN CisrICAgICAgICAgICAgb1tpKytdID0gcHRyOw0KKysgICAgICAgICAgICBwdHIgKz0gbnVt Ow0KKysgICAgICAgICAgICBpZiAoKnB0cikNCisrICAgICAgICAgICAgICAgICpwdHIrKyA9 ICdcMCc7DQorKyAgICAgICAgfQ0KKysgICAgfQ0KKysgICAgb1tpXSA9IE5VTEw7DQorKyAg ICByZXR1cm4gU1VDQ0VTUzsNCisrfQ0KKysNCisrdm9pZCBsZGFwX2Nsb3NlKGxkYXBfb3B0 X3QgKiBsZGFwKSB7DQorKw0KKysgICAgaWYgKCFsZGFwKQ0KKysgICAgICAgIHJldHVybjsN CisrDQorKyAgICBpZiAoIGxkYXBfdW5iaW5kX2V4dChsZGFwLT5sZCwgTlVMTCwgTlVMTCkg PCAwKQ0KKysJbGRhcF9wZXJyb3IobGRhcC0+bGQsICJsZGFwX3VuYmluZCgpIik7DQorKw0K KysgICAgbGRhcC0+bGQgPSBOVUxMOw0KKysgICAgRkxBR19TRVRfRElTQ09OTkVDVEVEKGxk YXAtPmZsYWdzKTsNCisrDQorKyAgICByZXR1cm47DQorK30NCisrDQorKy8qIGluaXQgJiYg YmluZCAqLw0KKytpbnQgbGRhcF9jb25uZWN0KGxkYXBfb3B0X3QgKiBsZGFwKSB7DQorKyAg ICBpbnQgdmVyc2lvbiA9IExEQVBfVkVSU0lPTjM7DQorKw0KKysgICAgaWYgKCFsZGFwLT5z ZXJ2ZXJzKQ0KKysgICAgICAgIHJldHVybiBGQUlMVVJFOw0KKysNCisrICAgIC8qIENvbm5l Y3Rpb24gSW5pdCBhbmQgc2V0dXAgKi8NCisrICAgIGxkYXAtPmxkID0gbGRhcF9pbml0KGxk YXAtPnNlcnZlcnMsIExEQVBfUE9SVCk7DQorKyAgICBpZiAoIWxkYXAtPmxkKSB7DQorKyAg ICAgICAgbGRhcF9wZXJyb3IobGRhcC0+bGQsICJsZGFwX2luaXQoKSIpOw0KKysgICAgICAg IHJldHVybiBGQUlMVVJFOw0KKysgICAgfQ0KKysNCisrICAgIGlmICggbGRhcF9zZXRfb3B0 aW9uKGxkYXAtPmxkLCBMREFQX09QVF9QUk9UT0NPTF9WRVJTSU9OLCAmdmVyc2lvbikgIT0g TERBUF9PUFRfU1VDQ0VTUykgew0KKysgICAgICAgIGxkYXBfcGVycm9yKGxkYXAtPmxkLCAi bGRhcF9zZXRfb3B0aW9uKExEQVBfT1BUX1BST1RPQ09MX1ZFUlNJT04pIik7DQorKyAgICAg ICAgcmV0dXJuIEZBSUxVUkU7DQorKyAgICB9DQorKw0KKysgICAgLyogVGltZW91dHMgc2V0 dXAgKi8NCisrICAgIGlmIChsZGFwX3NldF9vcHRpb24obGRhcC0+bGQsIExEQVBfT1BUX05F VFdPUktfVElNRU9VVCwgJmxkYXAtPmJfdGltZW91dCkgIT0gTERBUF9TVUNDRVNTKSB7DQor KyAgICAgICAgbGRhcF9wZXJyb3IobGRhcC0+bGQsICJsZGFwX3NldF9vcHRpb24oTERBUF9P UFRfTkVUV09SS19USU1FT1VUKSIpOw0KKysgICAgfQ0KKysgICAgaWYgKGxkYXBfc2V0X29w dGlvbihsZGFwLT5sZCwgTERBUF9PUFRfVElNRU9VVCwgJmxkYXAtPnNfdGltZW91dCkgIT0g TERBUF9TVUNDRVNTKSB7DQorKyAgICAgICAgbGRhcF9wZXJyb3IobGRhcC0+bGQsICJsZGFw X3NldF9vcHRpb24oTERBUF9PUFRfVElNRU9VVCkiKTsNCisrICAgIH0NCisrDQorKyAgICAv KiBUTFMgc3VwcG9ydCAqLw0KKysgICAgaWYgKCAobGRhcC0+dGxzID09IC0xKSB8fCAobGRh cC0+dGxzID09IDEpICkgew0KKysgICAgICAgIGlmIChsZGFwX3N0YXJ0X3Rsc19zKGxkYXAt PmxkLCBOVUxMLCBOVUxMICkgIT0gTERBUF9TVUNDRVNTKSB7DQorKyAgICAgICAgICAgIC8q IGZhaWxlZCB0aGVuIHJlaW5pdCB0aGUgaW5pdGlhbCBjb25uZWN0ICovDQorKyAgICAgICAg ICAgIGxkYXBfcGVycm9yKGxkYXAtPmxkLCAibGRhcF9jb25uZWN0OiAoVExTKSBsZGFwX3N0 YXJ0X3RscygpIik7DQorKyAgICAgICAgICAgIGlmIChsZGFwLT50bHMgPT0gMSkNCisrICAg ICAgICAgICAgICAgIHJldHVybiBGQUlMVVJFOw0KKysNCisrICAgICAgICAgICAgbGRhcC0+ bGQgPSBsZGFwX2luaXQobGRhcC0+c2VydmVycywgTERBUF9QT1JUKTsNCisrICAgICAgICAg ICAgaWYgKCFsZGFwLT5sZCkgeyANCisrICAgICAgICAgICAgICAgIGxkYXBfcGVycm9yKGxk YXAtPmxkLCAibGRhcF9pbml0KCkiKTsNCisrICAgICAgICAgICAgICAgIHJldHVybiBGQUlM VVJFOw0KKysgICAgICAgICAgICB9DQorKw0KKysgICAgICAgICAgICBpZiAoIGxkYXBfc2V0 X29wdGlvbihsZGFwLT5sZCwgTERBUF9PUFRfUFJPVE9DT0xfVkVSU0lPTiwgJnZlcnNpb24p ICE9IExEQVBfT1BUX1NVQ0NFU1MpIHsNCisrICAgICAgICAgICAgICAgICBsZGFwX3BlcnJv cihsZGFwLT5sZCwgImxkYXBfc2V0X29wdGlvbigpIik7DQorKyAgICAgICAgICAgICAgICAg cmV0dXJuIEZBSUxVUkU7DQorKyAgICAgICAgICAgIH0NCisrICAgICAgICB9DQorKyAgICB9 DQorKw0KKysNCisrICAgIGlmICggbGRhcF9zaW1wbGVfYmluZF9zKGxkYXAtPmxkLCBsZGFw LT5iaW5kZG4sIGxkYXAtPmJpbmRwdykgIT0gTERBUF9TVUNDRVNTKSB7DQorKyAgICAgICAg bGRhcF9wZXJyb3IobGRhcC0+bGQsICJsZGFwX3NpbXBsZV9iaW5kX3MoKSIpOw0KKysgICAg ICAgIHJldHVybiBGQUlMVVJFOw0KKysgICAgfQ0KKysNCisrICAgIC8qIHNheXMgaXQgaXMg Y29ubmVjdGVkICovDQorKyAgICBGTEFHX1NFVF9DT05ORUNURUQobGRhcC0+ZmxhZ3MpOw0K KysNCisrICAgIHJldHVybiBTVUNDRVNTOw0KKyt9DQorKw0KKysvKiBtdXN0IGZyZWUgYWxs b2NhdGVkIHJlc3NvdXJjZSAqLw0KKytzdGF0aWMgY2hhciAqIGxkYXBfYnVpbGRfaG9zdChj aGFyICpob3N0LCBpbnQgcG9ydCkgew0KKysgICAgdW5zaWduZWQgaW50IHNpemUgPSBzdHJs ZW4oaG9zdCkrMTE7DQorKyAgICBjaGFyICogaCA9IChjaGFyICopIGNhbGxvYyAoc2l6ZSwg c2l6ZW9mKGNoYXIpKTsNCisrICAgIGludCByYzsNCisrICAgIGlmICghaCkNCisrICAgICAg ICAgcmV0dXJuIE5VTEw7DQorKw0KKysgICAgcmMgPSBzbnByaW50ZihoLCBzaXplLCAiJXM6 JWQgIiwgaG9zdCwgcG9ydCk7DQorKyAgICBpZiAocmMgPT0gLTEpDQorKyAgICAgICAgcmV0 dXJuIE5VTEw7DQorKyAgICByZXR1cm4gaDsNCisrfQ0KKysNCisrc3RhdGljIGludCBsZGFw X2NvdW50X2dyb3VwKGNvbnN0IGNoYXIgKiBpbnB1dCkgew0KKysgICAgY29uc3QgY2hhciAq IGNoYXJzZXQgPSAiIFx0IjsNCisrICAgIGNvbnN0IGNoYXIgKiBwdHIgPSBpbnB1dDsNCisr ICAgIHVuc2lnbmVkIGludCBjb3VudCA9IDA7DQorKyAgICB1bnNpZ25lZCBpbnQgbnVtOw0K KysNCisrICAgIG51bSA9IHN0cnNwbihwdHIsIGNoYXJzZXQpOw0KKysgICAgcHRyICs9IG51 bTsNCisrDQorKyAgICB3aGlsZSAoKG51bSA9IHN0cmNzcG4ocHRyLCBjaGFyc2V0KSkpIHsN CisrICAgIGNvdW50Kys7DQorKyAgICBwdHIgKz0gbnVtOw0KKysgICAgcHRyKys7DQorKyAg ICB9DQorKw0KKysgICAgcmV0dXJuIGNvdW50Ow0KKyt9DQorKw0KKysvKiBmb3JtYXQgZmls dGVyICovDQorK2NoYXIgKiBsZGFwX3BhcnNlX2dyb3Vwcyhjb25zdCBjaGFyICogZ3JvdXBz KSB7DQorKyAgICB1bnNpZ25lZCBpbnQgYnVmZmVyX3NpemUgPSBGSUxURVJfR1JPVVBfU0la RShncm91cHMpOw0KKysgICAgY2hhciAqIGJ1ZmZlciA9IChjaGFyICopIGNhbGxvYyhidWZm ZXJfc2l6ZSwgc2l6ZW9mKGNoYXIpKTsNCisrICAgIGNoYXIgKiBnID0gTlVMTDsNCisrICAg IGNoYXIgKiBnYXJyYXlbMzJdOw0KKysgICAgdW5zaWduZWQgaW50IGkgPSAwOw0KKysNCisr ICAgIGlmICgoIWdyb3Vwcyl8fCghYnVmZmVyKSkNCisrICAgICAgICByZXR1cm4gTlVMTDsN CisrDQorKyAgICBnID0gc3RyZHVwKGdyb3Vwcyk7DQorKyAgICBpZiAoIWcpIHsNCisrICAg ICAgICBmcmVlKGJ1ZmZlcik7DQorKyAgICAgICAgcmV0dXJuIE5VTEw7DQorKyAgICB9DQor Kw0KKysgICAgLyogZmlyc3Qgc2VwYXJhdGUgaW50byBuIHRva2VucyAqLw0KKysgICAgaWYg KCB0b2tlbml6ZShnYXJyYXksIHNpemVvZihnYXJyYXkpL3NpemVvZigqZ2FycmF5KSwgZykg PCAwKSB7DQorKyAgICAgICAgZnJlZShnKTsNCisrICAgICAgICBmcmVlKGJ1ZmZlcik7DQor KyAgICAgICAgcmV0dXJuIE5VTEw7DQorKyAgICB9DQorKw0KKysgICAgLyogYnVpbGQgdGhl IGZpbmFsIGZpbHRlciBmb3JtYXQgKi8NCisrICAgIHN0cmxjYXQoYnVmZmVyLCBGSUxURVJf R1JPVVBfUFJFRklYLCBidWZmZXJfc2l6ZSk7DQorKyAgICBzdHJsY2F0KGJ1ZmZlciwgRklM VEVSX09SX1BSRUZJWCwgYnVmZmVyX3NpemUpOw0KKysgICAgaSA9IDA7DQorKyAgICB3aGls ZSAoZ2FycmF5W2ldKSB7DQorKyAgICAgICAgc3RybGNhdChidWZmZXIsIEZJTFRFUl9DTl9Q UkVGSVgsIGJ1ZmZlcl9zaXplKTsNCisrICAgICAgICBzdHJsY2F0KGJ1ZmZlciwgZ2FycmF5 W2ldLCBidWZmZXJfc2l6ZSk7DQorKyAgICAgICAgc3RybGNhdChidWZmZXIsIEZJTFRFUl9D Tl9TVUZGSVgsIGJ1ZmZlcl9zaXplKTsNCisrICAgICAgICBpKys7DQorKyAgICB9DQorKyAg ICBzdHJsY2F0KGJ1ZmZlciwgRklMVEVSX09SX1NVRkZJWCwgYnVmZmVyX3NpemUpOw0KKysg ICAgc3RybGNhdChidWZmZXIsIEZJTFRFUl9VSURfRk9STUFULCBidWZmZXJfc2l6ZSk7DQor KyAgICBzdHJsY2F0KGJ1ZmZlciwgRklMVEVSX0dST1VQX1NVRkZJWCwgYnVmZmVyX3NpemUp Ow0KKysNCisrICAgIGZyZWUoZyk7DQorKyAgICByZXR1cm4gYnVmZmVyOw0KKyt9DQorKw0K KysvKiBhIGJpdCBkaXJ0eSBidXQgbGVhayBmcmVlICAqLw0KKytjaGFyICogbGRhcF9wYXJz ZV9zZXJ2ZXJzKGNvbnN0IGNoYXIgKiBzZXJ2ZXJzKSB7DQorKyAgICBjaGFyICogcyA9IE5V TEw7DQorKyAgICBjaGFyICogdG1wID0gTlVMTCwgKnVybHNbMzJdOw0KKysgICAgdW5zaWdu ZWQgaW50IG51bSA9IDAgLCBpID0gMCAsIGFzaXplID0gMDsNCisrICAgIExEQVBVUkxEZXNj ICp1cmxkWzMyXTsNCisrDQorKyAgICBpZiAoIXNlcnZlcnMpDQorKyAgICAgICAgcmV0dXJu IE5VTEw7DQorKw0KKysgICAgLyogbG9jYWwgY29weSBvZiB0aGUgYXJnICovDQorKyAgICBz ID0gc3RyZHVwKHNlcnZlcnMpOw0KKysgICAgaWYgKCFzKQ0KKysgICAgICAgIHJldHVybiBO VUxMOw0KKysNCisrICAgIC8qIGZpcnN0IHNlcGFyYXRlIGludG8gVVJMIHRva2VucyAqLw0K KysgICAgaWYgKCB0b2tlbml6ZSh1cmxzLCBzaXplb2YodXJscykvc2l6ZW9mKCp1cmxzKSwg cykgPCAwKQ0KKysgICAgICAgIHJldHVybiBOVUxMOw0KKysNCisrICAgIGkgPSAwOw0KKysg ICAgd2hpbGUgKHVybHNbaV0pIHsNCisrICAgICAgICBpZiAoISBsZGFwX2lzX2xkYXBfdXJs KHVybHNbaV0pIHx8DQorKyAgICAgICAgICAgKGxkYXBfdXJsX3BhcnNlKHVybHNbaV0sICZ1 cmxkW2ldKSAhPSAwKSkgew0KKysgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQorKyAg ICAgICAgfQ0KKysgICAgICAgIGkrKzsNCisrICAgIH0NCisrDQorKyAgICAvKiBub3cgZnJl ZShzKSAqLw0KKysgICAgZnJlZSAocyk7DQorKw0KKysgICAgLyogaG93IG11Y2ggbWVtb3J5 IGRvIHdlIG5lZWQgKi8NCisrICAgIG51bSA9IGk7DQorKyAgICBmb3IgKGkgPSAwIDsgaSA8 IG51bSA7IGkrKykNCisrICAgICAgICBhc2l6ZSArPSBzdHJsZW4odXJsZFtpXS0+bHVkX2hv c3QpKzExOw0KKysNCisrICAgIC8qIGFsbG9jICovDQorKyAgICBzID0gKGNoYXIgKikgY2Fs bG9jKCBhc2l6ZSsxICwgc2l6ZW9mKGNoYXIpKTsNCisrICAgIGlmICghcykgew0KKysgICAg ICAgIGZvciAoaSA9IDAgOyBpIDwgbnVtIDsgaSsrKQ0KKysgICAgICAgICAgICBsZGFwX2Zy ZWVfdXJsZGVzYyh1cmxkW2ldKTsNCisrICAgICAgICByZXR1cm4gTlVMTDsNCisrICAgIH0N CisrDQorKyAgICAvKiB0aGVuIGJ1aWxkIHRoZSBmaW5hbCBob3N0IHN0cmluZyAqLw0KKysg ICAgZm9yIChpID0gMCA7IGkgPCBudW0gOyBpKyspIHsNCisrICAgICAgICAvKiBidWlsdCBo b3N0IHBhcnQgKi8NCisrICAgICAgICB0bXAgPSBsZGFwX2J1aWxkX2hvc3QodXJsZFtpXS0+ bHVkX2hvc3QsIHVybGRbaV0tPmx1ZF9wb3J0KTsNCisrICAgICAgICBzdHJuY2F0KHMsIHRt cCwgc3RybGVuKHRtcCkpOw0KKysgICAgICAgIGxkYXBfZnJlZV91cmxkZXNjKHVybGRbaV0p Ow0KKysgICAgICAgIGZyZWUodG1wKTsNCisrICAgIH0NCisrDQorKyAgICByZXR1cm4gczsN CisrfQ0KKysNCisrdm9pZCBsZGFwX29wdGlvbnNfcHJpbnQobGRhcF9vcHRfdCAqIGxkYXAp IHsNCisrICAgIGRlYnVnKCJsZGFwIG9wdGlvbnM6Iik7DQorKyAgICBkZWJ1Zygic2VydmVy czogJXMiLCBsZGFwLT5zZXJ2ZXJzKTsNCisrICAgIGlmIChsZGFwLT51X2Jhc2VkbikNCisr ICAgICAgICBkZWJ1ZygidXNlciBiYXNlZG46ICVzIiwgbGRhcC0+dV9iYXNlZG4pOw0KKysg ICAgaWYgKGxkYXAtPmdfYmFzZWRuKQ0KKysgICAgICAgIGRlYnVnKCJncm91cCBiYXNlZG46 ICVzIiwgbGRhcC0+Z19iYXNlZG4pOw0KKysgICAgaWYgKGxkYXAtPmJpbmRkbikNCisrICAg ICAgICBkZWJ1ZygiYmluZGRuOiAlcyIsIGxkYXAtPmJpbmRkbik7DQorKyAgICBpZiAobGRh cC0+YmluZHB3KQ0KKysgICAgICAgIGRlYnVnKCJiaW5kcHc6ICVzIiwgbGRhcC0+YmluZHB3 KTsNCisrICAgIGlmIChsZGFwLT5zZ3JvdXApDQorKyAgICAgICAgZGVidWcoImdyb3VwOiAl cyIsIGxkYXAtPnNncm91cCk7DQorKyAgICBpZiAobGRhcC0+ZmlsdGVyKQ0KKysgICAgICAg IGRlYnVnKCJmaWx0ZXI6ICVzIiwgbGRhcC0+ZmlsdGVyKTsNCisrfQ0KKysNCisrdm9pZCBs ZGFwX29wdGlvbnNfZnJlZShsZGFwX29wdF90ICogbCkgew0KKysgICAgaWYgKCFsKQ0KKysg ICAgICAgIHJldHVybjsNCisrICAgIGlmIChsLT5zZXJ2ZXJzKQ0KKysgICAgICAgIGZyZWUo bC0+c2VydmVycyk7DQorKyAgICBpZiAobC0+dV9iYXNlZG4pDQorKyAgICAgICAgZnJlZShs LT51X2Jhc2Vkbik7DQorKyAgICBpZiAobC0+Z19iYXNlZG4pDQorKyAgICAgICAgZnJlZShs LT5nX2Jhc2Vkbik7DQorKyAgICBpZiAobC0+YmluZGRuKQ0KKysgICAgICAgIGZyZWUobC0+ YmluZGRuKTsNCisrICAgIGlmIChsLT5iaW5kcHcpDQorKyAgICAgICAgZnJlZShsLT5iaW5k cHcpOw0KKysgICAgaWYgKGwtPnNncm91cCkNCisrICAgICAgICBmcmVlKGwtPnNncm91cCk7 DQorKyAgICBpZiAobC0+Zmdyb3VwKQ0KKysgICAgICAgIGZyZWUobC0+Zmdyb3VwKTsNCisr ICAgIGlmIChsLT5maWx0ZXIpDQorKyAgICAgICAgZnJlZShsLT5maWx0ZXIpOw0KKysgICAg aWYgKGwtPmxfY29uZikNCisrICAgICAgICBmcmVlKGwtPmxfY29uZik7DQorKyAgICBmcmVl KGwpOw0KKyt9DQorKw0KKysvKiBmcmVlIGtleXMgKi8NCisrdm9pZCBsZGFwX2tleXNfZnJl ZShsZGFwX2tleV90ICogaykgew0KKysgICAgbGRhcF92YWx1ZV9mcmVlX2xlbihrLT5rZXlz KTsNCisrICAgIGZyZWUoayk7DQorKyAgICByZXR1cm47DQorK30NCisrDQorK2xkYXBfa2V5 X3QgKiBsZGFwX2dldHVzZXJrZXkobGRhcF9vcHRfdCAqbCwgY29uc3QgY2hhciAqIHVzZXIp IHsNCisrICAgIGxkYXBfa2V5X3QgKiBrID0gKGxkYXBfa2V5X3QgKikgY2FsbG9jICgxLCBz aXplb2YobGRhcF9rZXlfdCkpOw0KKysgICAgTERBUE1lc3NhZ2UgKnJlcywgKmU7DQorKyAg ICBjaGFyICogZmlsdGVyOw0KKysgICAgaW50IGk7DQorKw0KKysgICAgaWYgKCghaykgfHwg KCFsKSkNCisrICAgICAgICAgcmV0dXJuIE5VTEw7DQorKw0KKysgICAgLyogQW0gaSBzdGls bCBjb25uZWN0ZWQgPyBSRVRSWSBuIHRpbWVzICovDQorKyAgICAvKiBYWFggVE9ETzogc2V0 dXAgc29tZSBjb25mIHZhbHVlIGZvciByZXRyeWluZyAqLw0KKysgICAgaWYgKCEobC0+Zmxh Z3MgJiBGTEFHX0NPTk5FQ1RFRCkpDQorKyAgICAgICAgZm9yIChpID0gMCA7IGkgPCAyIDsg aSsrKQ0KKysgICAgICAgICAgICBpZiAobGRhcF9jb25uZWN0KGwpID09IDApDQorKyAgICAg ICAgICAgICAgICBicmVhazsNCisrDQorKyAgICAvKiBxdWljayBjaGVjayBmb3IgYXR0ZW1w dHMgdG8gYmUgZXZpbCAqLw0KKysgICAgaWYgKChzdHJjaHIodXNlciwgJygnKSAhPSBOVUxM KSB8fCAoc3RyY2hyKHVzZXIsICcpJykgIT0gTlVMTCkgfHwNCisrICAgICAgICAoc3RyY2hy KHVzZXIsICcqJykgIT0gTlVMTCkgfHwgKHN0cmNocih1c2VyLCAnXFwnKSAhPSBOVUxMKSkN CisrICAgICAgICByZXR1cm4gTlVMTDsNCisrDQorKyAgICAvKiBidWlsZCAgZmlsdGVyIGZv ciBMREFQIHJlcXVlc3QgKi8NCisrICAgIFJFUVVFU1RfVVNFUihmaWx0ZXIsIHVzZXIsIGwt PmZpbHRlcik7DQorKw0KKysgICAgaWYgKCBsZGFwX3NlYXJjaF9zdCggbC0+bGQsDQorKyAg ICAgICAgbC0+dV9iYXNlZG4sDQorKyAgICAgICAgTERBUF9TQ09QRV9TVUJUUkVFLA0KKysg ICAgICAgIGZpbHRlciwNCisrICAgICAgICBhdHRycywgMCwgJmwtPnNfdGltZW91dCwgJnJl cyApICE9IExEQVBfU1VDQ0VTUykgew0KKysgICAgICAgIA0KKysgICAgICAgIGxkYXBfcGVy cm9yKGwtPmxkLCAibGRhcF9zZWFyY2hfc3QoKSIpOw0KKysNCisrICAgICAgICBmcmVlKGZp bHRlcik7DQorKyAgICAgICAgZnJlZShrKTsNCisrDQorKyAgICAgICAgLyogWFhYIGVycm9y IG9uIHNlYXJjaCwgdGltZW91dCBldGMuLiBjbG9zZSBhc2sgZm9yIHJlY29ubmVjdCAqLw0K KysgICAgICAgIGxkYXBfY2xvc2UobCk7DQorKw0KKysgICAgICAgIHJldHVybiBOVUxMOw0K KysgICAgfSANCisrDQorKyAgICAvKiBmcmVlICovDQorKyAgICBmcmVlKGZpbHRlcik7DQor Kw0KKysgICAgLyogY2hlY2sgaWYgYW55IHJlc3VsdHMgKi8NCisrICAgIGkgPSBsZGFwX2Nv dW50X2VudHJpZXMobC0+bGQscmVzKTsNCisrICAgIGlmIChpIDw9IDApIHsNCisrICAgICAg ICBsZGFwX21zZ2ZyZWUocmVzKTsNCisrICAgICAgICBmcmVlKGspOw0KKysgICAgICAgIHJl dHVybiBOVUxMOw0KKysgICAgfQ0KKysNCisrICAgIGlmIChpID4gMSkNCisrICAgICAgICBk ZWJ1ZygiW0xEQVBdIGR1cGxpY2F0ZSBlbnRyaWVzLCB1c2luZyB0aGUgRklSU1QgZW50cnkg cmV0dXJuZWQiKTsNCisrDQorKyAgICBlID0gbGRhcF9maXJzdF9lbnRyeShsLT5sZCwgcmVz KTsNCisrICAgIGstPmtleXMgPSBsZGFwX2dldF92YWx1ZXNfbGVuKGwtPmxkLCBlLCBQVUJL RVlBVFRSKTsNCisrICAgIGstPm51bSA9IGxkYXBfY291bnRfdmFsdWVzX2xlbihrLT5rZXlz KTsNCisrDQorKyAgICBsZGFwX21zZ2ZyZWUocmVzKTsNCisrICAgIHJldHVybiBrOw0KKyt9 DQorKw0KKysNCisrLyogLTEgaWYgdHJvdWJsZQ0KKysgICAwIGlmIHVzZXIgaXMgTk9UIG1l bWJlciBvZiBjdXJyZW50IHNlcnZlciBncm91cA0KKysgICAxIGlmIHVzZXIgSVMgTUVNQkVS IG9mIGN1cnJlbnQgc2VydmVyIGdyb3VwIA0KKysgKi8NCisraW50IGxkYXBfaXNtZW1iZXIo bGRhcF9vcHRfdCAqIGwsIGNvbnN0IGNoYXIgKiB1c2VyKSB7DQorKyAgICBMREFQTWVzc2Fn ZSAqcmVzOw0KKysgICAgY2hhciAqIGZpbHRlcjsNCisrICAgIGludCBpOw0KKysNCisrICAg IGlmICgoIWwtPnNncm91cCkgfHwgIShsLT5nX2Jhc2VkbikpDQorKyAgICAgICAgcmV0dXJu IDE7DQorKw0KKysgICAgLyogQW0gaSBzdGlsbCBjb25uZWN0ZWQgPyBSRVRSWSBuIHRpbWVz ICovDQorKyAgICAvKiBYWFggVE9ETzogc2V0dXAgc29tZSBjb25mIHZhbHVlIGZvciByZXRy eWluZyAqLw0KKysgICAgaWYgKCEobC0+ZmxhZ3MgJiBGTEFHX0NPTk5FQ1RFRCkpIA0KKysg ICAgICAgIGZvciAoaSA9IDAgOyBpIDwgMiA7IGkrKykNCisrICAgICAgICAgICAgaWYgKGxk YXBfY29ubmVjdChsKSA9PSAwKQ0KKysgICAgICAgICAgICAgICAgIGJyZWFrOw0KKysNCisr ICAgIC8qIHF1aWNrIGNoZWNrIGZvciBhdHRlbXB0cyB0byBiZSBldmlsICovDQorKyAgICBp ZiAoKHN0cmNocih1c2VyLCAnKCcpICE9IE5VTEwpIHx8IChzdHJjaHIodXNlciwgJyknKSAh PSBOVUxMKSB8fA0KKysgICAgICAgIChzdHJjaHIodXNlciwgJyonKSAhPSBOVUxMKSB8fCAo c3RyY2hyKHVzZXIsICdcXCcpICE9IE5VTEwpKQ0KKysgICAgICAgIHJldHVybiBGQUlMVVJF Ow0KKysNCisrICAgIC8qIGJ1aWxkIGZpbHRlciBmb3IgTERBUCByZXF1ZXN0ICovDQorKyAg ICBSRVFVRVNUX0dST1VQKGZpbHRlciwgbC0+Zmdyb3VwLCB1c2VyKTsNCisrDQorKyAgICBp ZiAobGRhcF9zZWFyY2hfc3QoIGwtPmxkLCANCisrICAgICAgICBsLT5nX2Jhc2VkbiwNCisr ICAgICAgICBMREFQX1NDT1BFX1NVQlRSRUUsDQorKyAgICAgICAgZmlsdGVyLA0KKysgICAg ICAgIE5VTEwsIDAsICZsLT5zX3RpbWVvdXQsICZyZXMpICE9IExEQVBfU1VDQ0VTUykgew0K KysgICAgDQorKyAgICAgICAgbGRhcF9wZXJyb3IobC0+bGQsICJsZGFwX3NlYXJjaF9zdCgp Iik7DQorKw0KKysgICAgICAgIGZyZWUoZmlsdGVyKTsNCisrDQorKyAgICAgICAgLyogWFhY IGVycm9yIG9uIHNlYXJjaCwgdGltZW91dCBldGMuLiBjbG9zZSBhc2sgZm9yIHJlY29ubmVj dCAqLw0KKysgICAgICAgIGxkYXBfY2xvc2UobCk7DQorKw0KKysgICAgICAgIHJldHVybiBG QUlMVVJFOw0KKysgICAgfQ0KKysNCisrICAgIGZyZWUoZmlsdGVyKTsNCisrDQorKyAgICAv KiBjaGVjayBpZiBhbnkgcmVzdWx0cyAqLw0KKysgICAgaWYgKGxkYXBfY291bnRfZW50cmll cyhsLT5sZCwgcmVzKSA+IDApIHsNCisrICAgICAgICBsZGFwX21zZ2ZyZWUocmVzKTsNCisr ICAgICAgICByZXR1cm4gMTsNCisrICAgIH0NCisrDQorKyAgICBsZGFwX21zZ2ZyZWUocmVz KTsNCisrICAgIHJldHVybiAwOw0KKyt9DQorKw0KKysvKg0KKysgKiBsZGFwLmNvbmYgc2lt cGxlIHBhcnNlcg0KKysgKiBYWFggVE9ETzogIHNhbml0eSBjaGVja3MNCisrICogbXVzdCBl aXRoZXINCisrICogLSBmcmVlIHRoZSBwcmV2aW91cyBsZGFwX29wdF9iZWZvcmUgcmVwbGFj aW5nIGVudHJpZXMNCisrICogLSBmcmVlIGVhY2ggbmVjZXNzYXJ5IHByZXZpb3VzbHkgcGFy c2VkIGVsZW1lbnRzDQorKyAqIHJldDoNCisrICogLTEgb24gRkFJTFVSRSwgMCBvbiBTVUND RVNTDQorKyAqLw0KKytpbnQgbGRhcF9wYXJzZV9sY29uZihsZGFwX29wdF90ICogbCkgew0K KysgICAgRklMRSAqIGxjZDsgLyogbGRhcC5jb25mIGRlc2NyaXB0b3IgKi8NCisrICAgIGNo YXIgYnVmW0JVRlNJWl07DQorKyAgICBjaGFyICogcyA9IE5VTEwsICogayA9IE5VTEwsICog diA9IE5VTEw7DQorKyAgICBpbnQgbGksIGxlbjsNCisrDQorKyAgICBsY2QgPSBmb3BlbiAo bC0+bF9jb25mLCAiciIpOw0KKysgICAgaWYgKGxjZCA9PSBOVUxMKSB7DQorKyAgICAgICAg LyogZGVidWcoIkNhbm5vdCBvcGVuICVzIiwgbC0+bF9jb25mKTsgKi8NCisrICAgICAgICBw ZXJyb3IoImxkYXBfcGFyc2VfbGNvbmYoKSIpOw0KKysgICAgICAgIHJldHVybiBGQUlMVVJF Ow0KKysgICAgfQ0KKysgICAgDQorKyAgICB3aGlsZSAoZmdldHMgKGJ1Ziwgc2l6ZW9mIChi dWYpLCBsY2QpICE9IE5VTEwpIHsNCisrDQorKyAgICAgICAgaWYgKCpidWYgPT0gJ1xuJyB8 fCAqYnVmID09ICcjJykNCisrICAgICAgICAgICAgY29udGludWU7DQorKw0KKysgICAgICAg IGsgPSBidWY7DQorKyAgICAgICAgdiA9IGs7DQorKyAgICAgICAgd2hpbGUgKCp2ICE9ICdc MCcgJiYgKnYgIT0gJyAnICYmICp2ICE9ICdcdCcpDQorKyAgICAgICAgICAgIHYrKzsNCisr DQorKyAgICAgICAgaWYgKCp2ID09ICdcMCcpDQorKyAgICAgICAgICAgIGNvbnRpbnVlOw0K KysNCisrICAgICAgICAqKHYrKykgPSAnXDAnOw0KKysNCisrICAgICAgICB3aGlsZSAoKnYg PT0gJyAnIHx8ICp2ID09ICdcdCcpDQorKyAgICAgICAgICAgIHYrKzsNCisrDQorKyAgICAg ICAgbGkgPSBzdHJsZW4gKHYpIC0gMTsNCisrICAgICAgICB3aGlsZSAodltsaV0gPT0gJyAn IHx8IHZbbGldID09ICdcdCcgfHwgdltsaV0gPT0gJ1xuJykNCisrICAgICAgICAgICAgLS1s aTsNCisrICAgICAgICB2W2xpICsgMV0gPSAnXDAnOw0KKysNCisrICAgICAgICBpZiAoIXN0 cmNhc2VjbXAgKGssICJ1cmkiKSkgew0KKysgICAgICAgICAgICBpZiAoKGwtPnNlcnZlcnMg PSBsZGFwX3BhcnNlX3NlcnZlcnModikpID09IE5VTEwpIHsNCisrICAgICAgICAgICAgICAg IGZhdGFsKCJlcnJvciBpbiBsZGFwIHNlcnZlcnMiKTsNCisrICAgICAgICAgICAgcmV0dXJu IEZBSUxVUkU7DQorKyAgICAgICAgICAgIH0NCisrDQorKyAgICAgICAgfQ0KKysgICAgICAg IGVsc2UgaWYgKCFzdHJjYXNlY21wIChrLCAiYmFzZSIpKSB7IA0KKysgICAgICAgICAgICBz ID0gc3RyY2hyICh2LCAnPycpOw0KKysgICAgICAgICAgICBpZiAocyAhPSBOVUxMKSB7DQor KyAgICAgICAgICAgICAgICBsZW4gPSBzIC0gdjsNCisrICAgICAgICAgICAgICAgIGwtPnVf YmFzZWRuID0gbWFsbG9jIChsZW4gKyAxKTsNCisrICAgICAgICAgICAgICAgIHN0cm5jcHkg KGwtPnVfYmFzZWRuLCB2LCBsZW4pOw0KKysgICAgICAgICAgICAgICAgbC0+dV9iYXNlZG5b bGVuXSA9ICdcMCc7DQorKyAgICAgICAgICAgIH0gZWxzZSB7DQorKyAgICAgICAgICAgICAg ICBsLT51X2Jhc2VkbiA9IHN0cmR1cCAodik7DQorKyAgICAgICAgICAgIH0NCisrICAgICAg ICB9DQorKyAgICAgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAgKGssICJiaW5kZG4iKSkgew0K KysgICAgICAgICAgICBsLT5iaW5kZG4gPSBzdHJkdXAgKHYpOw0KKysgICAgICAgIH0NCisr ICAgICAgICBlbHNlIGlmICghc3RyY2FzZWNtcCAoaywgImJpbmRwdyIpKSB7DQorKyAgICAg ICAgICAgIGwtPmJpbmRwdyA9IHN0cmR1cCAodik7DQorKyAgICAgICAgfQ0KKysgICAgICAg IGVsc2UgaWYgKCFzdHJjYXNlY21wIChrLCAidGltZWxpbWl0IikpIHsNCisrICAgICAgICAg ICAgbC0+c190aW1lb3V0LnR2X3NlYyA9IGF0b2kgKHYpOw0KKysgICAgICAgICAgICAgICAg fQ0KKysgICAgICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wIChrLCAiYmluZF90aW1lbGltaXQi KSkgew0KKysgICAgICAgICAgICBsLT5iX3RpbWVvdXQudHZfc2VjID0gYXRvaSAodik7DQor KyAgICAgICAgfQ0KKysgICAgICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wIChrLCAic3NsIikp IHsNCisrICAgICAgICAgICAgaWYgKCFzdHJjYXNlY21wICh2LCAic3RhcnRfdGxzIikpDQor KyAgICAgICAgICAgICAgICBsLT50bHMgPSAxOw0KKysgICAgICAgIH0NCisrICAgIH0NCisr DQorKyAgICBmY2xvc2UgKGxjZCk7DQorKyAgICByZXR1cm4gU1VDQ0VTUzsNCisrfQ0KKysN CisrI2VuZGlmIC8qIFdJVEhfTERBUF9QVUJLRVkgKi8NCitkaWZmIC1OdWFyIC0tZXhjbHVk ZSAnKi5vcmlnJyAtLWV4Y2x1ZGUgJyoucmVqJyBsZGFwYXV0aC5oIGxkYXBhdXRoLmgNCist LS0gbGRhcGF1dGguaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMA0KKysr KyBsZGFwYXV0aC5oCTIwMDgtMDgtMjMgMTU6MDI6NDcuMDAwMDAwMDAwIC0wNzAwDQorQEAg LTAsMCArMSwxMjQgQEANCisrLyoNCisrICogJElkOiBvcGVuc3NoLWxway00LjNwMS0wLjMu Ny5wYXRjaCx2IDEuMyAyMDA2LzA0LzE4IDE1OjI5OjA5IGVhdSBFeHAgJCANCisrICovDQor Kw0KKysvKg0KKysgKg0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIEVyaWMgQVVHRSA8ZWF1 QHBoZWFyLm9yZz4NCisrICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisrICoNCisrICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKysgKg0KKysgKiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuDQorKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4N CisrICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcGhlYXIub3JnIG5vciB0aGUgbmFtZXMg b2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorKyAqDQorKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFT IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IA0KKysgKiBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gDQorKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgDQorKyAqIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IA0KKysgKiBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIA0KKysgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLg0KKysgKg0KKysgKg0KKysgKi8NCisrDQorKyNpZm5kZWYgTERB UEFVVEhfSA0KKysjZGVmaW5lIExEQVBBVVRIX0gNCisrDQorKyNkZWZpbmUgTERBUF9ERVBS RUNBVEVEIDENCisrDQorKyNpbmNsdWRlIDxzdHJpbmcuaD4NCisrI2luY2x1ZGUgPHRpbWUu aD4NCisrI2luY2x1ZGUgPGxkYXAuaD4NCisrI2luY2x1ZGUgPGxiZXIuaD4NCisrDQorKy8q IHRva2VucyBpbiB1c2UgZm9yIGNvbmZpZyAqLw0KKysjZGVmaW5lIF9ERUZBVUxUX0xQS19U T0tFTiAiVXNlTFBLIg0KKysjZGVmaW5lIF9ERUZBVUxUX1NSVl9UT0tFTiAiTHBrU2VydmVy cyINCisrI2RlZmluZSBfREVGQVVMVF9VU1JfVE9LRU4gIkxwa1VzZXJETiINCisrI2RlZmlu ZSBfREVGQVVMVF9HUlBfVE9LRU4gIkxwa0dyb3VwRE4iDQorKyNkZWZpbmUgX0RFRkFVTFRf QkROX1RPS0VOICJMcGtCaW5kRE4iDQorKyNkZWZpbmUgX0RFRkFVTFRfQlBXX1RPS0VOICJM cGtCaW5kUHciDQorKyNkZWZpbmUgX0RFRkFVTFRfTVlHX1RPS0VOICJMcGtTZXJ2ZXJHcm91 cCINCisrI2RlZmluZSBfREVGQVVMVF9GSUxfVE9LRU4gIkxwa0ZpbHRlciINCisrI2RlZmlu ZSBfREVGQVVMVF9UTFNfVE9LRU4gIkxwa0ZvcmNlVExTIg0KKysjZGVmaW5lIF9ERUZBVUxU X0JUSV9UT0tFTiAiTHBrQmluZFRpbWVsaW1pdCINCisrI2RlZmluZSBfREVGQVVMVF9TVElf VE9LRU4gIkxwa1NlYXJjaFRpbWVsaW1pdCINCisrI2RlZmluZSBfREVGQVVMVF9MRFBfVE9L RU4gIkxwa0xkYXBDb25mIg0KKysNCisrLyogZGVmYXVsdCBvcHRpb25zICovDQorKyNkZWZp bmUgX0RFRkFVTFRfTFBLX09OIDANCisrI2RlZmluZSBfREVGQVVMVF9MUEtfU0VSVkVSUyBO VUxMDQorKyNkZWZpbmUgX0RFRkFVTFRfTFBLX1VETiBOVUxMDQorKyNkZWZpbmUgX0RFRkFV TFRfTFBLX0dETiBOVUxMDQorKyNkZWZpbmUgX0RFRkFVTFRfTFBLX0JJTkRETiBOVUxMDQor KyNkZWZpbmUgX0RFRkFVTFRfTFBLX0JJTkRQVyBOVUxMDQorKyNkZWZpbmUgX0RFRkFVTFRf TFBLX1NHUk9VUCBOVUxMDQorKyNkZWZpbmUgX0RFRkFVTFRfTFBLX0ZJTFRFUiBOVUxMDQor KyNkZWZpbmUgX0RFRkFVTFRfTFBLX1RMUyAtMQ0KKysjZGVmaW5lIF9ERUZBVUxUX0xQS19C VElNRU9VVCAxMA0KKysjZGVmaW5lIF9ERUZBVUxUX0xQS19TVElNRU9VVCAxMA0KKysjZGVm aW5lIF9ERUZBVUxUX0xQS19MRFAgTlVMTA0KKysNCisrLyogZmxhZ3MgKi8NCisrI2RlZmlu ZSBGTEFHX0VNUFRZCSAgICAweDAwMDAwMDAwDQorKyNkZWZpbmUgRkxBR19DT05ORUNURUQJ ICAgIDB4MDAwMDAwMDENCisrDQorKy8qIGZsYWcgbWFjcm9zICovDQorKyNkZWZpbmUgRkxB R19TRVRfRU1QVFkoeCkJCXgmPShGTEFHX0VNUFRZKQ0KKysjZGVmaW5lIEZMQUdfU0VUX0NP Tk5FQ1RFRCh4KQkJeHw9KEZMQUdfQ09OTkVDVEVEKQ0KKysjZGVmaW5lIEZMQUdfU0VUX0RJ U0NPTk5FQ1RFRCh4KQl4Jj1+KEZMQUdfQ09OTkVDVEVEKQ0KKysNCisrLyogZGVmaW5lcyAq Lw0KKysjZGVmaW5lIEZBSUxVUkUgLTENCisrI2RlZmluZSBTVUNDRVNTIDANCisrI2RlZmlu ZSBQVUJLRVlBVFRSICJzc2hQdWJsaWNLZXkiDQorKw0KKysvKiANCisrICoNCisrICogZGVm aW5lZCBmaWxlcyBwYXRoIA0KKysgKiAoc2hvdWxkIGJlIHJlbG9jYXRlZCB0byBwYXRobmFt ZXMuaCwNCisrICogaWYgb25lIGRheSBpdCdzIGluY2x1ZGVkIHdpdGhpbiB0aGUgdHJlZSkg DQorKyAqDQorKyAqLw0KKysjZGVmaW5lIF9QQVRIX0xEQVBfQ09ORklHX0ZJTEUgIi9ldGMv bGRhcC5jb25mIg0KKysNCisrLyogc3RydWN0dXJlcyAqLw0KKyt0eXBlZGVmIHN0cnVjdCBs ZGFwX29wdGlvbnMgew0KKysgICAgaW50IG9uOwkJCS8qIFVzZSBpdCBvciBOT1QgKi8NCisr ICAgIExEQVAgKiBsZDsJCQkvKiBMREFQIGZpbGUgZGVzYyAqLw0KKysgICAgY2hhciAqIHNl cnZlcnM7CQkvKiBwYXJzZWQgc2VydmVycyBmb3IgbGRhcGxpYiBmYWlsb3ZlciBoYW5kbGlu ZyAqLw0KKysgICAgY2hhciAqIHVfYmFzZWRuOwkJLyogdXNlciBiYXNlZG4gKi8NCisrICAg IGNoYXIgKiBnX2Jhc2VkbjsJCS8qIGdyb3VwIGJhc2VkbiAqLw0KKysgICAgY2hhciAqIGJp bmRkbjsJCS8qIGJpbmRkbiAqLw0KKysgICAgY2hhciAqIGJpbmRwdzsJCS8qIGJpbmQgcGFz c3dvcmQgKi8NCisrICAgIGNoYXIgKiBzZ3JvdXA7CQkvKiBzZXJ2ZXIgZ3JvdXAgKi8NCisr ICAgIGNoYXIgKiBmZ3JvdXA7CQkvKiBncm91cCBmaWx0ZXIgKi8NCisrICAgIGNoYXIgKiBm aWx0ZXI7CQkvKiBhZGRpdGlvbmFsIGZpbHRlciAqLw0KKysgICAgY2hhciAqIGxfY29uZjsJ CS8qIHVzZSBsZGFwLmNvbmYgKi8NCisrICAgIGludCB0bHM7CQkJLyogVExTIG9ubHkgKi8N CisrICAgIHN0cnVjdCB0aW1ldmFsIGJfdGltZW91dDsgICAvKiBiaW5kIHRpbWVvdXQgKi8N CisrICAgIHN0cnVjdCB0aW1ldmFsIHNfdGltZW91dDsgICAvKiBzZWFyY2ggdGltZW91dCAq Lw0KKysgICAgdW5zaWduZWQgaW50IGZsYWdzOwkJLyogbWlzYyBmbGFncyAocmVjb25uZWN0 aW9uLCBmdXR1cmUgdXNlPykgKi8NCisrfSBsZGFwX29wdF90Ow0KKysNCisrdHlwZWRlZiBz dHJ1Y3QgbGRhcF9rZXlzIHsNCisrICAgIHN0cnVjdCBiZXJ2YWwgKioga2V5czsJLyogdGhl IHB1YmxpYyBrZXlzIHJldHJpZXZlZCAqLw0KKysgICAgdW5zaWduZWQgaW50IG51bTsJCS8q IG51bWJlciBvZiBrZXlzICovDQorK30gbGRhcF9rZXlfdDsNCisrDQorKw0KKysvKiBmdW5j dGlvbiBoZWFkZXJzICovDQorK3ZvaWQgbGRhcF9jbG9zZShsZGFwX29wdF90ICopOw0KKytp bnQgbGRhcF9jb25uZWN0KGxkYXBfb3B0X3QgKik7DQorK2NoYXIgKiBsZGFwX3BhcnNlX2dy b3Vwcyhjb25zdCBjaGFyICopOw0KKytjaGFyICogbGRhcF9wYXJzZV9zZXJ2ZXJzKGNvbnN0 IGNoYXIgKik7DQorK3ZvaWQgbGRhcF9vcHRpb25zX3ByaW50KGxkYXBfb3B0X3QgKik7DQor K3ZvaWQgbGRhcF9vcHRpb25zX2ZyZWUobGRhcF9vcHRfdCAqKTsNCisrdm9pZCBsZGFwX2tl eXNfZnJlZShsZGFwX2tleV90ICopOw0KKytpbnQgbGRhcF9wYXJzZV9sY29uZihsZGFwX29w dF90ICopOw0KKytsZGFwX2tleV90ICogbGRhcF9nZXR1c2Vya2V5KGxkYXBfb3B0X3QgKiwg Y29uc3QgY2hhciAqKTsNCisraW50IGxkYXBfaXNtZW1iZXIobGRhcF9vcHRfdCAqLCBjb25z dCBjaGFyICopOw0KKysNCisrI2VuZGlmDQorZGlmZiAtTnVhciAtLWV4Y2x1ZGUgJyoub3Jp ZycgLS1leGNsdWRlICcqLnJlaicgbHBrLXVzZXItZXhhbXBsZS50eHQgbHBrLXVzZXItZXhh bXBsZS50eHQNCistLS0gbHBrLXVzZXItZXhhbXBsZS50eHQJMTk2OS0xMi0zMSAxNjowMDow MC4wMDAwMDAwMDAgLTA4MDANCisrKysgbHBrLXVzZXItZXhhbXBsZS50eHQJMjAwOC0wOC0y MyAxNTowMjo0Ny4wMDAwMDAwMDAgLTA3MDANCitAQCAtMCwwICsxLDExNyBAQA0KKysNCisr UG9zdCB0byBNTCAtPiBVc2VyIE1hZGUgUXVpY2sgSW5zdGFsbCBEb2MuDQorK0NvbnRyaWJ1 dGlvbiBmcm9tIEpvaG4gTGFuZSA8am9obkBsYW5lLnVrLm5ldD4NCisrDQorKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysNCisrDQorK09wZW5TU0ggTERBUCBrZXlzdG9yZSBQYXRjaA0KKys9 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisrDQorK05PVEU6IHRoZXNlIG5vdGVzIGFy ZSBhIHRyYW5zY3JpcHQgb2YgYSBzcGVjaWZpYyBpbnN0YWxsYXRpb24NCisrICAgICAgdGhl eSB3b3JrIGZvciBtZSwgeW91ciBzcGVjaWZpY3MgbWF5IGJlIGRpZmZlcmVudCENCisrICAg ICAgZnJvbSBKb2huIExhbmUgTWFyY2ggMTd0aCAyMDA1ICAgICAgICAgam9obkBsYW5lLnVr Lm5ldA0KKysNCisrVGhpcyBpcyBhIHBhdGNoIHRvIE9wZW5TU0ggNC4wcDEgdG8gYWxsb3cg aXQgdG8gb2J0YWluIHVzZXJzJyBwdWJsaWMga2V5cw0KKytmcm9tIHRoZWlyIExEQVAgcmVj b3JkIGFzIGFuIGFsdGVybmF0aXZlIHRvIH4vLnNzaC9hdXRob3JpemVkX2tleXMuDQorKw0K KysoQXNzdW1pbmcgaGVyZSB0aGF0IG5lY2Vzc2FyeSBidWlsZCBzdHVmZiBpcyBpbiAkQlVJ TEQpDQorKw0KKytjZCAkQlVJTEQvb3BlbnNzaC00LjBwMQ0KKytwYXRjaCAtTnAxIC1pICRC VUlMRC9vcGVuc3NoLWxway00LjBwMS0wLjMucGF0Y2gNCisrbWtkaXIgLXAgL3Zhci9lbXB0 eSAmJg0KKysuL2NvbmZpZ3VyZSAtLXByZWZpeD0vdXNyIC0tc3lzY29uZmRpcj0vZXRjL3Nz aCBcDQorKyAgICAtLWxpYmV4ZWNkaXI9L3Vzci9zYmluIC0td2l0aC1tZDUtcGFzc3dvcmRz IC0td2l0aC1wYW0gXA0KKysgICAgLS13aXRoLWxpYnM9Ii1sbGRhcCIgLS13aXRoLWNwcGZs YWdzPSItRFdJVEhfTERBUF9QVUJLRVkiDQorK05vdyBkby4NCisrbWFrZSAmJg0KKyttYWtl IGluc3RhbGwNCisrDQorK0FkZCB0aGUgZm9sbG93aW5nIGNvbmZpZyB0byAvZXRjL3NzaC9z c2hfY29uZmlnDQorK1VzZUxQSyB5ZXMNCisrTHBrU2VydmVycyBsZGFwOi8vbXlob3N0Lm15 ZG9tYWluLmNvbQ0KKytMcGtVc2VyRE4gIG91PVBlb3BsZSxkYz1teWRvbWFpbixkYz1jb20N CisrDQorK1dlIG5lZWQgdG8gdGVsbCBzc2hkIGFib3V0IHRoZSBTU0wga2V5cyBkdXJpbmcg Ym9vdCwgYXMgcm9vdCdzDQorK2Vudmlyb25tZW50IGRvZXMgbm90IGV4aXN0IGF0IHRoYXQg dGltZS4gRWRpdCAvZXRjL3JjLmQvaW5pdC5kL3NzaGQuDQorK0NoYW5nZSB0aGUgc3RhcnR1 cCBjb2RlIGZyb20gdGhpczoNCisrICAgICAgICAgICAgICAgIGVjaG8gIlN0YXJ0aW5nIFNT SCBTZXJ2ZXIuLi4iDQorKyAgICAgICAgICAgICAgICBsb2FkcHJvYyAvdXNyL3NiaW4vc3No ZA0KKysgICAgICAgICAgICAgICAgOzsNCisrdG8gdGhpczoNCisrICAgICAgICAgICAgICAg IGVjaG8gIlN0YXJ0aW5nIFNTSCBTZXJ2ZXIuLi4iDQorKyAgICAgICAgICAgICAgICBMREFQ UkM9Ii9yb290Ly5sZGFwcmMiIGxvYWRwcm9jIC91c3Ivc2Jpbi9zc2hkDQorKyAgICAgICAg ICAgICAgICA7Ow0KKysNCisrUmUtc3RhcnQgdGhlIHNzaGQgZGFlbW9uOg0KKysvZXRjL3Jj LmQvaW5pdC5kL3NzaGQgcmVzdGFydA0KKysNCisrSW5zdGFsbCB0aGUgYWRkaXRpb25hbCBM REFQIHNjaGVtYQ0KKytjcCAkQlVJTEQvb3BlbnNzaC1scGstMC4yLnNjaGVtYSAgL2V0Yy9v cGVubGRhcC9zY2hlbWEvb3BlbnNzaC5zY2hlbWENCisrDQorK05vdyBhZGQgdGhlIG9wZW5T U0ggTERBUCBzY2hlbWEgdG8gL2V0Yy9vcGVubGRhcC9zbGFwZC5jb25mOg0KKytBZGQgdGhl IGZvbGxvd2luZyB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZyBibG9jayBvZiBzY2hlbWEg aW5jbHVkZXMNCisraW5jbHVkZSAgICAgICAgIC9ldGMvb3BlbmxkYXAvc2NoZW1hL29wZW5z c2guc2NoZW1hDQorKw0KKytSZS1zdGFydCB0aGUgTERBUCBzZXJ2ZXI6DQorKy9ldGMvcmMu ZC9pbml0LmQvc2xhcGQgcmVzdGFydA0KKysNCisrVG8gYWRkIG9uZSBvciBtb3JlIHB1Ymxp YyBrZXlzIHRvIGEgdXNlciwgZWcgInRlc3R1c2VyIiA6DQorK2xkYXBzZWFyY2ggLXggLVcg LVogLUxMTCAtYiAidWlkPXRlc3R1c2VyLG91PVBlb3BsZSxkYz1teWRvbWFpbixkYz1jb20i IC1EDQorKyJ1aWQ9dGVzdHVzZXIsb3U9UGVvcGxlLGRjPW15ZG9tYWluLGRjPWNvbSIgPiAv dG1wL3Rlc3R1c2VyDQorKw0KKythcHBlbmQgdGhlIGZvbGxvd2luZyB0byB0aGlzIC90bXAv dGVzdHVzZXIgZmlsZQ0KKytvYmplY3RjbGFzczogbGRhcFB1YmxpY0tleQ0KKytzc2hQdWJs aWNLZXk6IHNzaC1yc2ENCisrQUFBQUIzTnphQzF5YzJFQUFBQUJKUUFBQUlCM2RzcndxWHFE N0U0ellZcnh3ZERLQlVReEtNaW9YeTlweEZWYWk2NGtBUHhqVTlLUw0KKytxSW83UWZranNs ZnNqZmxrc2pmbGRma2pzbGRmakxYLzV6a3pSbVQyOEk1cGlHenVuUHYxN1M4OXo4WHdTc3VB b1IxdDg2dCs1ZGxJDQorKzdlWkUvZ1ZibjJVUWtRcTcra2REVFMyeVhWNlZuQzUyTi9rS0xH M2NpQmtCQXc9PSBHZW5lcmFsIFB1cnBvc2UgUlNBIEtleQ0KKysNCisrVGhlbiBkbyBhIG1v ZGlmeToNCisrbGRhcG1vZGlmeSAteCAtRCAidWlkPXRlc3R1c2VyLG91PVBlb3BsZSxkYz1t eWRvbWFpbixkYz1jb20iIC1XIC1mDQorKy90bXAvdGVzdHVzZXIgLVoNCisrRW50ZXIgTERB UCBQYXNzd29yZDoNCisrbW9kaWZ5aW5nIGVudHJ5ICJ1aWQ9dGVzdHVzZXIsb3U9UGVvcGxl LGRjPW15ZG9tYWluLGRjPWNvbSINCisrQW5kIGNoZWNrIHRoZSBtb2RpZnkgaXMgb2s6DQor K2xkYXBzZWFyY2ggLXggLVcgLVogLWIgInVpZD10ZXN0dXNlcixvdT1QZW9wbGUsZGM9bXlk b21haW4sZGM9Y29tIiAtRA0KKysidWlkPXRlc3R1c2VyLG91PVBlb3BsZSxkYz1teWRvbWFp bixkYz1jb20iDQorK0VudGVyIExEQVAgUGFzc3dvcmQ6DQorKyMgZXh0ZW5kZWQgTERJRg0K KysjDQorKyMgTERBUHYzDQorKyMgYmFzZSA8dWlkPXRlc3R1c2VyLG91PVBlb3BsZSxkYz1t eWRvbWFpbixkYz1jb20+IHdpdGggc2NvcGUgc3ViDQorKyMgZmlsdGVyOiAob2JqZWN0Y2xh c3M9KikNCisrIyByZXF1ZXN0aW5nOiBBTEwNCisrIw0KKysNCisrIyB0ZXN0dXNlciwgUGVv cGxlLCBteWRvbWFpbi5jb20NCisrZG46IHVpZD10ZXN0dXNlcixvdT1QZW9wbGUsZGM9bXlk b21haW4sZGM9Y29tDQorK3VpZDogdGVzdHVzZXINCisrY246IHRlc3R1c2VyDQorK29iamVj dENsYXNzOiBhY2NvdW50DQorK29iamVjdENsYXNzOiBwb3NpeEFjY291bnQNCisrb2JqZWN0 Q2xhc3M6IHRvcA0KKytvYmplY3RDbGFzczogc2hhZG93QWNjb3VudA0KKytvYmplY3RDbGFz czogbGRhcFB1YmxpY0tleQ0KKytzaGFkb3dMYXN0Q2hhbmdlOiAxMjc1Nw0KKytzaGFkb3dN YXg6IDk5OTk5DQorK3NoYWRvd1dhcm5pbmc6IDcNCisrbG9naW5TaGVsbDogL2Jpbi9iYXNo DQorK3VpZE51bWJlcjogOTk5OQ0KKytnaWROdW1iZXI6IDUwMQ0KKytob21lRGlyZWN0b3J5 OiAvaG9tZS90ZXN0dXNlcg0KKyt1c2VyUGFzc3dvcmQ6OiBlMU5UU0VGOVVEZ3dWMWhuTTFW alVEUkpLMGsxWW5GaUwxZDRaVUpPYlhsWlozWjNVVFU9DQorK3NzaFB1YmxpY0tleTogc3No LXJzYQ0KKytBQUFBQjNOemFDMXljMkVBQUFBQkpRQUFBSUIzZHNyd3FYcUQ3RTR6WVlyeHdk REtCVVF4S01pb1h5OXB4RlZhaTY0a0FQeGpVOUtTcUlvN1Fma2pzbGZzamZsa3NqZmxkZmtq c2xkZmpMWC81emt6Um1UMjhJNXBpR3p1blB2MTdTODl6DQorKzhYd1NzdUFvUjF0ODZ0KzVk bEk3ZVpFL2dWYm4yVVFrUXE3K2tkRFRTMnlYVjZWbkM1Mk4va0tMRzNjaUJrQkF3PT0gR2Vu ZXJhbCBQdXJwb3NlIFJTQSBLZXkNCisrDQorKyMgc2VhcmNoIHJlc3VsdA0KKytzZWFyY2g6 IDMNCisrcmVzdWx0OiAwIFN1Y2Nlc3MNCisrDQorKyMgbnVtUmVzcG9uc2VzOiAyDQorKyMg bnVtRW50cmllczogMQ0KKysNCisrTm93IHN0YXJ0IGEgc3NoIHNlc3Npb24gdG8gdXNlciAi dGVzdHVzZXIiIGZyb20gdXN1YWwgc3NoIGNsaWVudCAoZS5nLg0KKytwdVRUWSkuIExvZ2lu IHNob3VsZCBzdWNjZWVkLg0KKysNCisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KK2RpZmYg LU51YXIgLS1leGNsdWRlICcqLm9yaWcnIC0tZXhjbHVkZSAnKi5yZWonIE1ha2VmaWxlLmlu IE1ha2VmaWxlLmluDQorLS0tIE1ha2VmaWxlLmluCTIwMDgtMDctMDggMDc6MjE6MTIuMDAw MDAwMDAwIC0wNzAwDQorKysrIE1ha2VmaWxlLmluCTIwMDgtMDgtMjMgMTU6MDI6NDcuMDAw MDAwMDAwIC0wNzAwDQorQEAgLTg3LDcgKzg3LDcgQEANCisgCWF1dGgta3JiNS5vIFwNCisg CWF1dGgyLWdzcy5vIGdzcy1zZXJ2Lm8gZ3NzLXNlcnYta3JiNS5vIFwNCisgCWxvZ2lucmVj Lm8gYXV0aC1wYW0ubyBhdXRoLXNoYWRvdy5vIGF1dGgtc2lhLm8gbWQ1Y3J5cHQubyBcDQor LQlhdWRpdC5vIGF1ZGl0LWJzbS5vIHBsYXRmb3JtLm8gc2Z0cC1zZXJ2ZXIubyBzZnRwLWNv bW1vbi5vIFwNCisrCWF1ZGl0Lm8gYXVkaXQtYnNtLm8gcGxhdGZvcm0ubyBsZGFwYXV0aC5v IHNmdHAtc2VydmVyLm8gc2Z0cC1jb21tb24ubyBcDQorIAlyb2FtaW5nX2NvbW1vbi5vDQor IA0KKyBNQU5QQUdFUwk9IG1vZHVsaS41Lm91dCBzY3AuMS5vdXQgc3NoLWFkZC4xLm91dCBz c2gtYWdlbnQuMS5vdXQgc3NoLWtleWdlbi4xLm91dCBzc2gta2V5c2Nhbi4xLm91dCBzc2gu MS5vdXQgc3NoZC44Lm91dCBzZnRwLXNlcnZlci44Lm91dCBzZnRwLjEub3V0IHNzaC1yYW5k LWhlbHBlci44Lm91dCBzc2gta2V5c2lnbi44Lm91dCBzc2hkX2NvbmZpZy41Lm91dCBzc2hf Y29uZmlnLjUub3V0DQorZGlmZiAtTnVhciAtLWV4Y2x1ZGUgJyoub3JpZycgLS1leGNsdWRl ICcqLnJlaicgb3BlbnNzaC1scGtfb3BlbmxkYXAuc2NoZW1hIG9wZW5zc2gtbHBrX29wZW5s ZGFwLnNjaGVtYQ0KKy0tLSBvcGVuc3NoLWxwa19vcGVubGRhcC5zY2hlbWEJMTk2OS0xMi0z MSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDANCisrKysgb3BlbnNzaC1scGtfb3BlbmxkYXAu c2NoZW1hCTIwMDgtMDgtMjMgMTU6MDI6NDcuMDAwMDAwMDAwIC0wNzAwDQorQEAgLTAsMCAr MSwxOSBAQA0KKysjDQorKyMgTERBUCBQdWJsaWMgS2V5IFBhdGNoIHNjaGVtYSBmb3IgdXNl IHdpdGggb3BlbnNzaC1sZGFwcHVia2V5DQorKyMgQXV0aG9yOiBFcmljIEFVR0UgPGVhdUBw aGVhci5vcmc+DQorKyMgDQorKyMgQmFzZWQgb24gdGhlIHByb3Bvc2FsIG9mIDogTWFyayBS dWlqdGVyDQorKyMNCisrDQorKw0KKysjIG9jdGV0U3RyaW5nIFNZTlRBWA0KKythdHRyaWJ1 dGV0eXBlICggMS4zLjYuMS40LjEuMjQ1NTIuNTAwLjEuMS4xLjEzIE5BTUUgJ3NzaFB1Ymxp Y0tleScgDQorKwlERVNDICdNQU5EQVRPUlk6IE9wZW5TU0ggUHVibGljIGtleScgDQorKwlF UVVBTElUWSBvY3RldFN0cmluZ01hdGNoDQorKwlTWU5UQVggMS4zLjYuMS40LjEuMTQ2Ni4x MTUuMTIxLjEuNDAgKQ0KKysNCisrIyBwcmludGFibGVTdHJpbmcgU1lOVEFYIHllc3xubw0K KytvYmplY3RjbGFzcyAoIDEuMy42LjEuNC4xLjI0NTUyLjUwMC4xLjEuMi4wIE5BTUUgJ2xk YXBQdWJsaWNLZXknIFNVUCB0b3AgQVVYSUxJQVJZDQorKwlERVNDICdNQU5EQVRPUlk6IE9w ZW5TU0ggTFBLIG9iamVjdGNsYXNzJw0KKysJTVVTVCAoIHNzaFB1YmxpY0tleSAkIHVpZCAp IA0KKysJKQ0KK2RpZmYgLU51YXIgLS1leGNsdWRlICcqLm9yaWcnIC0tZXhjbHVkZSAnKi5y ZWonIG9wZW5zc2gtbHBrX3N1bi5zY2hlbWEgb3BlbnNzaC1scGtfc3VuLnNjaGVtYQ0KKy0t LSBvcGVuc3NoLWxwa19zdW4uc2NoZW1hCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAw IC0wODAwDQorKysrIG9wZW5zc2gtbHBrX3N1bi5zY2hlbWEJMjAwOC0wOC0yMyAxNTowMjo0 Ny4wMDAwMDAwMDAgLTA3MDANCitAQCAtMCwwICsxLDIxIEBADQorKyMNCisrIyBMREFQIFB1 YmxpYyBLZXkgUGF0Y2ggc2NoZW1hIGZvciB1c2Ugd2l0aCBvcGVuc3NoLWxkYXBwdWJrZXkN CisrIyBBdXRob3I6IEVyaWMgQVVHRSA8ZWF1QHBoZWFyLm9yZz4NCisrIyANCisrIyBTY2hl bWEgZm9yIFN1biBEaXJlY3RvcnkgU2VydmVyLg0KKysjIEJhc2VkIG9uIHRoZSBvcmlnaW5h bCBzY2hlbWEsIG1vZGlmaWVkIGJ5IFN0ZWZhbiBGaXNjaGVyLg0KKysjDQorKw0KKytkbjog Y249c2NoZW1hDQorKw0KKysjIG9jdGV0U3RyaW5nIFNZTlRBWA0KKythdHRyaWJ1dGVUeXBl czogKCAxLjMuNi4xLjQuMS4yNDU1Mi41MDAuMS4xLjEuMTMgTkFNRSAnc3NoUHVibGljS2V5 JyANCisrCURFU0MgJ01BTkRBVE9SWTogT3BlblNTSCBQdWJsaWMga2V5JyANCisrCUVRVUFM SVRZIG9jdGV0U3RyaW5nTWF0Y2gNCisrCVNZTlRBWCAxLjMuNi4xLjQuMS4xNDY2LjExNS4x MjEuMS40MCApDQorKw0KKysjIHByaW50YWJsZVN0cmluZyBTWU5UQVggeWVzfG5vDQorK29i amVjdENsYXNzZXM6ICggMS4zLjYuMS40LjEuMjQ1NTIuNTAwLjEuMS4yLjAgTkFNRSAnbGRh cFB1YmxpY0tleScgU1VQIHRvcCBBVVhJTElBUlkNCisrCURFU0MgJ01BTkRBVE9SWTogT3Bl blNTSCBMUEsgb2JqZWN0Y2xhc3MnDQorKwlNVVNUICggc3NoUHVibGljS2V5ICQgdWlkICkg DQorKwkpDQorZGlmZiAtTnVhciAtLWV4Y2x1ZGUgJyoub3JpZycgLS1leGNsdWRlICcqLnJl aicgUkVBRE1FLmxwayBSRUFETUUubHBrDQorLS0tIFJFQURNRS5scGsJMTk2OS0xMi0zMSAx NjowMDowMC4wMDAwMDAwMDAgLTA4MDANCisrKysgUkVBRE1FLmxwawkyMDA4LTA4LTIzIDE1 OjAyOjQ3LjAwMDAwMDAwMCAtMDcwMA0KK0BAIC0wLDAgKzEsMjY3IEBADQorK09wZW5TU0gg TERBUCBQVUJMSUMgS0VZIFBBVENIIA0KKytDb3B5cmlnaHQgKGMpIDIwMDMgRXJpYyBBVUdF IChlYXVAcGhlYXIub3JnKQ0KKytBbGwgcmlnaHRzIHJlc2VydmVkLg0KKysNCisrUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0DQorK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KKythcmUgbWV0Og0KKysxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKysg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuDQorKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQorKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCisrICAg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl IGRpc3RyaWJ1dGlvbi4NCisrMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJl IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQorKyAgIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLg0KKysNCisrVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBg QVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1INCisrSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUw0KKytP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELg0KKytJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQorK0lOQ0lERU5UQUwsIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVA0K KytOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsgTE9TUyBPRiBVU0UsDQorK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQ0KKytUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUDQorKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRg0KKytUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKysNCisrcHVycG9z ZXMgb2YgdGhpcyBwYXRjaDoNCisrDQorK1RoaXMgcGF0Y2ggd291bGQgaGVscCB0byBoYXZl IGF1dGhlbnRpY2F0aW9uIGNlbnRyYWxpemF0aW9uIHBvbGljeQ0KKyt1c2luZyBzc2ggcHVi bGljIGtleSBhdXRoZW50aWNhdGlvbi4NCisrVGhpcyBwYXRjaCBjb3VsZCBiZSBhbiBhbHRl cm5hdGl2ZSB0byBvdGhlciAic2VjdXJlIiBhdXRoZW50aWNhdGlvbiBzeXN0ZW0NCisrd29y a2luZyBpbiBhIHNpbWlsYXIgd2F5IChLZXJiZXJvcywgU2VjdXJJRCwgZXRjLi4uKSwgZXhj ZXB0IHRoZSBmYWN0IA0KKyt0aGF0IGl0J3MgYmFzZWQgb24gT3BlblNTSCBhbmQgaXRzIHB1 YmxpYyBrZXkgYWJpbGl0aWVzLg0KKysNCisrPj4gRllJOiA8PA0KKysndWlkJzogbWVhbnMg dW5peCBhY2NvdW50cyBleGlzdGluZyBvbiB0aGUgY3VycmVudCBzZXJ2ZXINCisrJ2xwa1Nl cnZlckdyb3VwOicgbWVhbiBzZXJ2ZXIgZ3JvdXAgY29uZmlndXJlZCBvbiB0aGUgY3VycmVu dCBzZXJ2ZXIgKCdscGtTZXJ2ZXJHcm91cCcgaW4gc3NoZF9jb25maWcpDQorKw0KKytleGFt cGxlIHNjaGVtYToNCisrDQorKw0KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2VydmVyMSAodWlkOiBlYXUscml2YWwsdG90bykgKGxwa1NlcnZlckdyb3VwOiB1bml4 KQ0KKysgICAgICAgICAgICAgICAgX19fX19fX19fX18gICAgICAvDQorKyAgICAgICAgICAg ICAgIC8gICAgICAgICAgIFwgLS0tIC0gc2VydmVyMyAodWlkOiBlYXUsIHRpdGkpIChscGtT ZXJ2ZXJHcm91cDogdW5peCkNCisrICAgICAgICAgICAgICB8IExEQVAgU2VydmVyIHwgICAg XA0KKysJICAgICAgfCBlYXUgICxyaXZhbCB8ICAgICBzZXJ2ZXIyICh1aWQ6IHJpdmFsLCBl YXUpIChscGtTZXJ2ZXJHcm91cDogdW5peCkNCisrCSAgICAgIHwgdGl0aSAsdG90byAgfA0K KysJICAgICAgfCB1c2VyeCwuLi4uICB8ICAgICAgICAgc2VydmVyNSAodWlkOiBlYXUpICAo bHBrU2VydmVyR3JvdXA6IG1haWwpDQorKyAgICAgICAgICAgICAgIFxfX19fX19fX19fXy8g XCAgICAgICAvDQorKwkgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tIC0gc2VydmVyNCAo dWlkOiBlYXUsIHJpdmFsKSAgKG5vIGdyb3VwIGNvbmZpZ3VyZWQpDQorKwkJCSAgICAgICAg ICAgICBcDQorKwkJCQkgICAgICAgIGV0Yy4uLg0KKysNCisrLSBXSEFUIFdFIE5FRUQgOg0K KysNCisrICAqIGNvbmZpZ3VyZWQgTERBUCBzZXJ2ZXIgc29tZXdoZXJlIG9uIHRoZSBuZXR3 b3JrIChpLmUuIE9wZW5MREFQKQ0KKysgICogcGF0Y2hlZCBzc2hkICh3aXRoIHRoaXMgcGF0 Y2ggOykNCisrICAqIExEQVAgdXNlcigvZ3JvdXApIGVudHJ5IChsb29rIGF0IHVzZXJzLmxk aWYgKCYgZ3JvdXBzLmxkaWYpKToNCisrICAgICAgICBVc2VyIGVudHJ5Og0KKysJLSBhdHRh Y2hlZCB0byB0aGUgJ2xkYXBQdWJsaWNLZXknIG9iamVjdGNsYXNzDQorKwktIGF0dGFjaGVk IHRvIHRoZSAncG9zaXhBY2NvdW50JyBvYmplY3RjbGFzcw0KKysJLSB3aXRoIGEgZmlsbGVk ICdzc2hQdWJsaWNLZXknIGF0dHJpYnV0ZSANCisrCUV4YW1wbGU6DQorKwkJZG46IHVpZD1l YXUsb3U9dXNlcnMsZGM9Y3Vja29vcyxkYz1uZXQNCisrCQlvYmplY3RjbGFzczogdG9wDQor KwkJb2JqZWN0Y2xhc3M6IHBlcnNvbg0KKysJCW9iamVjdGNsYXNzOiBvcmdhbml6YXRpb25h bFBlcnNvbg0KKysJCW9iamVjdGNsYXNzOiBwb3NpeEFjY291bnQNCisrCQlvYmplY3RjbGFz czogbGRhcFB1YmxpY0tleQ0KKysJCWRlc2NyaXB0aW9uOiBFcmljIEFVR0UgQWNjb3VudA0K KysJCXVzZXJQYXNzd29yZDogYmxhaA0KKysJCWNuOiBFcmljIEFVR0UNCisrCQlzbjogRXJp YyBBVUdFDQorKwkJdWlkOiBlYXUNCisrCQl1aWROdW1iZXI6IDEwMzQNCisrCQlnaWROdW1i ZXI6IDENCisrCQlob21lRGlyZWN0b3J5OiAvZXhwb3J0L2hvbWUvZWF1DQorKwkJc3NoUHVi bGljS2V5OiBzc2gtZHNzIEFBQUFCMy4uLg0KKysJCXNzaFB1YmxpY0tleTogc3NoLWRzcyBB QUFBTTUuLi4NCisrDQorKwlHcm91cCBlbnRyeToNCisrCS0gYXR0YWNoZWQgdG8gdGhlICdw b3NpeEdyb3VwJyBvYmplY3RjbGFzcw0KKysJLSB3aXRoIGEgJ2NuJyBncm91cG5hbWUgYXR0 cmlidXRlDQorKwktIHdpdGggbXVsdGlwbGUgJ21lbWJlclVpZCcgYXR0cmlidXRlcyBmaWxs ZWQgd2l0aCB1c2VybmFtZXMgYWxsb3dlZCBpbiB0aGlzIGdyb3VwDQorKwlFeGFtcGxlOg0K KysJCSMgZmV3IG1lbWJlcnMNCisrCQlkbjogY249dW5peCxvdT1ncm91cHMsZGM9Y3Vja29v cyxkYz1uZXQNCisrCQlvYmplY3RjbGFzczogdG9wDQorKwkJb2JqZWN0Y2xhc3M6IHBvc2l4 R3JvdXANCisrCQlkZXNjcmlwdGlvbjogVW5peCBiYXNlZCBzZXJ2ZXJzIGdyb3VwDQorKwkJ Y246IHVuaXgNCisrCQlnaWROdW1iZXI6IDEwMDINCisrCQltZW1iZXJVaWQ6IGVhdQ0KKysJ CW1lbWJlclVpZDogdXNlcjENCisrCQltZW1iZXJVaWQ6IHVzZXIyDQorKw0KKysNCisrLSBI T1cgSVQgV09SS1MgOg0KKysNCisrICAqIHdpdGhvdXQgcGF0Y2gNCisrICBJZiBhIHVzZXIg d2FudHMgdG8gYXV0aGVudGljYXRlIHRvIGxvZyBpbiBhIHNlcnZlciB0aGUgc3NoZCwgd2ls bCBmaXJzdCBsb29rIGZvciBhdXRoZW50aWNhdGlvbiBtZXRob2QgYWxsb3dlZCAoUlNBYXV0 aCxrZXJiZXJvcyxldGMuLikNCisrICBhbmQgaWYgUlNBYXV0aCBhbmQgdGlja2V0cyBiYXNl ZCBhdXRoIGZhaWxzLCBpdCB3aWxsIGZhbGxiYWNrIHRvIHN0YW5kYXJkIHBhc3N3b3JkIGF1 dGhlbnRpY2F0aW9uIChpZiBlbmFibGVkKS4NCisrDQorKyAgKiB3aXRoIHRoZSBwYXRjaA0K KysgIElmIGEgdXNlciB3YW50IHRvIGF1dGhlbnRpY2F0ZSB0byBsb2cgaW4gYSBzZXJ2ZXIs IHRoZSBzc2hkIHdpbGwgZmlyc3QgbG9vayBmb3IgYXV0aCBtZXRob2QgaW5jbHVkaW5nIExE QVAgcHVia2V5LCBpZiB0aGUgbGRhcHB1YmtleSBvcHRpb25zIGlzIGVuYWJsZWQuDQorKyAg SXQgd2lsbCBkbyBhbiBsZGFwc2VhcmNoIHRvIGdldCB0aGUgcHVibGljIGtleSBkaXJlY3Rs eSBmcm9tIHRoZSBMREFQIGluc3RlYWQgb2YgcmVhZGluZyBpdCBmcm9tIHRoZSBzZXJ2ZXIg ZmlsZXN5c3RlbS4gDQorKyAgKHVzdWFsbHkgaW4gJEhPTUUvLnNzaC9hdXRob3JpemVkX2tl eXMpDQorKw0KKysgIElmIGdyb3VwcyBhcmUgZW5hYmxlZCwgaXQgd2lsbCBhbHNvIGNoZWNr IGlmIHRoZSB1c2VyIHRoYXQgd2FudHMgdG8gbG9naW4gaXMgaW4gdGhlIGdyb3VwIG9mIHRo ZSBzZXJ2ZXIgaGUgaXMgdHJ5aW5nIHRvIGxvZyBpbnRvLg0KKysgIElmIGl0IGZhaWxzLCBp dCBmYWxscyBiYWNrIG9uIFJTQSBhdXRoIGZpbGVzICgkSE9NRS8uc3NoL2F1dGhvcml6ZWRf a2V5cyksIGV0Yy4uIGFuZCBmaW5hbGx5IHRvIHN0YW5kYXJkIHBhc3N3b3JkIGF1dGhlbnRp Y2F0aW9uIChpZiBlbmFibGVkKS4NCisrDQorKyAgNyB0b2tlbnMgYXJlIGFkZGVkIHRvIHNz aGRfY29uZmlnIDoNCisrICAjIGhlcmUgaXMgdGhlIG5ldyBwYXRjaGVkIGxkYXAgcmVsYXRl ZCB0b2tlbnMNCisrICAjIGVudHJpZXMgaW4geW91ciBMREFQIG11c3QgYmUgcG9zaXhBY2Nv dW50ICYgc3Ryb25nQXV0aGVudGljYXRpb25Vc2VyICYgcG9zaXhHcm91cA0KKysgIFVzZUxQ SyB5ZXMJCQkJCQkJCSMgbG9vayB0aGUgcHViIGtleSBpbnRvIExEQVANCisrICBMcGtTZXJ2 ZXJzIGxkYXA6Ly8xMC4zMS4zMi41LyBsZGFwOi8vMTAuMzEuMzIuNCBsZGFwOi8vMTAuMzEu MzIuMwkjIHdoaWNoIExEQVAgc2VydmVyIGZvciB1c2VycyA/IChVUkwgZm9ybWF0KQ0KKysg IExwa1VzZXJETiAgb3U9dXNlcnMsZGM9Zm9vYmFyLGRjPW5ldAkJCQkJIyB3aGljaCBiYXNl IEROIGZvciB1c2VycyA/DQorKyAgTHBrR3JvdXBETiBvdT1ncm91cHMsZGM9Zm9vYmFyLGRj PW5ldAkJCQkJIyB3aGljaCBiYXNlIEROIGZvciBncm91cHMgPyANCisrICBMcGtCaW5kRE4g Y249bWFuYWdlcixkYz1mb29iYXIsZGM9bmV0CQkJCQkjIHdoaWNoIGJpbmQgRE4gPw0KKysg IExwa0JpbmRQdyBhc2VjcmV0CQkJCQkJCSMgYmluZCBETiBjcmVkaWRlbnRpYWxzDQorKyAg THBrU2VydmVyR3JvdXAgYWdyb3VwbmFtZQkJCQkJCSMgdGhlIGdyb3VwIHRoZSBzZXJ2ZXIg aXMgcGFydCBvZg0KKysNCisrICBSaWdodCBub3cgaSdtIHVzaW5nIGFub255bW91cyBiaW5k aW5nIHRvIGdldCBwdWJsaWMga2V5cywgYmVjYXVzZSBnZXR0aW5nIHB1YmxpYyBrZXlzIG9m IHNvbWVvbmUgZG9lc24ndCBpbXBlcnNvbmF0ZSBoaW24IGJ1dCB0aGVyZSBpcyBzb21lDQor KyAgZmxhd3MgeW91IGhhdmUgdG8gdGFrZSBjYXJlIG9mLg0KKysNCisrLSBIT1cgVE8gSU5T RVJUIEEgVVNFUi9LRVkgSU5UTyBBTiBMREFQIEVOVFJZDQorKw0KKysgICogbXkgd2F5ICh0 aGVyZSBpcyBwbGVudHkgOikNCisrICAtIGNyZWF0ZSBsZGlmIGZpbGUgKGkuZS4gdXNlcnMu bGRpZikNCisrICAtIGNhdCB+Ly5zc2gvaWRfZHNhLnB1YiBPUiBjYXQgfi8uc3NoL2lkX3Jz YS5wdWIgT1IgY2F0IH4vLnNzaC9pZGVudGl0eS5wdWINCisrICAtIG15IHdheSBpbiA0IHN0 ZXBzIDoNCisrICBFeGFtcGxlOg0KKysNCisrICAjIHlvdSBhZGQgdGhpcyB0byB0aGUgdXNl ciBlbnRyeSBpbiB0aGUgTERJRiBmaWxlIDoNCisrICBbLi4uXQ0KKysgIG9iamVjdGNsYXNz OiBwb3NpeEFjY291bnQNCisrICBvYmplY3RjbGFzczogbGRhcFB1YmxpY0tleQ0KKysgIFsu Li5dDQorKyAgc3NoUHVibGlLZXk6IHNzaC1kc3MgQUFBQUJEaDEyRERVUjIuLi4NCisrICBb Li4uXQ0KKysNCisrICAjIGluc2VydCB5b3VyIGVudHJ5IGFuZCB5b3UncmUgZG9uZSA6KQ0K KysgIGxkYXBhZGQgLUQgYmFsYmxhYmxhIC13IGJsZWggPCBmaWxlLmxkaWYgDQorKyAgDQor KyAgYWxsIHN0YW5kYXJkIG9wdGlvbnMgY2FuIGJlIHByZXNlbnQgaW4gdGhlICdzc2hQdWJs aWNLZXknIGF0dHJpYnV0ZS4NCisrDQorKy0gV0hZIDoNCisrDQorKyAgU2ltcGx5IGJlY2F1 c2UsIGkgd2FzIGxvb2tpbmcgZm9yIGEgd2F5IHRvIGNlbnRyYWxpemUgYWxsIHN5c2FkbWlu cyBhdXRoZW50aWNhdGlvbiwgZWFzaWx5LCAgd2l0aG91dCBjb21wbGV0ZWx5IHVzaW5nIExE QVAgDQorKyAgYXMgYXV0aGVudGljYXRpb24gbWV0aG9kIChsaWtlIHBhbV9sZGFwIGV0Yy4u KS4gIA0KKysgIA0KKysgIEFmdGVyIGxvb2tpbmcgaW50byBLZXJiZXJvcywgU2VjdXJJRCwg YW5kIG90aGVyIGNlbnRyYWxpemVkIHNlY3VyZSBhdXRoZW50aWNhdGlvbnMgc3lzdGVtcywg dGhlIHVzZSBvZiBSU0EgYW5kIExEQVAgdG8gZ2V0IA0KKysgIHB1YmxpYyBrZXkgZm9yIGF1 dGhlbnRpY2F0aW9uIGFsbG93cyB1cyB0byBjb250cm9sIHdobyBoYXMgYWNjZXNzIHRvIHdo aWNoIHNlcnZlciAodGhlIHVzZXIgbmVlZHMgYW4gYWNjb3VudCBhbmQgdG8gYmUgaW4gJ3N0 cm9uZ0F1dGhlbnRpY2F0aW9uVXNlcicNCisrICBvYmplY3RjbGFzcyB3aXRoaW4gTERBUCBh bmQgcGFydCBvZiB0aGUgZ3JvdXAgdGhlIFNTSCBzZXJ2ZXIgaXMgaW4pLiANCisrDQorKyAg UGFzc3dvcmRzIHVwZGF0ZSBhcmUgbm8gbG9uZ2VyIGEgbmlnaHRtYXJlIGZvciBhIHNlcnZl ciBmYXJtIChrZXkgcGFpciBwYXNzcGhyYXNlIGlzIHN0b3JlZCBvbiBlYWNoIHVzZXIncyBi b3ggYW5kIHByaXZhdGUga2V5IGlzIGxvY2FsbHkgZW5jcnlwdGVkIHVzaW5nIGhpcyBwYXNz cGhyYXNlIA0KKysgIHNvIGVhY2ggdXNlciBjYW4gY2hhbmdlIGl0IGFzIG11Y2ggYXMgaGUg d2FudHMpLiANCisrDQorKyAgQmxvY2tpbmcgYSB1c2VyIGFjY291bnQgY2FuIGJlIGRvbmUg ZGlyZWN0bHkgZnJvbSB0aGUgTERBUCAoaWYgc3NoZCBpcyB1c2luZyBSU0FBdXRoICsgbGRh cCBvbmx5KS4NCisrDQorKy0gUlVMRVMgOiAgDQorKyAgRW50cnkgaW4gdGhlIExEQVAgc2Vy dmVyIG11c3QgcmVzcGVjdCAncG9zaXhBY2NvdW50JyBhbmQgJ2xkYXBQdWJsaWNLZXknIHdo aWNoIGFyZSBkZWZpbmVkIGluIGNvcmUuc2NoZW1hLiANCisrICBhbmQgdGhlIGFkZGl0aW9u bmFsIGxway5zY2hlbWEuDQorKw0KKysgIFRoaXMgcGF0Y2ggY291bGQgYWxsb3cgYSBzbW9v dGggdHJhbnNpdGlvbiBiZXR3ZWVuIHN0YW5kYXJkIGF1dGggKC9ldGMvcGFzc3dkKSBhbmQg Y29tcGxldGUgTERBUCBiYXNlZCBhdXRoZW50aWNhdGlvbiANCisrICAocGFtbGRhcCwgbnNz X2xkYXAsIGV0Yy4uKS4NCisrDQorKyAgVGhpcyBjYW4gYmUgYW4gYWx0ZXJuYXRpdmUgdG8g b3RoZXIgKG9sZD8vZXhwZW5zaXZlPykgYXV0aGVudGljYXRpb24gbWV0aG9kcyAoS2VyYmVy b3MvU2VjdXJJRC8uLikuDQorKyAgDQorKyAgUmVmZXJyaW5nIHRvIHNjaGVtYSBhdCB0aGUg YmVnaW5uaW5nIG9mIHRoaXMgZmlsZSBpZiB1c2VyICdlYXUnIGlzIG9ubHkgaW4gZ3JvdXAg J3VuaXgnDQorKyAgJ2VhdScgd291bGQgT05MWSBhY2Nlc3MgJ3NlcnZlcjEnLCAnc2VydmVy MicsICdzZXJ2ZXIzJyBBTkQgJ3NlcnZlcjQnIEJVVCBOT1QgJ3NlcnZlcjUnLg0KKysgIElm IHlvdSB0aGVuIG1vZGlmeSB0aGUgTERBUCAnbWFpbCcgZ3JvdXAgZW50cnkgdG8gYWRkICdt ZW1iZXJVaWQ6IGVhdScgVEhFTiB1c2VyICdlYXUnIHdvdWxkIGJlIGFibGUNCisrICB0byBs b2cgaW4gJ3NlcnZlcjUnIChpIGhvcGUgeW91IGdvdCB0aGUgaWRlYSwgbXkgZW5nbGlzaCBp cyBiYWQgOikuDQorKw0KKysgIEVhY2ggc2VydmVyJ3Mgc3NoZCBpcyBwYXRjaGVkIGFuZCBj b25maWd1cmVkIHRvIGFzayB0aGUgcHVibGljIGtleSBhbmQgdGhlIGdyb3VwIGluZm9zIGlu IHRoZSBMREFQDQorKyAgc2VydmVyLg0KKysgIFdoZW4geW91IHdhbnQgdG8gYWxsb3cgYSBu ZXcgdXNlciB0byBoYXZlIGFjY2VzcyB0byB0aGUgc2VydmVyIHBhcmMsIHlvdSBqdXN0IGFk ZCBoaW0gYW4gYWNjb3VudCBvbiANCisrICB5b3VyIHNlcnZlcnMsIHlvdSBhZGQgaGlzIHB1 YmxpYyBrZXkgaW50byBoaXMgZW50cnkgb24gdGhlIExEQVAgc2VydmVyLCBpdCdzIGRvbmUu IA0KKysNCisrICBCZWNhdXNlIHNzaGRzIGFyZSBsb29raW5nIHB1YmxpYyBrZXlzIGludG8g dGhlIExEQVAgZGlyZWN0bHkgaW5zdGVhZCBvZiBhIGZpbGUgKCRIT01FLy5zc2gvYXV0aG9y aXplZF9rZXlzKS4NCisrDQorKyAgV2hlbiB0aGUgdXNlciBuZWVkcyB0byBjaGFuZ2UgaGlz IHBhc3NwaHJhc2UgaGUgY2FuIGRvIGl0IGRpcmVjdGx5IGZyb20gaGlzIHdvcmtzdGF0aW9u IGJ5IGNoYW5naW5nIA0KKysgIGhpcyBvd24ga2V5IHNldCBsb2NrIHBhc3NwaHJhc2UsIGFu ZCBhbGwgc2VydmVycyBhcmUgYXV0b21hdGljYWxseSBhd2FyZS4NCisrIA0KKysgIFdpdGgg YSBDQVJFRlVMIExEQVAgc2VydmVyIGNvbmZpZ3VyYXRpb24geW91IGNvdWxkIGFsbG93IGEg dXNlciB0byBhZGQvZGVsZXRlL21vZGlmeSBoaXMgb3duIGVudHJ5IGhpbXNlbGYNCisrICBz byBoZSBjYW4gYWRkL21vZGlmeS9kZWxldGUgaGltc2VsZiBoaXMgcHVibGljIGtleSB3aGVu IG5lZWRlZC4NCisrDQorK60gRkxBV1MgOg0KKysgIExEQVAgbXVzdCBiZSB3ZWxsIGNvbmZp Z3VyZWQsIGdldHRpbmcgdGhlIHB1YmxpYyBrZXkgb2Ygc29tZSB1c2VyIGlzIG5vdCBhIHBy b2JsZW0sIGJ1dCBpZiBhbm9ueW1vdXMgTERBUCANCisrICBhbGxvdyB3cml0ZSB0byB1c2Vy cyBkbiwgc29tZWJvZHkgY291bGQgcmVwbGFjZSBzb21ldXNlcidzIHB1YmxpYyBrZXkgYnkg aXRzIG93biBhbmQgaW1wZXJzb25hdGUgc29tZSANCisrICBvZiB5b3VyIHVzZXJzIGluIGFs bCB5b3VyIHNlcnZlciBmYXJtIGJlIFZFUlkgQ0FSRUZVTC4NCisrICANCisrICBNSVRNIGF0 dGFjayB3aGVuIHNzaGQgaXMgcmVxdWVzdGluZyB0aGUgcHVibGljIGtleSwgY291bGQgbGVh ZCB0byBhIGNvbXByb21pc2Ugb2YgeW91ciBzZXJ2ZXJzIGFsbG93aW5nIGxvZ2luIA0KKysg IGFzIHRoZSBpbXBlcnNvbm5hdGVkIHVzZXIuDQorKw0KKysgIElmIExEQVAgc2VydmVyIGlz IGRvd24gdGhlbiwgZmFsbGJhY2sgb24gcGFzc3dkIGF1dGguDQorKyAgDQorKyAgdGhlIGxk YXAgY29kZSBwYXJ0IGhhcyBub3QgYmVlbiB3ZWxsIGF1ZGl0ZWQgeWV0Lg0KKysNCisrLSBM REFQIFVTRVIgRU5UUlkgRVhBTVBMRVMgKExESUYgRm9ybWF0LCBsb29rIGluIHVzZXJzLmxk aWYpDQorKyAgICAtLS0gQ1VUIEhFUkUgLS0tDQorKyAgICBkbjogdWlkPWpkb2Usb3U9dXNl cnMsZGM9Zm9vYmFyLGRjPW5ldA0KKysgICAgb2JqZWN0Y2xhc3M6IHRvcA0KKysgICAgb2Jq ZWN0Y2xhc3M6IHBlcnNvbg0KKysgICAgb2JqZWN0Y2xhc3M6IG9yZ2FuaXphdGlvbmFsUGVy c29uDQorKyAgICBvYmplY3RjbGFzczogcG9zaXhBY2NvdW50DQorKyAgICBvYmplY3RjbGFz czogbGRhcFB1YmxpY0tleQ0KKysgICAgZGVzY3JpcHRpb246IE15IGFjY291bnQNCisrICAg IGNuOiBKb2huIERvZQ0KKysgICAgc246IEpvaG4gRG9lDQorKyAgICB1aWQ6IGpkb2UNCisr ICAgIHVpZE51bWJlcjogMTAwDQorKyAgICBnaWROdW1iZXI6IDEwMA0KKysgICAgaG9tZURp cmVjdG9yeTogL2hvbWUvamRvZQ0KKysgICAgc3NoUHVibGljS2V5OiBzc2gtZHNzIEFBQUFC M056YUMxa2MzTUFBQUVCQU92TDhwUkVVZzl3U3kvOCtoUUo1NFlGM0FYa0IwT1pyWEIuLi4u DQorKyAgICBbLi4uXQ0KKysgICAgLS0tIENVVCBIRVJFIC0tLQ0KKysNCisrLSBMREFQIEdS T1VQIEVOVFJZIEVYQU1QTEVTIChMRElGIEZvcm1hdCwgbG9vayBpbiBncm91cHMubGRpZikN CisrICAgIC0tLSBDVVQgSEVSRSAtLS0NCisrICAgIGRuOiBjbj11bml4LG91PWdyb3Vwcyxk Yz1jdWNrb29zLGRjPW5ldA0KKysgICAgb2JqZWN0Y2xhc3M6IHRvcA0KKysgICAgb2JqZWN0 Y2xhc3M6IHBvc2l4R3JvdXANCisrICAgIGRlc2NyaXB0aW9uOiBVbml4IGJhc2VkIHNlcnZl cnMgZ3JvdXANCisrICAgIGNuOiB1bml4DQorKyAgICBnaWROdW1iZXI6IDEwMDINCisrICAg IG1lbWJlclVpZDogamRvZQ0KKysgICAgbWVtYmVyVWlkOiB1c2VyMQ0KKysgICAgbWVtYmVy VWlkOiB1c2VyMg0KKysgICAgWy4uLl0NCisrICAgIC0tLSBDVVQgSEVSRSAtLS0NCisrDQor Kz4+IEZZSTogPDwgDQorK011bHRpcGxlICdzc2hQdWJsaWNLZXknIGluIGEgdXNlciBlbnRy eSBhcmUgYWxsb3dlZCwgYXMgd2VsbCBhcyBtdWx0aXBsZSAnbWVtYmVyVWlkJyBhdHRyaWJ1 dGVzIGluIGEgZ3JvdXAgZW50cnkNCisrDQorKy0gQ09NUElMSU5HOg0KKysgIDEuIEFwcGx5 IHRoZSBwYXRjaA0KKysgIDIuIC4vY29uZmlndXJlIC0td2l0aC15b3VyLW9wdGlvbnMgLS13 aXRoLWxkYXA9L3ByZWZpeC90by9sZGFwX2xpYnNfYW5kX2luY2x1ZGVzDQorKyAgMy4gbWFr ZQ0KKysgIDQuIGl0J3MgZG9uZS4NCisrDQorKy0gQkxBIDoNCisrICBJIGhvcGUgdGhpcyBj b3VsZCBoZWxwLCBhbmQgaSBob3BlIHRvIGJlIGNsZWFyIGVub3VnaCwsIG9yIGdpdmUgaWRl YXMuICBxdWVzdGlvbnMvY29tbWVudHMvaW1wcm92ZW1lbnRzIGFyZSB3ZWxjb21lLg0KKysg IA0KKystIFRPRE8gOg0KKysgIFJlZGVzaWduIGRpZmZlcmVudGx5Lg0KKysNCisrLSBET0NT L0xJTksgOg0KKysgIGh0dHA6Ly9wYWNzZWMuanAvY29yZTA1L3BzajA1LWJhcmlzYW5pLWVu LnBkZg0KKysgIGh0dHA6Ly9mcml0ei5wb3RzZGFtLmVkdS9wcm9qZWN0cy9vcGVuc3NoLWxw ay8NCisrICBodHRwOi8vZnJpdHoucG90c2RhbS5lZHUvcHJvamVjdHMvc3NoZ2F0ZS8NCisr ICBodHRwOi8vZGV2LmludmVyc2VwYXRoLmNvbS90cmFjL29wZW5zc2gtbHBrDQorKyAgaHR0 cDovL2xhbS5zZi5uZXQvICggaHR0cDovL2xhbS5zb3VyY2Vmb3JnZS5uZXQvZG9jdW1lbnRh dGlvbi9zdXBwb3J0ZWRTY2hlbWFzLmh0bSApDQorKw0KKystIENPTlRSSUJVVE9SUy9JREVB Uy9HUkVFVFMgOg0KKysgIC0gRmFsayBTaWVtb25zbWVpZXIuDQorKyAgLSBKYWNvYiBSaWVm Lg0KKysgIC0gTWljaGFlbCBEdXJjaGdyYWYuDQorKyAgLSBmcmVkZXJpYyBwZXRlcnMuDQor KyAgLSBGaW5sYXkgZG9iYmllLg0KKysgIC0gU3RlZmFuIEZpc2hlci4NCisrICAtIFJvYmlu IEguIEpvaG5zb24uDQorKyAgLSBBZHJpYW4gQnJpZGdldHQuDQorKw0KKystIENPTlRBQ1Qg Og0KKysgIC0gRXJpYyBBVUdFIDxlYXVAcGhlYXIub3JnPg0KKysgIC0gQW5kcmVhIEJhcmlz YW5pIDxhbmRyZWFAaW52ZXJzZXBhdGguY29tPg0KK2RpZmYgLU51YXIgLS1leGNsdWRlICcq Lm9yaWcnIC0tZXhjbHVkZSAnKi5yZWonIHNlcnZjb25mLmMgc2VydmNvbmYuYw0KKy0tLSBz ZXJ2Y29uZi5jCTIwMDgtMDctMDMgMjA6NTE6MTIuMDAwMDAwMDAwIC0wNzAwDQorKysrIHNl cnZjb25mLmMJMjAwOC0wOC0yMyAxNTowMjo0Ny4wMDAwMDAwMDAgLTA3MDANCitAQCAtNDIs NiArNDIsMTAgQEANCisgI2luY2x1ZGUgImNoYW5uZWxzLmgiDQorICNpbmNsdWRlICJncm91 cGFjY2Vzcy5oIg0KKyANCisrI2lmZGVmIFdJVEhfTERBUF9QVUJLRVkNCisrI2luY2x1ZGUg ImxkYXBhdXRoLmgiDQorKyNlbmRpZg0KKysNCisgc3RhdGljIHZvaWQgYWRkX2xpc3Rlbl9h ZGRyKFNlcnZlck9wdGlvbnMgKiwgY2hhciAqLCBpbnQpOw0KKyBzdGF0aWMgdm9pZCBhZGRf b25lX2xpc3Rlbl9hZGRyKFNlcnZlck9wdGlvbnMgKiwgY2hhciAqLCBpbnQpOw0KKyANCitA QCAtMTI4LDYgKzEzMiwyNSBAQA0KKyAJb3B0aW9ucy0+YWRtX2ZvcmNlZF9jb21tYW5kID0g TlVMTDsNCisgCW9wdGlvbnMtPmNocm9vdF9kaXJlY3RvcnkgPSBOVUxMOw0KKyAJb3B0aW9u cy0+emVyb19rbm93bGVkZ2VfcGFzc3dvcmRfYXV0aGVudGljYXRpb24gPSAtMTsNCisrI2lm ZGVmIFdJVEhfTERBUF9QVUJLRVkNCisrIAkvKiBYWFggZGlydHkgKi8NCisrIAlvcHRpb25z LT5scGsubGQgPSBOVUxMOw0KKysgCW9wdGlvbnMtPmxway5vbiA9IC0xOw0KKysgCW9wdGlv bnMtPmxway5zZXJ2ZXJzID0gTlVMTDsNCisrIAlvcHRpb25zLT5scGsudV9iYXNlZG4gPSBO VUxMOw0KKysgCW9wdGlvbnMtPmxway5nX2Jhc2VkbiA9IE5VTEw7DQorKyAJb3B0aW9ucy0+ bHBrLmJpbmRkbiA9IE5VTEw7DQorKyAJb3B0aW9ucy0+bHBrLmJpbmRwdyA9IE5VTEw7DQor KyAJb3B0aW9ucy0+bHBrLnNncm91cCA9IE5VTEw7DQorKyAJb3B0aW9ucy0+bHBrLmZpbHRl ciA9IE5VTEw7DQorKyAJb3B0aW9ucy0+bHBrLmZncm91cCA9IE5VTEw7DQorKyAJb3B0aW9u cy0+bHBrLmxfY29uZiA9IE5VTEw7DQorKyAJb3B0aW9ucy0+bHBrLnRscyA9IC0xOw0KKysg CW9wdGlvbnMtPmxway5iX3RpbWVvdXQudHZfc2VjID0gLTE7DQorKyAJb3B0aW9ucy0+bHBr LnNfdGltZW91dC50dl9zZWMgPSAtMTsNCisrIAlvcHRpb25zLT5scGsuZmxhZ3MgPSBGTEFH X0VNUFRZOw0KKysjZW5kaWYNCisrDQorIH0NCisgDQorIHZvaWQNCitAQCAtMjYxLDYgKzI4 NCwzMiBAQA0KKyAJCW9wdGlvbnMtPnBlcm1pdF90dW4gPSBTU0hfVFVOTU9ERV9OTzsNCisg CWlmIChvcHRpb25zLT56ZXJvX2tub3dsZWRnZV9wYXNzd29yZF9hdXRoZW50aWNhdGlvbiA9 PSAtMSkNCisgCQlvcHRpb25zLT56ZXJvX2tub3dsZWRnZV9wYXNzd29yZF9hdXRoZW50aWNh dGlvbiA9IDA7DQorKyNpZmRlZiBXSVRIX0xEQVBfUFVCS0VZDQorKwlpZiAob3B0aW9ucy0+ bHBrLm9uID09IC0xKQ0KKysJICAgIG9wdGlvbnMtPmxway5vbiA9IF9ERUZBVUxUX0xQS19P TjsNCisrCWlmIChvcHRpb25zLT5scGsuc2VydmVycyA9PSBOVUxMKQ0KKysJICAgIG9wdGlv bnMtPmxway5zZXJ2ZXJzID0gX0RFRkFVTFRfTFBLX1NFUlZFUlM7DQorKwlpZiAob3B0aW9u cy0+bHBrLnVfYmFzZWRuID09IE5VTEwpDQorKwkgICAgb3B0aW9ucy0+bHBrLnVfYmFzZWRu ID0gX0RFRkFVTFRfTFBLX1VETjsNCisrCWlmIChvcHRpb25zLT5scGsuZ19iYXNlZG4gPT0g TlVMTCkNCisrCSAgICBvcHRpb25zLT5scGsuZ19iYXNlZG4gPSBfREVGQVVMVF9MUEtfR0RO Ow0KKysJaWYgKG9wdGlvbnMtPmxway5iaW5kZG4gPT0gTlVMTCkNCisrCSAgICBvcHRpb25z LT5scGsuYmluZGRuID0gX0RFRkFVTFRfTFBLX0JJTkRETjsNCisrCWlmIChvcHRpb25zLT5s cGsuYmluZHB3ID09IE5VTEwpDQorKwkgICAgb3B0aW9ucy0+bHBrLmJpbmRwdyA9IF9ERUZB VUxUX0xQS19CSU5EUFc7DQorKwlpZiAob3B0aW9ucy0+bHBrLnNncm91cCA9PSBOVUxMKQ0K KysJICAgIG9wdGlvbnMtPmxway5zZ3JvdXAgPSBfREVGQVVMVF9MUEtfU0dST1VQOw0KKysJ aWYgKG9wdGlvbnMtPmxway5maWx0ZXIgPT0gTlVMTCkNCisrCSAgICBvcHRpb25zLT5scGsu ZmlsdGVyID0gX0RFRkFVTFRfTFBLX0ZJTFRFUjsNCisrCWlmIChvcHRpb25zLT5scGsudGxz ID09IC0xKQ0KKysJICAgIG9wdGlvbnMtPmxway50bHMgPSBfREVGQVVMVF9MUEtfVExTOw0K KysJaWYgKG9wdGlvbnMtPmxway5iX3RpbWVvdXQudHZfc2VjID09IC0xKQ0KKysJICAgIG9w dGlvbnMtPmxway5iX3RpbWVvdXQudHZfc2VjID0gX0RFRkFVTFRfTFBLX0JUSU1FT1VUOw0K KysJaWYgKG9wdGlvbnMtPmxway5zX3RpbWVvdXQudHZfc2VjID09IC0xKQ0KKysJICAgIG9w dGlvbnMtPmxway5zX3RpbWVvdXQudHZfc2VjID0gX0RFRkFVTFRfTFBLX1NUSU1FT1VUOw0K KysJaWYgKG9wdGlvbnMtPmxway5sX2NvbmYgPT0gTlVMTCkNCisrCSAgICBvcHRpb25zLT5s cGsubF9jb25mID0gX0RFRkFVTFRfTFBLX0xEUDsNCisrI2VuZGlmDQorIA0KKyAJLyogVHVy biBwcml2aWxlZ2Ugc2VwYXJhdGlvbiBvbiBieSBkZWZhdWx0ICovDQorIAlpZiAodXNlX3By aXZzZXAgPT0gLTEpDQorQEAgLTMwNyw2ICszNTYsMTIgQEANCisgCXNVc2VQcml2aWxlZ2VT ZXBhcmF0aW9uLCBzQWxsb3dBZ2VudEZvcndhcmRpbmcsDQorCXNaZXJvS25vd2xlZGdlUGFz c3dvcmRBdXRoZW50aWNhdGlvbiwNCisgCXNEZXByZWNhdGVkLCBzVW5zdXBwb3J0ZWQNCisr I2lmZGVmIFdJVEhfTERBUF9QVUJLRVkNCisrCSxzTGRhcFB1YmxpY2tleSwgc0xkYXBTZXJ2 ZXJzLCBzTGRhcFVzZXJETg0KKysJLHNMZGFwR3JvdXBETiwgc0JpbmRETiwgc0JpbmRQdywg c015R3JvdXANCisrCSxzTGRhcEZpbHRlciwgc0ZvcmNlVExTLCBzQmluZFRpbWVvdXQNCisr CSxzU2VhcmNoVGltZW91dCwgc0xkYXBDb25mDQorKyNlbmRpZg0KKyB9IFNlcnZlck9wQ29k ZXM7DQorIA0KKyAjZGVmaW5lIFNTSENGR19HTE9CQUwJMHgwMQkvKiBhbGxvd2VkIGluIG1h aW4gc2VjdGlvbiBvZiBzc2hkX2NvbmZpZyAqLw0KK0BAIC00MTcsNiArNDcyLDIwIEBADQor IAl7ICJjbGllbnRhbGl2ZWNvdW50bWF4Iiwgc0NsaWVudEFsaXZlQ291bnRNYXgsIFNTSENG R19HTE9CQUwgfSwNCisgCXsgImF1dGhvcml6ZWRrZXlzZmlsZSIsIHNBdXRob3JpemVkS2V5 c0ZpbGUsIFNTSENGR19HTE9CQUwgfSwNCisgCXsgImF1dGhvcml6ZWRrZXlzZmlsZTIiLCBz QXV0aG9yaXplZEtleXNGaWxlMiwgU1NIQ0ZHX0dMT0JBTCB9LA0KKysjaWZkZWYgV0lUSF9M REFQX1BVQktFWQ0KKysJeyBfREVGQVVMVF9MUEtfVE9LRU4sIHNMZGFwUHVibGlja2V5LCBT U0hDRkdfR0xPQkFMIH0sDQorKwl7IF9ERUZBVUxUX1NSVl9UT0tFTiwgc0xkYXBTZXJ2ZXJz LCBTU0hDRkdfR0xPQkFMIH0sDQorKwl7IF9ERUZBVUxUX1VTUl9UT0tFTiwgc0xkYXBVc2Vy RE4sIFNTSENGR19HTE9CQUwgfSwNCisrCXsgX0RFRkFVTFRfR1JQX1RPS0VOLCBzTGRhcEdy b3VwRE4sIFNTSENGR19HTE9CQUwgfSwNCisrCXsgX0RFRkFVTFRfQkROX1RPS0VOLCBzQmlu ZEROLCBTU0hDRkdfR0xPQkFMIH0sDQorKwl7IF9ERUZBVUxUX0JQV19UT0tFTiwgc0JpbmRQ dywgU1NIQ0ZHX0dMT0JBTCB9LA0KKysJeyBfREVGQVVMVF9NWUdfVE9LRU4sIHNNeUdyb3Vw LCBTU0hDRkdfR0xPQkFMIH0sDQorKwl7IF9ERUZBVUxUX0ZJTF9UT0tFTiwgc0xkYXBGaWx0 ZXIsIFNTSENGR19HTE9CQUwgfSwNCisrCXsgX0RFRkFVTFRfVExTX1RPS0VOLCBzRm9yY2VU TFMsIFNTSENGR19HTE9CQUwgfSwNCisrCXsgX0RFRkFVTFRfQlRJX1RPS0VOLCBzQmluZFRp bWVvdXQsIFNTSENGR19HTE9CQUwgfSwNCisrCXsgX0RFRkFVTFRfU1RJX1RPS0VOLCBzU2Vh cmNoVGltZW91dCwgU1NIQ0ZHX0dMT0JBTCB9LA0KKysJeyBfREVGQVVMVF9MRFBfVE9LRU4s IHNMZGFwQ29uZiwgU1NIQ0ZHX0dMT0JBTCB9LA0KKysjZW5kaWYNCisgCXsgInVzZXByaXZp bGVnZXNlcGFyYXRpb24iLCBzVXNlUHJpdmlsZWdlU2VwYXJhdGlvbiwgU1NIQ0ZHX0dMT0JB TH0sDQorIAl7ICJhY2NlcHRlbnYiLCBzQWNjZXB0RW52LCBTU0hDRkdfR0xPQkFMIH0sDQor IAl7ICJwZXJtaXR0dW5uZWwiLCBzUGVybWl0VHVubmVsLCBTU0hDRkdfR0xPQkFMIH0sDQor QEAgLTEzMDcsNiArMTM3NiwxMDcgQEANCisgCQl3aGlsZSAoYXJnKQ0KKyAJCSAgICBhcmcg PSBzdHJkZWxpbSgmY3ApOw0KKyAJCWJyZWFrOw0KKysjaWZkZWYgV0lUSF9MREFQX1BVQktF WQ0KKysJY2FzZSBzTGRhcFB1YmxpY2tleToNCisrCQlpbnRwdHIgPSAmb3B0aW9ucy0+bHBr Lm9uOw0KKysJCWdvdG8gcGFyc2VfZmxhZzsNCisrCWNhc2Ugc0xkYXBTZXJ2ZXJzOg0KKysJ CS8qIGFyZyA9IHN0cmRlbGltKCZjcCk7ICovDQorKwkJcCA9IGxpbmU7DQorKwkJd2hpbGUo KnArKyk7DQorKwkJYXJnID0gcDsNCisrCQlpZiAoIWFyZyB8fCAqYXJnID09ICdcMCcpDQor KwkJICAgIGZhdGFsKCIlcyBsaW5lICVkOiBtaXNzaW5nIGxkYXAgc2VydmVyIixmaWxlbmFt ZSxsaW5lbnVtKTsNCisrCQlhcmdbc3RybGVuKGFyZyldID0gJ1wwJzsNCisrCQlpZiAoKG9w dGlvbnMtPmxway5zZXJ2ZXJzID0gbGRhcF9wYXJzZV9zZXJ2ZXJzKGFyZykpID09IE5VTEwp DQorKwkJICAgIGZhdGFsKCIlcyBsaW5lICVkOiBlcnJvciBpbiBsZGFwIHNlcnZlcnMiLCBm aWxlbmFtZSwgbGluZW51bSk7DQorKwkJbWVtc2V0KGFyZywwLHN0cmxlbihhcmcpKTsNCisr CQlicmVhazsNCisrCWNhc2Ugc0xkYXBVc2VyRE46DQorKwkJYXJnID0gY3A7DQorKwkJaWYg KCFhcmcgfHwgKmFyZyA9PSAnXDAnKQ0KKysJCSAgICBmYXRhbCgiJXMgbGluZSAlZDogbWlz c2luZyBsZGFwIHNlcnZlciIsZmlsZW5hbWUsbGluZW51bSk7DQorKwkJYXJnW3N0cmxlbihh cmcpXSA9ICdcMCc7DQorKwkJb3B0aW9ucy0+bHBrLnVfYmFzZWRuID0geHN0cmR1cChhcmcp Ow0KKysJCW1lbXNldChhcmcsMCxzdHJsZW4oYXJnKSk7DQorKwkJYnJlYWs7DQorKwljYXNl IHNMZGFwR3JvdXBETjoNCisrCQlhcmcgPSBjcDsNCisrCQlpZiAoIWFyZyB8fCAqYXJnID09 ICdcMCcpDQorKwkJICAgIGZhdGFsKCIlcyBsaW5lICVkOiBtaXNzaW5nIGxkYXAgc2VydmVy IixmaWxlbmFtZSxsaW5lbnVtKTsNCisrCQlhcmdbc3RybGVuKGFyZyldID0gJ1wwJzsNCisr CQlvcHRpb25zLT5scGsuZ19iYXNlZG4gPSB4c3RyZHVwKGFyZyk7DQorKwkJbWVtc2V0KGFy ZywwLHN0cmxlbihhcmcpKTsNCisrCQlicmVhazsNCisrCWNhc2Ugc0JpbmRETjoNCisrCQlh cmcgPSBjcDsNCisrCQlpZiAoIWFyZyB8fCAqYXJnID09ICdcMCcpDQorKwkJICAgIGZhdGFs KCIlcyBsaW5lICVkOiBtaXNzaW5nIGJpbmRkbiIsZmlsZW5hbWUsbGluZW51bSk7DQorKwkJ YXJnW3N0cmxlbihhcmcpXSA9ICdcMCc7DQorKwkJb3B0aW9ucy0+bHBrLmJpbmRkbiA9IHhz dHJkdXAoYXJnKTsNCisrCQltZW1zZXQoYXJnLDAsc3RybGVuKGFyZykpOw0KKysJCWJyZWFr Ow0KKysJY2FzZSBzQmluZFB3Og0KKysJCWFyZyA9IGNwOw0KKysJCWlmICghYXJnIHx8ICph cmcgPT0gJ1wwJykNCisrCQkgICAgZmF0YWwoIiVzIGxpbmUgJWQ6IG1pc3NpbmcgYmluZHB3 IixmaWxlbmFtZSxsaW5lbnVtKTsNCisrCQlhcmdbc3RybGVuKGFyZyldID0gJ1wwJzsNCisr CQlvcHRpb25zLT5scGsuYmluZHB3ID0geHN0cmR1cChhcmcpOw0KKysJCW1lbXNldChhcmcs MCxzdHJsZW4oYXJnKSk7DQorKwkJYnJlYWs7DQorKwljYXNlIHNNeUdyb3VwOg0KKysJCWFy ZyA9IGNwOw0KKysJCWlmICghYXJnIHx8ICphcmcgPT0gJ1wwJykNCisrCQkgICAgZmF0YWwo IiVzIGxpbmUgJWQ6IG1pc3NpbmcgZ3JvdXBuYW1lIixmaWxlbmFtZSwgbGluZW51bSk7DQor KwkJYXJnW3N0cmxlbihhcmcpXSA9ICdcMCc7DQorKwkJb3B0aW9ucy0+bHBrLnNncm91cCA9 IHhzdHJkdXAoYXJnKTsNCisrCQlpZiAob3B0aW9ucy0+bHBrLnNncm91cCkNCisrCQkgICAg b3B0aW9ucy0+bHBrLmZncm91cCA9IGxkYXBfcGFyc2VfZ3JvdXBzKG9wdGlvbnMtPmxway5z Z3JvdXApOw0KKysJCW1lbXNldChhcmcsMCxzdHJsZW4oYXJnKSk7DQorKwkJYnJlYWs7DQor KwljYXNlIHNMZGFwRmlsdGVyOg0KKysJCWFyZyA9IGNwOw0KKysJCWlmICghYXJnIHx8ICph cmcgPT0gJ1wwJykNCisrCQkgICAgZmF0YWwoIiVzIGxpbmUgJWQ6IG1pc3NpbmcgZmlsdGVy IixmaWxlbmFtZSwgbGluZW51bSk7DQorKwkJYXJnW3N0cmxlbihhcmcpXSA9ICdcMCc7DQor KwkJb3B0aW9ucy0+bHBrLmZpbHRlciA9IHhzdHJkdXAoYXJnKTsNCisrCQltZW1zZXQoYXJn LDAsc3RybGVuKGFyZykpOw0KKysJCWJyZWFrOw0KKysJY2FzZSBzRm9yY2VUTFM6DQorKwkJ aW50cHRyID0gJm9wdGlvbnMtPmxway50bHM7DQorKwkJYXJnID0gc3RyZGVsaW0oJmNwKTsN CisrCQlpZiAoIWFyZyB8fCAqYXJnID09ICdcMCcpDQorKwkJCWZhdGFsKCIlcyBsaW5lICVk OiBtaXNzaW5nIHllcy9ubyBhcmd1bWVudC4iLA0KKysJCQkgICAgZmlsZW5hbWUsIGxpbmVu dW0pOw0KKysJCXZhbHVlID0gMDsJLyogc2lsZW5jZSBjb21waWxlciAqLw0KKysJCWlmIChz dHJjbXAoYXJnLCAieWVzIikgPT0gMCkNCisrCQkJdmFsdWUgPSAxOw0KKysJCWVsc2UgaWYg KHN0cmNtcChhcmcsICJubyIpID09IDApDQorKwkJCXZhbHVlID0gMDsNCisrCQllbHNlIGlm IChzdHJjbXAoYXJnLCAidHJ5IikgPT0gMCkNCisrCQkJdmFsdWUgPSAtMTsNCisrCQllbHNl DQorKwkJCWZhdGFsKCIlcyBsaW5lICVkOiBCYWQgeWVzL25vIGFyZ3VtZW50OiAlcyIsDQor KwkJCQlmaWxlbmFtZSwgbGluZW51bSwgYXJnKTsNCisrCQlpZiAoKmludHB0ciA9PSAtMSkN CisrCQkJKmludHB0ciA9IHZhbHVlOw0KKysJCWJyZWFrOw0KKysJY2FzZSBzQmluZFRpbWVv dXQ6DQorKwkJaW50cHRyID0gKGludCAqKSAmb3B0aW9ucy0+bHBrLmJfdGltZW91dC50dl9z ZWM7DQorKwkJZ290byBwYXJzZV9pbnQ7DQorKwljYXNlIHNTZWFyY2hUaW1lb3V0Og0KKysJ CWludHB0ciA9IChpbnQgKikgJm9wdGlvbnMtPmxway5zX3RpbWVvdXQudHZfc2VjOw0KKysJ CWdvdG8gcGFyc2VfaW50Ow0KKysJCWJyZWFrOw0KKysJY2FzZSBzTGRhcENvbmY6DQorKwkJ YXJnID0gY3A7DQorKwkJaWYgKCFhcmcgfHwgKmFyZyA9PSAnXDAnKQ0KKysJCSAgICBmYXRh bCgiJXMgbGluZSAlZDogbWlzc2luZyBMcGtMZGFwQ29uZiIsIGZpbGVuYW1lLCBsaW5lbnVt KTsNCisrCQlhcmdbc3RybGVuKGFyZyldID0gJ1wwJzsNCisrCQlvcHRpb25zLT5scGsubF9j b25mID0geHN0cmR1cChhcmcpOw0KKysJCW1lbXNldChhcmcsIDAsIHN0cmxlbihhcmcpKTsN CisrCQlicmVhazsNCisrI2VuZGlmDQorIA0KKyAJZGVmYXVsdDoNCisgCQlmYXRhbCgiJXMg bGluZSAlZDogTWlzc2luZyBoYW5kbGVyIGZvciBvcGNvZGUgJXMgKCVkKSIsDQorZGlmZiAt TnVhciAtLWV4Y2x1ZGUgJyoub3JpZycgLS1leGNsdWRlICcqLnJlaicgc2VydmNvbmYuaCBz ZXJ2Y29uZi5oDQorLS0tIHNlcnZjb25mLmgJMjAwOC0wNi0xMCAwNjowMTo1MS4wMDAwMDAw MDAgLTA3MDANCisrKysgc2VydmNvbmYuaAkyMDA4LTA4LTIzIDE1OjAyOjQ3LjAwMDAwMDAw MCAtMDcwMA0KK0BAIC0xNiw2ICsxNiwxMCBAQA0KKyAjaWZuZGVmIFNFUlZDT05GX0gNCisg I2RlZmluZSBTRVJWQ09ORl9IDQorIA0KKysjaWZkZWYgV0lUSF9MREFQX1BVQktFWQ0KKysj aW5jbHVkZSAibGRhcGF1dGguaCINCisrI2VuZGlmDQorKw0KKyAjZGVmaW5lIE1BWF9QT1JU UwkJMjU2CS8qIE1heCAjIHBvcnRzLiAqLw0KKyANCisgI2RlZmluZSBNQVhfQUxMT1dfVVNF UlMJCTI1NgkvKiBNYXggIyB1c2VycyBvbiBhbGxvdyBsaXN0LiAqLw0KK0BAIC0xNDcsNiAr MTUxLDkgQEANCisgCWludAl1c2VfcGFtOwkJLyogRW5hYmxlIGF1dGggdmlhIFBBTSAqLw0K KyANCisgCWludAlwZXJtaXRfdHVuOw0KKysjaWZkZWYgV0lUSF9MREFQX1BVQktFWQ0KKysg ICAgICAgIGxkYXBfb3B0X3QgbHBrOw0KKysjZW5kaWYNCisgDQorIAlpbnQJbnVtX3Blcm1p dHRlZF9vcGVuczsNCisgDQorZGlmZiAtTnVhciAtLWV4Y2x1ZGUgJyoub3JpZycgLS1leGNs dWRlICcqLnJlaicgc3NoZC5jIHNzaGQuYw0KKy0tLSBzc2hkLmMJMjAwOC0wNy0xMSAwMDoz Njo0OS4wMDAwMDAwMDAgLTA3MDANCisrKysgc3NoZC5jCTIwMDgtMDgtMjMgMTU6MDI6NDcu MDAwMDAwMDAwIC0wNzAwDQorQEAgLTEyNyw2ICsxMjcsMTAgQEANCisgaW50IGRlbnlfc2V2 ZXJpdHk7DQorICNlbmRpZiAvKiBMSUJXUkFQICovDQorIA0KKysjaWZkZWYgV0lUSF9MREFQ X1BVQktFWQ0KKysjaW5jbHVkZSAibGRhcGF1dGguaCINCisrI2VuZGlmDQorKw0KKyAjaWZu ZGVmIE9fTk9DVFRZDQorICNkZWZpbmUgT19OT0NUVFkJMA0KKyAjZW5kaWYNCitAQCAtMTQ4 NCw2ICsxNDg4LDE2IEBADQorIAkJZXhpdCgxKTsNCisgCX0NCisgDQorKyNpZmRlZiBXSVRI X0xEQVBfUFVCS0VZDQorKyAgICAvKiBsZGFwX29wdGlvbnNfcHJpbnQoJm9wdGlvbnMubHBr KTsgKi8NCisrICAgIC8qIFhYWCBpbml0aWFsaXplL2NoZWNrIGxkYXAgY29ubmVjdGlvbiBh bmQgc2V0ICpMRCAqLw0KKysgICAgaWYgKG9wdGlvbnMubHBrLm9uKSB7DQorKyAgICAgICAg aWYgKG9wdGlvbnMubHBrLmxfY29uZiAmJiAobGRhcF9wYXJzZV9sY29uZigmb3B0aW9ucy5s cGspIDwgMCkgKQ0KKysgICAgICAgICAgICBlcnJvcigiW0xEQVBdIGNvdWxkIG5vdCBwYXJz ZSAlcyIsIG9wdGlvbnMubHBrLmxfY29uZik7DQorKyAgICAgICAgaWYgKGxkYXBfY29ubmVj dCgmb3B0aW9ucy5scGspIDwgMCkNCisrICAgICAgICAgICAgZXJyb3IoIltMREFQXSBjb3Vs ZCBub3QgaW5pdGlhbGl6ZSBsZGFwIGNvbm5lY3Rpb24iKTsNCisrICAgIH0NCisrI2VuZGlm DQorIAlkZWJ1Zygic3NoZCB2ZXJzaW9uICUuMTAwcyIsIFNTSF9SRUxFQVNFKTsNCisgDQor IAkvKiBTdG9yZSBwcml2aWxlZ2Ugc2VwYXJhdGlvbiB1c2VyIGZvciBsYXRlciB1c2UgaWYg cmVxdWlyZWQuICovDQorZGlmZiAtTnVhciAtLWV4Y2x1ZGUgJyoub3JpZycgLS1leGNsdWRl ICcqLnJlaicgc3NoZF9jb25maWcgc3NoZF9jb25maWcNCistLS0gc3NoZF9jb25maWcJMjAw OC0wNy0wMiAwNTozNTo0My4wMDAwMDAwMDAgLTA3MDANCisrKysgc3NoZF9jb25maWcJMjAw OC0wOC0yMyAxNTowMjo0Ny4wMDAwMDAwMDAgLTA3MDANCitAQCAtMTA5LDYgKzEwOSwyMSBA QA0KKyAjIG5vIGRlZmF1bHQgYmFubmVyIHBhdGgNCisgI0Jhbm5lciBub25lDQorIA0KKysj IGhlcmUgYXJlIHRoZSBuZXcgcGF0Y2hlZCBsZGFwIHJlbGF0ZWQgdG9rZW5zDQorKyMgZW50 cmllcyBpbiB5b3VyIExEQVAgbXVzdCBoYXZlIHBvc2l4QWNjb3VudCAmIGxkYXBQdWJsaWNL ZXkgb2JqZWN0Y2xhc3MNCisrI1VzZUxQSyB5ZXMNCisrI0xwa0xkYXBDb25mIC9ldGMvbGRh cC5jb25mDQorKyNMcGtTZXJ2ZXJzICBsZGFwOi8vMTAuMS43LjEvIGxkYXA6Ly8xMC4xLjcu Mi8NCisrI0xwa1VzZXJETiAgIG91PXVzZXJzLGRjPXBoZWFyLGRjPW9yZw0KKysjTHBrR3Jv dXBETiAgb3U9Z3JvdXBzLGRjPXBoZWFyLGRjPW9yZw0KKysjTHBrQmluZEROIGNuPU1hbmFn ZXIsZGM9cGhlYXIsZGM9b3JnDQorKyNMcGtCaW5kUHcgc2VjcmV0DQorKyNMcGtTZXJ2ZXJH cm91cCBtYWlsDQorKyNMcGtGaWx0ZXIgKGhvc3RBY2Nlc3M9bWFzdGVyLnBoZWFyLm9yZykN CisrI0xwa0ZvcmNlVExTIG5vDQorKyNMcGtTZWFyY2hUaW1lbGltaXQgMw0KKysjTHBrQmlu ZFRpbWVsaW1pdCAzDQorKw0KKyAjIG92ZXJyaWRlIGRlZmF1bHQgb2Ygbm8gc3Vic3lzdGVt cw0KKyBTdWJzeXN0ZW0Jc2Z0cAkvdXNyL2xpYmV4ZWMvc2Z0cC1zZXJ2ZXINCisgDQorZGlm ZiAtTnVhciAtLWV4Y2x1ZGUgJyoub3JpZycgLS1leGNsdWRlICcqLnJlaicgc3NoZF9jb25m aWcuNSBzc2hkX2NvbmZpZy41DQorLS0tIHNzaGRfY29uZmlnLjUJMjAwOC0wNy0wMiAwNToz NTo0My4wMDAwMDAwMDAgLTA3MDANCisrKysgc3NoZF9jb25maWcuNQkyMDA4LTA4LTIzIDE1 OjAyOjQ3LjAwMDAwMDAwMCAtMDcwMA0KK0BAIC0xMDEwLDYgKzEwMTAsNjIgQEANCisgcHJv Z3JhbS4NCisgVGhlIGRlZmF1bHQgaXMNCisgLlBhIC91c3IvWDExUjYvYmluL3hhdXRoIC4N CisrLkl0IENtIFVzZUxQSw0KKytTcGVjaWZpZXMgd2hldGhlciBMREFQIHB1YmxpYyBrZXkg cmV0cmlldmFsIG11c3QgYmUgdXNlZCBvciBub3QuIEl0IGFsbG93DQorK2FuIGVhc3kgY2Vu dHJhbGlzYXRpb24gb2YgcHVibGljIGtleXMgd2l0aGluIGFuIExEQVAgZGlyZWN0b3J5LiBU aGUgYXJndW1lbnQgbXVzdCBiZQ0KKysuRHEgeWVzDQorK29yDQorKy5EcSBubyAuDQorKy5J dCBDbSBMcGtMZGFwQ29uZg0KKytTcGVjaWZpZXMgd2hldGhlciBMREFQIFB1YmxpYyBrZXlz IHNob3VsZCBwYXJzZSB0aGUgc3BlY2lmaWVkIGxkYXAuY29uZiBmaWxlDQorK2luc3RlYWQg b2Ygc3NoZF9jb25maWcgVG9rZW5zLiBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIHZhbGlkIHBh dGggdG8gYW4gbGRhcC5jb25mDQorK2ZpbGUgbGlrZQ0KKysuUGEgL2V0Yy9sZGFwLmNvbmYN CisrLkl0IENtIExwa1NlcnZlcnMNCisrU3BlY2lmaWVzIExEQVAgb25lIG9yIG1vcmUgWzpz cGFjZTpdIHNlcGFyYXRlZCBzZXJ2ZXIncyB1cmwgdGhlIGZvbGxvd2luZyBmb3JtIG1heSBi ZSB1c2VkOg0KKysuUHANCisrTHBrU2VydmVycyBsZGFwczovLzEyNy4wLjAuMSBsZGFwOi8v MTI3LjAuMC4yIGxkYXA6Ly8xMjcuMC4wLjMNCisrLkl0IENtIExwa1VzZXJETg0KKytTcGVj aWZpZXMgdGhlIExEQVAgdXNlciBETi4NCisrLlBwDQorK0xwa1VzZXJETiBvdT11c2Vycyxk Yz1waGVhcixkYz1vcmcNCisrLkl0IENtIExwa0dyb3VwRE4NCisrU3BlY2lmaWVzIHRoZSBM REFQIGdyb3VwcyBETi4NCisrLlBwDQorK0xwa0dyb3VwRE4gb3U9Z3JvdXBzLGRjPXBoZWFy LGRjPW9yZw0KKysuSXQgQ20gTHBrQmluZERODQorK1NwZWNpZmllcyB0aGUgTERBUCBiaW5k IEROIHRvIHVzZSBpZiBuZWNlc3NhcnkuDQorKy5QcA0KKytMcGtCaW5kRE4gY249TWFuYWdl cixkYz1waGVhcixkYz1vcmcNCisrLkl0IENtIExwa0JpbmRQdw0KKytTcGVjaWZpZXMgdGhl IExEQVAgYmluZCBjcmVkZW50aWFsLiANCisrLlBwDQorK0xwa0JpbmRQdyBzZWNyZXQNCisr Lkl0IENtIExwa1NlcnZlckdyb3VwDQorK1NwZWNpZmllcyBvbmUgb3IgbW9yZSBbOnNwYWNl Ol0gc2VwYXJhdGVkIGdyb3VwIHRoZSBzZXJ2ZXIgaXMgcGFydCBvZi4gDQorKy5QcA0KKytM cGtTZXJ2ZXJHcm91cCB1bml4IG1haWwgcHJvZA0KKysuSXQgQ20gTHBrRmlsdGVyDQorK1Nw ZWNpZmllcyBhbiBhZGRpdGlvbmFsIExEQVAgZmlsdGVyIHRvIHVzZSBmb3IgZmluZGluZyBT U0gga2V5cw0KKysuUHANCisrTHBrRmlsdGVyIChob3N0QWNjZXNzPW1hc3Rlci5waGVhci5v cmcpDQorKy5JdCBDbSBMcGtGb3JjZVRMUw0KKytTcGVjaWZpZXMgaWYgdGhlIExEQVAgc2Vy dmVyIGNvbm5lY3Rpb24gbXVzdCBiZSB0cmllZCwgZm9yY2VkIG9yIG5vdCB1c2VkLiBUaGUg YXJndW1lbnQgbXVzdCBiZSANCisrLkRxIHllcw0KKytvcg0KKysuRHEgbm8NCisrb3INCisr LkRxIHRyeSAuDQorKy5JdCBDbSBMcGtTZWFyY2hUaW1lbGltaXQNCisrU2VwY2lmaWVzIHRo ZSBzZWFyY2ggdGltZSBsaW1pdCBiZWZvcmUgdGhlIHNlYXJjaCBpcyBjb25zaWRlcmVkIG92 ZXIuIHZhbHVlIGlzDQorK2luIHNlY29uZHMuDQorKy5QcA0KKytMcGtTZWFyY2hUaW1lbGlt aXQgMw0KKysuSXQgQ20gTHBrQmluZFRpbWVsaW1pdA0KKytTZXBjaWZpZXMgdGhlIGJpbmQg dGltZSBsaW1pdCBiZWZvcmUgdGhlIGNvbm5lY3Rpb24gaXMgY29uc2lkZXJlZCBkZWFkLiB2 YWx1ZSBpcw0KKytpbiBzZWNvbmRzLg0KKysuUHANCisrTHBrQmluZFRpbWVsaW1pdCAzDQor IC5FbA0KKyAuU2ggVElNRSBGT1JNQVRTDQorIC5YciBzc2hkIDgNCmRpZmYgLU5ydSAvaG9t ZS9nYXdyaWxvZmYvbHBrL29wZW5zc2gtcG9ydGFibGUvZmlsZXMvcGF0Y2gtc3NoZF9jb25m aWcuNSAvaG9tZS9nYXdyaWxvZmYvb3BlbnNzaC1wb3J0YWJsZS9maWxlcy9wYXRjaC1zc2hk X2NvbmZpZy41DQotLS0gL2hvbWUvZ2F3cmlsb2ZmL2xway9vcGVuc3NoLXBvcnRhYmxlL2Zp bGVzL3BhdGNoLXNzaGRfY29uZmlnLjUJMjAwNi0xMC0wMSAwNToxNTowMC4wMDAwMDAwMDAg KzAzMDANCisrKyAvaG9tZS9nYXdyaWxvZmYvb3BlbnNzaC1wb3J0YWJsZS9maWxlcy9wYXRj aC1zc2hkX2NvbmZpZy41CTIwMTAtMTItMjEgMTE6MzY6MDYuMDAwMDAwMDAwICswMjAwDQpA QCAtMSwyNSArMSw1IEBADQogLS0tIHNzaGRfY29uZmlnLjUub3JpZwlUdWUgQXVnIDI5IDIy OjA2OjM0IDIwMDYNCiArKysgc3NoZF9jb25maWcuNQlTYXQgU2VwIDMwIDEwOjM5OjA3IDIw MDYNCi1AQCAtMTY5LDkgKzE3MCwxNiBAQA0KLSBCeSBkZWZhdWx0LCBubyBiYW5uZXIgaXMg ZGlzcGxheWVkLg0KLSAuSXQgQ20gQ2hhbGxlbmdlUmVzcG9uc2VBdXRoZW50aWNhdGlvbg0K LSBTcGVjaWZpZXMgd2hldGhlciBjaGFsbGVuZ2UtcmVzcG9uc2UgYXV0aGVudGljYXRpb24g aXMgYWxsb3dlZC4NCi0tQWxsIGF1dGhlbnRpY2F0aW9uIHN0eWxlcyBmcm9tDQotLS5YciBs b2dpbi5jb25mIDUNCi0tYXJlIHN1cHBvcnRlZC4NCi0rU3BlY2lmaWNhbGx5LCBpbg0KLSsu RnggLA0KLSt0aGlzIGNvbnRyb2xzIHRoZSB1c2Ugb2YgUEFNIChzZWUNCi0rLlhyIHBhbSAz ICkNCi0rZm9yIGF1dGhlbnRpY2F0aW9uLg0KLStOb3RlIHRoYXQgdGhpcyBhZmZlY3RzIHRo ZSBlZmZlY3RpdmVuZXNzIG9mIHRoZQ0KLSsuQ20gUGFzc3dvcmRBdXRoZW50aWNhdGlvbg0K LSthbmQNCi0rLkNtIFBlcm1pdFJvb3RMb2dpbg0KLSt2YXJpYWJsZXMuDQotIFRoZSBkZWZh dWx0IGlzDQotIC5EcSB5ZXMgLg0KLSAuSXQgQ20gQ2lwaGVycw0KIEBAIC01NTQsNyArNTYw LDIyIEBADQogIC5JdCBDbSBQYXNzd29yZEF1dGhlbnRpY2F0aW9uDQogIFNwZWNpZmllcyB3 aGV0aGVyIHBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uIGlzIGFsbG93ZWQuDQo= --------------090100050300010803050402--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201103091700.p29H0dC4054843>