From: Jon Olav Hauglid Date: June 1 2011 9:16am Subject: bzr push into mysql-5.5 branch (jon.hauglid:3415 to 3416) Bug#11853126 List-Archive: http://lists.mysql.com/commits/138510 X-Bug: 11853126 Message-Id: <201106010916.p519GdPt000444@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 IDM0MTYgSm9uIE9sYXYgSGF1Z2xpZAkyMDExLTA2LTAxCiAgICAgIEJ1ZyMxMTg1MzEyNiBSRS1F TkFCTEUgQ09OQ1VSUkVOVCBSRUFEUyBXSElMRSBDUkVBVElORwogICAgICAgICAgICAgICAgICAg U0VDT05EQVJZIElOREVYIElOIElOTk9EQgogICAgICAKICAgICAgVGhlIHBhdGNoZXMgZm9yIEJ1 ZyMxMTc1MTM4OCBhbmQgQnVnIzExNzg0MDU2IGVuYWJsZWQgY29uY3VycmVudAogICAgICByZWFk cyB3aGlsZSBjcmVhdGluZyBzZWNvbmRhcnkgaW5kZXhlcyBpbiBJbm5vREIuIEhvd2V2ZXIsIHRo ZXkKICAgICAgaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24uIFRoaXMgcmVncmVzc2lvbiBvY2N1cmVk IGlmIEFMVEVSIFRBQkxFCiAgICAgIGZhaWxlZCBhZnRlciB0aGUgaW5kZXggaGFkIGJlZW4gYWRk ZWQsIGZvciBleGFtcGxlIGR1cmluZyB0aGUKICAgICAgbG9jayB1cGdyYWRlIG5lZWRlZCB0byB1 cGRhdGUgLkZSTS4gSWYgdGhpcyBoYXBwZW5lZCwgSW5ub0RCCiAgICAgIGFuZCB0aGUgc2VydmVy IGdvdCBvdXQgb2Ygc3luYyB3aXRoIHJlZ2FyZHMgdG8gd2hpY2ggaW5kZXhlcwogICAgICBhY3R1 YWxseSBleGlzdGVkLiBUaGVyZWZvcmUgdGhlIHBhdGNoIGZvciBCdWcjMTE4MTU2MDAgYWdhaW4K ICAgICAgZGlzYWJsZWQgY29uY3VycmVudCByZWFkcy4KICAgICAgCiAgICAgIFRoaXMgcGF0Y2gg cmUtZW5hYmxlcyBjb25jdXJyZW50IHJlYWRzLiBUaGUgb3JpZ2luYWwgcmVncmVzc2lvbgogICAg ICBpcyBmaXhlZCBieSBzcGxpdHRpbmcgdGhlIEFERCBJTkRFWCBvcGVyYXRpb24gaW50byB0d28g cGFydHMuCiAgICAgIEZpcnN0IHRoZSBuZXcgaW5kZXggaXMgY3JlYXRlZCBidXQgbm90IG1hZGUg YWN0aXZlLiBUaGlzIGlzCiAgICAgIGRvbmUgd2hpbGUgY29uY3VycmVudCByZWFkcyBhcmUgYWxs b3dlZC4gVGhlIHNlY29uZCBwYXJ0IG9mCiAgICAgIHRoZSBvcGVyYXRpb24gbWFrZXMgdGhlIGlu ZGV4IGFjdGl2ZSAob3IgcmV2ZXJ0cyB0aGUgY2hhbmdlKS4KICAgICAgVGhpcyBpcyBkb25lIGFm dGVyIGxvY2sgdXBncmFkZSwgd2hpY2ggcHJldmVudHMgdGhlIG9yaWdpbmFsCiAgICAgIHJlZ3Jl c3Npb24uCiAgICAgIAogICAgICBJbiBvcmRlciB0byBpbXBsZW1lbnQgdGhpcyBjaGFuZ2UsIHRo ZSBwYXRjaCBjaGFuZ2VzIHRoZSBzdG9yYWdlCiAgICAgIEFQSSBmb3IgaW4tcGxhY2UgaW5kZXgg Y3JlYXRpb24uIGhhbmRsZXI6OmFkZF9pbmRleCgpIGlzIHNwbGl0CiAgICAgIGludG8gdHdvIGZ1 bmN0aW9ucywgaGFuZGxlcl9hZGRfaW5kZXgoKSBhbmQKICAgICAgaGFuZGxlcjo6ZmluYWxfYWRk X2luZGV4KCkuIFRoZSBmb3JtZXIgZm9yIGNyZWF0aW5nIGluZGV4ZXMgd2l0aG91dAogICAgICBt YWtpbmcgdGhlbSB2aXNpYmxlIGFuZCB0aGUgbGF0dGVyIGZvciBjb21taXRpbmcgKGkuZS4gbWFr aW5nCiAgICAgIHZpc2libGUpIG5ldyBpbmRleGVzIG9yIHJldmVydGluZyB0aGUgY2hhbmdlcy4K ICAgICAgCiAgICAgIExhcmdlIHBhcnRzIG9mIHRoaXMgcGF0Y2ggd2VyZSB3cml0dGVuIGJ5IE1h cmtvIE3DpGtlbMOkLgogICAgICAKICAgICAgVGVzdCBjYXNlIGFkZGVkIHRvIGlubm9kYl9teXNx bF9sb2NrLnRlc3QuCgogICAgbW9kaWZpZWQ6CiAgICAgIG15c3FsLXRlc3Qvci9pbm5vZGJfbXlz cWxfbG9jay5yZXN1bHQKICAgICAgbXlzcWwtdGVzdC9yL2lubm9kYl9teXNxbF9zeW5jLnJlc3Vs dAogICAgICBteXNxbC10ZXN0L3QvaW5ub2RiX215c3FsX2xvY2sudGVzdAogICAgICBteXNxbC10 ZXN0L3QvaW5ub2RiX215c3FsX3N5bmMudGVzdAogICAgICBzcWwvaGFfcGFydGl0aW9uLmNjCiAg ICAgIHNxbC9oYV9wYXJ0aXRpb24uaAogICAgICBzcWwvaGFuZGxlci5oCiAgICAgIHNxbC9zcWxf dGFibGUuY2MKICAgICAgc3RvcmFnZS9pbm5vYmFzZS9oYW5kbGVyL2hhX2lubm9kYi5jYwogICAg ICBzdG9yYWdlL2lubm9iYXNlL2hhbmRsZXIvaGFfaW5ub2RiLmgKICAgICAgc3RvcmFnZS9pbm5v YmFzZS9oYW5kbGVyL2hhbmRsZXIwYWx0ZXIuY2MKIDM0MTUgSmltbXkgWWFuZwkyMDExLTA1LTMx CiAgICAgIEltcGxlbWVudCB3b3JrbG9nICM1NzQzIElubm9EQjogTGlmdCB0aGUgbGltaXQgb2Yg aW5kZXgga2V5IHByZWZpeGVzLiAKICAgICAgV2l0aCB0aGlzIGNoYW5nZSwgdGhlIGluZGV4IHBy ZWZpeCBjb2x1bW4gbGVuZ3RoIGxpZnRlZCBmcm9tIDc2NyBieXRlcwogICAgICB0byAzMDcyIGJ5 dGVzIGlmICJpbm5vZGJfbGFyZ2VfcHJlZml4IiBpcyBzZXQgdG8gInRydWUiLgogICAgICAKICAg ICAgcmI6Ly82MDMgYXBwcm92ZWQgYnkgTWFya28KCiAgICBhZGRlZDoKICAgICAgbXlzcWwtdGVz dC9zdWl0ZS9pbm5vZGIvci9pbm5vZGJfaW5kZXhfbGFyZ2VfcHJlZml4LnJlc3VsdAogICAgICBt eXNxbC10ZXN0L3N1aXRlL2lubm9kYi90L2lubm9kYl9pbmRleF9sYXJnZV9wcmVmaXgudGVzdAog ICAgbW9kaWZpZWQ6CiAgICAgIGluY2x1ZGUvbXlfYmFzZS5oCiAgICAgIG15c3FsLXRlc3Qvc3Vp dGUvaW5ub2RiL3IvaW5ub2RiLWluZGV4LnJlc3VsdAogICAgICBteXNxbC10ZXN0L3N1aXRlL2lu bm9kYi90L2lubm9kYi1pbmRleC50ZXN0CiAgICAgIG15c3FsLXRlc3Qvc3VpdGUvc3lzX3ZhcnMv ci9hbGxfdmFycy5yZXN1bHQKICAgICAgbXlzeXMvbXlfaGFuZGxlcl9lcnJvcnMuaAogICAgICBz cWwvaGFuZGxlci5jYwogICAgICBzcWwvc2hhcmUvZXJybXNnLXV0ZjgudHh0CiAgICAgIHN0b3Jh Z2UvaW5ub2Jhc2UvZGF0YS9kYXRhMGRhdGEuYwogICAgICBzdG9yYWdlL2lubm9iYXNlL2RpY3Qv ZGljdDBkaWN0LmMKICAgICAgc3RvcmFnZS9pbm5vYmFzZS9kaWN0L2RpY3QwbG9hZC5jCiAgICAg IHN0b3JhZ2UvaW5ub2Jhc2UvZGljdC9kaWN0MG1lbS5jCiAgICAgIHN0b3JhZ2UvaW5ub2Jhc2Uv aGFuZGxlci9oYV9pbm5vZGIuY2MKICAgICAgc3RvcmFnZS9pbm5vYmFzZS9oYW5kbGVyL2hhbmRs ZXIwYWx0ZXIuY2MKICAgICAgc3RvcmFnZS9pbm5vYmFzZS9pbmNsdWRlL2RiMGVyci5oCiAgICAg IHN0b3JhZ2UvaW5ub2Jhc2UvaW5jbHVkZS9kaWN0MGRpY3QuaAogICAgICBzdG9yYWdlL2lubm9i YXNlL2luY2x1ZGUvZGljdDBkaWN0LmljCiAgICAgIHN0b3JhZ2UvaW5ub2Jhc2UvaW5jbHVkZS9k aWN0MG1lbS5oCiAgICAgIHN0b3JhZ2UvaW5ub2Jhc2UvaW5jbHVkZS9yZW0wdHlwZXMuaAogICAg ICBzdG9yYWdlL2lubm9iYXNlL2luY2x1ZGUvcm93MGV4dC5oCiAgICAgIHN0b3JhZ2UvaW5ub2Jh c2UvaW5jbHVkZS9yb3cwZXh0LmljCiAgICAgIHN0b3JhZ2UvaW5ub2Jhc2UvcGFnZS9wYWdlMHpp cC5jCiAgICAgIHN0b3JhZ2UvaW5ub2Jhc2UvcmVtL3JlbTByZWMuYwogICAgICBzdG9yYWdlL2lu bm9iYXNlL3Jvdy9yb3cwZXh0LmMKICAgICAgc3RvcmFnZS9pbm5vYmFzZS9yb3cvcm93MG15c3Fs LmMKICAgICAgc3RvcmFnZS9pbm5vYmFzZS9yb3cvcm93MHJvdy5jCiAgICAgIHN0b3JhZ2UvaW5u b2Jhc2Uvcm93L3JvdzBzZWwuYwogICAgICBzdG9yYWdlL2lubm9iYXNlL3Jvdy9yb3cwdXBkLmMK ICAgICAgc3RvcmFnZS9pbm5vYmFzZS90cngvdHJ4MHJlYy5jCiAgICAgIHN0b3JhZ2UvaW5ub2Jh c2UvdXQvdXQwdXQuYwo9PT0gbW9kaWZpZWQgZmlsZSAnbXlzcWwtdGVzdC9yL2lubm9kYl9teXNx bF9sb2NrLnJlc3VsdCcKLS0tIGEvbXlzcWwtdGVzdC9yL2lubm9kYl9teXNxbF9sb2NrLnJlc3Vs dAkyMDExLTAzLTA5IDE1OjA2OjEzICswMDAwCisrKyBiL215c3FsLXRlc3Qvci9pbm5vZGJfbXlz cWxfbG9jay5yZXN1bHQJMjAxMS0wNi0wMSAwODowNjo1NSArMDAwMApAQCAtMTUzLDYgKzE1Myw3 IEBAIERST1AgVklFVyB2MTsKICMgICAgICAgICAgICAgIEtFWSBOTyAwIEZPUiBUQUJMRSBJTiBF UlJPUiBMT0cgCiAjCiBEUk9QIFRBQkxFIElGIEVYSVNUUyB0MTsKKyMgVGVzdCAxOiBTZWNvbmRh cnkgaW5kZXgKICMgQ29ubmVjdGlvbiBkZWZhdWx0CiBDUkVBVEUgVEFCTEUgdDEgKGlkIElOVCBQ UklNQVJZIEtFWSwgdmFsdWUgSU5UKSBFTkdJTkUgPSBJbm5vREI7CiBJTlNFUlQgSU5UTyB0MSBW QUxVRVMgKDEsIDEyMzQ1KTsKQEAgLTE2NCw5ICsxNjUsMjggQEAgaWQJdmFsdWUKIFNFVCBsb2Nr X3dhaXRfdGltZW91dD0xOwogQUxURVIgVEFCTEUgdDEgQUREIElOREVYIGlkeCh2YWx1ZSk7CiBF UlJPUiBIWTAwMDogTG9jayB3YWl0IHRpbWVvdXQgZXhjZWVkZWQ7IHRyeSByZXN0YXJ0aW5nIHRy YW5zYWN0aW9uCitBTFRFUiBUQUJMRSB0MSBBREQgSU5ERVggaWR4KHZhbHVlKTsKK0VSUk9SIEhZ MDAwOiBMb2NrIHdhaXQgdGltZW91dCBleGNlZWRlZDsgdHJ5IHJlc3RhcnRpbmcgdHJhbnNhY3Rp b24KICMgQ29ubmVjdGlvbiBkZWZhdWx0CiBTRUxFQ1QgKiBGUk9NIHQxOwogaWQJdmFsdWUKIDEJ MTIzNDUKIENPTU1JVDsKIERST1AgVEFCTEUgdDE7CisjIFRlc3QgMjogUHJpbWFyeSBpbmRleAor Q1JFQVRFIFRBQkxFIHQxKGEgSU5UIE5PVCBOVUxMLCBiIElOVCBOT1QgTlVMTCkgZW5naW5lPWlu bm9kYjsKK0lOU0VSVCBJTlRPIHQxIFZBTFVFUyAoMSwgMTIzNDUpLCAoMiwgMjM0NTYpOworIyBD b25uZWN0aW9uIGNvbjEKK1NFVCBTRVNTSU9OIGRlYnVnPSAiK2QsYWx0ZXJfdGFibGVfcm9sbGJh Y2tfbmV3X2luZGV4IjsKK0FMVEVSIFRBQkxFIHQxIEFERCBQUklNQVJZIEtFWShhKTsKK0VSUk9S IEhZMDAwOiBVbmtub3duIGVycm9yCitTRUxFQ1QgKiBGUk9NIHQxOworYQliCisxCTEyMzQ1Cisy CTIzNDU2CisjIENvbm5lY3Rpb24gZGVmYXVsdAorU0VMRUNUICogRlJPTSB0MTsKK2EJYgorMQkx MjM0NQorMgkyMzQ1NgorRFJPUCBUQUJMRSB0MTsKCj09PSBtb2RpZmllZCBmaWxlICdteXNxbC10 ZXN0L3IvaW5ub2RiX215c3FsX3N5bmMucmVzdWx0JwotLS0gYS9teXNxbC10ZXN0L3IvaW5ub2Ri X215c3FsX3N5bmMucmVzdWx0CTIwMTEtMDQtMDcgMDk6NDE6MjAgKzAwMDAKKysrIGIvbXlzcWwt dGVzdC9yL2lubm9kYl9teXNxbF9zeW5jLnJlc3VsdAkyMDExLTA2LTAxIDA4OjA2OjU1ICswMDAw CkBAIC05NCw2ICs5NCw3NCBAQCBTRVQgREVCVUdfU1lOQz0gJ1JFU0VUJzsKICMgQnVnIzQyMjMw IGR1cmluZyBhZGQgaW5kZXgsIGNhbm5vdCBkbyBxdWVyaWVzIG9uIHN0b3JhZ2UgZW5naW5lcwog IyAgICAgICAgICAgdGhhdCBpbXBsZW1lbnQgYWRkX2luZGV4CiAjCi0jCi0jIERJU0FCTEVEIGR1 ZSB0byBCdWcjMTE4MTU2MDAKLSMKK0RST1AgREFUQUJBU0UgSUYgRVhJU1RTIGRiMTsKK0RST1Ag VEFCTEUgSUYgRVhJU1RTIHQxOworIyBUZXN0IDE6IFNlY29uZGFyeSBpbmRleCwgc2hvdWxkIG5v dCBibG9jayByZWFkcyAob3JpZ2luYWwgdGVzdCBjYXNlKS4KKyMgQ29ubmVjdGlvbiBkZWZhdWx0 CitDUkVBVEUgREFUQUJBU0UgZGIxOworQ1JFQVRFIFRBQkxFIGRiMS50MShpZCBJTlQgTk9UIE5V TEwgQVVUT19JTkNSRU1FTlQgUFJJTUFSWSBLRVksIHZhbHVlIElOVCkgZW5naW5lPWlubm9kYjsK K0lOU0VSVCBJTlRPIGRiMS50MSh2YWx1ZSkgVkFMVUVTICgxKSwgKDIpOworU0VUIERFQlVHX1NZ TkM9ICJhbHRlcl90YWJsZV9tYW5hZ2Vfa2V5cyBTSUdOQUwgbWFuYWdlIFdBSVRfRk9SIHF1ZXJ5 IjsKKyMgU2VuZGluZzoKK0FMVEVSIFRBQkxFIGRiMS50MSBBREQgSU5ERVgodmFsdWUpOworIyBD b25uZWN0aW9uIGNvbjEKK1NFVCBERUJVR19TWU5DPSAibm93IFdBSVRfRk9SIG1hbmFnZSI7CitV U0UgZGIxOworU0VMRUNUICogRlJPTSB0MTsKK2lkCXZhbHVlCisxCTEKKzIJMgorU0VUIERFQlVH X1NZTkM9ICJub3cgU0lHTkFMIHF1ZXJ5IjsKKyMgQ29ubmVjdGlvbiBkZWZhdWx0CisjIFJlYXBp bmc6IEFMVEVSIFRBQkxFIGRiMS50MSBBREQgSU5ERVgodmFsdWUpCitEUk9QIERBVEFCQVNFIGRi MTsKKyMgVGVzdCAyOiBQcmltYXJ5IGluZGV4IChpbXBsaWNpdCksIHNob3VsZCBibG9jayByZWFk cy4KK0NSRUFURSBUQUJMRSB0MShhIElOVCBOT1QgTlVMTCwgYiBJTlQgTk9UIE5VTEwpIGVuZ2lu ZT1pbm5vZGI7CitTRVQgREVCVUdfU1lOQz0gImFsdGVyX3RhYmxlX21hbmFnZV9rZXlzIFNJR05B TCBtYW5hZ2UgV0FJVF9GT1IgcXVlcnkiOworIyBTZW5kaW5nOgorQUxURVIgVEFCTEUgdDEgQURE IFVOSVFVRSBJTkRFWChhKTsKKyMgQ29ubmVjdGlvbiBjb24xCitTRVQgREVCVUdfU1lOQz0gIm5v dyBXQUlUX0ZPUiBtYW5hZ2UiOworVVNFIHRlc3Q7CisjIFNlbmRpbmc6CitTRUxFQ1QgKiBGUk9N IHQxOworIyBDb25uZWN0aW9uIGNvbjIKKyMgV2FpdGluZyBmb3IgU0VMRUNUIHRvIGJlIGJsb2Nr ZWQgYnkgdGhlIG1ldGFkYXRhIGxvY2sgb24gdDEKK1NFVCBERUJVR19TWU5DPSAibm93IFNJR05B TCBxdWVyeSI7CisjIENvbm5lY3Rpb24gZGVmYXVsdAorIyBSZWFwaW5nOiBBTFRFUiBUQUJMRSB0 MSBBREQgVU5JUVVFIElOREVYKGEpCisjIENvbm5lY3Rpb24gY29uMQorIyBSZWFwaW5nOiBTRUxF Q1QgKiBGUk9NIHQxCithCWIKKyMgVGVzdCAzOiBQcmltYXJ5IGluZGV4IChleHBsaWNpdCksIHNo b3VsZCBibG9jayByZWFkcy4KKyMgQ29ubmVjdGlvbiBkZWZhdWx0CitBTFRFUiBUQUJMRSB0MSBE Uk9QIElOREVYIGE7CitTRVQgREVCVUdfU1lOQz0gImFsdGVyX3RhYmxlX21hbmFnZV9rZXlzIFNJ R05BTCBtYW5hZ2UgV0FJVF9GT1IgcXVlcnkiOworIyBTZW5kaW5nOgorQUxURVIgVEFCTEUgdDEg QUREIFBSSU1BUlkgS0VZIChhKTsKKyMgQ29ubmVjdGlvbiBjb24xCitTRVQgREVCVUdfU1lOQz0g Im5vdyBXQUlUX0ZPUiBtYW5hZ2UiOworIyBTZW5kaW5nOgorU0VMRUNUICogRlJPTSB0MTsKKyMg Q29ubmVjdGlvbiBjb24yCisjIFdhaXRpbmcgZm9yIFNFTEVDVCB0byBiZSBibG9ja2VkIGJ5IHRo ZSBtZXRhZGF0YSBsb2NrIG9uIHQxCitTRVQgREVCVUdfU1lOQz0gIm5vdyBTSUdOQUwgcXVlcnki OworIyBDb25uZWN0aW9uIGRlZmF1bHQKKyMgUmVhcGluZzogQUxURVIgVEFCTEUgdDEgQUREIFBS SU1BUlkgS0VZIChhKQorIyBDb25uZWN0aW9uIGNvbjEKKyMgUmVhcGluZzogU0VMRUNUICogRlJP TSB0MQorYQliCisjIFRlc3QgNDogU2Vjb25kYXJ5IHVuaXF1ZSBpbmRleCwgc2hvdWxkIG5vdCBi bG9jayByZWFkcy4KKyMgQ29ubmVjdGlvbiBkZWZhdWx0CitTRVQgREVCVUdfU1lOQz0gImFsdGVy X3RhYmxlX21hbmFnZV9rZXlzIFNJR05BTCBtYW5hZ2UgV0FJVF9GT1IgcXVlcnkiOworIyBTZW5k aW5nOgorQUxURVIgVEFCTEUgdDEgQUREIFVOSVFVRSAoYik7CisjIENvbm5lY3Rpb24gY29uMQor U0VUIERFQlVHX1NZTkM9ICJub3cgV0FJVF9GT1IgbWFuYWdlIjsKK1NFTEVDVCAqIEZST00gdDE7 CithCWIKK1NFVCBERUJVR19TWU5DPSAibm93IFNJR05BTCBxdWVyeSI7CisjIENvbm5lY3Rpb24g ZGVmYXVsdAorIyBSZWFwaW5nOiBBTFRFUiBUQUJMRSB0MSBBREQgVU5JUVVFIChiKQorU0VUIERF QlVHX1NZTkM9ICJSRVNFVCI7CitEUk9QIFRBQkxFIHQxOwoKPT09IG1vZGlmaWVkIGZpbGUgJ215 c3FsLXRlc3QvdC9pbm5vZGJfbXlzcWxfbG9jay50ZXN0JwotLS0gYS9teXNxbC10ZXN0L3QvaW5u b2RiX215c3FsX2xvY2sudGVzdAkyMDExLTAzLTA5IDE1OjA2OjEzICswMDAwCisrKyBiL215c3Fs LXRlc3QvdC9pbm5vZGJfbXlzcWxfbG9jay50ZXN0CTIwMTEtMDYtMDEgMDg6MDY6NTUgKzAwMDAK QEAgLTI5MCw2ICsyOTAsOCBAQCBEUk9QIFRBQkxFIElGIEVYSVNUUyB0MTsKIAogLS1jb25uZWN0 IChjb24xLGxvY2FsaG9zdCxyb290KQogCistLWVjaG8gIyBUZXN0IDE6IFNlY29uZGFyeSBpbmRl eAorCiAtLWVjaG8gIyBDb25uZWN0aW9uIGRlZmF1bHQKIGNvbm5lY3Rpb24gZGVmYXVsdDsKIENS RUFURSBUQUJMRSB0MSAoaWQgSU5UIFBSSU1BUlkgS0VZLCB2YWx1ZSBJTlQpIEVOR0lORSA9IElu bm9EQjsKQEAgLTMwMCw2ICszMDIsMTAgQEAgU0VMRUNUICogRlJPTSB0MTsKIC0tZWNobyAjIENv bm5lY3Rpb24gY29uMQogLS1jb25uZWN0aW9uIGNvbjEKIFNFVCBsb2NrX3dhaXRfdGltZW91dD0x OworIyBUZXN0IHdpdGggdHdvIHRpbWVvdXRzLCBhcyB0aGUgZmlyc3QgdmVyc2lvbiBvZiB0aGlz IHBhdGNoCisjIG9ubHkgd29ya2VkIHdpdGggb25lIHRpbWVvdXQuCistLWVycm9yIEVSX0xPQ0tf V0FJVF9USU1FT1VUCitBTFRFUiBUQUJMRSB0MSBBREQgSU5ERVggaWR4KHZhbHVlKTsKIC0tZXJy b3IgRVJfTE9DS19XQUlUX1RJTUVPVVQKIEFMVEVSIFRBQkxFIHQxIEFERCBJTkRFWCBpZHgodmFs dWUpOwogCkBAIC0zMDgsNiArMzE0LDIyIEBAIEFMVEVSIFRBQkxFIHQxIEFERCBJTkRFWCBpZHgo dmFsdWUpOwogU0VMRUNUICogRlJPTSB0MTsKIENPTU1JVDsKIERST1AgVEFCTEUgdDE7CisKKy0t ZWNobyAjIFRlc3QgMjogUHJpbWFyeSBpbmRleAorQ1JFQVRFIFRBQkxFIHQxKGEgSU5UIE5PVCBO VUxMLCBiIElOVCBOT1QgTlVMTCkgZW5naW5lPWlubm9kYjsKK0lOU0VSVCBJTlRPIHQxIFZBTFVF UyAoMSwgMTIzNDUpLCAoMiwgMjM0NTYpOworCistLWVjaG8gIyBDb25uZWN0aW9uIGNvbjEKKy0t Y29ubmVjdGlvbiBjb24xCitTRVQgU0VTU0lPTiBkZWJ1Zz0gIitkLGFsdGVyX3RhYmxlX3JvbGxi YWNrX25ld19pbmRleCI7CistLWVycm9yIEVSX1VOS05PV05fRVJST1IKK0FMVEVSIFRBQkxFIHQx IEFERCBQUklNQVJZIEtFWShhKTsKK1NFTEVDVCAqIEZST00gdDE7CisKKy0tZWNobyAjIENvbm5l Y3Rpb24gZGVmYXVsdAorLS1jb25uZWN0aW9uIGRlZmF1bHQKK1NFTEVDVCAqIEZST00gdDE7CitE Uk9QIFRBQkxFIHQxOwogZGlzY29ubmVjdCBjb24xOwogCiAKCj09PSBtb2RpZmllZCBmaWxlICdt eXNxbC10ZXN0L3QvaW5ub2RiX215c3FsX3N5bmMudGVzdCcKLS0tIGEvbXlzcWwtdGVzdC90L2lu bm9kYl9teXNxbF9zeW5jLnRlc3QJMjAxMS0wMy0yMiAxMzozNDowNCArMDAwMAorKysgYi9teXNx bC10ZXN0L3QvaW5ub2RiX215c3FsX3N5bmMudGVzdAkyMDExLTA2LTAxIDA4OjA2OjU1ICswMDAw CkBAIC0xNTIsMTMzICsxNTIsMTI5IEBAIGRpc2Nvbm5lY3QgY29uMTsKIC0tZWNobyAjICAgICAg ICAgICB0aGF0IGltcGxlbWVudCBhZGRfaW5kZXgKIC0tZWNobyAjCiAKLS0tZWNobyAjCi0tLWVj aG8gIyBESVNBQkxFRCBkdWUgdG8gQnVnIzExODE1NjAwCi0tLWVjaG8gIworLS1kaXNhYmxlX3dh cm5pbmdzCitEUk9QIERBVEFCQVNFIElGIEVYSVNUUyBkYjE7CitEUk9QIFRBQkxFIElGIEVYSVNU UyB0MTsKKy0tZW5hYmxlX3dhcm5pbmdzCisKK2Nvbm5lY3QoY29uMSxsb2NhbGhvc3Qscm9vdCk7 Citjb25uZWN0KGNvbjIsbG9jYWxob3N0LHJvb3QpOworCistLWVjaG8gIyBUZXN0IDE6IFNlY29u ZGFyeSBpbmRleCwgc2hvdWxkIG5vdCBibG9jayByZWFkcyAob3JpZ2luYWwgdGVzdCBjYXNlKS4K KworLS1lY2hvICMgQ29ubmVjdGlvbiBkZWZhdWx0Citjb25uZWN0aW9uIGRlZmF1bHQ7CitDUkVB VEUgREFUQUJBU0UgZGIxOworQ1JFQVRFIFRBQkxFIGRiMS50MShpZCBJTlQgTk9UIE5VTEwgQVVU T19JTkNSRU1FTlQgUFJJTUFSWSBLRVksIHZhbHVlIElOVCkgZW5naW5lPWlubm9kYjsKK0lOU0VS VCBJTlRPIGRiMS50MSh2YWx1ZSkgVkFMVUVTICgxKSwgKDIpOworU0VUIERFQlVHX1NZTkM9ICJh bHRlcl90YWJsZV9tYW5hZ2Vfa2V5cyBTSUdOQUwgbWFuYWdlIFdBSVRfRk9SIHF1ZXJ5IjsKKy0t ZWNobyAjIFNlbmRpbmc6CistLXNlbmQgQUxURVIgVEFCTEUgZGIxLnQxIEFERCBJTkRFWCh2YWx1 ZSkKKworLS1lY2hvICMgQ29ubmVjdGlvbiBjb24xCitjb25uZWN0aW9uIGNvbjE7CitTRVQgREVC VUdfU1lOQz0gIm5vdyBXQUlUX0ZPUiBtYW5hZ2UiOworIyBOZWl0aGVyIG9mIHRoZXNlIHR3byBz dGF0ZW1lbnRzIHNob3VsZCBiZSBibG9ja2VkCitVU0UgZGIxOworU0VMRUNUICogRlJPTSB0MTsK K1NFVCBERUJVR19TWU5DPSAibm93IFNJR05BTCBxdWVyeSI7CisKKy0tZWNobyAjIENvbm5lY3Rp b24gZGVmYXVsdAorY29ubmVjdGlvbiBkZWZhdWx0OworLS1lY2hvICMgUmVhcGluZzogQUxURVIg VEFCTEUgZGIxLnQxIEFERCBJTkRFWCh2YWx1ZSkKKy0tcmVhcAorRFJPUCBEQVRBQkFTRSBkYjE7 CisKKy0tZWNobyAjIFRlc3QgMjogUHJpbWFyeSBpbmRleCAoaW1wbGljaXQpLCBzaG91bGQgYmxv Y2sgcmVhZHMuCisKK0NSRUFURSBUQUJMRSB0MShhIElOVCBOT1QgTlVMTCwgYiBJTlQgTk9UIE5V TEwpIGVuZ2luZT1pbm5vZGI7CitTRVQgREVCVUdfU1lOQz0gImFsdGVyX3RhYmxlX21hbmFnZV9r ZXlzIFNJR05BTCBtYW5hZ2UgV0FJVF9GT1IgcXVlcnkiOworLS1lY2hvICMgU2VuZGluZzoKKy0t c2VuZCBBTFRFUiBUQUJMRSB0MSBBREQgVU5JUVVFIElOREVYKGEpCisKKy0tZWNobyAjIENvbm5l Y3Rpb24gY29uMQorY29ubmVjdGlvbiBjb24xOworU0VUIERFQlVHX1NZTkM9ICJub3cgV0FJVF9G T1IgbWFuYWdlIjsKK1VTRSB0ZXN0OworLS1lY2hvICMgU2VuZGluZzoKKy0tc2VuZCBTRUxFQ1Qg KiBGUk9NIHQxCisKKy0tZWNobyAjIENvbm5lY3Rpb24gY29uMgorY29ubmVjdGlvbiBjb24yOwor LS1lY2hvICMgV2FpdGluZyBmb3IgU0VMRUNUIHRvIGJlIGJsb2NrZWQgYnkgdGhlIG1ldGFkYXRh IGxvY2sgb24gdDEKK2xldCAkd2FpdF9jb25kaXRpb249IFNFTEVDVCBDT1VOVCgqKT0gMSBGUk9N IGluZm9ybWF0aW9uX3NjaGVtYS5wcm9jZXNzbGlzdAorICBXSEVSRSBzdGF0ZT0gJ1dhaXRpbmcg Zm9yIHRhYmxlIG1ldGFkYXRhIGxvY2snCisgIEFORCBpbmZvPSdTRUxFQ1QgKiBGUk9NIHQxJzsK Ky0tc291cmNlIGluY2x1ZGUvd2FpdF9jb25kaXRpb24uaW5jCitTRVQgREVCVUdfU1lOQz0gIm5v dyBTSUdOQUwgcXVlcnkiOworCistLWVjaG8gIyBDb25uZWN0aW9uIGRlZmF1bHQKK2Nvbm5lY3Rp b24gZGVmYXVsdDsKKy0tZWNobyAjIFJlYXBpbmc6IEFMVEVSIFRBQkxFIHQxIEFERCBVTklRVUUg SU5ERVgoYSkKKy0tcmVhcAorCistLWVjaG8gIyBDb25uZWN0aW9uIGNvbjEKK2Nvbm5lY3Rpb24g Y29uMTsKKy0tZWNobyAjIFJlYXBpbmc6IFNFTEVDVCAqIEZST00gdDEKKy0tcmVhcAorCistLWVj aG8gIyBUZXN0IDM6IFByaW1hcnkgaW5kZXggKGV4cGxpY2l0KSwgc2hvdWxkIGJsb2NrIHJlYWRz LgorCistLWVjaG8gIyBDb25uZWN0aW9uIGRlZmF1bHQKK2Nvbm5lY3Rpb24gZGVmYXVsdDsKK0FM VEVSIFRBQkxFIHQxIERST1AgSU5ERVggYTsKK1NFVCBERUJVR19TWU5DPSAiYWx0ZXJfdGFibGVf bWFuYWdlX2tleXMgU0lHTkFMIG1hbmFnZSBXQUlUX0ZPUiBxdWVyeSI7CistLWVjaG8gIyBTZW5k aW5nOgorLS1zZW5kIEFMVEVSIFRBQkxFIHQxIEFERCBQUklNQVJZIEtFWSAoYSkKKworLS1lY2hv ICMgQ29ubmVjdGlvbiBjb24xCitjb25uZWN0aW9uIGNvbjE7CitTRVQgREVCVUdfU1lOQz0gIm5v dyBXQUlUX0ZPUiBtYW5hZ2UiOworLS1lY2hvICMgU2VuZGluZzoKKy0tc2VuZCBTRUxFQ1QgKiBG Uk9NIHQxCisKKy0tZWNobyAjIENvbm5lY3Rpb24gY29uMgorY29ubmVjdGlvbiBjb24yOworLS1l Y2hvICMgV2FpdGluZyBmb3IgU0VMRUNUIHRvIGJlIGJsb2NrZWQgYnkgdGhlIG1ldGFkYXRhIGxv Y2sgb24gdDEKK2xldCAkd2FpdF9jb25kaXRpb249IFNFTEVDVCBDT1VOVCgqKT0gMSBGUk9NIGlu Zm9ybWF0aW9uX3NjaGVtYS5wcm9jZXNzbGlzdAorICBXSEVSRSBzdGF0ZT0gJ1dhaXRpbmcgZm9y IHRhYmxlIG1ldGFkYXRhIGxvY2snCisgIEFORCBpbmZvPSdTRUxFQ1QgKiBGUk9NIHQxJzsKKy0t c291cmNlIGluY2x1ZGUvd2FpdF9jb25kaXRpb24uaW5jCitTRVQgREVCVUdfU1lOQz0gIm5vdyBT SUdOQUwgcXVlcnkiOworCistLWVjaG8gIyBDb25uZWN0aW9uIGRlZmF1bHQKK2Nvbm5lY3Rpb24g ZGVmYXVsdDsKKy0tZWNobyAjIFJlYXBpbmc6IEFMVEVSIFRBQkxFIHQxIEFERCBQUklNQVJZIEtF WSAoYSkKKy0tcmVhcAorCistLWVjaG8gIyBDb25uZWN0aW9uIGNvbjEKK2Nvbm5lY3Rpb24gY29u MTsKKy0tZWNobyAjIFJlYXBpbmc6IFNFTEVDVCAqIEZST00gdDEKKy0tcmVhcAorCistLWVjaG8g IyBUZXN0IDQ6IFNlY29uZGFyeSB1bmlxdWUgaW5kZXgsIHNob3VsZCBub3QgYmxvY2sgcmVhZHMu CisKKy0tZWNobyAjIENvbm5lY3Rpb24gZGVmYXVsdAorY29ubmVjdGlvbiBkZWZhdWx0OworU0VU IERFQlVHX1NZTkM9ICJhbHRlcl90YWJsZV9tYW5hZ2Vfa2V5cyBTSUdOQUwgbWFuYWdlIFdBSVRf Rk9SIHF1ZXJ5IjsKKy0tZWNobyAjIFNlbmRpbmc6CistLXNlbmQgQUxURVIgVEFCTEUgdDEgQURE IFVOSVFVRSAoYikKKworLS1lY2hvICMgQ29ubmVjdGlvbiBjb24xCitjb25uZWN0aW9uIGNvbjE7 CitTRVQgREVCVUdfU1lOQz0gIm5vdyBXQUlUX0ZPUiBtYW5hZ2UiOworU0VMRUNUICogRlJPTSB0 MTsKK1NFVCBERUJVR19TWU5DPSAibm93IFNJR05BTCBxdWVyeSI7CisKKy0tZWNobyAjIENvbm5l Y3Rpb24gZGVmYXVsdAorY29ubmVjdGlvbiBkZWZhdWx0OworLS1lY2hvICMgUmVhcGluZzogQUxU RVIgVEFCTEUgdDEgQUREIFVOSVFVRSAoYikKKy0tcmVhcAogCi0jLS1kaXNhYmxlX3dhcm5pbmdz Ci0jRFJPUCBEQVRBQkFTRSBJRiBFWElTVFMgZGIxOwotI0RST1AgVEFCTEUgSUYgRVhJU1RTIHQx OwotIy0tZW5hYmxlX3dhcm5pbmdzCi0jCi0jY29ubmVjdChjb24xLGxvY2FsaG9zdCxyb290KTsK LSNjb25uZWN0KGNvbjIsbG9jYWxob3N0LHJvb3QpOwotIwotIy0tZWNobyAjIFRlc3QgMTogU2Vj b25kYXJ5IGluZGV4LCBzaG91bGQgbm90IGJsb2NrIHJlYWRzIChvcmlnaW5hbCB0ZXN0IGNhc2Up LgotIwotIy0tZWNobyAjIENvbm5lY3Rpb24gZGVmYXVsdAotI2Nvbm5lY3Rpb24gZGVmYXVsdDsK LSNDUkVBVEUgREFUQUJBU0UgZGIxOwotI0NSRUFURSBUQUJMRSBkYjEudDEoaWQgSU5UIE5PVCBO VUxMIEFVVE9fSU5DUkVNRU5UIFBSSU1BUlkgS0VZLCB2YWx1ZSBJTlQpIGVuZ2luZT1pbm5vZGI7 Ci0jSU5TRVJUIElOVE8gZGIxLnQxKHZhbHVlKSBWQUxVRVMgKDEpLCAoMik7Ci0jU0VUIERFQlVH X1NZTkM9ICJhbHRlcl90YWJsZV9tYW5hZ2Vfa2V5cyBTSUdOQUwgbWFuYWdlIFdBSVRfRk9SIHF1 ZXJ5IjsKLSMtLWVjaG8gIyBTZW5kaW5nOgotIy0tc2VuZCBBTFRFUiBUQUJMRSBkYjEudDEgQURE IElOREVYKHZhbHVlKQotIwotIy0tZWNobyAjIENvbm5lY3Rpb24gY29uMQotI2Nvbm5lY3Rpb24g Y29uMTsKLSNTRVQgREVCVUdfU1lOQz0gIm5vdyBXQUlUX0ZPUiBtYW5hZ2UiOwotIyAjIE5laXRo ZXIgb2YgdGhlc2UgdHdvIHN0YXRlbWVudHMgc2hvdWxkIGJlIGJsb2NrZWQKLSNVU0UgZGIxOwot I1NFTEVDVCAqIEZST00gdDE7Ci0jU0VUIERFQlVHX1NZTkM9ICJub3cgU0lHTkFMIHF1ZXJ5IjsK LSMKLSMtLWVjaG8gIyBDb25uZWN0aW9uIGRlZmF1bHQKLSNjb25uZWN0aW9uIGRlZmF1bHQ7Ci0j LS1lY2hvICMgUmVhcGluZzogQUxURVIgVEFCTEUgZGIxLnQxIEFERCBJTkRFWCh2YWx1ZSkKLSMt LXJlYXAKLSNEUk9QIERBVEFCQVNFIGRiMTsKLSMKLSMtLWVjaG8gIyBUZXN0IDI6IFByaW1hcnkg aW5kZXggKGltcGxpY2l0KSwgc2hvdWxkIGJsb2NrIHJlYWRzLgotIwotI0NSRUFURSBUQUJMRSB0 MShhIElOVCBOT1QgTlVMTCwgYiBJTlQgTk9UIE5VTEwpIGVuZ2luZT1pbm5vZGI7Ci0jU0VUIERF QlVHX1NZTkM9ICJhbHRlcl90YWJsZV9tYW5hZ2Vfa2V5cyBTSUdOQUwgbWFuYWdlIFdBSVRfRk9S IHF1ZXJ5IjsKLSMtLWVjaG8gIyBTZW5kaW5nOgotIy0tc2VuZCBBTFRFUiBUQUJMRSB0MSBBREQg VU5JUVVFIElOREVYKGEpCi0jCi0jLS1lY2hvICMgQ29ubmVjdGlvbiBjb24xCi0jY29ubmVjdGlv biBjb24xOwotI1NFVCBERUJVR19TWU5DPSAibm93IFdBSVRfRk9SIG1hbmFnZSI7Ci0jVVNFIHRl c3Q7Ci0jLS1lY2hvICMgU2VuZGluZzoKLSMtLXNlbmQgU0VMRUNUICogRlJPTSB0MQotIwotIy0t ZWNobyAjIENvbm5lY3Rpb24gY29uMgotI2Nvbm5lY3Rpb24gY29uMjsKLSMtLWVjaG8gIyBXYWl0 aW5nIGZvciBTRUxFQ1QgdG8gYmUgYmxvY2tlZCBieSB0aGUgbWV0YWRhdGEgbG9jayBvbiB0MQot I2xldCAkd2FpdF9jb25kaXRpb249IFNFTEVDVCBDT1VOVCgqKT0gMSBGUk9NIGluZm9ybWF0aW9u X3NjaGVtYS5wcm9jZXNzbGlzdAotIyAgV0hFUkUgc3RhdGU9ICdXYWl0aW5nIGZvciB0YWJsZSBt ZXRhZGF0YSBsb2NrJwotIyAgQU5EIGluZm89J1NFTEVDVCAqIEZST00gdDEnOwotIy0tc291cmNl IGluY2x1ZGUvd2FpdF9jb25kaXRpb24uaW5jCi0jU0VUIERFQlVHX1NZTkM9ICJub3cgU0lHTkFM IHF1ZXJ5IjsKLSMKLSMtLWVjaG8gIyBDb25uZWN0aW9uIGRlZmF1bHQKLSNjb25uZWN0aW9uIGRl ZmF1bHQ7Ci0jLS1lY2hvICMgUmVhcGluZzogQUxURVIgVEFCTEUgdDEgQUREIFVOSVFVRSBJTkRF WChhKQotIy0tcmVhcAotIwotIy0tZWNobyAjIENvbm5lY3Rpb24gY29uMQotI2Nvbm5lY3Rpb24g Y29uMTsKLSMtLWVjaG8gIyBSZWFwaW5nOiBTRUxFQ1QgKiBGUk9NIHQxCi0jLS1yZWFwCi0jCi0j LS1lY2hvICMgVGVzdCAzOiBQcmltYXJ5IGluZGV4IChleHBsaWNpdCksIHNob3VsZCBibG9jayBy ZWFkcy4KLSMKLSMtLWVjaG8gIyBDb25uZWN0aW9uIGRlZmF1bHQKLSNjb25uZWN0aW9uIGRlZmF1 bHQ7Ci0jQUxURVIgVEFCTEUgdDEgRFJPUCBJTkRFWCBhOwotI1NFVCBERUJVR19TWU5DPSAiYWx0 ZXJfdGFibGVfbWFuYWdlX2tleXMgU0lHTkFMIG1hbmFnZSBXQUlUX0ZPUiBxdWVyeSI7Ci0jLS1l Y2hvICMgU2VuZGluZzoKLSMtLXNlbmQgQUxURVIgVEFCTEUgdDEgQUREIFBSSU1BUlkgS0VZIChh KQotIwotIy0tZWNobyAjIENvbm5lY3Rpb24gY29uMQotI2Nvbm5lY3Rpb24gY29uMTsKLSNTRVQg REVCVUdfU1lOQz0gIm5vdyBXQUlUX0ZPUiBtYW5hZ2UiOwotIy0tZWNobyAjIFNlbmRpbmc6Ci0j LS1zZW5kIFNFTEVDVCAqIEZST00gdDEKLSMKLSMtLWVjaG8gIyBDb25uZWN0aW9uIGNvbjIKLSNj b25uZWN0aW9uIGNvbjI7Ci0jLS1lY2hvICMgV2FpdGluZyBmb3IgU0VMRUNUIHRvIGJlIGJsb2Nr ZWQgYnkgdGhlIG1ldGFkYXRhIGxvY2sgb24gdDEKLSNsZXQgJHdhaXRfY29uZGl0aW9uPSBTRUxF Q1QgQ09VTlQoKik9IDEgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEucHJvY2Vzc2xpc3QKLSMgIFdI RVJFIHN0YXRlPSAnV2FpdGluZyBmb3IgdGFibGUgbWV0YWRhdGEgbG9jaycKLSMgIEFORCBpbmZv PSdTRUxFQ1QgKiBGUk9NIHQxJzsKLSMtLXNvdXJjZSBpbmNsdWRlL3dhaXRfY29uZGl0aW9uLmlu YwotI1NFVCBERUJVR19TWU5DPSAibm93IFNJR05BTCBxdWVyeSI7Ci0jCi0jLS1lY2hvICMgQ29u bmVjdGlvbiBkZWZhdWx0Ci0jY29ubmVjdGlvbiBkZWZhdWx0OwotIy0tZWNobyAjIFJlYXBpbmc6 IEFMVEVSIFRBQkxFIHQxIEFERCBQUklNQVJZIEtFWSAoYSkKLSMtLXJlYXAKLSMKLSMtLWVjaG8g IyBDb25uZWN0aW9uIGNvbjEKLSNjb25uZWN0aW9uIGNvbjE7Ci0jLS1lY2hvICMgUmVhcGluZzog U0VMRUNUICogRlJPTSB0MQotIy0tcmVhcAotIwotIy0tZWNobyAjIFRlc3QgNDogU2Vjb25kYXJ5 IHVuaXF1ZSBpbmRleCwgc2hvdWxkIG5vdCBibG9jayByZWFkcy4KLSMKLSMtLWVjaG8gIyBDb25u ZWN0aW9uIGRlZmF1bHQKLSNjb25uZWN0aW9uIGRlZmF1bHQ7Ci0jU0VUIERFQlVHX1NZTkM9ICJh bHRlcl90YWJsZV9tYW5hZ2Vfa2V5cyBTSUdOQUwgbWFuYWdlIFdBSVRfRk9SIHF1ZXJ5IjsKLSMt LWVjaG8gIyBTZW5kaW5nOgotIy0tc2VuZCBBTFRFUiBUQUJMRSB0MSBBREQgVU5JUVVFIChiKQot IwotIy0tZWNobyAjIENvbm5lY3Rpb24gY29uMQotI2Nvbm5lY3Rpb24gY29uMTsKLSNTRVQgREVC VUdfU1lOQz0gIm5vdyBXQUlUX0ZPUiBtYW5hZ2UiOwotI1NFTEVDVCAqIEZST00gdDE7Ci0jU0VU IERFQlVHX1NZTkM9ICJub3cgU0lHTkFMIHF1ZXJ5IjsKLSMKLSMtLWVjaG8gIyBDb25uZWN0aW9u IGRlZmF1bHQKLSNjb25uZWN0aW9uIGRlZmF1bHQ7Ci0jLS1lY2hvICMgUmVhcGluZzogQUxURVIg VEFCTEUgdDEgQUREIFVOSVFVRSAoYikKLSMtLXJlYXAKLSMKLSNkaXNjb25uZWN0IGNvbjE7Ci0j ZGlzY29ubmVjdCBjb24yOwotI1NFVCBERUJVR19TWU5DPSAiUkVTRVQiOwotI0RST1AgVEFCTEUg dDE7CitkaXNjb25uZWN0IGNvbjE7CitkaXNjb25uZWN0IGNvbjI7CitTRVQgREVCVUdfU1lOQz0g IlJFU0VUIjsKK0RST1AgVEFCTEUgdDE7CiAKIAogIyBDaGVjayB0aGF0IGFsbCBjb25uZWN0aW9u cyBvcGVuZWQgYnkgdGVzdCBjYXNlcyBpbiB0aGlzIGZpbGUgYXJlIHJlYWxseQoKPT09IG1vZGlm aWVkIGZpbGUgJ3NxbC9oYV9wYXJ0aXRpb24uY2MnCi0tLSBhL3NxbC9oYV9wYXJ0aXRpb24uY2MJ MjAxMS0wNS0yMSAwODoyMTowOCArMDAwMAorKysgYi9zcWwvaGFfcGFydGl0aW9uLmNjCTIwMTEt MDYtMDEgMDg6MDY6NTUgKzAwMDAKQEAgLTY2NTYsMjIgKzY2NTYsMjkgQEAgYm9vbCBoYV9wYXJ0 aXRpb246OmNoZWNrX2lmX2luY29tcGF0aWJsZQogCiAKIC8qKgotICBTdXBwb3J0IG9mIGZhc3Qg b3Igb25saW5lIGFkZC9kcm9wIGluZGV4CisgIFN1cHBvcnQgb2YgaW4tcGxhY2UgYWRkL2Ryb3Ag aW5kZXgKICovCi1pbnQgaGFfcGFydGl0aW9uOjphZGRfaW5kZXgoVEFCTEUgKnRhYmxlX2FyZywg S0VZICprZXlfaW5mbywgdWludCBudW1fb2Zfa2V5cykKK2ludCBoYV9wYXJ0aXRpb246OmFkZF9p bmRleChUQUJMRSAqdGFibGVfYXJnLCBLRVkgKmtleV9pbmZvLCB1aW50IG51bV9vZl9rZXlzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJfYWRkX2luZGV4ICoqYWRkKQogewog ICBoYW5kbGVyICoqZmlsZTsKICAgaW50IHJldD0gMDsKIAogICBEQlVHX0VOVEVSKCJoYV9wYXJ0 aXRpb246OmFkZF9pbmRleCIpOworICAqYWRkPSBuZXcgaGFuZGxlcl9hZGRfaW5kZXgodGFibGUs IGtleV9pbmZvLCBudW1fb2Zfa2V5cyk7CiAgIC8qCiAgICAgVGhlcmUgaGFzIGFscmVhZHkgYmVl biBhIGNoZWNrIGluIGZpeF9wYXJ0aXRpb25fZnVuYyBpbiBteXNxbF9hbHRlcl90YWJsZQogICAg IGJlZm9yZSB0aGlzIGNhbGwsIHdoaWNoIGNoZWNrcyBmb3IgdW5pcXVlL3ByaW1hcnkga2V5IHZp b2xhdGlvbnMgb2YgdGhlCiAgICAgcGFydGl0aW9uaW5nIGZ1bmN0aW9uLiBTbyBubyBuZWVkIGZv ciBleHRyYSBjaGVjayBoZXJlLgogICAqLwogICBmb3IgKGZpbGU9IG1fZmlsZTsgKmZpbGU7IGZp bGUrKykKLSAgICBpZiAoKHJldD0gICgqZmlsZSktPmFkZF9pbmRleCh0YWJsZV9hcmcsIGtleV9p bmZvLCBudW1fb2Zfa2V5cykpKQorICB7CisgICAgaGFuZGxlcl9hZGRfaW5kZXggKmFkZF9pbmRl eDsKKyAgICBpZiAoKHJldD0gKCpmaWxlKS0+YWRkX2luZGV4KHRhYmxlX2FyZywga2V5X2luZm8s IG51bV9vZl9rZXlzLCAmYWRkX2luZGV4KSkpCisgICAgICBnb3RvIGVycjsKKyAgICBpZiAoKHJl dD0gKCpmaWxlKS0+ZmluYWxfYWRkX2luZGV4KGFkZF9pbmRleCwgdHJ1ZSkpKQogICAgICAgZ290 byBlcnI7CisgIH0KICAgREJVR19SRVRVUk4ocmV0KTsKIGVycjoKICAgaWYgKGZpbGUgPiBtX2Zp bGUpCkBAIC02Njk2LDYgKzY3MDMsNDIgQEAgZXJyOgogfQogCiAKKy8qKgorICAgU2Vjb25kIHBo YXNlIG9mIGluLXBsYWNlIGFkZCBpbmRleC4KKworICAgQG5vdGUgSWYgY29tbWl0IGlzIGZhbHNl LCBpbmRleCBjaGFuZ2VzIGFyZSByb2xsZWQgYmFjayBieSBkcm9wcGluZyB0aGUKKyAgICAgICAg IGFkZGVkIGluZGV4ZXMuIElmIGNvbW1pdCBpcyB0cnVlLCBub3RoaW5nIGlzIGRvbmUgYXMgdGhl IGluZGV4ZXMKKyAgICAgICAgIHdlcmUgYWxyZWFkeSBtYWRlIGFjdGl2ZSBpbiA6OmFkZF9pbmRl eCgpCisgKi8KKworaW50IGhhX3BhcnRpdGlvbjo6ZmluYWxfYWRkX2luZGV4KGhhbmRsZXJfYWRk X2luZGV4ICphZGQsIGJvb2wgY29tbWl0KQoreworICBEQlVHX0VOVEVSKCJoYV9wYXJ0aXRpb246 OmZpbmFsX2FkZF9pbmRleCIpOworICAvLyBSb2xsYmFjayBieSBkcm9wcGluZyBpbmRleGVzLgor ICBpZiAoIWNvbW1pdCkKKyAgeworICAgIFRBQkxFICp0YWJsZV9hcmc9IGFkZC0+dGFibGU7Cisg ICAgdWludCBudW1fb2Zfa2V5cz0gYWRkLT5udW1fb2Zfa2V5czsKKyAgICBoYW5kbGVyICoqZmls ZTsKKyAgICB1aW50ICprZXlfbnVtYmVycz0gKHVpbnQqKSBoYV90aGQoKS0+YWxsb2Moc2l6ZW9m KHVpbnQpICogbnVtX29mX2tleXMpOworICAgIHVpbnQgb2xkX251bV9vZl9rZXlzPSB0YWJsZV9h cmctPnMtPmtleXM7CisgICAgdWludCBpOworICAgIC8qIFRoZSBuZXdseSBjcmVhdGVkIGtleXMg aGF2ZSB0aGUgbGFzdCBpZCdzICovCisgICAgZm9yIChpPSAwOyBpIDwgbnVtX29mX2tleXM7IGkr KykKKyAgICAgIGtleV9udW1iZXJzW2ldPSBpICsgb2xkX251bV9vZl9rZXlzOworICAgIGlmICgh dGFibGVfYXJnLT5rZXlfaW5mbykKKyAgICAgIHRhYmxlX2FyZy0+a2V5X2luZm89IGFkZC0+a2V5 X2luZm87CisgICAgZm9yIChmaWxlPSBtX2ZpbGU7ICpmaWxlOyBmaWxlKyspCisgICAgeworICAg ICAgKHZvaWQpICgqZmlsZSktPnByZXBhcmVfZHJvcF9pbmRleCh0YWJsZV9hcmcsIGtleV9udW1i ZXJzLCBudW1fb2Zfa2V5cyk7CisgICAgICAodm9pZCkgKCpmaWxlKS0+ZmluYWxfZHJvcF9pbmRl eCh0YWJsZV9hcmcpOworICAgIH0KKyAgICBpZiAodGFibGVfYXJnLT5rZXlfaW5mbyA9PSBhZGQt PmtleV9pbmZvKQorICAgICAgdGFibGVfYXJnLT5rZXlfaW5mbz0gTlVMTDsKKyAgfQorICBEQlVH X1JFVFVSTigwKTsKK30KKwogaW50IGhhX3BhcnRpdGlvbjo6cHJlcGFyZV9kcm9wX2luZGV4KFRB QkxFICp0YWJsZV9hcmcsIHVpbnQgKmtleV9udW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50IG51bV9vZl9rZXlzKQogewoKPT09IG1vZGlmaWVkIGZpbGUgJ3NxbC9oYV9w YXJ0aXRpb24uaCcKLS0tIGEvc3FsL2hhX3BhcnRpdGlvbi5oCTIwMTEtMDQtMjAgMTc6NTM6MDgg KzAwMDAKKysrIGIvc3FsL2hhX3BhcnRpdGlvbi5oCTIwMTEtMDYtMDEgMDg6MDY6NTUgKzAwMDAK QEAgLTEwNTUsNyArMTA1NSw5IEBAIHB1YmxpYzoKICAgICBUaGV5IGFyZSB1c2VkIGZvciBvbi1s aW5lL2Zhc3QgYWx0ZXIgdGFibGUgYWRkL2Ryb3AgaW5kZXg6CiAgICAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogICAqLwotICB2aXJ0dWFsIGludCBhZGRfaW5kZXgoVEFCTEUgKnRhYmxlX2FyZywgS0VZICpr ZXlfaW5mbywgdWludCBudW1fb2Zfa2V5cyk7CisgIHZpcnR1YWwgaW50IGFkZF9pbmRleChUQUJM RSAqdGFibGVfYXJnLCBLRVkgKmtleV9pbmZvLCB1aW50IG51bV9vZl9rZXlzLAorICAgICAgICAg ICAgICAgICAgICAgICAgaGFuZGxlcl9hZGRfaW5kZXggKiphZGQpOworICB2aXJ0dWFsIGludCBm aW5hbF9hZGRfaW5kZXgoaGFuZGxlcl9hZGRfaW5kZXggKmFkZCwgYm9vbCBjb21taXQpOwogICB2 aXJ0dWFsIGludCBwcmVwYXJlX2Ryb3BfaW5kZXgoVEFCTEUgKnRhYmxlX2FyZywgdWludCAqa2V5 X251bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQgbnVtX29mX2tleXMp OwogICB2aXJ0dWFsIGludCBmaW5hbF9kcm9wX2luZGV4KFRBQkxFICp0YWJsZV9hcmcpOwoKPT09 IG1vZGlmaWVkIGZpbGUgJ3NxbC9oYW5kbGVyLmgnCi0tLSBhL3NxbC9oYW5kbGVyLmgJMjAxMS0w NS0wNSAyMzo1MDozMSArMDAwMAorKysgYi9zcWwvaGFuZGxlci5oCTIwMTEtMDYtMDEgMDg6MDY6 NTUgKzAwMDAKQEAgLTExNTksNiArMTE1OSwyNyBAQCB1aW50IGNhbGN1bGF0ZV9rZXlfbGVuKFRB QkxFICosIHVpbnQsIGNvCiAqLwogI2RlZmluZSBtYWtlX3ByZXZfa2V5cGFydF9tYXAoTikgKCgo a2V5X3BhcnRfbWFwKTEgPDwgKE4pKSAtIDEpCiAKKworLyoqCisgIEluZGV4IGNyZWF0aW9uIGNv bnRleHQuCisgIENyZWF0ZWQgYnkgaGFuZGxlcjo6YWRkX2luZGV4KCkgYW5kIGZyZWVkIGJ5IGhh bmRsZXI6OmZpbmFsX2FkZF9pbmRleCgpLgorKi8KKworY2xhc3MgaGFuZGxlcl9hZGRfaW5kZXgK K3sKK3B1YmxpYzoKKyAgLyogVGFibGUgd2hlcmUgdGhlIGluZGV4ZXMgYXJlIGFkZGVkICovCisg IFRBQkxFKiBjb25zdCB0YWJsZTsKKyAgLyogSW5kZXhlcyBiZWluZyBjcmVhdGVkICovCisgIEtF WSogY29uc3Qga2V5X2luZm87CisgIC8qIFNpemUgb2Yga2V5X2luZm9bXSAqLworICBjb25zdCB1 aW50IG51bV9vZl9rZXlzOworICBoYW5kbGVyX2FkZF9pbmRleChUQUJMRSAqdGFibGVfYXJnLCBL RVkgKmtleV9pbmZvX2FyZywgdWludCBudW1fb2Zfa2V5c19hcmcpCisgICAgOiB0YWJsZSAodGFi bGVfYXJnKSwga2V5X2luZm8gKGtleV9pbmZvX2FyZyksIG51bV9vZl9rZXlzIChudW1fb2Zfa2V5 c19hcmcpCisgIHt9CisgIHZpcnR1YWwgfmhhbmRsZXJfYWRkX2luZGV4KCkge30KK307CisKIC8q KgogICBUaGUgaGFuZGxlciBjbGFzcyBpcyB0aGUgaW50ZXJmYWNlIGZvciBkeW5hbWljYWxseSBs b2FkYWJsZQogICBzdG9yYWdlIGVuZ2luZXMuIERvIG5vdCBhZGQgaWZkZWZzIGFuZCB0YWtlIGNh cmUgd2hlbiBhZGRpbmcgb3IKQEAgLTE3MTcsOCArMTczOCwzNiBAQCBwdWJsaWM6CiAKICAgdmly dHVhbCB1bG9uZyBpbmRleF9mbGFncyh1aW50IGlkeCwgdWludCBwYXJ0LCBib29sIGFsbF9wYXJ0 cykgY29uc3QgPTA7CiAKLSAgdmlydHVhbCBpbnQgYWRkX2luZGV4KFRBQkxFICp0YWJsZV9hcmcs IEtFWSAqa2V5X2luZm8sIHVpbnQgbnVtX29mX2tleXMpCisvKioKKyAgIEZpcnN0IHBoYXNlIG9m IGluLXBsYWNlIGFkZCBpbmRleC4KKyAgIEhhbmRsZXJzIGFyZSBzdXBwb3NlZCB0byBjcmVhdGUg bmV3IGluZGV4ZXMgaGVyZSBidXQgbm90IG1ha2UgdGhlbQorICAgdmlzaWJsZS4KKworICAgQHBh cmFtIHRhYmxlX2FyZyAgIFRhYmxlIHRvIGFkZCBpbmRleCB0bworICAgQHBhcmFtIGtleV9pbmZv ICAgIEluZm9ybWF0aW9uIGFib3V0IG5ldyBpbmRleGVzCisgICBAcGFyYW0gbnVtX29mX2tleSAg TnVtYmVyIG9mIG5ldyBpbmRleGVzCisgICBAcGFyYW0gYWRkW291dF0gICAgQ29udGV4dCBvZiBo YW5kbGVyIHNwZWNpZmljIGluZm9ybWF0aW9uIG5lZWRlZAorICAgICAgICAgICAgICAgICAgICAg IGZvciBmaW5hbF9hZGRfaW5kZXgoKS4KKworICAgQG5vdGUgVGhpcyBmdW5jdGlvbiBjYW4gYmUg Y2FsbGVkIHdpdGggbGVzcyB0aGFuIGV4Y2x1c2l2ZSBtZXRhZGF0YQorICAgbG9jayBkZXBlbmRp bmcgb24gd2hpY2ggZmxhZ3MgYXJlIGxpc3RlZCBpbiBhbHRlcl90YWJsZV9mbGFncy4KKyovCisg IHZpcnR1YWwgaW50IGFkZF9pbmRleChUQUJMRSAqdGFibGVfYXJnLCBLRVkgKmtleV9pbmZvLCB1 aW50IG51bV9vZl9rZXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcl9hZGRfaW5k ZXggKiphZGQpCisgIHsgcmV0dXJuIChIQV9FUlJfV1JPTkdfQ09NTUFORCk7IH0KKworLyoqCisg ICBTZWNvbmQgYW5kIGxhc3QgcGhhc2Ugb2YgaW4tcGxhY2UgYWRkIGluZGV4LgorICAgQ29tbWl0 IG9yIHJvbGxiYWNrIHBlbmRpbmcgbmV3IGluZGV4ZXMuCisKKyAgIEBwYXJhbSBhZGQgICAgIENv bnRleHQgb2YgaGFuZGxlciBzcGVjaWZpYyBpbmZvcm1hdGlvbiBmcm9tIGFkZF9pbmRleCgpLgor ICAgQHBhcmFtIGNvbW1pdCAgSWYgdHJ1ZSwgY29tbWl0LiBJZiBmYWxzZSwgcm9sbGJhY2sgaW5k ZXggY2hhbmdlcy4KKworICAgQG5vdGUgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBleGNs dXNpdmUgbWV0YWRhdGEgbG9jay4KKyovCisgIHZpcnR1YWwgaW50IGZpbmFsX2FkZF9pbmRleCho YW5kbGVyX2FkZF9pbmRleCAqYWRkLCBib29sIGNvbW1pdCkKICAgeyByZXR1cm4gKEhBX0VSUl9X Uk9OR19DT01NQU5EKTsgfQorCiAgIHZpcnR1YWwgaW50IHByZXBhcmVfZHJvcF9pbmRleChUQUJM RSAqdGFibGVfYXJnLCB1aW50ICprZXlfbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludCBudW1fb2Zfa2V5cykKICAgeyByZXR1cm4gKEhBX0VSUl9XUk9OR19DT01NQU5E KTsgfQoKPT09IG1vZGlmaWVkIGZpbGUgJ3NxbC9zcWxfdGFibGUuY2MnCi0tLSBhL3NxbC9zcWxf dGFibGUuY2MJMjAxMS0wNS0yMSAwODoyMTowOCArMDAwMAorKysgYi9zcWwvc3FsX3RhYmxlLmNj CTIwMTEtMDYtMDEgMDg6MDY6NTUgKzAwMDAKQEAgLTU2ODAsNiArNTY4MCw4IEBAIGJvb2wgbXlz cWxfYWx0ZXJfdGFibGUoVEhEICp0aGQsY2hhciAqbmUKICAgdWludCBpbmRleF9kcm9wX2NvdW50 PSAwOwogICB1aW50ICppbmRleF9kcm9wX2J1ZmZlcj0gTlVMTDsKICAgdWludCBpbmRleF9hZGRf Y291bnQ9IDA7CisgIGhhbmRsZXJfYWRkX2luZGV4ICphZGQ9IE5VTEw7CisgIGJvb2wgcGVuZGlu Z19pbnBsYWNlX2FkZF9pbmRleD0gZmFsc2U7CiAgIHVpbnQgKmluZGV4X2FkZF9idWZmZXI9IE5V TEw7CiAgIHVpbnQgY2FuZGlkYXRlX2tleV9jb3VudD0gMDsKICAgYm9vbCBub19wazsKQEAgLTY0 MzQsNiArNjQzNiw5IEBAIGJvb2wgbXlzcWxfYWx0ZXJfdGFibGUoVEhEICp0aGQsY2hhciAqbmUK ICAgfQogICB0aGQtPmNvdW50X2N1dGVkX2ZpZWxkcz0gQ0hFQ0tfRklFTERfSUdOT1JFOwogCisg IGlmIChlcnJvcikKKyAgICBnb3RvIGVycl9uZXdfdGFibGVfY2xlYW51cDsKKwogICAvKiBJZiB3 ZSBkaWQgbm90IG5lZWQgdG8gY29weSwgd2UgbWlnaHQgc3RpbGwgbmVlZCB0byBhZGQvZHJvcCBp bmRleGVzLiAqLwogICBpZiAoISBuZXdfdGFibGUpCiAgIHsKQEAgLTY0NjUsNyArNjQ3MCw4IEBA IGJvb2wgbXlzcWxfYWx0ZXJfdGFibGUoVEhEICp0aGQsY2hhciAqbmUKICAgICAgICAgICBrZXlf cGFydC0+ZmllbGQ9IHRhYmxlLT5maWVsZFtrZXlfcGFydC0+ZmllbGRucl07CiAgICAgICB9CiAg ICAgICAvKiBBZGQgdGhlIGluZGV4ZXMuICovCi0gICAgICBpZiAoKGVycm9yPSB0YWJsZS0+Zmls ZS0+YWRkX2luZGV4KHRhYmxlLCBrZXlfaW5mbywgaW5kZXhfYWRkX2NvdW50KSkpCisgICAgICBp ZiAoKGVycm9yPSB0YWJsZS0+ZmlsZS0+YWRkX2luZGV4KHRhYmxlLCBrZXlfaW5mbywgaW5kZXhf YWRkX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRk KSkpCiAgICAgICB7CiAgICAgICAgIC8qCiAgICAgICAgICAgRXhjaGFuZ2UgdGhlIGtleV9pbmZv IGZvciB0aGUgZXJyb3IgbWVzc2FnZS4gSWYgd2UgZXhjaGFuZ2UKQEAgLTY0NzcsMTEgKzY0ODMs MjcgQEAgYm9vbCBteXNxbF9hbHRlcl90YWJsZShUSEQgKnRoZCxjaGFyICpuZQogICAgICAgICB0 YWJsZS0+a2V5X2luZm89IHNhdmVfa2V5X2luZm87CiAgICAgICAgIGdvdG8gZXJyX25ld190YWJs ZV9jbGVhbnVwOwogICAgICAgfQorICAgICAgcGVuZGluZ19pbnBsYWNlX2FkZF9pbmRleD0gdHJ1 ZTsKICAgICB9CiAgICAgLyplbmQgb2YgaWYgKGluZGV4X2FkZF9jb3VudCkqLwogCiAgICAgaWYg KGluZGV4X2Ryb3BfY291bnQpCiAgICAgeworICAgICAgLyogQ3VycmVudGx5IHdlIG11c3QgZmlu YWxpemUgYWRkIGluZGV4IGlmIHdlIGFsc28gZHJvcCBpbmRleGVzICovCisgICAgICBpZiAocGVu ZGluZ19pbnBsYWNlX2FkZF9pbmRleCkKKyAgICAgIHsKKyAgICAgICAgLyogQ29tbWl0dGluZyBp bmRleCBjaGFuZ2VzIG5lZWRzIGV4Y2x1c2l2ZSBtZXRhZGF0YSBsb2NrLiAqLworICAgICAgICBE QlVHX0FTU0VSVCh0aGQtPm1kbF9jb250ZXh0LmlzX2xvY2tfb3duZXIoTURMX2tleTo6VEFCTEUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJs ZV9saXN0LT5kYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRhYmxlX2xpc3QtPnRhYmxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBNRExfRVhDTFVTSVZFKSk7CisgICAgICAgIGlmICgo ZXJyb3I9IHRhYmxlLT5maWxlLT5maW5hbF9hZGRfaW5kZXgoYWRkLCB0cnVlKSkpCisgICAgICAg IHsKKyAgICAgICAgICB0YWJsZS0+ZmlsZS0+cHJpbnRfZXJyb3IoZXJyb3IsIE1ZRigwKSk7Cisg ICAgICAgICAgZ290byBlcnJfbmV3X3RhYmxlX2NsZWFudXA7CisgICAgICAgIH0KKyAgICAgICAg cGVuZGluZ19pbnBsYWNlX2FkZF9pbmRleD0gZmFsc2U7CisgICAgICB9CiAgICAgICAvKiBUaGUg cHJlcGFyZV9kcm9wX2luZGV4KCkgbWV0aG9kIHRha2VzIGFuIGFycmF5IG9mIGtleSBudW1iZXJz LiAqLwogICAgICAga2V5X251bWJlcnM9ICh1aW50KikgdGhkLT5hbGxvYyhzaXplb2YodWludCkg KiBpbmRleF9kcm9wX2NvdW50KTsKICAgICAgIGtleW5vX3A9IGtleV9udW1iZXJzOwpAQCAtNjUy MiwxMSArNjU0NCwxNCBAQCBib29sIG15c3FsX2FsdGVyX3RhYmxlKFRIRCAqdGhkLGNoYXIgKm5l CiAgIH0KICAgLyplbmQgb2YgaWYgKCEgbmV3X3RhYmxlKSBmb3IgYWRkL2Ryb3AgaW5kZXgqLwog Ci0gIGlmIChlcnJvcikKLSAgICBnb3RvIGVycl9uZXdfdGFibGVfY2xlYW51cDsKLQogICBpZiAo dGFibGUtPnMtPnRtcF90YWJsZSAhPSBOT19UTVBfVEFCTEUpCiAgIHsKKyAgICAvKgorICAgICAg SW4tcGxhY2Ugb3BlcmF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgdGVtcG9yYXJ5IHRhYmxl cywgc28KKyAgICAgIHdlIGRvbid0IGhhdmUgdG8gY2FsbCBmaW5hbF9hZGRfaW5kZXgoKSBpbiB0 aGlzIGNhc2UuIFRoZSBhc3NlcnQKKyAgICAgIHZlcmlmaWVzIHRoYXQgaW4tcGxhY2UgYWRkIGlu ZGV4IGhhcyBub3QgYmVlbiBkb25lLgorICAgICovCisgICAgREJVR19BU1NFUlQoIXBlbmRpbmdf aW5wbGFjZV9hZGRfaW5kZXgpOwogICAgIC8qIENsb3NlIGxvY2sgaWYgdGhpcyBpcyBhIHRyYW5z YWN0aW9uYWwgdGFibGUgKi8KICAgICBpZiAodGhkLT5sb2NrKQogICAgIHsKQEAgLTY1OTMsOCAr NjYxOCwzMCBAQCBib29sIG15c3FsX2FsdGVyX3RhYmxlKFRIRCAqdGhkLGNoYXIgKm5lCiAgICAg bXlfY2FzZWRuX3N0cihmaWxlc19jaGFyc2V0X2luZm8sIG9sZF9uYW1lKTsKIAogICBpZiAod2Fp dF93aGlsZV90YWJsZV9pc191c2VkKHRoZCwgdGFibGUsIEhBX0VYVFJBX1BSRVBBUkVfRk9SX1JF TkFNRSkpCisgIHsKKyAgICBpZiAocGVuZGluZ19pbnBsYWNlX2FkZF9pbmRleCkKKyAgICB7Cisg ICAgICBwZW5kaW5nX2lucGxhY2VfYWRkX2luZGV4PSBmYWxzZTsKKyAgICAgIHRhYmxlLT5maWxl LT5maW5hbF9hZGRfaW5kZXgoYWRkLCBmYWxzZSk7CisgICAgfQorICAgIC8vIE1hcmsgdGhpcyBU QUJMRSBpbnN0YW5jZSBhcyBzdGFsZSB0byBhdm9pZCBvdXQtb2Ytc3luYyBpbmRleCBpbmZvcm1h dGlvbi4KKyAgICB0YWJsZS0+bV9uZWVkc19yZW9wZW49IHRydWU7CiAgICAgZ290byBlcnJfbmV3 X3RhYmxlX2NsZWFudXA7Ci0KKyAgfQorICBpZiAocGVuZGluZ19pbnBsYWNlX2FkZF9pbmRleCkK KyAgeworICAgIHBlbmRpbmdfaW5wbGFjZV9hZGRfaW5kZXg9IGZhbHNlOworICAgIERCVUdfRVhF Q1VURV9JRigiYWx0ZXJfdGFibGVfcm9sbGJhY2tfbmV3X2luZGV4IiwgeworICAgICAgdGFibGUt PmZpbGUtPmZpbmFsX2FkZF9pbmRleChhZGQsIGZhbHNlKTsKKyAgICAgIG15X2Vycm9yKEVSX1VO S05PV05fRVJST1IsIE1ZRigwKSk7CisgICAgICBnb3RvIGVycl9uZXdfdGFibGVfY2xlYW51cDsK KyAgICB9KTsKKyAgICBpZiAoKGVycm9yPSB0YWJsZS0+ZmlsZS0+ZmluYWxfYWRkX2luZGV4KGFk ZCwgdHJ1ZSkpKQorICAgIHsKKyAgICAgIHRhYmxlLT5maWxlLT5wcmludF9lcnJvcihlcnJvciwg TVlGKDApKTsKKyAgICAgIGdvdG8gZXJyX25ld190YWJsZV9jbGVhbnVwOworICAgIH0KKyAgfQog CiAgIGNsb3NlX2FsbF90YWJsZXNfZm9yX25hbWUodGhkLCB0YWJsZS0+cywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuZXdfbmFtZSAhPSB0YWJsZV9uYW1lIHx8IG5ld19kYiAhPSBkYik7 Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9pbm5vYmFzZS9oYW5kbGVyL2hhX2lubm9kYi5j YycKLS0tIGEvc3RvcmFnZS9pbm5vYmFzZS9oYW5kbGVyL2hhX2lubm9kYi5jYwkyMDExLTA1LTMx IDA5OjEyOjMyICswMDAwCisrKyBiL3N0b3JhZ2UvaW5ub2Jhc2UvaGFuZGxlci9oYV9pbm5vZGIu Y2MJMjAxMS0wNi0wMSAwODowNjo1NSArMDAwMApAQCAtMjYyNyw4ICsyNjI3LDEwIEBAIGlubm9i YXNlX2FsdGVyX3RhYmxlX2ZsYWdzKAogCXVpbnQJZmxhZ3MpCiB7CiAJcmV0dXJuKEhBX0lOUExB Q0VfQUREX0lOREVYX05PX1JFQURfV1JJVEUKKwkJfCBIQV9JTlBMQUNFX0FERF9JTkRFWF9OT19X UklURQogCQl8IEhBX0lOUExBQ0VfRFJPUF9JTkRFWF9OT19SRUFEX1dSSVRFCiAJCXwgSEFfSU5Q TEFDRV9BRERfVU5JUVVFX0lOREVYX05PX1JFQURfV1JJVEUKKwkJfCBIQV9JTlBMQUNFX0FERF9V TklRVUVfSU5ERVhfTk9fV1JJVEUKIAkJfCBIQV9JTlBMQUNFX0RST1BfVU5JUVVFX0lOREVYX05P X1JFQURfV1JJVEUKIAkJfCBIQV9JTlBMQUNFX0FERF9QS19JTkRFWF9OT19SRUFEX1dSSVRFKTsK IH0KCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL2lubm9iYXNlL2hhbmRsZXIvaGFfaW5ub2Ri LmgnCi0tLSBhL3N0b3JhZ2UvaW5ub2Jhc2UvaGFuZGxlci9oYV9pbm5vZGIuaAkyMDExLTA0LTEx IDE0OjAzOjMyICswMDAwCisrKyBiL3N0b3JhZ2UvaW5ub2Jhc2UvaGFuZGxlci9oYV9pbm5vZGIu aAkyMDExLTA2LTAxIDA4OjA2OjU1ICswMDAwCkBAIC0yMTUsNyArMjE1LDkgQEAgY2xhc3MgaGFf aW5ub2Jhc2U6IHB1YmxpYyBoYW5kbGVyCiAJYm9vbCBwcmltYXJ5X2tleV9pc19jbHVzdGVyZWQo KTsKIAlpbnQgY21wX3JlZihjb25zdCB1Y2hhciAqcmVmMSwgY29uc3QgdWNoYXIgKnJlZjIpOwog CS8qKiBGYXN0IGluZGV4IGNyZWF0aW9uIChzbWFydCBBTFRFUiBUQUJMRSkgQHNlZSBoYW5kbGVy MGFsdGVyLmNjIEB7ICovCi0JaW50IGFkZF9pbmRleChUQUJMRSAqdGFibGVfYXJnLCBLRVkgKmtl eV9pbmZvLCB1aW50IG51bV9vZl9rZXlzKTsKKwlpbnQgYWRkX2luZGV4KFRBQkxFICp0YWJsZV9h cmcsIEtFWSAqa2V5X2luZm8sIHVpbnQgbnVtX29mX2tleXMsCisJCSAgICAgIGhhbmRsZXJfYWRk X2luZGV4ICoqYWRkKTsKKwlpbnQgZmluYWxfYWRkX2luZGV4KGhhbmRsZXJfYWRkX2luZGV4ICph ZGQsIGJvb2wgY29tbWl0KTsKIAlpbnQgcHJlcGFyZV9kcm9wX2luZGV4KFRBQkxFICp0YWJsZV9h cmcsIHVpbnQgKmtleV9udW0sCiAJCQkgICAgICAgdWludCBudW1fb2Zfa2V5cyk7CiAJaW50IGZp bmFsX2Ryb3BfaW5kZXgoVEFCTEUgKnRhYmxlX2FyZyk7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3Rv cmFnZS9pbm5vYmFzZS9oYW5kbGVyL2hhbmRsZXIwYWx0ZXIuY2MnCi0tLSBhL3N0b3JhZ2UvaW5u b2Jhc2UvaGFuZGxlci9oYW5kbGVyMGFsdGVyLmNjCTIwMTEtMDUtMzEgMDk6MTI6MzIgKzAwMDAK KysrIGIvc3RvcmFnZS9pbm5vYmFzZS9oYW5kbGVyL2hhbmRsZXIwYWx0ZXIuY2MJMjAxMS0wNi0w MSAwODowNjo1NSArMDAwMApAQCAtNjQwLDYgKzY0MCwxOCBAQCBpbm5vYmFzZV9jcmVhdGVfdGVt cG9yYXJ5X3RhYmxlbmFtZSgKIAlyZXR1cm4obmFtZSk7CiB9CiAKK2NsYXNzIGhhX2lubm9iYXNl X2FkZF9pbmRleCA6IHB1YmxpYyBoYW5kbGVyX2FkZF9pbmRleAoreworcHVibGljOgorCS8qKiB0 YWJsZSB3aGVyZSB0aGUgaW5kZXhlcyBhcmUgYmVpbmcgY3JlYXRlZCAqLworCWRpY3RfdGFibGVf dCogaW5kZXhlZF90YWJsZTsKKwloYV9pbm5vYmFzZV9hZGRfaW5kZXgoVEFCTEUqIHRhYmxlLCBL RVkqIGtleV9pbmZvLCB1aW50IG51bV9vZl9rZXlzLAorCQkJICAgICAgZGljdF90YWJsZV90KiBp bmRleGVkX3RhYmxlX2FyZykgOgorCQloYW5kbGVyX2FkZF9pbmRleCh0YWJsZSwga2V5X2luZm8s IG51bV9vZl9rZXlzKSwKKwkJaW5kZXhlZF90YWJsZSAoaW5kZXhlZF90YWJsZV9hcmcpIHt9CisJ fmhhX2lubm9iYXNlX2FkZF9pbmRleCgpIHt9Cit9OworCiAvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKIENyZWF0 ZSBpbmRleGVzLgogQHJldHVybgkwIG9yIGVycm9yIG51bWJlciAqLwpAQCAtNjQ3LDEyICs2NTks MTUgQEAgVU5JVl9JTlRFUk4KIGludAogaGFfaW5ub2Jhc2U6OmFkZF9pbmRleCgKIC8qPT09PT09 PT09PT09PT09PT09PSovCi0JVEFCTEUqCXRhYmxlLAkJLyohPCBpbjogVGFibGUgd2hlcmUgaW5k ZXhlcyBhcmUgY3JlYXRlZCAqLwotCUtFWSoJa2V5X2luZm8sCS8qITwgaW46IEluZGV4ZXMgdG8g YmUgY3JlYXRlZCAqLwotCXVpbnQJbnVtX29mX2tleXMpCS8qITwgaW46IE51bWJlciBvZiBpbmRl eGVzIHRvIGJlIGNyZWF0ZWQgKi8KKwlUQUJMRSoJCQl0YWJsZSwJCS8qITwgaW46IFRhYmxlIHdo ZXJlIGluZGV4ZXMKKwkJCQkJCWFyZSBjcmVhdGVkICovCisJS0VZKgkJCWtleV9pbmZvLAkvKiE8 IGluOiBJbmRleGVzCisJCQkJCQl0byBiZSBjcmVhdGVkICovCisJdWludAkJCW51bV9vZl9rZXlz LAkvKiE8IGluOiBOdW1iZXIgb2YgaW5kZXhlcworCQkJCQkJdG8gYmUgY3JlYXRlZCAqLworCWhh bmRsZXJfYWRkX2luZGV4KioJYWRkKQkJLyohPCBvdXQ6IGNvbnRleHQgKi8KIHsKIAlkaWN0X2lu ZGV4X3QqKglpbmRleDsJCS8qITwgSW5kZXggdG8gYmUgY3JlYXRlZCAqLwotCWRpY3RfdGFibGVf dCoJaW5ub2RiX3RhYmxlOwkvKiE8IElubm9EQiB0YWJsZSBpbiBkaWN0aW9uYXJ5ICovCiAJZGlj dF90YWJsZV90KglpbmRleGVkX3RhYmxlOwkvKiE8IFRhYmxlIHdoZXJlIGluZGV4ZXMgYXJlIGNy ZWF0ZWQgKi8KIAltZXJnZV9pbmRleF9kZWZfdCogaW5kZXhfZGVmczsJLyohPCBJbmRleCBkZWZp bml0aW9ucyAqLwogCW1lbV9oZWFwX3QqICAgICBoZWFwOwkJLyohPCBIZWFwIGZvciBpbmRleCBk ZWZpbml0aW9ucyAqLwpAQCAtNjY4LDYgKzY4Myw4IEBAIGhhX2lubm9iYXNlOjphZGRfaW5kZXgo CiAJdXRfYShrZXlfaW5mbyk7CiAJdXRfYShudW1fb2Zfa2V5cyk7CiAKKwkqYWRkID0gTlVMTDsK KwogCWlmIChzcnZfY3JlYXRlZF9uZXdfcmF3IHx8IHNydl9mb3JjZV9yZWNvdmVyeSkgewogCQlE QlVHX1JFVFVSTihIQV9FUlJfV1JPTkdfQ09NTUFORCk7CiAJfQpAQCAtNjgzLDE1ICs3MDAsMTYg QEAgaGFfaW5ub2Jhc2U6OmFkZF9pbmRleCgKIAkJREJVR19SRVRVUk4oLTEpOwogCX0KIAotCWlu bm9kYl90YWJsZSA9IGluZGV4ZWRfdGFibGUKLQkJPSBkaWN0X3RhYmxlX2dldChwcmVidWlsdC0+ dGFibGUtPm5hbWUsIEZBTFNFKTsKKwlpbmRleGVkX3RhYmxlID0gZGljdF90YWJsZV9nZXQocHJl YnVpbHQtPnRhYmxlLT5uYW1lLCBGQUxTRSk7CiAKLQlpZiAoVU5JVl9VTkxJS0VMWSghaW5ub2Ri X3RhYmxlKSkgeworCWlmIChVTklWX1VOTElLRUxZKCFpbmRleGVkX3RhYmxlKSkgewogCQlEQlVH X1JFVFVSTihIQV9FUlJfTk9fU1VDSF9UQUJMRSk7CiAJfQogCisJdXRfYShpbmRleGVkX3RhYmxl ID09IHByZWJ1aWx0LT50YWJsZSk7CisKIAkvKiBDaGVjayB0aGF0IGluZGV4IGtleXMgYXJlIHNl bnNpYmxlICovCi0JZXJyb3IgPSBpbm5vYmFzZV9jaGVja19pbmRleF9rZXlzKGtleV9pbmZvLCBu dW1fb2Zfa2V5cywgaW5ub2RiX3RhYmxlKTsKKwllcnJvciA9IGlubm9iYXNlX2NoZWNrX2luZGV4 X2tleXMoa2V5X2luZm8sIG51bV9vZl9rZXlzLCBwcmVidWlsdC0+dGFibGUpOwogCiAJaWYgKFVO SVZfVU5MSUtFTFkoZXJyb3IpKSB7CiAJCURCVUdfUkVUVVJOKGVycm9yKTsKQEAgLTcwMCw3ICs3 MTgsNyBAQCBoYV9pbm5vYmFzZTo6YWRkX2luZGV4KAogCS8qIENoZWNrIGVhY2ggaW5kZXgncyBj b2x1bW4gbGVuZ3RoIHRvIG1ha2Ugc3VyZSB0aGV5IGRvIG5vdAogCWV4Y2VlZCBsaW1pdCAqLwog CWZvciAodWxpbnQgaSA9IDA7IGkgPCBudW1fb2Zfa2V5czsgaSsrKSB7Ci0JCWVycm9yID0gaW5u b2Jhc2VfY2hlY2tfY29sdW1uX2xlbmd0aChpbm5vZGJfdGFibGUsCisJCWVycm9yID0gaW5ub2Jh c2VfY2hlY2tfY29sdW1uX2xlbmd0aChwcmVidWlsdC0+dGFibGUsCiAJCQkJCQkgICAgICZrZXlf aW5mb1tpXSk7CiAKIAkJaWYgKGVycm9yKSB7CkBAIC03MjMsNyArNzQxLDcgQEAgaGFfaW5ub2Jh c2U6OmFkZF9pbmRleCgKIAludW1fb2ZfaWR4ID0gbnVtX29mX2tleXM7CiAKIAlpbmRleF9kZWZz ID0gaW5ub2Jhc2VfY3JlYXRlX2tleV9kZWYoCi0JCXRyeCwgaW5ub2RiX3RhYmxlLCBoZWFwLCBr ZXlfaW5mbywgbnVtX29mX2lkeCk7CisJCXRyeCwgcHJlYnVpbHQtPnRhYmxlLCBoZWFwLCBrZXlf aW5mbywgbnVtX29mX2lkeCk7CiAKIAluZXdfcHJpbWFyeSA9IERJQ1RfQ0xVU1RFUkVEICYgaW5k ZXhfZGVmc1swXS5pbmRfdHlwZTsKIApAQCAtNzM3LDcgKzc1NSw3IEBAIGhhX2lubm9iYXNlOjph ZGRfaW5kZXgoCiAJdHJ4X3NldF9kaWN0X29wZXJhdGlvbih0cngsIFRSWF9ESUNUX09QX0lOREVY KTsKIAogCS8qIEFjcXVpcmUgYSBsb2NrIG9uIHRoZSB0YWJsZSBiZWZvcmUgY3JlYXRpbmcgYW55 IGluZGV4ZXMuICovCi0JZXJyb3IgPSByb3dfbWVyZ2VfbG9ja190YWJsZShwcmVidWlsdC0+dHJ4 LCBpbm5vZGJfdGFibGUsCisJZXJyb3IgPSByb3dfbWVyZ2VfbG9ja190YWJsZShwcmVidWlsdC0+ dHJ4LCBwcmVidWlsdC0+dGFibGUsCiAJCQkJICAgICBuZXdfcHJpbWFyeSA/IExPQ0tfWCA6IExP Q0tfUyk7CiAKIAlpZiAoVU5JVl9VTkxJS0VMWShlcnJvciAhPSBEQl9TVUNDRVNTKSkgewpAQCAt NzUxLDcgKzc2OSw3IEBAIGhhX2lubm9iYXNlOjphZGRfaW5kZXgoCiAJcm93X215c3FsX2xvY2tf ZGF0YV9kaWN0aW9uYXJ5KHRyeCk7CiAJZGljdF9sb2NrZWQgPSBUUlVFOwogCi0JdXRfZChkaWN0 X3RhYmxlX2NoZWNrX2Zvcl9kdXBfaW5kZXhlcyhpbm5vZGJfdGFibGUsIEZBTFNFKSk7CisJdXRf ZChkaWN0X3RhYmxlX2NoZWNrX2Zvcl9kdXBfaW5kZXhlcyhwcmVidWlsdC0+dGFibGUsIEZBTFNF KSk7CiAKIAkvKiBJZiBhIG5ldyBwcmltYXJ5IGtleSBpcyBkZWZpbmVkIGZvciB0aGUgdGFibGUg d2UgbmVlZAogCXRvIGRyb3AgdGhlIG9yaWdpbmFsIHRhYmxlIGFuZCByZWJ1aWxkIGFsbCBpbmRl eGVzLiAqLwpAQCAtNzU5LDE1ICs3NzcsMTUgQEAgaGFfaW5ub2Jhc2U6OmFkZF9pbmRleCgKIAlp ZiAoVU5JVl9VTkxJS0VMWShuZXdfcHJpbWFyeSkpIHsKIAkJLyogVGhpcyB0cmFuc2FjdGlvbiBz aG91bGQgYmUgdGhlIG9ubHkgb25lCiAJCW9wZXJhdGluZyBvbiB0aGUgdGFibGUuICovCi0JCXV0 X2EoaW5ub2RiX3RhYmxlLT5uX215c3FsX2hhbmRsZXNfb3BlbmVkID09IDEpOworCQl1dF9hKHBy ZWJ1aWx0LT50YWJsZS0+bl9teXNxbF9oYW5kbGVzX29wZW5lZCA9PSAxKTsKIAogCQljaGFyKglu ZXdfdGFibGVfbmFtZSA9IGlubm9iYXNlX2NyZWF0ZV90ZW1wb3JhcnlfdGFibGVuYW1lKAotCQkJ aGVhcCwgJzEnLCBpbm5vZGJfdGFibGUtPm5hbWUpOworCQkJaGVhcCwgJzEnLCBwcmVidWlsdC0+ dGFibGUtPm5hbWUpOwogCiAJCS8qIENsb25lIHRoZSB0YWJsZS4gKi8KIAkJdHJ4X3NldF9kaWN0 X29wZXJhdGlvbih0cngsIFRSWF9ESUNUX09QX1RBQkxFKTsKIAkJaW5kZXhlZF90YWJsZSA9IHJv d19tZXJnZV9jcmVhdGVfdGVtcG9yYXJ5X3RhYmxlKAotCQkJbmV3X3RhYmxlX25hbWUsIGluZGV4 X2RlZnMsIGlubm9kYl90YWJsZSwgdHJ4KTsKKwkJCW5ld190YWJsZV9uYW1lLCBpbmRleF9kZWZz LCBwcmVidWlsdC0+dGFibGUsIHRyeCk7CiAKIAkJaWYgKCFpbmRleGVkX3RhYmxlKSB7CiAKQEAg LTc4MSwxMSArNzk5LDEyIEBAIGhhX2lubm9iYXNlOjphZGRfaW5kZXgoCiAJCQkJYnJlYWs7CiAJ CQlkZWZhdWx0OgogCQkJCWVycm9yID0gY29udmVydF9lcnJvcl9jb2RlX3RvX215c3FsKAotCQkJ CQl0cngtPmVycm9yX3N0YXRlLCBpbm5vZGJfdGFibGUtPmZsYWdzLAorCQkJCQl0cngtPmVycm9y X3N0YXRlLAorCQkJCQlwcmVidWlsdC0+dGFibGUtPmZsYWdzLAogCQkJCQl1c2VyX3RoZCk7CiAJ CQl9CiAKLQkJCXV0X2QoZGljdF90YWJsZV9jaGVja19mb3JfZHVwX2luZGV4ZXMoaW5ub2RiX3Rh YmxlLAorCQkJdXRfZChkaWN0X3RhYmxlX2NoZWNrX2Zvcl9kdXBfaW5kZXhlcyhwcmVidWlsdC0+ dGFibGUsCiAJCQkJCQkJICAgICAgRkFMU0UpKTsKIAkJCW1lbV9oZWFwX2ZyZWUoaGVhcCk7CiAJ CQl0cnhfZ2VuZXJhbF9yb2xsYmFja19mb3JfbXlzcWwodHJ4LCBOVUxMKTsKQEAgLTgwMCwxNyAr ODE5LDE1IEBAIGhhX2lubm9iYXNlOjphZGRfaW5kZXgoCiAKIAkvKiBDcmVhdGUgdGhlIGluZGV4 ZXMgaW4gU1lTX0lOREVYRVMgYW5kIGxvYWQgaW50byBkaWN0aW9uYXJ5LiAqLwogCi0JZm9yICh1 bGludCBpID0gMDsgaSA8IG51bV9vZl9pZHg7IGkrKykgeworCWZvciAobnVtX2NyZWF0ZWQgPSAw OyBudW1fY3JlYXRlZCA8IG51bV9vZl9pZHg7IG51bV9jcmVhdGVkKyspIHsKIAotCQlpbmRleFtp XSA9IHJvd19tZXJnZV9jcmVhdGVfaW5kZXgodHJ4LCBpbmRleGVkX3RhYmxlLAotCQkJCQkJICAm aW5kZXhfZGVmc1tpXSk7CisJCWluZGV4W251bV9jcmVhdGVkXSA9IHJvd19tZXJnZV9jcmVhdGVf aW5kZXgoCisJCQl0cngsIGluZGV4ZWRfdGFibGUsICZpbmRleF9kZWZzW251bV9jcmVhdGVkXSk7 CiAKLQkJaWYgKCFpbmRleFtpXSkgeworCQlpZiAoIWluZGV4W251bV9jcmVhdGVkXSkgewogCQkJ ZXJyb3IgPSB0cngtPmVycm9yX3N0YXRlOwogCQkJZ290byBlcnJvcl9oYW5kbGluZzsKIAkJfQot Ci0JCW51bV9jcmVhdGVkKys7CiAJfQogCiAJdXRfYWQoZXJyb3IgPT0gREJfU1VDQ0VTUyk7CkBA IC04MzIsNyArODQ5LDcgQEAgaGFfaW5ub2Jhc2U6OmFkZF9pbmRleCgKIAlpZiAoVU5JVl9VTkxJ S0VMWShuZXdfcHJpbWFyeSkpIHsKIAkJLyogQSBwcmltYXJ5IGtleSBpcyB0byBiZSBidWlsdC4g IEFjcXVpcmUgYW4gZXhjbHVzaXZlCiAJCXRhYmxlIGxvY2sgYWxzbyBvbiB0aGUgdGFibGUgdGhh dCBpcyBiZWluZyBjcmVhdGVkLiAqLwotCQl1dF9hZChpbmRleGVkX3RhYmxlICE9IGlubm9kYl90 YWJsZSk7CisJCXV0X2FkKGluZGV4ZWRfdGFibGUgIT0gcHJlYnVpbHQtPnRhYmxlKTsKIAogCQll cnJvciA9IHJvd19tZXJnZV9sb2NrX3RhYmxlKHByZWJ1aWx0LT50cngsIGluZGV4ZWRfdGFibGUs CiAJCQkJCSAgICAgTE9DS19YKTsKQEAgLTg0Niw3ICs4NjMsNyBAQCBoYV9pbm5vYmFzZTo6YWRk X2luZGV4KAogCS8qIFJlYWQgdGhlIGNsdXN0ZXJlZCBpbmRleCBvZiB0aGUgdGFibGUgYW5kIGJ1 aWxkIGluZGV4ZXMKIAliYXNlZCBvbiB0aGlzIGluZm9ybWF0aW9uIHVzaW5nIHRlbXBvcmFyeSBm aWxlcyBhbmQgbWVyZ2Ugc29ydC4gKi8KIAllcnJvciA9IHJvd19tZXJnZV9idWlsZF9pbmRleGVz KHByZWJ1aWx0LT50cngsCi0JCQkJCWlubm9kYl90YWJsZSwgaW5kZXhlZF90YWJsZSwKKwkJCQkJ cHJlYnVpbHQtPnRhYmxlLCBpbmRleGVkX3RhYmxlLAogCQkJCQlpbmRleCwgbnVtX29mX2lkeCwg dGFibGUpOwogCiBlcnJvcl9oYW5kbGluZzoKQEAgLTg1NCw2MyArODcxLDE1IEBAIGVycm9yX2hh bmRsaW5nOgogCWRpY3Rpb25hcnkgd2hpY2ggd2VyZSBkZWZpbmVkLiAqLwogCiAJc3dpdGNoIChl cnJvcikgewotCQljb25zdCBjaGFyKglvbGRfbmFtZTsKLQkJY2hhcioJCXRtcF9uYW1lOwogCWNh c2UgREJfU1VDQ0VTUzoKIAkJdXRfYSghZGljdF9sb2NrZWQpOwotCQlyb3dfbXlzcWxfbG9ja19k YXRhX2RpY3Rpb25hcnkodHJ4KTsKLQkJZGljdF9sb2NrZWQgPSBUUlVFOwogCisJCXV0X2QobXV0 ZXhfZW50ZXIoJmRpY3Rfc3lzLT5tdXRleCkpOwogCQl1dF9kKGRpY3RfdGFibGVfY2hlY2tfZm9y X2R1cF9pbmRleGVzKHByZWJ1aWx0LT50YWJsZSwgVFJVRSkpOwotCi0JCWlmICghbmV3X3ByaW1h cnkpIHsKLQkJCWVycm9yID0gcm93X21lcmdlX3JlbmFtZV9pbmRleGVzKHRyeCwgaW5kZXhlZF90 YWJsZSk7Ci0KLQkJCWlmIChlcnJvciAhPSBEQl9TVUNDRVNTKSB7Ci0JCQkJcm93X21lcmdlX2Ry b3BfaW5kZXhlcyh0cngsIGluZGV4ZWRfdGFibGUsCi0JCQkJCQkgICAgICAgaW5kZXgsIG51bV9j cmVhdGVkKTsKLQkJCX0KLQotCQkJZ290byBjb252ZXJ0X2Vycm9yOwotCQl9Ci0KLQkJLyogSWYg YSBuZXcgcHJpbWFyeSBrZXkgd2FzIGRlZmluZWQgZm9yIHRoZSB0YWJsZSBhbmQKLQkJdGhlcmUg d2FzIG5vIGVycm9yIGF0IHRoaXMgcG9pbnQsIHdlIGNhbiBub3cgcmVuYW1lCi0JCXRoZSBvbGQg dGFibGUgYXMgYSB0ZW1wb3JhcnkgdGFibGUsIHJlbmFtZSB0aGUgbmV3Ci0JCXRlbXBvcmFyeSB0 YWJsZSBhcyB0aGUgb2xkIHRhYmxlIGFuZCBkcm9wIHRoZSBvbGQgdGFibGUuICovCi0JCW9sZF9u YW1lID0gaW5ub2RiX3RhYmxlLT5uYW1lOwotCQl0bXBfbmFtZSA9IGlubm9iYXNlX2NyZWF0ZV90 ZW1wb3JhcnlfdGFibGVuYW1lKGhlYXAsICcyJywKLQkJCQkJCQkgICAgICAgb2xkX25hbWUpOwot Ci0JCWVycm9yID0gcm93X21lcmdlX3JlbmFtZV90YWJsZXMoaW5ub2RiX3RhYmxlLCBpbmRleGVk X3RhYmxlLAotCQkJCQkJdG1wX25hbWUsIHRyeCk7Ci0KLQkJaWYgKGVycm9yICE9IERCX1NVQ0NF U1MpIHsKLQotCQkJcm93X21lcmdlX2Ryb3BfdGFibGUodHJ4LCBpbmRleGVkX3RhYmxlKTsKLQot CQkJc3dpdGNoIChlcnJvcikgewotCQkJY2FzZSBEQl9UQUJMRVNQQUNFX0FMUkVBRFlfRVhJU1RT OgotCQkJY2FzZSBEQl9EVVBMSUNBVEVfS0VZOgotCQkJCWlubm9iYXNlX2NvbnZlcnRfdGFibGVu YW1lKHRtcF9uYW1lKTsKLQkJCQlteV9lcnJvcihIQV9FUlJfVEFCTEVfRVhJU1QsIE1ZRigwKSwg dG1wX25hbWUpOwotCQkJCWVycm9yID0gSEFfRVJSX1RBQkxFX0VYSVNUOwotCQkJCWJyZWFrOwot CQkJZGVmYXVsdDoKLQkJCQlnb3RvIGNvbnZlcnRfZXJyb3I7Ci0JCQl9Ci0JCQlicmVhazsKLQkJ fQotCi0JCXRyeF9jb21taXRfZm9yX215c3FsKHByZWJ1aWx0LT50cngpOwotCQlyb3dfcHJlYnVp bHRfZnJlZShwcmVidWlsdCwgVFJVRSk7Ci0JCXByZWJ1aWx0ID0gcm93X2NyZWF0ZV9wcmVidWls dChpbmRleGVkX3RhYmxlKTsKLQotCQlpbmRleGVkX3RhYmxlLT5uX215c3FsX2hhbmRsZXNfb3Bl bmVkKys7Ci0KLQkJZXJyb3IgPSByb3dfbWVyZ2VfZHJvcF90YWJsZSh0cngsIGlubm9kYl90YWJs ZSk7Ci0JCWlubm9kYl90YWJsZSA9IGluZGV4ZWRfdGFibGU7Ci0JCWdvdG8gY29udmVydF9lcnJv cjsKKwkJdXRfZChtdXRleF9leGl0KCZkaWN0X3N5cy0+bXV0ZXgpKTsKKyAgICAgICAgICAgICAg ICAqYWRkID0gbmV3IGhhX2lubm9iYXNlX2FkZF9pbmRleCh0YWJsZSwga2V5X2luZm8sIG51bV9v Zl9rZXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGluZGV4ZWRfdGFibGUpOworCQlicmVhazsKIAogCWNhc2UgREJfVE9PX0JJR19SRUNPUkQ6CiAJ CW15X2Vycm9yKEhBX0VSUl9UT19CSUdfUk9XLCBNWUYoMCkpOwpAQCAtOTI2LDcgKzg5NSw3IEBA IGVycm9yOgogCQl0cngtPmVycm9yX3N0YXRlID0gREJfU1VDQ0VTUzsKIAogCQlpZiAobmV3X3By aW1hcnkpIHsKLQkJCWlmIChpbmRleGVkX3RhYmxlICE9IGlubm9kYl90YWJsZSkgeworCQkJaWYg KGluZGV4ZWRfdGFibGUgIT0gcHJlYnVpbHQtPnRhYmxlKSB7CiAJCQkJcm93X21lcmdlX2Ryb3Bf dGFibGUodHJ4LCBpbmRleGVkX3RhYmxlKTsKIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTkzOCwzOCAr OTA3LDE2MSBAQCBlcnJvcjoKIAkJCXJvd19tZXJnZV9kcm9wX2luZGV4ZXModHJ4LCBpbmRleGVk X3RhYmxlLAogCQkJCQkgICAgICAgaW5kZXgsIG51bV9jcmVhdGVkKTsKIAkJfQotCi1jb252ZXJ0 X2Vycm9yOgotCQlpZiAoZXJyb3IgPT0gREJfU1VDQ0VTUykgewotCQkJLyogQnVpbGQgaW5kZXgg aXMgc3VjY2Vzc2Z1bC4gV2Ugd2lsbCBuZWVkIHRvCi0JCQlyZWJ1aWxkIGluZGV4IHRyYW5zbGF0 aW9uIHRhYmxlLiAgUmVzZXQgdGhlCi0JCQlpbmRleCBlbnRyeSBjb3VudCBpbiB0aGUgdHJhbnNs YXRpb24gdGFibGUKLQkJCXRvIHplcm8sIHNvIHRoYXQgdHJhbnNsYXRpb24gdGFibGUgd2lsbCBi ZSByZWJ1aWx0ICovCi0JCQlzaGFyZS0+aWR4X3RyYW5zX3RibC5pbmRleF9jb3VudCA9IDA7Ci0J CX0KLQotCQllcnJvciA9IGNvbnZlcnRfZXJyb3JfY29kZV90b19teXNxbChlcnJvciwKLQkJCQkJ CSAgICBpbm5vZGJfdGFibGUtPmZsYWdzLAotCQkJCQkJICAgIHVzZXJfdGhkKTsKIAl9CiAKLQlt ZW1faGVhcF9mcmVlKGhlYXApOwogCXRyeF9jb21taXRfZm9yX215c3FsKHRyeCk7CiAJaWYgKHBy ZWJ1aWx0LT50cngpIHsKIAkJdHJ4X2NvbW1pdF9mb3JfbXlzcWwocHJlYnVpbHQtPnRyeCk7CiAJ fQogCiAJaWYgKGRpY3RfbG9ja2VkKSB7Ci0JCXV0X2QoZGljdF90YWJsZV9jaGVja19mb3JfZHVw X2luZGV4ZXMoaW5ub2RiX3RhYmxlLCBGQUxTRSkpOwogCQlyb3dfbXlzcWxfdW5sb2NrX2RhdGFf ZGljdGlvbmFyeSh0cngpOwogCX0KIAogCXRyeF9mcmVlX2Zvcl9teXNxbCh0cngpOworCW1lbV9o ZWFwX2ZyZWUoaGVhcCk7CisKKwkvKiBUaGVyZSBtaWdodCBiZSB3b3JrIGZvciB1dGlsaXR5IHRo cmVhZHMuKi8KKwlzcnZfYWN0aXZlX3dha2VfbWFzdGVyX3RocmVhZCgpOworCisJREJVR19SRVRV Uk4oY29udmVydF9lcnJvcl9jb2RlX3RvX215c3FsKGVycm9yLCBwcmVidWlsdC0+dGFibGUtPmZs YWdzLAorCQkJCQkJdXNlcl90aGQpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCitGaW5hbGl6ZSBv ciB1bmRvIGFkZF9pbmRleCgpLgorQHJldHVybgkwIG9yIGVycm9yIG51bWJlciAqLworVU5JVl9J TlRFUk4KK2ludAoraGFfaW5ub2Jhc2U6OmZpbmFsX2FkZF9pbmRleCgKKy8qPT09PT09PT09PT09 PT09PT09PT09PT09PSovCisJaGFuZGxlcl9hZGRfaW5kZXgqCWFkZF9hcmcsLyohPCBpbjogY29u dGV4dCBmcm9tIGFkZF9pbmRleCgpICovCisJYm9vbAkJCWNvbW1pdCkJLyohPCBpbjogdHJ1ZT1j b21taXQsIGZhbHNlPXJvbGxiYWNrICovCit7CisJaGFfaW5ub2Jhc2VfYWRkX2luZGV4KglhZGQ7 CisJdHJ4X3QqCQkJdHJ4OworCWludAkJCWVycgk9IDA7CisKKwlEQlVHX0VOVEVSKCJoYV9pbm5v YmFzZTo6ZmluYWxfYWRkX2luZGV4Iik7CisKKwl1dF9hZChhZGRfYXJnKTsKKwlhZGQgPSBzdGF0 aWNfY2FzdDxjbGFzcyBoYV9pbm5vYmFzZV9hZGRfaW5kZXgqPihhZGRfYXJnKTsKKworCS8qIENy ZWF0ZSBhIGJhY2tncm91bmQgdHJhbnNhY3Rpb24gZm9yIHRoZSBvcGVyYXRpb25zIG9uCisJdGhl IGRhdGEgZGljdGlvbmFyeSB0YWJsZXMuICovCisJdHJ4ID0gaW5ub2Jhc2VfdHJ4X2FsbG9jYXRl KHVzZXJfdGhkKTsKKwl0cnhfc3RhcnRfaWZfbm90X3N0YXJ0ZWQodHJ4KTsKKworCS8qIEZsYWcg dGhpcyB0cmFuc2FjdGlvbiBhcyBhIGRpY3Rpb25hcnkgb3BlcmF0aW9uLCBzbyB0aGF0CisJdGhl IGRhdGEgZGljdGlvbmFyeSB3aWxsIGJlIGxvY2tlZCBpbiBjcmFzaCByZWNvdmVyeS4gKi8KKwl0 cnhfc2V0X2RpY3Rfb3BlcmF0aW9uKHRyeCwgVFJYX0RJQ1RfT1BfSU5ERVgpOworCisJLyogTGF0 Y2ggdGhlIElubm9EQiBkYXRhIGRpY3Rpb25hcnkgZXhjbHVzaXZlbHkgc28gdGhhdCBubyBkZWFk bG9ja3MKKwlvciBsb2NrIHdhaXRzIGNhbiBoYXBwZW4gaW4gaXQgZHVyaW5nIGFuIGluZGV4IGNy ZWF0ZSBvcGVyYXRpb24uICovCisJcm93X215c3FsX2xvY2tfZGF0YV9kaWN0aW9uYXJ5KHRyeCk7 CisKKwlpZiAoYWRkLT5pbmRleGVkX3RhYmxlICE9IHByZWJ1aWx0LT50YWJsZSkgeworCQl1bGlu dAllcnJvcjsKKworCQkvKiBXZSBjb3BpZWQgdGhlIHRhYmxlIChuZXdfcHJpbWFyeSkuICovCisJ CWlmIChjb21taXQpIHsKKwkJCW1lbV9oZWFwX3QqCWhlYXA7CisJCQljaGFyKgkJdG1wX25hbWU7 CisKKwkJCWhlYXAgPSBtZW1faGVhcF9jcmVhdGUoMTAyNCk7CisKKwkJCS8qIEEgbmV3IHByaW1h cnkga2V5IHdhcyBkZWZpbmVkIGZvciB0aGUgdGFibGUKKwkJCWFuZCB0aGVyZSB3YXMgbm8gZXJy b3IgYXQgdGhpcyBwb2ludC4gV2UgY2FuCisJCQlub3cgcmVuYW1lIHRoZSBvbGQgdGFibGUgYXMg YSB0ZW1wb3JhcnkgdGFibGUsCisJCQlyZW5hbWUgdGhlIG5ldyB0ZW1wb3JhcnkgdGFibGUgYXMg dGhlIG9sZAorCQkJdGFibGUgYW5kIGRyb3AgdGhlIG9sZCB0YWJsZS4gKi8KKwkJCXRtcF9uYW1l ID0gaW5ub2Jhc2VfY3JlYXRlX3RlbXBvcmFyeV90YWJsZW5hbWUoCisJCQkJaGVhcCwgJzInLCBw cmVidWlsdC0+dGFibGUtPm5hbWUpOworCisJCQllcnJvciA9IHJvd19tZXJnZV9yZW5hbWVfdGFi bGVzKAorCQkJCXByZWJ1aWx0LT50YWJsZSwgYWRkLT5pbmRleGVkX3RhYmxlLAorCQkJCXRtcF9u YW1lLCB0cngpOworCisJCQlzd2l0Y2ggKGVycm9yKSB7CisJCQljYXNlIERCX1RBQkxFU1BBQ0Vf QUxSRUFEWV9FWElTVFM6CisJCQljYXNlIERCX0RVUExJQ0FURV9LRVk6CisJCQkJaW5ub2Jhc2Vf Y29udmVydF90YWJsZW5hbWUodG1wX25hbWUpOworCQkJCW15X2Vycm9yKEhBX0VSUl9UQUJMRV9F WElTVCwgTVlGKDApLCB0bXBfbmFtZSk7CisJCQkJZXJyID0gSEFfRVJSX1RBQkxFX0VYSVNUOwor CQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllcnIgPSBjb252ZXJ0X2Vycm9yX2NvZGVfdG9f bXlzcWwoCisJCQkJCWVycm9yLCBwcmVidWlsdC0+dGFibGUtPmZsYWdzLAorCQkJCQl1c2VyX3Ro ZCk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCW1lbV9oZWFwX2ZyZWUoaGVhcCk7CisJCX0KKwor CQlpZiAoIWNvbW1pdCB8fCBlcnIpIHsKKwkJCWVycm9yID0gcm93X21lcmdlX2Ryb3BfdGFibGUo dHJ4LCBhZGQtPmluZGV4ZWRfdGFibGUpOworCQkJdHJ4X2NvbW1pdF9mb3JfbXlzcWwocHJlYnVp bHQtPnRyeCk7CisJCX0gZWxzZSB7CisJCQlkaWN0X3RhYmxlX3QqCW9sZF90YWJsZSA9IHByZWJ1 aWx0LT50YWJsZTsKKwkJCXRyeF9jb21taXRfZm9yX215c3FsKHByZWJ1aWx0LT50cngpOworCQkJ cm93X3ByZWJ1aWx0X2ZyZWUocHJlYnVpbHQsIFRSVUUpOworCQkJZXJyb3IgPSByb3dfbWVyZ2Vf ZHJvcF90YWJsZSh0cngsIG9sZF90YWJsZSk7CisJCQlhZGQtPmluZGV4ZWRfdGFibGUtPm5fbXlz cWxfaGFuZGxlc19vcGVuZWQrKzsKKwkJCXByZWJ1aWx0ID0gcm93X2NyZWF0ZV9wcmVidWlsdChh ZGQtPmluZGV4ZWRfdGFibGUpOworCQl9CisKKwkJZXJyID0gY29udmVydF9lcnJvcl9jb2RlX3Rv X215c3FsKAorCQkJZXJyb3IsIHByZWJ1aWx0LT50YWJsZS0+ZmxhZ3MsIHVzZXJfdGhkKTsKKwl9 IGVsc2UgeworCQkvKiBXZSBjcmVhdGVkIHNlY29uZGFyeSBpbmRleGVzICghbmV3X3ByaW1hcnkp LiAqLworCisJCWlmIChjb21taXQpIHsKKwkJCWVyciA9IGNvbnZlcnRfZXJyb3JfY29kZV90b19t eXNxbCgKKwkJCQlyb3dfbWVyZ2VfcmVuYW1lX2luZGV4ZXModHJ4LCBwcmVidWlsdC0+dGFibGUp LAorCQkJCXByZWJ1aWx0LT50YWJsZS0+ZmxhZ3MsIHVzZXJfdGhkKTsKKwkJfQorCisJCWlmICgh Y29tbWl0IHx8IGVycikgeworCQkJZGljdF9pbmRleF90KglpbmRleDsKKwkJCWRpY3RfaW5kZXhf dCoJbmV4dF9pbmRleDsKKworCQkJZm9yIChpbmRleCA9IGRpY3RfdGFibGVfZ2V0X2ZpcnN0X2lu ZGV4KAorCQkJCSAgICAgcHJlYnVpbHQtPnRhYmxlKTsKKwkJCSAgICAgaW5kZXg7IGluZGV4ID0g bmV4dF9pbmRleCkgeworCisJCQkJbmV4dF9pbmRleCA9IGRpY3RfdGFibGVfZ2V0X25leHRfaW5k ZXgoaW5kZXgpOworCisJCQkJaWYgKCppbmRleC0+bmFtZSA9PSBURU1QX0lOREVYX1BSRUZJWCkg eworCQkJCQlyb3dfbWVyZ2VfZHJvcF9pbmRleCgKKwkJCQkJCWluZGV4LCBwcmVidWlsdC0+dGFi bGUsIHRyeCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyogSWYgaW5kZXggaXMgc3VjY2Vz c2Z1bGx5IGJ1aWx0LCB3ZSB3aWxsIG5lZWQgdG8gcmVidWlsZCBpbmRleAorCXRyYW5zbGF0aW9u IHRhYmxlLiBTZXQgdmFsaWQgaW5kZXggZW50cnkgY291bnQgaW4gdGhlIHRyYW5zbGF0aW9uCisJ dGFibGUgdG8gemVyby4gKi8KKwlpZiAoZXJyID09IDAgJiYgY29tbWl0KSB7CisJCXNoYXJlLT5p ZHhfdHJhbnNfdGJsLmluZGV4X2NvdW50ID0gMDsKKwl9CisKKwl0cnhfY29tbWl0X2Zvcl9teXNx bCh0cngpOworCWlmIChwcmVidWlsdC0+dHJ4KSB7CisJCXRyeF9jb21taXRfZm9yX215c3FsKHBy ZWJ1aWx0LT50cngpOworCX0KKworCXV0X2QoZGljdF90YWJsZV9jaGVja19mb3JfZHVwX2luZGV4 ZXMocHJlYnVpbHQtPnRhYmxlLCBGQUxTRSkpOworCXJvd19teXNxbF91bmxvY2tfZGF0YV9kaWN0 aW9uYXJ5KHRyeCk7CisKKwl0cnhfZnJlZV9mb3JfbXlzcWwodHJ4KTsKIAogCS8qIFRoZXJlIG1p Z2h0IGJlIHdvcmsgZm9yIHV0aWxpdHkgdGhyZWFkcy4qLwogCXNydl9hY3RpdmVfd2FrZV9tYXN0 ZXJfdGhyZWFkKCk7CiAKLQlEQlVHX1JFVFVSTihlcnJvcik7CisJZGVsZXRlIGFkZDsKKwlEQlVH X1JFVFVSTihlcnIpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKCk5vIGJ1bmRsZSAocmVhc29uOiB1 c2VsZXNzIGZvciBwdXNoIGVtYWlscyku