Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r2cvE-0005dn-Ha for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Nov 2023 19:48:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1r2cvD-000z4f-8K for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Nov 2023 19:48:35 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r2cvC-000z4D-M9 for pgsql-hackers@lists.postgresql.org; Mon, 13 Nov 2023 19:48:34 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r2cv8-006Gbl-Qi for pgsql-hackers@postgresql.org; Mon, 13 Nov 2023 19:48:34 +0000 Received: from [192.168.43.226] (unknown [176.59.170.38]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: a.rybakina@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 4F262E20E5B; Mon, 13 Nov 2023 22:48:26 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1699904909; bh=7TQx7CsfMEzIxNwPdcnh9F52T08fWrdZIMpKEiupQXg=; h=Message-ID:Date:User-Agent:Subject:From:To:Cc:References: In-Reply-To:From; b=etlgvPuGBxzZbw09VwLN0MOiJx9A9g1cVQTDBCB/Pql8yzT2T3IuTdS13pUxRNXjQ EQug+NE4o9RGfci1L0L1ZMPaZRyiq4ObauHWLQYTTk2Plr90/hqmKBakLiUgWUJdZY XF5HrLvImZl4HGNX6yhOHaucwhjpsW1L+EKBu2YOe7XMWOWVRhD2Nch75NgyQ6cF3h QKMKpzDlvqVRaluC/MMZZuTLba0nNJ4gnSu/p3tjgRE9DyioLHsxXlFQS6JOYcFDDI tfoy+Y4U8xtkfpwn87ep21tksU0HChaohf8Ohza82U0I5n6wsIW5n8GiLwIOtVyT4k HTxUcs6oRY/pw== Content-Type: multipart/mixed; boundary="------------ZHp09V5As5kbhp7uoWegm96j" Message-ID: <95d0d2ca-5da8-4bd5-9f8b-1cf190e4ef46@postgrespro.ru> Date: Mon, 13 Nov 2023 22:48:23 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC, WIP: OR-clause support for indexes From: "a.rybakina" To: pgsql-hackers@postgresql.org, Alexander Korotkov , Peter Geoghegan Cc: Robert Haas , "Finnerty, Jim" , Marcos Pegoraro , Andrey Lepikhov , teodor@sigaev.ru, Ranier Vilela , Tomas Vondra , Peter Eisentraut References: <567ED6CA.2040504@sigaev.ru> <89fb769c-7d45-f0c5-a9b3-b706c9661c57@postgrespro.ru> <668892c1-fb11-3a79-ce5e-1c194b7b3263@postgrespro.ru> <16a7e3aa-24c0-4986-8820-ea2857bd7b6b@postgrespro.ru> <421656a9-5df7-41bb-9d58-1c1edbd5dc3e@postgrespro.ru> Content-Language: en-US In-Reply-To: <421656a9-5df7-41bb-9d58-1c1edbd5dc3e@postgrespro.ru> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------ZHp09V5As5kbhp7uoWegm96j Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, all! These days I was porting a patch for converting or expressions to ANY to the choose_bitmap_and function. Unfortunately, it is not possible to transfer the conversion there, since expressions are processed one by one, as far as I saw. Therefore, I tried to make the conversion earlier in the generate_bitmap_or_paths function, there is just a loop bypass. The patch turns out to be quite complicated, in my opinion, and to be honest, it does not work fully yet. Also, due to the fact that the index for the ScalarOpExpr expression is created earlier (approximately 344 lines in the src/backend/optimizer/path/indxpath.c file), we had to call the generate_bitmap_or_paths function earlier. I haven't seen yet what problems this could potentially lead to. Patch in the attached diff file. In the last letter, I had an incorrect numbering for the original patch, corrected, respectively, it is unclear whether the tests in CI were normal. Corrected it. --------------ZHp09V5As5kbhp7uoWegm96j Content-Type: text/x-patch; charset=UTF-8; name="v9-Replace-OR-clause-to-ANY-expressions.patch" Content-Disposition: attachment; filename="v9-Replace-OR-clause-to-ANY-expressions.patch" Content-Transfer-Encoding: base64 RnJvbSAzMDYyYTI0MDhhZjI1OGI5ZTMyNzIxOTAyMDIyMWI3NTUwMWU4NTMwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVuYSBSeWJha2luYSA8YS5yeWJha2luYUBwb3N0 Z3Jlc3Byby5ydT4KRGF0ZTogTW9uLCA2IE5vdiAyMDIzIDE2OjQ4OjAwICswMzAwClN1Ympl Y3Q6IFtQQVRDSF0gUmVwbGFjZSBPUiBjbGF1c2UgdG8gQU5ZIGV4cHJlc3Npb25zLiBSZXBs YWNlIChYPU4xKSBPUgogKFg9TjIpIC4uLiB3aXRoIFggPSBBTlkoTjEsIE4yKSBvbiB0aGUg c3RhZ2Ugb2YgdGhlIG9wdGltaXNlciB3aGVuIHdlIGFyZQogc3RpbGwgd29ya2luZyB3aXRo IGEgdHJlZSBleHByZXNzaW9uLiBGaXJzdGx5LCB3ZSBkbyBub3QgdHJ5IHRvIG1ha2UgYQog dHJhbnNmb3JtYXRpb24gZm9yICJub24tb3IiIGV4cHJlc3Npb25zIG9yIGluZXF1YWxpdGll cyBhbmQgdGhlIGNyZWF0aW9uIG9mIGEKIHJlbGF0aW9uIHdpdGggIm9yIiBleHByZXNzaW9u cyBvY2N1cnMgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHNjZW5hcmlvLgogU2Vjb25kbHksIHdl IGRvIG5vdCBtYWtlIHRyYW5zZm9ybWF0aW9ucyBpZiB0aGVyZSBhcmUgbGVzcyB0aGFuIHNl dAogb3JfdHJhbnNmb3JtX2xpbWl0LiBUaGlyZGx5LCBpdCBpcyB3b3J0aCBjb25zaWRlcmlu ZyB0aGF0IHdlIGNvbnNpZGVyICJvciIKIGV4cHJlc3Npb25zIG9ubHkgYXQgdGhlIGN1cnJl bnQgbGV2ZWwuCgpBdXRob3JzOiBBbGVuYSBSeWJha2luYSA8bGVuYS5yaWJhY2tpbmFAeWFu ZGV4LnJ1PiwgQW5kcmV5IExlcGlraG92IDxhLmxlcGlraG92QHBvc3RncmVzcHJvLnJ1PgpS ZXZpZXdlZC1ieTogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPiwgUmFuaWVyIFZpbGVs YSA8cmFuaWVyLnZmQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEFsZXhhbmRlciBLb3JvdGtv diA8YWVrb3JvdGtvdkBnbWFpbC5jb20+LCBSb2JlcnQgSGFhcyA8cm9iZXJ0bWhhYXNAZ21h aWwuY29tPgotLS0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgICAgICAgICAg ICAgICB8IDI5OSArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAxMCArCiBzcmMvaW5jbHVkZS9wYXJzZXIvcGFy c2VfZXhwci5oICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9jcmVhdGVfaW5kZXgub3V0ICAgIHwgMTE1ICsrKysrKysKIHNyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvZ3VjLm91dCAgICAgICAgICAgICB8ICAgMyArLQogc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9qb2luLm91dCAgICAgICAgICAgIHwgIDUwICsrKwogc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0IHwgMTc5ICsrKysrKysrKysr CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RpZHNjYW4ub3V0ICAgICAgICAgfCAgMTcg Kwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbCAgICAgICAgIHwgIDMy ICsrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbCAgICAgICAgICAgICAgICAgfCAg MTAgKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX3BydW5lLnNxbCAgICAgIHwg IDIyICsrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC90aWRzY2FuLnNxbCAgICAgICAgICAgICAg fCAgIDYgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAg IHwgICAxICsKIDEzIGZpbGVzIGNoYW5nZWQsIDc0MyBpbnNlcnRpb25zKCspLCAyIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMg Yi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IDY0YzU4MmMzNDRjLi4y NWE0MjM1ZGJkOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIu YworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCkBAIC0xOCw2ICsxOCw3 IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hZ2dyZWdhdGUuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX3Byb2MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRl ICJjb21tb24vaGFzaGZuLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZGJjb21tYW5kcy5oIgog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgpA QCAtNDMsNiArNDQsNyBAQAogCiAvKiBHVUMgcGFyYW1ldGVycyAqLwogYm9vbAkJVHJhbnNm b3JtX251bGxfZXF1YWxzID0gZmFsc2U7Citib29sCQlvcl90cmFuc2Zvcm1fbGltaXQgPSBm YWxzZTsKIAogCiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtRXhwclJlY3Vyc2UoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBOb2RlICpleHByKTsKQEAgLTk4LDcgKzEwMCwzMDIgQEAgc3RhdGljIEV4 cHIgKm1ha2VfZGlzdGluY3Rfb3AoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpvcG5hbWUs CiAJCQkJCQkJICBOb2RlICpsdHJlZSwgTm9kZSAqcnRyZWUsIGludCBsb2NhdGlvbik7CiBz dGF0aWMgTm9kZSAqbWFrZV9udWxsdGVzdF9mcm9tX2Rpc3RpbmN0KFBhcnNlU3RhdGUgKnBz dGF0ZSwKIAkJCQkJCQkJCQkgQV9FeHByICpkaXN0aW5jdGEsIE5vZGUgKmFyZyk7Cit0eXBl ZGVmIHN0cnVjdCBPckNsYXVzZUdyb3VwRW50cnkKK3sKKwljaGFyCQkgICAqaGFzaF9sZWZ0 dmFyX2tleTsKKworCU5vZGUJCSAgICpub2RlOworCUxpc3QJCSAgICpjb25zdHM7CisJT2lk CQkJCXNjYWxhcl90eXBlOworCU9pZAkJCQlvcG5vOworCUV4cHIgCQkgICAqZXhwcjsKK30g T3JDbGF1c2VHcm91cEVudHJ5OworCitzdGF0aWMgaW50Citvcl9uYW1lX21hdGNoKGNvbnN0 IHZvaWQgKmtleTEsIGNvbnN0IHZvaWQgKmtleTIsIFNpemUga2V5c2l6ZSkKK3sKKwljb25z dCBjaGFyICpuYW1lMSA9ICooY29uc3QgY2hhciAqY29uc3QgKikga2V5MTsKKwljb25zdCBj aGFyICpuYW1lMiA9ICooY29uc3QgY2hhciAqY29uc3QgKikga2V5MjsKKworCXJldHVybiBz dHJjbXAobmFtZTEsIG5hbWUyKTsKK30KKworc3RhdGljIHVpbnQzMgorb3JfbmFtZV9oYXNo KGNvbnN0IHZvaWQgKmtleSwgU2l6ZSBrZXlzaXplKQoreworCWNvbnN0IGNoYXIgKm5hbWUg PSAqKGNvbnN0IGNoYXIgKmNvbnN0ICopIGtleTsKKworCXJldHVybiBEYXR1bUdldEludDMy KGhhc2hfYW55KCh1bnNpZ25lZCBjaGFyICopbmFtZSwgc3RybGVuKG5hbWUpKSk7Cit9CisK K3N0YXRpYyBjaGFyICoKK2dldF9rZXlfbmNvbnN0X25vZGUoTm9kZSAqbmNvbnN0X25vZGUp Cit7CisJaWYgKElzQShuY29uc3Rfbm9kZSwgT3BFeHByKSkKKwl7CisJCU9wRXhwciAJICAg KmNsYXVzZSA9IChPcEV4cHIqKSBuY29uc3Rfbm9kZTsKKwkJT3BFeHByCSAgICp0ZW1wID0g bWFrZU5vZGUoT3BFeHByKTsKKworCQl0ZW1wLT5vcG5vID0gY2xhdXNlLT5vcG5vOworCQl0 ZW1wLT5vcGZ1bmNpZCA9IEludmFsaWRPaWQ7CisJCXRlbXAtPm9wcmVzdWx0dHlwZSA9IGNs YXVzZS0+b3ByZXN1bHR0eXBlOworCQl0ZW1wLT5vcHJldHNldCA9IGNsYXVzZS0+b3ByZXRz ZXQ7CisJCXRlbXAtPm9wY29sbGlkID0gY2xhdXNlLT5vcGNvbGxpZDsKKwkJdGVtcC0+aW5w dXRjb2xsaWQgPSBjbGF1c2UtPmlucHV0Y29sbGlkOworCQl0ZW1wLT5sb2NhdGlvbiA9IC0x OworCisJCXRlbXAtPmFyZ3MgPSBsaXN0X2NvcHkoY2xhdXNlLT5hcmdzKTsKKwkJcmV0dXJu IG5vZGVUb1N0cmluZyh0ZW1wKTsKKwl9CisJZWxzZSBpZiAoSXNBKG5jb25zdF9ub2RlLCBW YXIpKQorCXsKKwkJVmFyCSAgICpjbGF1c2UgPSAoVmFyKikgbmNvbnN0X25vZGU7CisJCVZh cgkgICAqdmFyID0gbWFrZU5vZGUoVmFyKTsKKworCQl2YXItPnZhcm5vID0gY2xhdXNlLT52 YXJubzsKKwkJdmFyLT52YXJhdHRubyA9IGNsYXVzZS0+dmFyYXR0bm87CisJCXZhci0+dmFy dHlwZSA9IGNsYXVzZS0+dmFydHlwZTsKKwkJdmFyLT52YXJ0eXBtb2QgPSBjbGF1c2UtPnZh cnR5cG1vZDsKKwkJdmFyLT52YXJjb2xsaWQgPSBjbGF1c2UtPnZhcmNvbGxpZDsKKwkJdmFy LT52YXJsZXZlbHN1cCA9IGNsYXVzZS0+dmFybGV2ZWxzdXA7CisJCXZhci0+dmFyYXR0bm9z eW4gPSBjbGF1c2UtPnZhcmF0dG5vOworCQl2YXItPmxvY2F0aW9uID0gLTE7CisKKwkJcmV0 dXJuIG5vZGVUb1N0cmluZyh2YXIpOworCX0KKwllbHNlCisJeworCQlyZXR1cm4gTlVMTDsK Kwl9CisgfQorCitzdGF0aWMgTm9kZSAqCit0cmFuc2Zvcm1Cb29sRXhwck9yKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgQm9vbEV4cHIgKmV4cHJfb3JpZykKK3sKKwlMaXN0CQkgICAqb3JfbGlz dCA9IE5JTDsKKwlMaXN0Q2VsbAkgICAqbGM7CisJSEFTSENUTAkJCWluZm87CisJSFRBQiAJ CSAgICpvcl9ncm91cF9odGFiID0gTlVMTDsKKwlpbnQgCQkJbGVuX29ycyA9IGxpc3RfbGVu Z3RoKGV4cHJfb3JpZy0+YXJncyk7CisKKwlNZW1TZXQoJmluZm8sIDAsIHNpemVvZihpbmZv KSk7CisJaW5mby5rZXlzaXplID0gc2l6ZW9mKGNoYXIgKik7CisJaW5mby5lbnRyeXNpemUg PSBzaXplb2YoT3JDbGF1c2VHcm91cEVudHJ5KTsKKwlpbmZvLmhhc2ggPSBvcl9uYW1lX2hh c2g7CisJaW5mby5tYXRjaCA9IG9yX25hbWVfbWF0Y2g7CisJb3JfZ3JvdXBfaHRhYiA9IGhh c2hfY3JlYXRlKCJPUiBHcm91cHMiLAorCQkJCQkJCQkJICBsZW5fb3JzLAorCQkJCQkJCQkJ ICAmaW5mbywKKwkJCQkJCQkJCSAgSEFTSF9FTEVNIHwgSEFTSF9GVU5DVElPTiB8IEhBU0hf Q09NUEFSRSk7CisKKwkvKiBJZiB0aGlzIGlzIG5vdCBhbiAnT1InIGV4cHJlc3Npb24sIHNr aXAgdGhlIHRyYW5zZm9ybWF0aW9uICovCisJaWYgKGV4cHJfb3JpZy0+Ym9vbG9wICE9IE9S X0VYUFIgfHwgIW9yX3RyYW5zZm9ybV9saW1pdCB8fCBsZW5fb3JzID09IDEgfHwgIW9yX2dy b3VwX2h0YWIpCisJCXJldHVybiB0cmFuc2Zvcm1Cb29sRXhwcihwc3RhdGUsIChCb29sRXhw ciAqKSBleHByX29yaWcpOworCisJZm9yZWFjaChsYywgZXhwcl9vcmlnLT5hcmdzKQorCXsK KwkJTm9kZQkJCSAgICphcmcgPSBsZmlyc3QobGMpOworCQlOb2RlCQkJICAgKm9ycXVhbDsK KwkJTm9kZQkJCSAgICpjb25zdF9leHByOworCQlOb2RlCQkJICAgKm5jb25zdF9leHByOwor CQlPckNsYXVzZUdyb3VwRW50cnkgKmdlbnRyeTsKKwkJYm9vbAkJCQlmb3VuZDsKKwkJY2hh cgkJICAgCSAgICpzdHI7CisKKwkJLyogQXQgZmlyc3QsIHRyYW5zZm9ybSB0aGUgYXJnIGFu ZCBldmFsdWF0ZSBjb25zdGFudCBleHByZXNzaW9ucy4gKi8KKwkJb3JxdWFsID0gdHJhbnNm b3JtRXhwclJlY3Vyc2UocHN0YXRlLCAoTm9kZSAqKSBhcmcpOworCQlvcnF1YWwgPSBjb2Vy Y2VfdG9fYm9vbGVhbihwc3RhdGUsIG9ycXVhbCwgIk9SIik7CisJCW9ycXVhbCA9IGV2YWxf Y29uc3RfZXhwcmVzc2lvbnMoTlVMTCwgb3JxdWFsKTsKKworCQlpZiAoIUlzQShvcnF1YWws IE9wRXhwcikpCisJCXsKKwkJCW9yX2xpc3QgPSBsYXBwZW5kKG9yX2xpc3QsIG9ycXVhbCk7 CisJCQljb250aW51ZTsKKwkJfQogCisJCS8qCisJCSAqIERldGVjdCB0aGUgY29uc3RhbnQg c2lkZSBvZiB0aGUgY2xhdXNlLiBSZWNhbGwgbm9uLWNvbnN0YW50CisJCSAqIGV4cHJlc3Np b24gY2FuIGJlIG1hZGUgbm90IG9ubHkgd2l0aCBWYXJzLCBidXQgYWxzbyB3aXRoIFBhcmFt cywKKwkJICogd2hpY2ggaXMgbm90IGJvbmRlZCB3aXRoIGFueSByZWxhdGlvbi4gVGh1cywg d2UgZGV0ZWN0IHRoZSBjb25zdAorCQkgKiBzaWRlIC0gaWYgYW5vdGhlciBzaWRlIGlzIGNv bnN0YW50IHRvbywgdGhlIG9ycXVhbCBjb3VsZG4ndCBiZQorCQkgKiBhbiBPcEV4cHIuCisJ CSAqIEdldCBwb2ludGVycyB0byBjb25zdGFudCBhbmQgZXhwcmVzc2lvbiBzaWRlcyBvZiB0 aGUgcXVhbC4KKwkJICovCisJCWlmIChJc0EoZ2V0X2xlZnRvcChvcnF1YWwpLCBDb25zdCkp CisJCXsKKwkJCW5jb25zdF9leHByID0gZ2V0X3JpZ2h0b3Aob3JxdWFsKTsKKwkJCWNvbnN0 X2V4cHIgPSBnZXRfbGVmdG9wKG9ycXVhbCk7CisJCX0KKwkJZWxzZSBpZiAoSXNBKGdldF9y aWdodG9wKG9ycXVhbCksIENvbnN0KSkKKwkJeworCQkJY29uc3RfZXhwciA9IGdldF9yaWdo dG9wKG9ycXVhbCk7CisJCQluY29uc3RfZXhwciA9IGdldF9sZWZ0b3Aob3JxdWFsKTsKKwkJ fQorCQllbHNlCisJCXsKKwkJCW9yX2xpc3QgPSBsYXBwZW5kKG9yX2xpc3QsIG9ycXVhbCk7 CisJCQljb250aW51ZTsKKwkJfQorCisJCXN0ciA9IGdldF9rZXlfbmNvbnN0X25vZGUobmNv bnN0X2V4cHIpOworCisJCWlmICghb3BfbWVyZ2Vqb2luYWJsZSgoKE9wRXhwciAqKSBvcnF1 YWwpLT5vcG5vLCBleHByVHlwZShuY29uc3RfZXhwcikpIHx8IHN0ciA9PSBOVUxMKQorCQl7 CisJCQlvcl9saXN0ID0gbGFwcGVuZChvcl9saXN0LCBvcnF1YWwpOworCQkJY29udGludWU7 CisJCX0KKworCQkvKgorCQkqIEF0IHRoaXMgcG9pbnQgd2UgZGVmaW5pdGVseSBoYXZlIGEg dHJhbnNmb3JtYWJsZSBjbGF1c2UuCisJCSogQ2xhc3NpZnkgaXQgYW5kIGFkZCBpbnRvIHNw ZWNpZmljIGdyb3VwIG9mIGNsYXVzZXMsIG9yIGNyZWF0ZSBuZXcKKwkJKiBncm91cC4KKwkJ KiBUT0RPOiB0byBtYW5hZ2UgY29tcGxleGl0eSBpbiB0aGUgY2FzZSBvZiBtYW55IGRpZmZl cmVudCBjbGF1c2VzCisJCSogKFgxPUMxKSBPUiAoWDI9QzIgT1IpIC4uLiAoWE4gPSBDTikg d2UgY291bGQgaW52ZW50IHNvbWV0aGluZworCQkqIGxpa2UgYSBoYXNoIHRhYmxlLiBCdXQg YWxzbyB3ZSBiZWxpZXZlLCB0aGF0IHRoZSBjYXNlIG9mIG1hbnkKKwkJKiBkaWZmZXJlbnQg dmFyaWFibGUgc2lkZXMgaXMgdmVyeSByYXJlLgorCQkqLworCQlnZW50cnkgPSBoYXNoX3Nl YXJjaChvcl9ncm91cF9odGFiLCAmc3RyLCBIQVNIX0ZJTkQsICZmb3VuZCk7CisKKwkJaWYg KGZvdW5kKQorCQl7CisJCQlnZW50cnktPmNvbnN0cyA9IGxhcHBlbmQoZ2VudHJ5LT5jb25z dHMsIGNvbnN0X2V4cHIpOworCQkJLyoKKwkJCQkqIFRoZSBjbGF1c2UgY2xhc3NpZmllZCBz dWNjZXNzZnVsbHkgYW5kIGFkZGVkIGludG8gZXhpc3RlZAorCQkJCSogY2xhdXNlIGdyb3Vw LgorCQkJCSovCisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIE5ldyBjbGF1c2UgZ3JvdXAg bmVlZGVkICovCisJCWdlbnRyeSA9IGhhc2hfc2VhcmNoKG9yX2dyb3VwX2h0YWIsICZzdHIs IEhBU0hfRU5URVIsICZmb3VuZCk7CisJCWdlbnRyeS0+bm9kZSA9IG5jb25zdF9leHByOwor CQlnZW50cnktPmNvbnN0cyA9IGxpc3RfbWFrZTEoY29uc3RfZXhwcik7CisJCWdlbnRyeS0+ ZXhwciA9IChFeHByICopIG9ycXVhbDsKKwkJZ2VudHJ5LT5oYXNoX2xlZnR2YXJfa2V5ID0g c3RyOworCX0KKworCWlmIChvcl9ncm91cF9odGFiICYmIChoYXNoX2dldF9udW1fZW50cmll cyhvcl9ncm91cF9odGFiKSA8IDEgfHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgaGFz aF9nZXRfbnVtX2VudHJpZXMob3JfZ3JvdXBfaHRhYikgPT0gbGVuX29ycykpCisJeworCQkv KgorCQkqIE5vIGFueSB0cmFuc2Zvcm1hdGlvbnMgcG9zc2libGUgd2l0aCB0aGlzIGxpc3Qg b2YgYXJndW1lbnRzLiBIZXJlIHdlCisJCSogYWxyZWFkeSBtYWRlIGFsbCB1bmRlcmx5aW5n IHRyYW5zZm9ybWF0aW9ucy4gVGh1cywganVzdCByZXR1cm4gdGhlCisJCSogdHJhbnNmb3Jt ZWQgYm9vbCBleHByZXNzaW9uLgorCQkqLworCQloYXNoX2Rlc3Ryb3kob3JfZ3JvdXBfaHRh Yik7CisJCWxpc3RfZnJlZShvcl9saXN0KTsKKwkJcmV0dXJuIChOb2RlICopIG1ha2VCb29s RXhwcihPUl9FWFBSLCBvcl9saXN0LCBleHByX29yaWctPmxvY2F0aW9uKTsKKwl9CisJZWxz ZQorCXsKKwkJSEFTSF9TRVFfU1RBVFVTCQloYXNoX3NlcTsKKwkJT3JDbGF1c2VHcm91cEVu dHJ5ICpnZW50cnk7CisKKwkJaGFzaF9zZXFfaW5pdCgmaGFzaF9zZXEsIG9yX2dyb3VwX2h0 YWIpOworCisJCS8qIExldCdzIGNvbnZlcnQgZWFjaCBncm91cCBvZiBjbGF1c2VzIHRvIGFu IElOIG9wZXJhdGlvbi4gKi8KKworCQkvKgorCQkqIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2Yg Z3JvdXBzIGFuZCBjb252ZXJ0IGVhY2gsIHdoZXJlIG51bWJlciBvZgorCQkqIGNvbnN0cyBt b3JlIHRoYW4gMS4gdHJpdmlhbCBncm91cHMgbW92ZSB0byBPUi1saXN0IGFnYWluCisJCSov CisKKwkJd2hpbGUgKChnZW50cnkgPSAoT3JDbGF1c2VHcm91cEVudHJ5ICopIGhhc2hfc2Vx X3NlYXJjaCgmaGFzaF9zZXEpKSAhPSBOVUxMKQorCQl7CisJCQlMaXN0CQkJICAgKmFsbGV4 cHJzOworCQkJT2lkCQkJCSAgICBzY2FsYXJfdHlwZTsKKwkJCU9pZAkJCQkJYXJyYXlfdHlw ZTsKKworCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKGdlbnRyeS0+Y29uc3RzKSA+IDApOworCisJ CQlpZiAobGlzdF9sZW5ndGgoZ2VudHJ5LT5jb25zdHMpID09IDEpCisJCQl7CisJCQkJLyoK KwkJCQkgKiBPbmx5IG9uZSBlbGVtZW50IGluIHRoZSBjbGFzcy4gUmV0dXJuIHJpbmZvIGlu dG8gdGhlIEJvb2xFeHByCisJCQkJICogYXJncyBsaXN0IHVuY2hhbmdlZC4KKwkJCQkgKi8K KwkJCQlsaXN0X2ZyZWUoZ2VudHJ5LT5jb25zdHMpOworCQkJCW9yX2xpc3QgPSBsYXBwZW5k KG9yX2xpc3QsIGdlbnRyeS0+ZXhwcik7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8q CisJCQkgKiBEbyB0aGUgdHJhbnNmb3JtYXRpb24uCisJCQkgKgorCQkJICogRmlyc3Qgb2Yg YWxsLCB0cnkgdG8gc2VsZWN0IGEgY29tbW9uIHR5cGUgZm9yIHRoZSBhcnJheSBlbGVtZW50 cy4KKwkJCSAqIE5vdGUgdGhhdCBzaW5jZSB0aGUgTEhTJyB0eXBlIGlzIGZpcnN0IGluIHRo ZSBsaXN0LCBpdCB3aWxsIGJlCisJCQkgKiBwcmVmZXJyZWQgd2hlbiB0aGVyZSBpcyBkb3Vi dCAoZWcsIHdoZW4gYWxsIHRoZSBSSFMgaXRlbXMgYXJlCisJCQkgKiB1bmtub3duIGxpdGVy YWxzKS4KKwkJCSAqCisJCQkgKiBOb3RlOiB1c2UgbGlzdF9jb25jYXQgaGVyZSBub3QgbGNv bnMsIHRvIGF2b2lkIGRhbWFnaW5nIHJub252YXJzLgorCQkJICoKKwkJCSAqIEFzIGEgc291 cmNlIG9mIGluc2lkZXMsIHVzZSBtYWtlX3NjYWxhcl9hcnJheV9vcCgpCisJCQkgKi8KKwkJ CWFsbGV4cHJzID0gbGlzdF9jb25jYXQobGlzdF9tYWtlMShnZW50cnktPm5vZGUpLCBnZW50 cnktPmNvbnN0cyk7CisJCQlzY2FsYXJfdHlwZSA9IHNlbGVjdF9jb21tb25fdHlwZShOVUxM LCBhbGxleHBycywgTlVMTCwgTlVMTCk7CisKKwkJCWlmIChzY2FsYXJfdHlwZSAhPSBSRUNP UkRPSUQgJiYgT2lkSXNWYWxpZChzY2FsYXJfdHlwZSkpCisJCQkJYXJyYXlfdHlwZSA9IGdl dF9hcnJheV90eXBlKHNjYWxhcl90eXBlKTsKKwkJCWVsc2UKKwkJCQlhcnJheV90eXBlID0g SW52YWxpZE9pZDsKKworCQkJaWYgKGFycmF5X3R5cGUgIT0gSW52YWxpZE9pZCkKKwkJCXsK KwkJCQkvKgorCQkJCSAqIE9LOiBjb2VyY2UgYWxsIHRoZSByaWdodC1oYW5kIG5vbi1WYXIg aW5wdXRzIHRvIHRoZSBjb21tb24KKwkJCQkgKiB0eXBlIGFuZCBidWlsZCBhbiBBcnJheUV4 cHIgZm9yIHRoZW0uCisJCQkJICovCisJCQkJTGlzdAkgICAqYWV4cHJzOworCQkJCUFycmF5 RXhwciAgKm5ld2E7CisJCQkJU2NhbGFyQXJyYXlPcEV4cHIgKnNhb3BleHByOworCQkJCUxp c3RDZWxsICpsOworCisJCQkJYWV4cHJzID0gTklMOworCisJCQkJZm9yZWFjaChsLCBnZW50 cnktPmNvbnN0cykKKwkJCQl7CisJCQkJCU5vZGUJICAgKnJleHByID0gKE5vZGUgKikgbGZp cnN0KGwpOworCisJCQkJCXJleHByID0gY29lcmNlX3RvX2NvbW1vbl90eXBlKHBzdGF0ZSwg cmV4cHIsCisJCQkJCQkJCQkJCQlzY2FsYXJfdHlwZSwKKwkJCQkJCQkJCQkJCSJJTiIpOwor CQkJCQlhZXhwcnMgPSBsYXBwZW5kKGFleHBycywgcmV4cHIpOworCQkJCX0KKworCQkJCW5l d2EgPSBtYWtlTm9kZShBcnJheUV4cHIpOworCQkJCS8qIGFycmF5X2NvbGxpZCB3aWxsIGJl IHNldCBieSBwYXJzZV9jb2xsYXRlLmMgKi8KKwkJCQluZXdhLT5lbGVtZW50X3R5cGVpZCA9 IHNjYWxhcl90eXBlOworCQkJCW5ld2EtPmFycmF5X3R5cGVpZCA9IGFycmF5X3R5cGU7CisJ CQkJbmV3YS0+bXVsdGlkaW1zID0gZmFsc2U7CisJCQkJbmV3YS0+ZWxlbWVudHMgPSBhZXhw cnM7CisJCQkJbmV3YS0+bG9jYXRpb24gPSAtMTsKKworCQkJCXNhb3BleHByID0KKwkJCQkJ KFNjYWxhckFycmF5T3BFeHByICopCisJCQkJCQltYWtlX3NjYWxhcl9hcnJheV9vcChwc3Rh dGUsCisJCQkJCQkJCQkJCSBsaXN0X21ha2UxKG1ha2VTdHJpbmcoKGNoYXIgKikgIj0iKSks CisJCQkJCQkJCQkJCSB0cnVlLAorCQkJCQkJCQkJCQkgZ2VudHJ5LT5ub2RlLAorCQkJCQkJ CQkJCQkgKE5vZGUgKikgbmV3YSwKKwkJCQkJCQkJCQkJIC0xKTsKKworCQkJCW9yX2xpc3Qg PSBsYXBwZW5kKG9yX2xpc3QsICh2b2lkICopIHNhb3BleHByKTsKKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQlsaXN0X2ZyZWUoZ2VudHJ5LT5jb25zdHMpOworCQkJCW9yX2xpc3QgPSBs YXBwZW5kKG9yX2xpc3QsIGdlbnRyeS0+ZXhwcik7CisJCQl9CisJCQloYXNoX3NlYXJjaChv cl9ncm91cF9odGFiLCAmZ2VudHJ5LT5oYXNoX2xlZnR2YXJfa2V5LCBIQVNIX1JFTU9WRSwg TlVMTCk7CisJCX0KKwkJaGFzaF9kZXN0cm95KG9yX2dyb3VwX2h0YWIpOworCX0KKworCS8q IE9uZSBtb3JlIHRyaWNrOiBhc3NlbWJsZSBjb3JyZWN0IGNsYXVzZSAqLworCXJldHVybiAo Tm9kZSAqKSAoKGxpc3RfbGVuZ3RoKG9yX2xpc3QpID4gMSkgPworCQkJCQkJbWFrZUJvb2xF eHByKE9SX0VYUFIsIG9yX2xpc3QsIGV4cHJfb3JpZy0+bG9jYXRpb24pIDoKKwkJCQkJCWxp bml0aWFsKG9yX2xpc3QpKTsKK30KIAogLyoKICAqIHRyYW5zZm9ybUV4cHIgLQpAQCAtMjEy LDcgKzUwOSw3IEBAIHRyYW5zZm9ybUV4cHJSZWN1cnNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwg Tm9kZSAqZXhwcikKIAkJCX0KIAogCQljYXNlIFRfQm9vbEV4cHI6Ci0JCQlyZXN1bHQgPSB0 cmFuc2Zvcm1Cb29sRXhwcihwc3RhdGUsIChCb29sRXhwciAqKSBleHByKTsKKwkJCXJlc3Vs dCA9IChOb2RlICopdHJhbnNmb3JtQm9vbEV4cHJPcihwc3RhdGUsIChCb29sRXhwciAqKSBl eHByKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVF9GdW5jQ2FsbDoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWNfdGFibGVzLmMKaW5kZXggNzYwNWVmZjliOWQuLmE4ZTgwNTRlN2U2IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtMTA0OCw2ICsxMDQ4LDE2IEBA IHN0cnVjdCBjb25maWdfYm9vbCBDb25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCXRydWUsCiAJ CU5VTEwsIE5VTEwsIE5VTEwKIAl9LAorCXsKKwkJeyJvcl90cmFuc2Zvcm1fbGltaXQiLCBQ R0NfVVNFUlNFVCwgUVVFUllfVFVOSU5HX09USEVSLAorCQkJZ2V0dGV4dF9ub29wKCJUcmFu c2Zvcm0gYSBzZXF1ZW5jZSBvZiBPUiBjbGF1c2VzIHRvIGFuIElOIGV4cHJlc3Npb24uIiks CisJCQlnZXR0ZXh0X25vb3AoIlRoZSBwbGFubmVyIHdpbGwgcmVwbGFjZSBjbGF1c2VzIGxp a2UgJ3g9YzEgT1IgeD1jMiAuLiIKKwkJCQkJCSAidG8gdGhlIGNsYXVzZSAneCBJTiAoYzEs YzIsLi4uKSciKQorCQl9LAorCQkmb3JfdHJhbnNmb3JtX2xpbWl0LAorCQlmYWxzZSwKKwkJ TlVMTCwgTlVMTCwgTlVMTAorCX0sCiAJewogCQkvKgogCQkgKiBOb3QgZm9yIGdlbmVyYWwg dXNlIC0tLSB1c2VkIGJ5IFNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04gYW5kIFNFVApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX2V4cHIuaCBiL3NyYy9pbmNsdWRl L3BhcnNlci9wYXJzZV9leHByLmgKaW5kZXggN2QzOGNhNzVmN2IuLjdhNjk0M2MxMTZjIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfZXhwci5oCisrKyBiL3NyYy9p bmNsdWRlL3BhcnNlci9wYXJzZV9leHByLmgKQEAgLTE3LDYgKzE3LDcgQEAKIAogLyogR1VD IHBhcmFtZXRlcnMgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBib29sIFRyYW5zZm9ybV9udWxs X2VxdWFsczsKK2V4dGVybiBQR0RMTElNUE9SVCBib29sIG9yX3RyYW5zZm9ybV9saW1pdDsK IAogZXh0ZXJuIE5vZGUgKnRyYW5zZm9ybUV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2Rl ICpleHByLCBQYXJzZUV4cHJLaW5kIGV4cHJLaW5kKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CmluZGV4IGFjZmQ5ZDFmNGY3Li4yOWMyYmM2 YTJiMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5k ZXgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91 dApAQCAtMTg4Myw2ICsxODgzLDEyMSBAQCBTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQog ICAgIDEwCiAoMSByb3cpCiAKK1NFVCBvcl90cmFuc2Zvcm1fbGltaXQgPSBvbjsKK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNhbmQg PSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMgT1IgdGVudGhvdXMgPSA0 Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEluZGV4IFNjYW4gdXNpbmcgdGVuazFfdGhvdXNfdGVudGhvdXMgb24gdGVuazEKKyAg IEluZGV4IENvbmQ6ICgodGhvdXNhbmQgPSA0MikgQU5EICh0ZW50aG91cyA9IEFOWSAoJ3sx LDMsNDJ9Jzo6aW50ZWdlcltdKSkpCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHRlbmsx CisgIFdIRVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMg PSAzIE9SIHRlbnRob3VzID0gNDIpOworIHVuaXF1ZTEgfCB1bmlxdWUyIHwgdHdvIHwgZm91 ciB8IHRlbiB8IHR3ZW50eSB8IGh1bmRyZWQgfCB0aG91c2FuZCB8IHR3b3Rob3VzYW5kIHwg Zml2ZXRob3VzIHwgdGVudGhvdXMgfCBvZGQgfCBldmVuIHwgc3RyaW5ndTEgfCBzdHJpbmd1 MiB8IHN0cmluZzQgCistLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLSst LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0t LS0KKyAgICAgIDQyIHwgICAgNTUzMCB8ICAgMCB8ICAgIDIgfCAgIDIgfCAgICAgIDIgfCAg ICAgIDQyIHwgICAgICAgNDIgfCAgICAgICAgICA0MiB8ICAgICAgICA0MiB8ICAgICAgIDQy IHwgIDg0IHwgICA4NSB8IFFCQUFBQSAgIHwgU0VJQUFBICAgfCBPT09PeHgKKygxIHJvdykK KworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAg V0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5 KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0 ZW5rMQorICAgICAgICAgUmVjaGVjayBDb25kOiAoKGh1bmRyZWQgPSA0MikgQU5EICh0aG91 c2FuZCA9IEFOWSAoJ3s0Miw5OX0nOjppbnRlZ2VyW10pKSkKKyAgICAgICAgIC0+ICBCaXRt YXBBbmQKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV9o dW5kcmVkCisgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaHVuZHJlZCA9IDQy KQorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3Vz X3RlbnRob3VzCisgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQg PSBBTlkgKCd7NDIsOTl9Jzo6aW50ZWdlcltdKSkKKyg4IHJvd3MpCisKK1NFTEVDVCBjb3Vu dCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0g NDIgT1IgdGhvdXNhbmQgPSA5OSk7CisgY291bnQgCistLS0tLS0tCisgICAgMTAKKygxIHJv dykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEK KyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9 IDMpIE9SIHRob3VzYW5kID0gNDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBTY2Fu IG9uIHRlbmsxCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoKHRob3VzYW5kID0gNDIpIEFO RCAodGVudGhvdXMgPSBBTlkgKCd7MSwzfSc6OmludGVnZXJbXSkpKSBPUiAodGhvdXNhbmQg PSA0MSkpCisgICAgICAgICAtPiAgQml0bWFwT3IKKyAgICAgICAgICAgICAgIC0+ICBCaXRt YXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cworICAgICAgICAgICAgICAg ICAgICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRob3VzID0gQU5Z ICgnezEsM30nOjppbnRlZ2VyW10pKSkKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5k ZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cworICAgICAgICAgICAgICAgICAgICAg SW5kZXggQ29uZDogKHRob3VzYW5kID0gNDEpCisoOCByb3dzKQorCitTRUxFQ1QgY291bnQo KikgRlJPTSB0ZW5rMQorICBXSEVSRSB0aG91c2FuZCA9IDQyIEFORCAodGVudGhvdXMgPSAx IE9SIHRlbnRob3VzID0gMykgT1IgdGhvdXNhbmQgPSA0MTsKKyBjb3VudCAKKy0tLS0tLS0K KyAgICAxMAorKDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQo KikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQy IE9SIHRob3VzYW5kID0gOTkgT1IgdGVudGhvdXMgPCAyKSBPUiB0aG91c2FuZCA9IDQxOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAt PiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMQorICAgICAgICAgUmVjaGVjayBDb25kOiAo KChodW5kcmVkID0gNDIpIEFORCAoKHRlbnRob3VzIDwgMikgT1IgKHRob3VzYW5kID0gQU5Z ICgnezQyLDk5fSc6OmludGVnZXJbXSkpKSkgT1IgKHRob3VzYW5kID0gNDEpKQorICAgICAg ICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAgICAgICAtPiAgQml0bWFwQW5kCisgICAgICAg ICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfaHVuZHJlZAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGh1bmRyZWQgPSA0MikK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXBPcgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3Vz CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGVudGhv dXMgPCAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBT Y2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgPSBBTlkgKCd7NDIsOTl9Jzo6aW50ZWdl cltdKSkKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90 aG91c190ZW50aG91cworICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHRob3Vz YW5kID0gNDEpCisoMTQgcm93cykKKworU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAg V0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5 IE9SIHRlbnRob3VzIDwgMikgT1IgdGhvdXNhbmQgPSA0MTsKKyBjb3VudCAKKy0tLS0tLS0K KyAgICAyMAorKDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQo KikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQy IE9SIHRob3VzYW5kID0gNDEgT1IgdGhvdXNhbmQgPSA5OSBBTkQgdGVudGhvdXMgPSAyKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisg ICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMQorICAgICAgICAgUmVjaGVjayBDb25k OiAoKGh1bmRyZWQgPSA0MikgQU5EICgoKHRob3VzYW5kID0gOTkpIEFORCAodGVudGhvdXMg PSAyKSkgT1IgKHRob3VzYW5kID0gQU5ZICgnezQyLDQxfSc6OmludGVnZXJbXSkpKSkKKyAg ICAgICAgIC0+ICBCaXRtYXBBbmQKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXgg U2NhbiBvbiB0ZW5rMV9odW5kcmVkCisgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25k OiAoaHVuZHJlZCA9IDQyKQorICAgICAgICAgICAgICAgLT4gIEJpdG1hcE9yCisgICAgICAg ICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVu dGhvdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICgodGhvdXNh bmQgPSA5OSkgQU5EICh0ZW50aG91cyA9IDIpKQorICAgICAgICAgICAgICAgICAgICAgLT4g IEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgPSBBTlkgKCd7NDIsNDF9 Jzo6aW50ZWdlcltdKSkKKygxMSByb3dzKQorCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5r MQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5k ID0gNDEgT1IgdGhvdXNhbmQgPSA5OSBBTkQgdGVudGhvdXMgPSAyKTsKKyBjb3VudCAKKy0t LS0tLS0KKyAgICAxMAorKDEgcm93KQorCitSRVNFVCBvcl90cmFuc2Zvcm1fbGltaXQ7CiAt LQogLS0gQ2hlY2sgYmVoYXZpb3Igd2l0aCBkdXBsaWNhdGUgaW5kZXggY29sdW1uIGNvbnRl bnRzCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ndWMub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ndWMub3V0CmluZGV4IDEyN2M5NTMyOTc2 Li5jMDUyYjExM2VlYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9n dWMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3VjLm91dApAQCAtODYx LDcgKzg2MSw4IEBAIFNFTEVDVCBuYW1lIEZST00gdGFiX3NldHRpbmdzX2ZsYWdzCiAgICAg ICAgICAgIG5hbWUgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog IGRlZmF1bHRfc3RhdGlzdGljc190YXJnZXQKLSgxIHJvdykKKyBvcl90cmFuc2Zvcm1fbGlt aXQKKygyIHJvd3MpCiAKIC0tIFJ1bnRpbWUtY29tcHV0ZWQgR1VDcyBzaG91bGQgYmUgcGFy dCBvZiB0aGUgcHJlc2V0IGNhdGVnb3J5LgogU0VMRUNUIG5hbWUgRlJPTSB0YWJfc2V0dGlu Z3NfZmxhZ3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CmluZGV4IDQ0Njk1OWUz YzVmLi5kODY4NGU5NTllNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9qb2luLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CkBA IC00MjA3LDYgKzQyMDcsNTYgQEAgc2VsZWN0ICogZnJvbSB0ZW5rMSBhIGpvaW4gdGVuazEg YiBvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTIg PSA3KQogKDE5IHJvd3MpCiAKK1NFVCBvcl90cmFuc2Zvcm1fbGltaXQgPSBvbjsKK2V4cGxh aW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gdGVuazEgYSBqb2luIHRlbmsxIGIgb24K KyAgKGEudW5pcXVlMSA9IDEgYW5kIGIudW5pcXVlMSA9IDIpIG9yCisgICgoYS51bmlxdWUy ID0gMyBvciBhLnVuaXF1ZTIgPSA3KSBhbmQgYi5odW5kcmVkID0gNCk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKCgoYS51 bmlxdWUxID0gMSkgQU5EIChiLnVuaXF1ZTEgPSAyKSkgT1IgKChhLnVuaXF1ZTIgPSBBTlkg KCd7Myw3fSc6OmludGVnZXJbXSkpIEFORCAoYi5odW5kcmVkID0gNCkpKQorICAgLT4gIEJp dG1hcCBIZWFwIFNjYW4gb24gdGVuazEgYgorICAgICAgICAgUmVjaGVjayBDb25kOiAoKHVu aXF1ZTEgPSAyKSBPUiAoaHVuZHJlZCA9IDQpKQorICAgICAgICAgLT4gIEJpdG1hcE9yCisg ICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMQor ICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTEgPSAyKQorICAgICAg ICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX2h1bmRyZWQKKyAgICAg ICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChodW5kcmVkID0gNCkKKyAgIC0+ICBNYXRl cmlhbGl6ZQorICAgICAgICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEgYQorICAg ICAgICAgICAgICAgUmVjaGVjayBDb25kOiAoKHVuaXF1ZTEgPSAxKSBPUiAodW5pcXVlMiA9 IEFOWSAoJ3szLDd9Jzo6aW50ZWdlcltdKSkpCisgICAgICAgICAgICAgICAtPiAgQml0bWFw T3IKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5r MV91bmlxdWUxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5p cXVlMSA9IDEpCisgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4g b24gdGVuazFfdW5pcXVlMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKHVuaXF1ZTIgPSBBTlkgKCd7Myw3fSc6OmludGVnZXJbXSkpCisoMTcgcm93cykKKwor ZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSB0ZW5rMSBhIGpvaW4gdGVuazEg YiBvbgorICAoYS51bmlxdWUxIDwgMjAgb3IgYS51bmlxdWUxID0gMyBvciBhLnVuaXF1ZTEg PSAxIGFuZCBiLnVuaXF1ZTEgPSAyKSBvcgorICAoKGEudW5pcXVlMiA9IDMgb3IgYS51bmlx dWUyID0gNykgYW5kIGIuaHVuZHJlZCA9IDQpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0 ZXI6ICgoYS51bmlxdWUxIDwgMjApIE9SICgoYS51bmlxdWUxID0gMSkgQU5EIChiLnVuaXF1 ZTEgPSAyKSkgT1IgKChhLnVuaXF1ZTIgPSBBTlkgKCd7Myw3fSc6OmludGVnZXJbXSkpIEFO RCAoYi5odW5kcmVkID0gNCkpIE9SIChhLnVuaXF1ZTEgPSAzKSkKKyAgIC0+ICBTZXEgU2Nh biBvbiB0ZW5rMSBiCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBCaXRtYXAg SGVhcCBTY2FuIG9uIHRlbmsxIGEKKyAgICAgICAgICAgICAgIFJlY2hlY2sgQ29uZDogKCh1 bmlxdWUxIDwgMjApIE9SICh1bmlxdWUxID0gMSkgT1IgKHVuaXF1ZTIgPSBBTlkgKCd7Myw3 fSc6OmludGVnZXJbXSkpIE9SICh1bmlxdWUxID0gMykpCisgICAgICAgICAgICAgICAtPiAg Qml0bWFwT3IKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBv biB0ZW5rMV91bmlxdWUxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25k OiAodW5pcXVlMSA8IDIwKQorICAgICAgICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRl eCBTY2FuIG9uIHRlbmsxX3VuaXF1ZTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElu ZGV4IENvbmQ6ICh1bmlxdWUxID0gMSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRt YXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUyCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBJbmRleCBDb25kOiAodW5pcXVlMiA9IEFOWSAoJ3szLDd9Jzo6aW50ZWdlcltdKSkK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91 bmlxdWUxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVl MSA9IDMpCisoMTUgcm93cykKKworUkVTRVQgb3JfdHJhbnNmb3JtX2xpbWl0OwogLS0KIC0t IHRlc3QgcGxhY2VtZW50IG9mIG1vdmFibGUgcXVhbHMgaW4gYSBwYXJhbWV0ZXJpemVkIGpv aW4gdHJlZQogLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFy dGl0aW9uX3BydW5lLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9u X3BydW5lLm91dAppbmRleCA5YTRjNDhjMDU1Ni4uMTc4OWQzYzFmZDcgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX3BydW5lLm91dAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQKQEAgLTEwMSw2 ICsxMDEsMjggQEAgZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJl IGEgaXMgbm90IG51bGwgYW5kIChhID0gJ2EnIG9yIGEgPSAnYycKICAgICAgICAgIEZpbHRl cjogKChhIElTIE5PVCBOVUxMKSBBTkQgKChhID0gJ2EnOjpicGNoYXIpIE9SIChhID0gJ2Mn OjpicGNoYXIpKSkKICg1IHJvd3MpCiAKK1NFVCBvcl90cmFuc2Zvcm1fbGltaXQgPSBvbjsK K2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhID0gJ2EnIG9y IGEgPSAnYyc7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBBcHBlbmQKKyAgIC0+ICBTZXEgU2NhbiBvbiBscF9hZCBscF8xCisgICAgICAgICBGaWx0 ZXI6IChhID0gQU5ZICgne2EsY30nOjpicGNoYXJbXSkpCisgICAtPiAgU2VxIFNjYW4gb24g bHBfYmMgbHBfMgorICAgICAgICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3thLGN9Jzo6YnBjaGFy W10pKQorKDUgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxw IHdoZXJlIGEgaXMgbm90IG51bGwgYW5kIChhID0gJ2EnIG9yIGEgPSAnYycpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBTZXEgU2NhbiBv biBscF9hZCBscF8xCisgICAgICAgICBGaWx0ZXI6ICgoYSBJUyBOT1QgTlVMTCkgQU5EIChh ID0gQU5ZICgne2EsY30nOjpicGNoYXJbXSkpKQorICAgLT4gIFNlcSBTY2FuIG9uIGxwX2Jj IGxwXzIKKyAgICAgICAgIEZpbHRlcjogKChhIElTIE5PVCBOVUxMKSBBTkQgKGEgPSBBTlkg KCd7YSxjfSc6OmJwY2hhcltdKSkpCisoNSByb3dzKQorCitSRVNFVCBvcl90cmFuc2Zvcm1f bGltaXQ7CiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSA8 PiAnZyc7CiAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjcxLDYgKzY5MywxNjMgQEAgZXhw bGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSAoYSA9IDEgYW5kIGEg PSAzKSBvciAoYSA+IDEgYW5kIGEgPQogICAgICAgICAgRmlsdGVyOiAoKChhID0gMSkgQU5E IChhID0gMykpIE9SICgoYSA+IDEpIEFORCAoYSA9IDE1KSkpCiAoMTEgcm93cykKIAorU0VU IG9yX3RyYW5zZm9ybV9saW1pdCA9IG9uOworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3Qg KiBmcm9tIHJscCB3aGVyZSBhID0gMSBvciBhID0gNzsKKyAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcmxwMiBybHAKKyAgIEZpbHRlcjogKGEgPSBB TlkgKCd7MSw3fSc6OmludGVnZXJbXSkpCisoMiByb3dzKQorCitleHBsYWluIChjb3N0cyBv ZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAxIG9yIGIgPSAnYWInOworICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEFwcGVuZAorICAgLT4gIFNlcSBTY2FuIG9uIHJscDEgcmxwXzEKKyAgICAgICAgIEZpbHRl cjogKChhID0gMSkgT1IgKChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBT Y2FuIG9uIHJscDIgcmxwXzIKKyAgICAgICAgIEZpbHRlcjogKChhID0gMSkgT1IgKChiKTo6 dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDNhYmNkIHJscF8z CisgICAgICAgICBGaWx0ZXI6ICgoYSA9IDEpIE9SICgoYik6OnRleHQgPSAnYWInOjp0ZXh0 KSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA0XzEgcmxwXzQKKyAgICAgICAgIEZpbHRlcjog KChhID0gMSkgT1IgKChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBTY2Fu IG9uIHJscDRfMiBybHBfNQorICAgICAgICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoKGIpOjp0 ZXh0ID0gJ2FiJzo6dGV4dCkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNF9kZWZhdWx0IHJs cF82CisgICAgICAgICBGaWx0ZXI6ICgoYSA9IDEpIE9SICgoYik6OnRleHQgPSAnYWInOjp0 ZXh0KSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA1XzEgcmxwXzcKKyAgICAgICAgIEZpbHRl cjogKChhID0gMSkgT1IgKChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBT Y2FuIG9uIHJscDVfZGVmYXVsdCBybHBfOAorICAgICAgICAgRmlsdGVyOiAoKGEgPSAxKSBP UiAoKGIpOjp0ZXh0ID0gJ2FiJzo6dGV4dCkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwX2Rl ZmF1bHRfMTAgcmxwXzkKKyAgICAgICAgIEZpbHRlcjogKChhID0gMSkgT1IgKChiKTo6dGV4 dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscF9kZWZhdWx0XzMwIHJs cF8xMAorICAgICAgICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoKGIpOjp0ZXh0ID0gJ2FiJzo6 dGV4dCkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwX2RlZmF1bHRfbnVsbCBybHBfMTEKKyAg ICAgICAgIEZpbHRlcjogKChhID0gMSkgT1IgKChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQor ICAgLT4gIFNlcSBTY2FuIG9uIHJscF9kZWZhdWx0X2RlZmF1bHQgcmxwXzEyCisgICAgICAg ICBGaWx0ZXI6ICgoYSA9IDEpIE9SICgoYik6OnRleHQgPSAnYWInOjp0ZXh0KSkKKygyNSBy b3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEg PiAyMCBhbmQgYSA8IDI3OworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXBw ZW5kCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNF8xIHJscF8xCisgICAgICAgICBGaWx0ZXI6 ICgoYSA+IDIwKSBBTkQgKGEgPCAyNykpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNF8yIHJs cF8yCisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDIwKSBBTkQgKGEgPCAyNykpCisoNSByb3dz KQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAy OTsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcmxwNF9kZWZhdWx0IHJscAorICAgRmlsdGVy OiAoYSA9IDI5KQorKDIgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBm cm9tIHJscCB3aGVyZSBhID49IDI5OworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA0X2RlZmF1bHQgcmxw XzEKKyAgICAgICAgIEZpbHRlcjogKGEgPj0gMjkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxw NV8xIHJscF8yCisgICAgICAgICBGaWx0ZXI6IChhID49IDI5KQorICAgLT4gIFNlcSBTY2Fu IG9uIHJscDVfZGVmYXVsdCBybHBfMworICAgICAgICAgRmlsdGVyOiAoYSA+PSAyOSkKKyAg IC0+ICBTZXEgU2NhbiBvbiBybHBfZGVmYXVsdF8zMCBybHBfNAorICAgICAgICAgRmlsdGVy OiAoYSA+PSAyOSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHBfZGVmYXVsdF9kZWZhdWx0IHJs cF81CisgICAgICAgICBGaWx0ZXI6IChhID49IDI5KQorKDExIHJvd3MpCisKK2V4cGxhaW4g KGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA8IDEgb3IgKGEgPiAyMCBh bmQgYSA8IDI1KTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQXBwZW5kCisgICAtPiAgU2VxIFNjYW4gb24gcmxwMSBybHBf MQorICAgICAgICAgRmlsdGVyOiAoKGEgPCAxKSBPUiAoKGEgPiAyMCkgQU5EIChhIDwgMjUp KSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA0XzEgcmxwXzIKKyAgICAgICAgIEZpbHRlcjog KChhIDwgMSkgT1IgKChhID4gMjApIEFORCAoYSA8IDI1KSkpCisoNSByb3dzKQorCitleHBs YWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAyMCBvciBhID0g NDA7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBBcHBlbmQKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA0XzEgcmxwXzEKKyAgICAgICAgIEZp bHRlcjogKGEgPSBBTlkgKCd7MjAsNDB9Jzo6aW50ZWdlcltdKSkKKyAgIC0+ICBTZXEgU2Nh biBvbiBybHA1X2RlZmF1bHQgcmxwXzIKKyAgICAgICAgIEZpbHRlcjogKGEgPSBBTlkgKCd7 MjAsNDB9Jzo6aW50ZWdlcltdKSkKKyg1IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikg c2VsZWN0ICogZnJvbSBybHAzIHdoZXJlIGEgPSAyMDsgICAvKiBlbXB0eSAqLworICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVz dWx0CisgICBPbmUtVGltZSBGaWx0ZXI6IGZhbHNlCisoMiByb3dzKQorCitleHBsYWluIChj b3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPiAxIGFuZCBhID0gMTA7CS8q IG9ubHkgZGVmYXVsdCAqLworICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHJscF9k ZWZhdWx0XzEwIHJscAorICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPSAxMCkpCisoMiBy b3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEg PiAxIGFuZCBhID49MTU7CS8qIHJscDMgb253YXJkcywgaW5jbHVkaW5nIGRlZmF1bHQgKi8K KyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAg IC0+ICBTZXEgU2NhbiBvbiBybHAzYWJjZCBybHBfMQorICAgICAgICAgRmlsdGVyOiAoKGEg PiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDNlZmdoIHJscF8y CisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+PSAxNSkpCisgICAtPiAgU2Vx IFNjYW4gb24gcmxwM251bGx4eSBybHBfMworICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBB TkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDNfZGVmYXVsdCBybHBfNAor ICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBT Y2FuIG9uIHJscDRfMSBybHBfNQorICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEg Pj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDRfMiBybHBfNgorICAgICAgICAgRmls dGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDRf ZGVmYXVsdCBybHBfNworICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUp KQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDVfMSBybHBfOAorICAgICAgICAgRmlsdGVyOiAo KGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDVfZGVmYXVs dCBybHBfOQorICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAg LT4gIFNlcSBTY2FuIG9uIHJscF9kZWZhdWx0XzMwIHJscF8xMAorICAgICAgICAgRmlsdGVy OiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscF9kZWZh dWx0X2RlZmF1bHQgcmxwXzExCisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+ PSAxNSkpCisoMjMgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9t IHJscCB3aGVyZSBhID0gMSBhbmQgYSA9IDM7CS8qIGVtcHR5ICovCisgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyAg IE9uZS1UaW1lIEZpbHRlcjogZmFsc2UKKygyIHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9m Zikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgKGEgPSAxIGFuZCBhID0gMykgb3IgKGEgPiAx IGFuZCBhID0gMTUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAor ICAgLT4gIFNlcSBTY2FuIG9uIHJscDIgcmxwXzEKKyAgICAgICAgIEZpbHRlcjogKCgoYSA9 IDEpIEFORCAoYSA9IDMpKSBPUiAoKGEgPiAxKSBBTkQgKGEgPSAxNSkpKQorICAgLT4gIFNl cSBTY2FuIG9uIHJscDNhYmNkIHJscF8yCisgICAgICAgICBGaWx0ZXI6ICgoKGEgPSAxKSBB TkQgKGEgPSAzKSkgT1IgKChhID4gMSkgQU5EIChhID0gMTUpKSkKKyAgIC0+ICBTZXEgU2Nh biBvbiBybHAzZWZnaCBybHBfMworICAgICAgICAgRmlsdGVyOiAoKChhID0gMSkgQU5EIChh ID0gMykpIE9SICgoYSA+IDEpIEFORCAoYSA9IDE1KSkpCisgICAtPiAgU2VxIFNjYW4gb24g cmxwM251bGx4eSBybHBfNAorICAgICAgICAgRmlsdGVyOiAoKChhID0gMSkgQU5EIChhID0g MykpIE9SICgoYSA+IDEpIEFORCAoYSA9IDE1KSkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxw M19kZWZhdWx0IHJscF81CisgICAgICAgICBGaWx0ZXI6ICgoKGEgPSAxKSBBTkQgKGEgPSAz KSkgT1IgKChhID4gMSkgQU5EIChhID0gMTUpKSkKKygxMSByb3dzKQorCitSRVNFVCBvcl90 cmFuc2Zvcm1fbGltaXQ7CiAtLSBtdWx0aS1jb2x1bW4ga2V5cwogY3JlYXRlIHRhYmxlIG1j M3AgKGEgaW50LCBiIGludCwgYyBpbnQpIHBhcnRpdGlvbiBieSByYW5nZSAoYSwgYWJzKGIp LCBjKTsKIGNyZWF0ZSB0YWJsZSBtYzNwX2RlZmF1bHQgcGFydGl0aW9uIG9mIG1jM3AgZGVm YXVsdDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdGlkc2Nhbi5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RpZHNjYW4ub3V0CmluZGV4IGYxMzNi NWE0YWM3Li44YTMxZTJlNjcwZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC90aWRzY2FuLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RpZHNj YW4ub3V0CkBAIC01Niw2ICs1NiwyMyBAQCBTRUxFQ1QgY3RpZCwgKiBGUk9NIHRpZHNjYW4g V0hFUkUgY3RpZCA9ICcoMCwyKScgT1IgJygwLDEpJyA9IGN0aWQ7CiAgKDAsMikgfCAgMgog KDIgcm93cykKIAorU0VUIG9yX3RyYW5zZm9ybV9saW1pdCA9IG9uOworRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUIGN0aWQsICogRlJPTSB0aWRzY2FuIFdIRVJFIGN0aWQgPSAnKDAs MiknIE9SICcoMCwxKScgPSBjdGlkOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRpZCBTY2FuIG9uIHRpZHNjYW4KKyAg IFRJRCBDb25kOiAoY3RpZCA9IEFOWSAoJ3siKDAsMikiLCIoMCwxKSJ9Jzo6dGlkW10pKQor KDIgcm93cykKKworU0VMRUNUIGN0aWQsICogRlJPTSB0aWRzY2FuIFdIRVJFIGN0aWQgPSAn KDAsMiknIE9SICcoMCwxKScgPSBjdGlkOworIGN0aWQgIHwgaWQgCistLS0tLS0tKy0tLS0K KyAoMCwxKSB8ICAxCisgKDAsMikgfCAgMgorKDIgcm93cykKKworUkVTRVQgb3JfdHJhbnNm b3JtX2xpbWl0OwogLS0gY3RpZCA9IFNjYWxhckFycmF5T3AgLSBpbXBsZW1lbnRlZCBhcyB0 aWRzY2FuCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgY3RpZCwgKiBGUk9NIHRpZHNj YW4gV0hFUkUgY3RpZCA9IEFOWShBUlJBWVsnKDAsMSknLCAnKDAsMiknXTo6dGlkW10pOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwKaW5kZXggZDQ5Y2U5ZjMwMDcu LmE3MDliMmMxYWJjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVf aW5kZXguc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwK QEAgLTczNyw2ICs3MzcsMzggQEAgU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKIFNFTEVD VCBjb3VudCgqKSBGUk9NIHRlbmsxCiAgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3Vz YW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSk7CiAKK1NFVCBvcl90cmFuc2Zvcm1fbGltaXQg PSBvbjsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gdGVuazEKKyAgV0hF UkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMgT1Ig dGVudGhvdXMgPSA0Mik7CitTRUxFQ1QgKiBGUk9NIHRlbmsxCisgIFdIRVJFIHRob3VzYW5k ID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzIE9SIHRlbnRob3VzID0g NDIpOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5r MQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5k ID0gOTkpOworU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9 IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5KTsKKworRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNh bmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMpIE9SIHRob3VzYW5k ID0gNDE7CitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSB0aG91c2FuZCA9 IDQyIEFORCAodGVudGhvdXMgPSAxIE9SIHRlbnRob3VzID0gMykgT1IgdGhvdXNhbmQgPSA0 MTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEK KyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9 IDk5IE9SIHRlbnRob3VzIDwgMikgT1IgdGhvdXNhbmQgPSA0MTsKK1NFTEVDVCBjb3VudCgq KSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIg T1IgdGhvdXNhbmQgPSA5OSBPUiB0ZW50aG91cyA8IDIpIE9SIHRob3VzYW5kID0gNDE7CisK K0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdI RVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA0MSBP UiB0aG91c2FuZCA9IDk5IEFORCB0ZW50aG91cyA9IDIpOworU0VMRUNUIGNvdW50KCopIEZS T00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0 aG91c2FuZCA9IDQxIE9SIHRob3VzYW5kID0gOTkgQU5EIHRlbnRob3VzID0gMik7CitSRVNF VCBvcl90cmFuc2Zvcm1fbGltaXQ7CisKIC0tCiAtLSBDaGVjayBiZWhhdmlvciB3aXRoIGR1 cGxpY2F0ZSBpbmRleCBjb2x1bW4gY29udGVudHMKIC0tCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9qb2luLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3Fs CmluZGV4IDY2ZGQwM2RkODhiLi5mNWRjZjhiOTBhNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvam9pbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5z cWwKQEAgLTEzOTYsNiArMTM5NiwxNiBAQCBleHBsYWluIChjb3N0cyBvZmYpCiBzZWxlY3Qg KiBmcm9tIHRlbmsxIGEgam9pbiB0ZW5rMSBiIG9uCiAgIChhLnVuaXF1ZTEgPSAxIGFuZCBi LnVuaXF1ZTEgPSAyKSBvcgogICAoKGEudW5pcXVlMiA9IDMgb3IgYS51bmlxdWUyID0gNykg YW5kIGIuaHVuZHJlZCA9IDQpOworU0VUIG9yX3RyYW5zZm9ybV9saW1pdCA9IG9uOworZXhw bGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSB0ZW5rMSBhIGpvaW4gdGVuazEgYiBv bgorICAoYS51bmlxdWUxID0gMSBhbmQgYi51bmlxdWUxID0gMikgb3IKKyAgKChhLnVuaXF1 ZTIgPSAzIG9yIGEudW5pcXVlMiA9IDcpIGFuZCBiLmh1bmRyZWQgPSA0KTsKK2V4cGxhaW4g KGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gdGVuazEgYSBqb2luIHRlbmsxIGIgb24KKyAg KGEudW5pcXVlMSA8IDIwIG9yIGEudW5pcXVlMSA9IDMgb3IgYS51bmlxdWUxID0gMSBhbmQg Yi51bmlxdWUxID0gMikgb3IKKyAgKChhLnVuaXF1ZTIgPSAzIG9yIGEudW5pcXVlMiA9IDcp IGFuZCBiLmh1bmRyZWQgPSA0KTsKK1JFU0VUIG9yX3RyYW5zZm9ybV9saW1pdDsKIAogLS0K IC0tIHRlc3QgcGxhY2VtZW50IG9mIG1vdmFibGUgcXVhbHMgaW4gYSBwYXJhbWV0ZXJpemVk IGpvaW4gdHJlZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9u X3BydW5lLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9wcnVuZS5zcWwK aW5kZXggN2JmMzkyMDgyN2YuLjg4NzA5OTEwNTkyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9wYXJ0aXRpb25fcHJ1bmUuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3BhcnRpdGlvbl9wcnVuZS5zcWwKQEAgLTIxLDYgKzIxLDEyIEBAIGV4cGxhaW4gKGNv c3RzIG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhIGlzIG5vdCBudWxsOwogZXhwbGFp biAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgaXMgbnVsbDsKIGV4cGxh aW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhID0gJ2EnIG9yIGEgPSAn Yyc7CiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSBpcyBu b3QgbnVsbCBhbmQgKGEgPSAnYScgb3IgYSA9ICdjJyk7CisKK1NFVCBvcl90cmFuc2Zvcm1f bGltaXQgPSBvbjsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVy ZSBhID0gJ2EnIG9yIGEgPSAnYyc7CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZy b20gbHAgd2hlcmUgYSBpcyBub3QgbnVsbCBhbmQgKGEgPSAnYScgb3IgYSA9ICdjJyk7CitS RVNFVCBvcl90cmFuc2Zvcm1fbGltaXQ7CisKIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0 ICogZnJvbSBscCB3aGVyZSBhIDw+ICdnJzsKIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0 ICogZnJvbSBscCB3aGVyZSBhIDw+ICdhJyBhbmQgYSA8PiAnZCc7CiBleHBsYWluIChjb3N0 cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSBub3QgaW4gKCdhJywgJ2QnKTsKQEAg LTk5LDYgKzEwNSwyMiBAQCBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxw IHdoZXJlIGEgPiAxIGFuZCBhID49MTU7CS8qIHJscDMgb253YXJkcywgaQogZXhwbGFpbiAo Y29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID0gMSBhbmQgYSA9IDM7CS8q IGVtcHR5ICovCiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJl IChhID0gMSBhbmQgYSA9IDMpIG9yIChhID4gMSBhbmQgYSA9IDE1KTsKIAorCitTRVQgb3Jf dHJhbnNmb3JtX2xpbWl0ID0gb247CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZy b20gcmxwIHdoZXJlIGEgPSAxIG9yIGEgPSA3OworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxl Y3QgKiBmcm9tIHJscCB3aGVyZSBhID0gMSBvciBiID0gJ2FiJzsKK2V4cGxhaW4gKGNvc3Rz IG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA+IDIwIGFuZCBhIDwgMjc7CitleHBs YWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAyOTsKK2V4cGxh aW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA+PSAyOTsKK2V4cGxh aW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA8IDEgb3IgKGEgPiAy MCBhbmQgYSA8IDI1KTsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAg d2hlcmUgYSA9IDIwIG9yIGEgPSA0MDsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICog ZnJvbSBybHAzIHdoZXJlIGEgPSAyMDsgICAvKiBlbXB0eSAqLworZXhwbGFpbiAoY29zdHMg b2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID4gMSBhbmQgYSA9IDEwOwkvKiBvbmx5 IGRlZmF1bHQgKi8KK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hl cmUgYSA+IDEgYW5kIGEgPj0xNTsJLyogcmxwMyBvbndhcmRzLCBpbmNsdWRpbmcgZGVmYXVs dCAqLworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID0g MSBhbmQgYSA9IDM7CS8qIGVtcHR5ICovCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAq IGZyb20gcmxwIHdoZXJlIChhID0gMSBhbmQgYSA9IDMpIG9yIChhID4gMSBhbmQgYSA9IDE1 KTsKK1JFU0VUIG9yX3RyYW5zZm9ybV9saW1pdDsKKwogLS0gbXVsdGktY29sdW1uIGtleXMK IGNyZWF0ZSB0YWJsZSBtYzNwIChhIGludCwgYiBpbnQsIGMgaW50KSBwYXJ0aXRpb24gYnkg cmFuZ2UgKGEsIGFicyhiKSwgYyk7CiBjcmVhdGUgdGFibGUgbWMzcF9kZWZhdWx0IHBhcnRp dGlvbiBvZiBtYzNwIGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC90aWRzY2FuLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RpZHNjYW4uc3FsCmluZGV4 IDMxM2UwZmI5YjY3Li5jNzM1ZTIxOTU4OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvdGlkc2Nhbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdGlkc2Nhbi5z cWwKQEAgLTIyLDYgKzIyLDEyIEBAIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCBjdGlk LCAqIEZST00gdGlkc2NhbiBXSEVSRSBjdGlkID0gJygwLDIpJyBPUiAnKDAsMSknID0gY3Rp ZDsKIFNFTEVDVCBjdGlkLCAqIEZST00gdGlkc2NhbiBXSEVSRSBjdGlkID0gJygwLDIpJyBP UiAnKDAsMSknID0gY3RpZDsKIAorU0VUIG9yX3RyYW5zZm9ybV9saW1pdCA9IG9uOworRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGN0aWQsICogRlJPTSB0aWRzY2FuIFdIRVJFIGN0 aWQgPSAnKDAsMiknIE9SICcoMCwxKScgPSBjdGlkOworU0VMRUNUIGN0aWQsICogRlJPTSB0 aWRzY2FuIFdIRVJFIGN0aWQgPSAnKDAsMiknIE9SICcoMCwxKScgPSBjdGlkOworUkVTRVQg b3JfdHJhbnNmb3JtX2xpbWl0OworCiAtLSBjdGlkID0gU2NhbGFyQXJyYXlPcCAtIGltcGxl bWVudGVkIGFzIHRpZHNjYW4KIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCBjdGlkLCAq IEZST00gdGlkc2NhbiBXSEVSRSBjdGlkID0gQU5ZKEFSUkFZWycoMCwxKScsICcoMCwyKSdd Ojp0aWRbXSk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDg3YzFhZWUzNzlm Li44Y2VhNmE2Yjg1MSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2Mzgs NiArMTYzOCw3IEBAIE51bWVyaWNWYXIKIE9NX3VpbnQzMgogT1AKIE9TQVBlckdyb3VwU3Rh dGUKK09yQ2xhdXNlR3JvdXBFbnRyeQogT1NBUGVyUXVlcnlTdGF0ZQogT1NJbmZvCiBPU1NM Q2lwaGVyCi0tIAoyLjM0LjEKCg== --------------ZHp09V5As5kbhp7uoWegm96j Content-Type: text/x-patch; charset=UTF-8; name="or_patch_bitmapindex_create.diff" Content-Disposition: attachment; filename="or_patch_bitmapindex_create.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IDAzYTVmYmRjNmRj Li43NTRjODM4MTZmNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv aW5keHBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5j CkBAIC0zNCw2ICszNCwxMSBAQAogI2luY2x1ZGUgIm9wdGltaXplci9yZXN0cmljdGluZm8u aCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9zZWxm dW5jcy5oIgorI2luY2x1ZGUgImNvbW1vbi9oYXNoZm4uaCIKKyNpbmNsdWRlICJ1dGlscy9s c3lzY2FjaGUuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfZXhwci5oIgorI2luY2x1ZGUg InBhcnNlci9wYXJzZV9jb2VyY2UuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2Vfb3Blci5o IgogCiAKIC8qIFhYWCBzZWUgUGFydENvbGxNYXRjaGVzRXhwckNvbGwgKi8KQEAgLTczLDYg Kzc4LDM2IEBAIHR5cGVkZWYgc3RydWN0CiAJaW50CQkJaW5kZXhjb2w7CQkvKiBpbmRleCBj b2x1bW4gd2Ugd2FudCB0byBtYXRjaCB0byAqLwogfSBlY19tZW1iZXJfbWF0Y2hlc19hcmc7 CiAKK3R5cGVkZWYgc3RydWN0IE9yQ2xhdXNlR3JvdXBFbnRyeQoreworCWNoYXIJCSAgICpo YXNoX2xlZnR2YXJfa2V5OworCisJTm9kZQkJICAgKm5vZGU7CisJTGlzdAkJICAgKmNvbnN0 czsKKwlPaWQJCQkJc2NhbGFyX3R5cGU7CisJT2lkCQkJCW9wbm87CisJTm9kZSAJCSAgICpl eHByOworCVJlc3RyaWN0SW5mbwkqcmk7Cit9IE9yQ2xhdXNlR3JvdXBFbnRyeTsKKworc3Rh dGljIGludAorb3JfbmFtZV9tYXRjaChjb25zdCB2b2lkICprZXkxLCBjb25zdCB2b2lkICpr ZXkyLCBTaXplIGtleXNpemUpCit7CisJY29uc3QgY2hhciAqbmFtZTEgPSAqKGNvbnN0IGNo YXIgKmNvbnN0ICopIGtleTE7CisJY29uc3QgY2hhciAqbmFtZTIgPSAqKGNvbnN0IGNoYXIg KmNvbnN0ICopIGtleTI7CisKKwlyZXR1cm4gc3RyY21wKG5hbWUxLCBuYW1lMik7Cit9CisK K3N0YXRpYyB1aW50MzIKK29yX25hbWVfaGFzaChjb25zdCB2b2lkICprZXksIFNpemUga2V5 c2l6ZSkKK3sKKwljb25zdCBjaGFyICpuYW1lID0gKihjb25zdCBjaGFyICpjb25zdCAqKSBr ZXk7CisKKwlyZXR1cm4gRGF0dW1HZXRJbnQzMihoYXNoX2FueSgodW5zaWduZWQgY2hhciAq KW5hbWUsIHN0cmxlbihuYW1lKSkpOworfQorCitib29sCQllbmFibGVfb3JfdHJhbnNmb3Jt YXRpb24gPSB0cnVlOwogCiBzdGF0aWMgdm9pZCBjb25zaWRlcl9pbmRleF9qb2luX2NsYXVz ZXMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCQlJbmRl eE9wdEluZm8gKmluZGV4LApAQCAtMTkzLDYgKzIyOCw1NSBAQCBzdGF0aWMgYm9vbCBlY19t ZW1iZXJfbWF0Y2hlc19pbmRleGNvbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cmVsLAogCQkJCQkJCQkJICAgRXF1aXZhbGVuY2VDbGFzcyAqZWMsIEVxdWl2YWxlbmNlTWVt YmVyICplbSwKIAkJCQkJCQkJCSAgIHZvaWQgKmFyZyk7CiAKK3N0YXRpYyBjaGFyICoKK2dl dF9rZXlfbmNvbnN0X25vZGUoTm9kZSAqbmNvbnN0X25vZGUpCit7CisJaWYgKElzQShuY29u c3Rfbm9kZSwgT3BFeHByKSkKKwl7CisJCU9wRXhwciAJICAgKmNsYXVzZSA9IChPcEV4cHIq KSBuY29uc3Rfbm9kZTsKKwkJT3BFeHByCSAgICp0ZW1wID0gbWFrZU5vZGUoT3BFeHByKTsK KworCQl0ZW1wLT5vcG5vID0gY2xhdXNlLT5vcG5vOworCQl0ZW1wLT5vcGZ1bmNpZCA9IElu dmFsaWRPaWQ7CisJCXRlbXAtPm9wcmVzdWx0dHlwZSA9IGNsYXVzZS0+b3ByZXN1bHR0eXBl OworCQl0ZW1wLT5vcHJldHNldCA9IGNsYXVzZS0+b3ByZXRzZXQ7CisJCXRlbXAtPm9wY29s bGlkID0gY2xhdXNlLT5vcGNvbGxpZDsKKwkJdGVtcC0+aW5wdXRjb2xsaWQgPSBjbGF1c2Ut PmlucHV0Y29sbGlkOworCQl0ZW1wLT5sb2NhdGlvbiA9IC0xOworCisJCXRlbXAtPmFyZ3Mg PSBsaXN0X2NvcHkoY2xhdXNlLT5hcmdzKTsKKwkJcmV0dXJuIG5vZGVUb1N0cmluZyh0ZW1w KTsKKwl9CisJZWxzZSBpZiAoSXNBKG5jb25zdF9ub2RlLCBWYXIpKQorCXsKKwkJVmFyCSAg ICpjbGF1c2UgPSAoVmFyKikgbmNvbnN0X25vZGU7CisJCVZhcgkgICAqdmFyID0gbWFrZU5v ZGUoVmFyKTsKKworCQl2YXItPnZhcm5vID0gY2xhdXNlLT52YXJubzsKKwkJdmFyLT52YXJh dHRubyA9IGNsYXVzZS0+dmFyYXR0bm87CisJCXZhci0+dmFydHlwZSA9IGNsYXVzZS0+dmFy dHlwZTsKKwkJdmFyLT52YXJ0eXBtb2QgPSBjbGF1c2UtPnZhcnR5cG1vZDsKKwkJdmFyLT52 YXJjb2xsaWQgPSBjbGF1c2UtPnZhcmNvbGxpZDsKKwkJdmFyLT52YXJsZXZlbHN1cCA9IGNs YXVzZS0+dmFybGV2ZWxzdXA7CisJCXZhci0+dmFyYXR0bm9zeW4gPSBjbGF1c2UtPnZhcmF0 dG5vOworCXZhci0+bG9jYXRpb24gPSAtMTsKKworCQlyZXR1cm4gbm9kZVRvU3RyaW5nKHZh cik7CisJfQorCWVsc2UKKwl7CisJCXJldHVybiBOVUxMOworCX0KK30KKworLyoKKyAqIFBh c3MgdGhyb3VnaCBiYXNlcmVzdHJpY3RpbmZvIGNsYXVzZXMgYW5kIHRyeSB0byBjb252ZXJ0 IE9SIGNsYXVzZXMgaW50byBJTgorICogUmV0dXJuIGEgbW9kaWZpZWQgY2xhdXNlIGxpc3Qg b3IganVzdCB0aGUgc2FtZSBiYXNlcmVzdHJpY3RpbmZvLCBpZiBubworICogY2hhbmdlcyBo YXZlIG1hZGUuCisgKiBYWFg6IGRvIG5vdCBjaGFuZ2Ugc291cmNlIGxpc3Qgb2YgY2xhdXNl cyBhdCBhbGwuCisgKi8KKworCiAKIC8qCiAgKiBjcmVhdGVfaW5kZXhfcGF0aHMoKQpAQCAt MjUwLDYgKzMzNCwxMyBAQCBjcmVhdGVfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnJlbCkKIAkvKiBCaXRtYXAgcGF0aHMgYXJlIGNvbGxlY3RlZCBhbmQg dGhlbiBkZWFsdCB3aXRoIGF0IHRoZSBlbmQgKi8KIAliaXRpbmRleHBhdGhzID0gYml0am9p bnBhdGhzID0gam9pbm9yY2xhdXNlcyA9IE5JTDsKIAorCS8qCisJICogR2VuZXJhdGUgQml0 bWFwT3JQYXRocyBmb3IgYW55IHN1aXRhYmxlIE9SLWNsYXVzZXMgcHJlc2VudCBpbiB0aGUK KwkgKiByZXN0cmljdGlvbiBsaXN0LiAgQWRkIHRoZXNlIHRvIGJpdGluZGV4cGF0aHMuCisJ ICovCisJaW5kZXhwYXRocyA9IGdlbmVyYXRlX2JpdG1hcF9vcl9wYXRocyhyb290LCByZWws CisJCQkJCQkJCQkJICByZWwtPmJhc2VyZXN0cmljdGluZm8sIE5JTCk7CisKIAkvKiBFeGFt aW5lIGVhY2ggaW5kZXggaW4gdHVybiAqLwogCWZvcmVhY2gobGMsIHJlbC0+aW5kZXhsaXN0 KQogCXsKQEAgLTMwOSwxMyArNDAwLDcgQEAgY3JlYXRlX2luZGV4X3BhdGhzKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpCiAJCQkJCQkJCQkJJmVjbGF1c2VzZXQsCiAJ CQkJCQkJCQkJJmJpdGpvaW5wYXRocyk7CiAJfQotCi0JLyoKLQkgKiBHZW5lcmF0ZSBCaXRt YXBPclBhdGhzIGZvciBhbnkgc3VpdGFibGUgT1ItY2xhdXNlcyBwcmVzZW50IGluIHRoZQot CSAqIHJlc3RyaWN0aW9uIGxpc3QuICBBZGQgdGhlc2UgdG8gYml0aW5kZXhwYXRocy4KLQkg Ki8KLQlpbmRleHBhdGhzID0gZ2VuZXJhdGVfYml0bWFwX29yX3BhdGhzKHJvb3QsIHJlbCwK LQkJCQkJCQkJCQkgIHJlbC0+YmFzZXJlc3RyaWN0aW5mbywgTklMKTsKKwkKIAliaXRpbmRl eHBhdGhzID0gbGlzdF9jb25jYXQoYml0aW5kZXhwYXRocywgaW5kZXhwYXRocyk7CiAKIAkv KgpAQCAtMTIzNyw2ICsxMzIyLDcgQEAgZ2VuZXJhdGVfYml0bWFwX29yX3BhdGhzKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJTGlzdAkgICAqcmVzdWx0ID0gTklM OwogCUxpc3QJICAgKmFsbF9jbGF1c2VzOwogCUxpc3RDZWxsICAgKmxjOworCUxpc3QJICAg Km1vZGlmaWVkX3JpbmZvID0gTklMOwogCiAJLyoKIAkgKiBXZSBjYW4gdXNlIGJvdGggdGhl IGN1cnJlbnQgYW5kIG90aGVyIGNsYXVzZXMgYXMgY29udGV4dCBmb3IKQEAgLTEyNDcsMjMg KzEzMzMsNDUgQEAgZ2VuZXJhdGVfYml0bWFwX29yX3BhdGhzKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpyZWwsCiAJZm9yZWFjaChsYywgY2xhdXNlcykKIAl7CiAJCVJlc3Ry aWN0SW5mbyAqcmluZm8gPSBsZmlyc3Rfbm9kZShSZXN0cmljdEluZm8sIGxjKTsKLQkJTGlz dAkgICAqcGF0aGxpc3Q7CisJCUxpc3QJICAgKnBhdGhsaXN0ID0gTklMOwogCQlQYXRoCSAg ICpiaXRtYXBxdWFsOwotCQlMaXN0Q2VsbCAgICpqOworCQlMaXN0Q2VsbCAgICpsY19yYXJn cywgKmxjX2VhcmdzOworCQlIQVNIQ1RMCQlpbmZvOworCQlIVEFCIAkgICAqb3JfZ3JvdXBf aHRhYiA9IE5VTEw7CisJCWludCAJCWxlbl9vcnMgPSAwOworCQlMaXN0CSAgICpvcl9saXN0 ID0gTklMOwogCiAJCS8qIElnbm9yZSBSZXN0cmljdEluZm9zIHRoYXQgYXJlbid0IE9ScyAq LwogCQlpZiAoIXJlc3RyaWN0aW9uX2lzX29yX2NsYXVzZShyaW5mbykpCisJCXsKKwkJCW1v ZGlmaWVkX3JpbmZvID0gbGFwcGVuZChtb2RpZmllZF9yaW5mbywgcmluZm8pOwogCQkJY29u dGludWU7CisJCX0KKworCQlsZW5fb3JzID0gbGlzdF9sZW5ndGgoKChCb29sRXhwciAqKSBy aW5mby0+b3JjbGF1c2UpLT5hcmdzKTsKKworCQlNZW1TZXQoJmluZm8sIDAsIHNpemVvZihp bmZvKSk7CisJCWluZm8ua2V5c2l6ZSA9IHNpemVvZihjaGFyICopOworCQlpbmZvLmVudHJ5 c2l6ZSA9IHNpemVvZihPckNsYXVzZUdyb3VwRW50cnkpOworCQlpbmZvLmhhc2ggPSBvcl9u YW1lX2hhc2g7CisJCWluZm8ubWF0Y2ggPSBvcl9uYW1lX21hdGNoOworCQlvcl9ncm91cF9o dGFiID0gaGFzaF9jcmVhdGUoIk9SIEdyb3VwcyIsCisJCQkJCQkJCQkJbGVuX29ycywKKwkJ CQkJCQkJCSAgJmluZm8sCisJCQkJCQkJCQkgIEhBU0hfRUxFTSB8IEhBU0hfRlVOQ1RJT04g fCBIQVNIX0NPTVBBUkUpOwogCiAJCS8qCiAJCSAqIFdlIG11c3QgYmUgYWJsZSB0byBtYXRj aCBhdCBsZWFzdCBvbmUgaW5kZXggdG8gZWFjaCBvZiB0aGUgYXJtcyBvZgogCQkgKiB0aGUg T1IsIGVsc2Ugd2UgY2FuJ3QgdXNlIGl0LgogCQkgKi8KIAkJcGF0aGxpc3QgPSBOSUw7Ci0J CWZvcmVhY2goaiwgKChCb29sRXhwciAqKSByaW5mby0+b3JjbGF1c2UpLT5hcmdzKQorCQlm b3Jib3RoKGxjX2VhcmdzLCAoKEJvb2xFeHByICopIHJpbmZvLT5jbGF1c2UpLT5hcmdzLAor CQkJCWxjX3JhcmdzLCAoKEJvb2xFeHByICopIHJpbmZvLT5vcmNsYXVzZSktPmFyZ3MpCiAJ CXsKLQkJCU5vZGUJICAgKm9yYXJnID0gKE5vZGUgKikgbGZpcnN0KGopOworCQkJTm9kZQkg ICAqb3JhcmcgPSAoTm9kZSAqKSBsZmlyc3QobGNfcmFyZ3MpOwogCQkJTGlzdAkgICAqaW5k bGlzdDsKKwkJCU9yQ2xhdXNlR3JvdXBFbnRyeSAqZ2VudHJ5OworCQkJTm9kZQkgICAqb3Jx dWFsID0gKE5vZGUgKikgbGZpcnN0KGxjX2VhcmdzKTsKIAogCQkJLyogT1IgYXJndW1lbnRz IHNob3VsZCBiZSBBTkRzIG9yIHN1Yi1SZXN0cmljdEluZm9zICovCiAJCQlpZiAoaXNfYW5k Y2xhdXNlKG9yYXJnKSkKQEAgLTEyNzksMzYgKzEzODcsMzA5IEBAIGdlbmVyYXRlX2JpdG1h cF9vcl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJ CQkJICBnZW5lcmF0ZV9iaXRtYXBfb3JfcGF0aHMocm9vdCwgcmVsLAogCQkJCQkJCQkJCQkJ CQkJICAgYW5kYXJncywKIAkJCQkJCQkJCQkJCQkJCSAgIGFsbF9jbGF1c2VzKSk7CisJCQkJ b3JfbGlzdCA9IGxhcHBlbmQob3JfbGlzdCwgb3JxdWFsKTsKIAkJCX0KIAkJCWVsc2UKIAkJ CXsKIAkJCQlSZXN0cmljdEluZm8gKnJpID0gY2FzdE5vZGUoUmVzdHJpY3RJbmZvLCBvcmFy Zyk7Ci0JCQkJTGlzdAkgICAqb3JhcmdzOworCQkJCVJlc3RyaWN0SW5mbyAqc3ViX3JpbmZv ID0gbGZpcnN0X25vZGUoUmVzdHJpY3RJbmZvLCBsY19yYXJncyk7CisJCQkJTm9kZSAqbmNv bnN0X2V4cHIgPSBOVUxMOworCQkJCU5vZGUgKmNvbnN0X2V4cHIgPSBOVUxMOworCQkJCWNo YXIgKnN0ciA9IE5VTEw7CisJCQkJYm9vbCBmb3VuZDsKIAogCQkJCUFzc2VydCghcmVzdHJp Y3Rpb25faXNfb3JfY2xhdXNlKHJpKSk7Ci0JCQkJb3JhcmdzID0gbGlzdF9tYWtlMShyaSk7 CiAKLQkJCQlpbmRsaXN0ID0gYnVpbGRfcGF0aHNfZm9yX09SKHJvb3QsIHJlbCwKLQkJCQkJ CQkJCQkJIG9yYXJncywKLQkJCQkJCQkJCQkJIGFsbF9jbGF1c2VzKTsKKwkJCQlpZiAoIUlz QShsZmlyc3QobGNfcmFyZ3MpLCBSZXN0cmljdEluZm8pIHx8ICFlbmFibGVfb3JfdHJhbnNm b3JtYXRpb24gfHwKKwkJCQkvKiBDaGVjazogaXQgaXMgYW4gZXhwciBvZiB0aGUgZm9ybSAn Rih4KSBvcGVyIENvbnN0RXhwcicgKi8KKwkJCQkJIUlzQShzdWJfcmluZm8tPmNsYXVzZSwg T3BFeHByKSB8fAorCQkJCQkhKGJtc19pc19lbXB0eShzdWJfcmluZm8tPmxlZnRfcmVsaWRz KSBeCisJCQkJCWJtc19pc19lbXB0eShzdWJfcmluZm8tPnJpZ2h0X3JlbGlkcykpIHx8CisJ CQkJCWNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zKChOb2RlICopIG9yYXJnKSkKKwkJCQl7 CisJCQkJCUxpc3QJICAgKm9yYXJnczsKKwkJCQkJb3JhcmdzID0gbGlzdF9tYWtlMShyaSk7 CisJCQkJCWluZGxpc3QgPSBidWlsZF9wYXRoc19mb3JfT1Iocm9vdCwgcmVsLAorCQkJCQkJ CQkJCQkJb3JhcmdzLAorCQkJCQkJCQkJCQkJYWxsX2NsYXVzZXMpOworCQkJCQkvKgorCQkJ CQkqIElmIG5vdGhpbmcgbWF0Y2hlZCB0aGlzIGFybSwgd2UgY2FuJ3QgZG8gYW55dGhpbmcg d2l0aCB0aGlzIE9SCisJCQkJCSogY2xhdXNlLgorCQkJCQkqLworCQkJCQlpZiAoaW5kbGlz dCA9PSBOSUwpCisJCQkJCXsKKwkJCQkJCXBhdGhsaXN0ID0gTklMOworCQkJCQkJYnJlYWs7 CisJCQkJCX0KKworCQkJCQkvKgorCQkJCQkqIE9LLCBwaWNrIHRoZSBtb3N0IHByb21pc2lu ZyBBTkQgY29tYmluYXRpb24sIGFuZCBhZGQgaXQgdG8KKwkJCQkJKiBwYXRobGlzdC4KKwkJ CQkJKi8KKwkJCQkJYml0bWFwcXVhbCA9IGNob29zZV9iaXRtYXBfYW5kKHJvb3QsIHJlbCwg aW5kbGlzdCk7CisJCQkJCXBhdGhsaXN0ID0gbGFwcGVuZChwYXRobGlzdCwgYml0bWFwcXVh bCk7CisJCQkJCW9yX2xpc3QgPSBsYXBwZW5kKG9yX2xpc3QsIG9ycXVhbCk7CisJCQkJCWNv bnRpbnVlOworCQkJCX0KKworCQkJCS8qCisJCQkJKiBEZXRlY3QgdGhlIGNvbnN0YW50IHNp ZGUgb2YgdGhlIGNsYXVzZS4gUmVjYWxsIG5vbi1jb25zdGFudAorCQkJCSogZXhwcmVzc2lv biBjYW4gYmUgbWFkZSBub3Qgb25seSB3aXRoIFZhcnMsIGJ1dCBhbHNvIHdpdGggUGFyYW1z LAorCQkJCSogd2hpY2ggaXMgbm90IGJvbmRlZCB3aXRoIGFueSByZWxhdGlvbi4gVGh1cywg d2UgZGV0ZWN0IHRoZSBjb25zdAorCQkJCSogc2lkZSAtIGlmIGFub3RoZXIgc2lkZSBpcyBj b25zdGFudCB0b28sIHRoZSBvcnF1YWwgY291bGRuJ3QgYmUKKwkJCQkqIGFuIE9wRXhwci4K KwkJCQkqIEdldCBwb2ludGVycyB0byBjb25zdGFudCBhbmQgZXhwcmVzc2lvbiBzaWRlcyBv ZiB0aGUgcXVhbC4KKwkJCQkqLworCQkJCWNvbnN0X2V4cHIgPWJtc19pc19lbXB0eShzdWJf cmluZm8tPmxlZnRfcmVsaWRzKSA/CisJCQkJCQkJCQkJCQlnZXRfbGVmdG9wKHN1Yl9yaW5m by0+Y2xhdXNlKSA6CisJCQkJCQkJCQkJCQlnZXRfcmlnaHRvcChzdWJfcmluZm8tPmNsYXVz ZSk7CisJCQkJbmNvbnN0X2V4cHIgPSBibXNfaXNfZW1wdHkoc3ViX3JpbmZvLT5sZWZ0X3Jl bGlkcykgPworCQkJCQkJCQkJCQkJZ2V0X3JpZ2h0b3Aoc3ViX3JpbmZvLT5jbGF1c2UpIDoK KwkJCQkJCQkJCQkJCWdldF9sZWZ0b3Aoc3ViX3JpbmZvLT5jbGF1c2UpOworCisJCQkJc3Ry ID0gZ2V0X2tleV9uY29uc3Rfbm9kZShuY29uc3RfZXhwcik7CisKKwkJCQlpZiAoIW9wX21l cmdlam9pbmFibGUoKChPcEV4cHIqKXN1Yl9yaW5mby0+Y2xhdXNlKS0+b3BubywgZXhwclR5 cGUobmNvbnN0X2V4cHIpKSB8fCBzdHIgPT0gTlVMTCkKKwkJCQl7CisJCQkJCUxpc3QJICAg Km9yYXJnczsKKwkJCQkJb3JhcmdzID0gbGlzdF9tYWtlMShyaSk7CisJCQkJCWluZGxpc3Qg PSBidWlsZF9wYXRoc19mb3JfT1Iocm9vdCwgcmVsLAorCQkJCQkJCQkJCQkJb3JhcmdzLAor CQkJCQkJCQkJCQkJYWxsX2NsYXVzZXMpOworCQkJCQkvKgorCQkJCQkqIElmIG5vdGhpbmcg bWF0Y2hlZCB0aGlzIGFybSwgd2UgY2FuJ3QgZG8gYW55dGhpbmcgd2l0aCB0aGlzIE9SCisJ CQkJCSogY2xhdXNlLgorCQkJCQkqLworCQkJCQlpZiAoaW5kbGlzdCA9PSBOSUwpCisJCQkJ CXsKKwkJCQkJCXBhdGhsaXN0ID0gTklMOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKworCQkJ CQkvKgorCQkJCQkqIE9LLCBwaWNrIHRoZSBtb3N0IHByb21pc2luZyBBTkQgY29tYmluYXRp b24sIGFuZCBhZGQgaXQgdG8KKwkJCQkJKiBwYXRobGlzdC4KKwkJCQkJKi8KKwkJCQkJYml0 bWFwcXVhbCA9IGNob29zZV9iaXRtYXBfYW5kKHJvb3QsIHJlbCwgaW5kbGlzdCk7CisJCQkJ CXBhdGhsaXN0ID0gbGFwcGVuZChwYXRobGlzdCwgYml0bWFwcXVhbCk7CisJCQkJCW9yX2xp c3QgPSBsYXBwZW5kKG9yX2xpc3QsIG9ycXVhbCk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0K KworCQkJCS8qCisJCQkJKiBBdCB0aGlzIHBvaW50IHdlIGRlZmluaXRlbHkgaGF2ZSBhIHRy YW5zZm9ybWFibGUgY2xhdXNlLgorCQkJCSogQ2xhc3NpZnkgaXQgYW5kIGFkZCBpbnRvIHNw ZWNpZmljIGdyb3VwIG9mIGNsYXVzZXMsIG9yIGNyZWF0ZSBuZXcKKwkJCQkqIGdyb3VwLgor CQkJCSogVE9ETzogdG8gbWFuYWdlIGNvbXBsZXhpdHkgaW4gdGhlIGNhc2Ugb2YgbWFueSBk aWZmZXJlbnQgY2xhdXNlcworCQkJCSogKFgxPUMxKSBPUiAoWDI9QzIgT1IpIC4uLiAoWE4g PSBDTikgd2UgY291bGQgaW52ZW50IHNvbWV0aGluZworCQkJCSogbGlrZSBhIGhhc2ggdGFi bGUuIEJ1dCBhbHNvIHdlIGJlbGlldmUsIHRoYXQgdGhlIGNhc2Ugb2YgbWFueQorCQkJCSog ZGlmZmVyZW50IHZhcmlhYmxlIHNpZGVzIGlzIHZlcnkgcmFyZS4KKwkJCQkqLworCQkJCWdl bnRyeSA9IGhhc2hfc2VhcmNoKG9yX2dyb3VwX2h0YWIsICZzdHIsIEhBU0hfRklORCwgJmZv dW5kKTsKKworCQkJCWlmIChmb3VuZCkKKwkJCQl7CisJCQkJCWdlbnRyeS0+Y29uc3RzID0g bGFwcGVuZChnZW50cnktPmNvbnN0cywgY29uc3RfZXhwcik7CisJCQkJCS8qCisJCQkJCQkq IFRoZSBjbGF1c2UgY2xhc3NpZmllZCBzdWNjZXNzZnVsbHkgYW5kIGFkZGVkIGludG8gZXhp c3RlZAorCQkJCQkJKiBjbGF1c2UgZ3JvdXAuCisJCQkJCQkqLworCQkJCQljb250aW51ZTsK KwkJCQl9CisKKwkJCQkvKiBOZXcgY2xhdXNlIGdyb3VwIG5lZWRlZCAqLworCQkJCWdlbnRy eSA9IGhhc2hfc2VhcmNoKG9yX2dyb3VwX2h0YWIsICZzdHIsIEhBU0hfRU5URVIsICZmb3Vu ZCk7CisJCQkJZ2VudHJ5LT5ub2RlID0gbmNvbnN0X2V4cHI7CisJCQkJZ2VudHJ5LT5jb25z dHMgPSBsaXN0X21ha2UxKGNvbnN0X2V4cHIpOworCQkJCWdlbnRyeS0+ZXhwciA9IG9ycXVh bDsKKwkJCQlnZW50cnktPmhhc2hfbGVmdHZhcl9rZXkgPSBzdHI7CisJCQkJZ2VudHJ5LT5y aSA9IHJpOwogCQkJfQorCQl9CisKKwkJaWYgKCEob3JfZ3JvdXBfaHRhYiAmJiAoaGFzaF9n ZXRfbnVtX2VudHJpZXMob3JfZ3JvdXBfaHRhYikgPCAxIHx8CisJICAgICAgICAgICAgICAg ICAgICAgICAgIGhhc2hfZ2V0X251bV9lbnRyaWVzKG9yX2dyb3VwX2h0YWIpID09IGxlbl9v cnMpKSkKKwkJeworCQkJSEFTSF9TRVFfU1RBVFVTCQloYXNoX3NlcTsKKwkJCU9yQ2xhdXNl R3JvdXBFbnRyeSAqZ2VudHJ5OworCQkJYm9vbCBzdWNjZXNzID0gZmFsc2U7CisKKwkJCWhh c2hfc2VxX2luaXQoJmhhc2hfc2VxLCBvcl9ncm91cF9odGFiKTsKKworCQkJLyogTGV0J3Mg Y29udmVydCBlYWNoIGdyb3VwIG9mIGNsYXVzZXMgdG8gYW4gSU4gb3BlcmF0aW9uLiAqLwog CiAJCQkvKgotCQkJICogSWYgbm90aGluZyBtYXRjaGVkIHRoaXMgYXJtLCB3ZSBjYW4ndCBk byBhbnl0aGluZyB3aXRoIHRoaXMgT1IKLQkJCSAqIGNsYXVzZS4KLQkJCSAqLwotCQkJaWYg KGluZGxpc3QgPT0gTklMKQorCQkJKiBHbyB0aHJvdWdoIHRoZSBsaXN0IG9mIGdyb3VwcyBh bmQgY29udmVydCBlYWNoLCB3aGVyZSBudW1iZXIgb2YKKwkJCSogY29uc3RzIG1vcmUgdGhh biAxLiB0cml2aWFsIGdyb3VwcyBtb3ZlIHRvIE9SLWxpc3QgYWdhaW4KKwkJCSovCisKKwkJ CXdoaWxlICgoZ2VudHJ5ID0gKE9yQ2xhdXNlR3JvdXBFbnRyeSAqKSBoYXNoX3NlcV9zZWFy Y2goJmhhc2hfc2VxKSkgIT0gTlVMTCkKIAkJCXsKLQkJCQlwYXRobGlzdCA9IE5JTDsKLQkJ CQlicmVhazsKKwkJCQlMaXN0CQkJICAgKmFsbGV4cHJzOworCQkJCU9pZAkJCQkgICAgc2Nh bGFyX3R5cGU7CisJCQkJT2lkCQkJCQlhcnJheV90eXBlOworCQkJCUxpc3QgKm9yYXJnczsK KwkJCQlMaXN0ICppbmRsaXN0OworCisJCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKGdlbnRyeS0+ Y29uc3RzKSA+IDApOworCisJCQkJaWYgKGxpc3RfbGVuZ3RoKGdlbnRyeS0+Y29uc3RzKSA9 PSAxKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJKiBPbmx5IG9uZSBlbGVtZW50IGluIHRoZSBj bGFzcy4gUmV0dXJuIHJpbmZvIGludG8gdGhlIEJvb2xFeHByCisJCQkJCSogYXJncyBsaXN0 IHVuY2hhbmdlZC4KKwkJCQkJKi8KKwkJCQkJbGlzdF9mcmVlKGdlbnRyeS0+Y29uc3RzKTsK KworCQkJCQlvcmFyZ3MgPSBsaXN0X21ha2UxKGdlbnRyeS0+cmkpOworCQkJCQlpbmRsaXN0 ID0gYnVpbGRfcGF0aHNfZm9yX09SKHJvb3QsIHJlbCwKKwkJCQkJCQkJCQkJCW9yYXJncywK KwkJCQkJCQkJCQkJCWFsbF9jbGF1c2VzKTsKKwkJCQkJLyoKKwkJCQkJKiBJZiBub3RoaW5n IG1hdGNoZWQgdGhpcyBhcm0sIHdlIGNhbid0IGRvIGFueXRoaW5nIHdpdGggdGhpcyBPUgor CQkJCQkqIGNsYXVzZS4KKwkJCQkJKi8KKwkJCQkJaWYgKGluZGxpc3QgPT0gTklMKQorCQkJ CQl7CisJCQkJCQlwYXRobGlzdCA9IE5JTDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisKKwkJ CQkJLyoKKwkJCQkJKiBPSywgcGljayB0aGUgbW9zdCBwcm9taXNpbmcgQU5EIGNvbWJpbmF0 aW9uLCBhbmQgYWRkIGl0IHRvCisJCQkJCSogcGF0aGxpc3QuCisJCQkJCSovCisJCQkJCWJp dG1hcHF1YWwgPSBjaG9vc2VfYml0bWFwX2FuZChyb290LCByZWwsIGluZGxpc3QpOworCQkJ CQlwYXRobGlzdCA9IGxhcHBlbmQocGF0aGxpc3QsIGJpdG1hcHF1YWwpOworCQkJCQlvcl9s aXN0ID0gbGFwcGVuZChvcl9saXN0LCBnZW50cnktPmV4cHIpOworCQkJCQljb250aW51ZTsK KwkJCQl9CisKKwkJCQkvKgorCQkJCSogRG8gdGhlIHRyYW5zZm9ybWF0aW9uLgorCQkJCSoK KwkJCQkqIEZpcnN0IG9mIGFsbCwgdHJ5IHRvIHNlbGVjdCBhIGNvbW1vbiB0eXBlIGZvciB0 aGUgYXJyYXkgZWxlbWVudHMuCisJCQkJKiBOb3RlIHRoYXQgc2luY2UgdGhlIExIUycgdHlw ZSBpcyBmaXJzdCBpbiB0aGUgbGlzdCwgaXQgd2lsbCBiZQorCQkJCSogcHJlZmVycmVkIHdo ZW4gdGhlcmUgaXMgZG91YnQgKGVnLCB3aGVuIGFsbCB0aGUgUkhTIGl0ZW1zIGFyZQorCQkJ CSogdW5rbm93biBsaXRlcmFscykuCisJCQkJKgorCQkJCSogTm90ZTogdXNlIGxpc3RfY29u Y2F0IGhlcmUgbm90IGxjb25zLCB0byBhdm9pZCBkYW1hZ2luZyBybm9udmFycy4KKwkJCQkq CisJCQkJKiBBcyBhIHNvdXJjZSBvZiBpbnNpZGVzLCB1c2UgbWFrZV9zY2FsYXJfYXJyYXlf b3AoKQorCQkJCSovCisJCQkJYWxsZXhwcnMgPSBsaXN0X2NvbmNhdChsaXN0X21ha2UxKGdl bnRyeS0+bm9kZSksIGdlbnRyeS0+Y29uc3RzKTsKKwkJCQlzY2FsYXJfdHlwZSA9IHNlbGVj dF9jb21tb25fdHlwZShOVUxMLCBhbGxleHBycywgTlVMTCwgTlVMTCk7CisKKwkJCQlpZiAo c2NhbGFyX3R5cGUgIT0gUkVDT1JET0lEICYmIE9pZElzVmFsaWQoc2NhbGFyX3R5cGUpKQor CQkJCQlhcnJheV90eXBlID0gZ2V0X2FycmF5X3R5cGUoc2NhbGFyX3R5cGUpOworCQkJCWVs c2UKKwkJCQkJYXJyYXlfdHlwZSA9IEludmFsaWRPaWQ7CisKKwkJCQlpZiAoYXJyYXlfdHlw ZSAhPSBJbnZhbGlkT2lkKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJKiBPSzogY29lcmNlIGFs bCB0aGUgcmlnaHQtaGFuZCBub24tVmFyIGlucHV0cyB0byB0aGUgY29tbW9uCisJCQkJCSog dHlwZSBhbmQgYnVpbGQgYW4gQXJyYXlFeHByIGZvciB0aGVtLgorCQkJCQkqLworCQkJCQlM aXN0CSAgICphZXhwcnMgPSBOSUw7CisJCQkJCUFycmF5RXhwciAgKm5ld2EgPSBOVUxMOwor CQkJCQlTY2FsYXJBcnJheU9wRXhwciAqc2FvcGV4cHIgPSBOVUxMOworCQkJCQlMaXN0Q2Vs bCAqbDsKKworCQkJCQlhZXhwcnMgPSBOSUw7CisKKwkJCQkJZm9yZWFjaChsLCBnZW50cnkt PmNvbnN0cykKKwkJCQkJeworCQkJCQkJTm9kZQkgICAqcmV4cHIgPSAoTm9kZSAqKSBsZmly c3QobCk7CisKKwkJCQkJCXJleHByID0gY29lcmNlX3RvX2NvbW1vbl90eXBlKE5VTEwsIHJl eHByLAorCQkJCQkJCQkJCQkJCXNjYWxhcl90eXBlLAorCQkJCQkJCQkJCQkJCSJJTiIpOwor CQkJCQkJYWV4cHJzID0gbGFwcGVuZChhZXhwcnMsIHJleHByKTsKKwkJCQkJfQorCisJCQkJ CW5ld2EgPSBtYWtlTm9kZShBcnJheUV4cHIpOworCQkJCQkvKiBhcnJheV9jb2xsaWQgd2ls bCBiZSBzZXQgYnkgcGFyc2VfY29sbGF0ZS5jICovCisJCQkJCW5ld2EtPmVsZW1lbnRfdHlw ZWlkID0gc2NhbGFyX3R5cGU7CisJCQkJCW5ld2EtPmFycmF5X3R5cGVpZCA9IGFycmF5X3R5 cGU7CisJCQkJCW5ld2EtPm11bHRpZGltcyA9IGZhbHNlOworCQkJCQluZXdhLT5lbGVtZW50 cyA9IGFleHByczsKKwkJCQkJbmV3YS0+bG9jYXRpb24gPSAtMTsKKworCQkJCQlzYW9wZXhw ciA9CisJCQkJCQkoU2NhbGFyQXJyYXlPcEV4cHIgKikKKwkJCQkJCQltYWtlX3NjYWxhcl9h cnJheV9vcChOVUxMLAorCQkJCQkJCQkJCQkJbGlzdF9tYWtlMShtYWtlU3RyaW5nKChjaGFy ICopICI9IikpLAorCQkJCQkJCQkJCQkJdHJ1ZSwKKwkJCQkJCQkJCQkJCWdlbnRyeS0+bm9k ZSwKKwkJCQkJCQkJCQkJCShOb2RlICopIG5ld2EsCisJCQkJCQkJCQkJCQktMSk7CisJCQkJ CW9yX2xpc3QgPSBsYXBwZW5kKG9yX2xpc3QsICh2b2lkICopIHNhb3BleHByKTsKKwkJCQkJ c3VjY2VzcyA9IHRydWU7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCW9yYXJncyA9 IGxpc3RfbWFrZTEoZ2VudHJ5LT5yaSk7CisJCQkJCWluZGxpc3QgPSBidWlsZF9wYXRoc19m b3JfT1Iocm9vdCwgcmVsLAorCQkJCQkJCQkJCQkJb3JhcmdzLAorCQkJCQkJCQkJCQkJYWxs X2NsYXVzZXMpOworCQkJCQlsaXN0X2ZyZWUoZ2VudHJ5LT5jb25zdHMpOworCQkJCQkvKgor CQkJCQkqIElmIG5vdGhpbmcgbWF0Y2hlZCB0aGlzIGFybSwgd2UgY2FuJ3QgZG8gYW55dGhp bmcgd2l0aCB0aGlzIE9SCisJCQkJCSogY2xhdXNlLgorCQkJCQkqLworCQkJCQlpZiAoaW5k bGlzdCA9PSBOSUwpCisJCQkJCXsKKwkJCQkJCXBhdGhsaXN0ID0gTklMOworCQkJCQkJYnJl YWs7CisJCQkJCX0KKworCQkJCQkvKgorCQkJCQkqIE9LLCBwaWNrIHRoZSBtb3N0IHByb21p c2luZyBBTkQgY29tYmluYXRpb24sIGFuZCBhZGQgaXQgdG8KKwkJCQkJKiBwYXRobGlzdC4K KwkJCQkJKi8KKwkJCQkJYml0bWFwcXVhbCA9IGNob29zZV9iaXRtYXBfYW5kKHJvb3QsIHJl bCwgaW5kbGlzdCk7CisJCQkJCXBhdGhsaXN0ID0gbGFwcGVuZChwYXRobGlzdCwgYml0bWFw cXVhbCk7CisJCQkJCW9yX2xpc3QgPSBsYXBwZW5kKG9yX2xpc3QsIGdlbnRyeS0+ZXhwcik7 CisJCQkJfQorCQkJCWhhc2hfc2VhcmNoKG9yX2dyb3VwX2h0YWIsICZnZW50cnktPmhhc2hf bGVmdHZhcl9rZXksIEhBU0hfUkVNT1ZFLCBOVUxMKTsKIAkJCX0KKwkJCWhhc2hfZGVzdHJv eShvcl9ncm91cF9odGFiKTsKIAotCQkJLyoKLQkJCSAqIE9LLCBwaWNrIHRoZSBtb3N0IHBy b21pc2luZyBBTkQgY29tYmluYXRpb24sIGFuZCBhZGQgaXQgdG8KLQkJCSAqIHBhdGhsaXN0 LgotCQkJICovCi0JCQliaXRtYXBxdWFsID0gY2hvb3NlX2JpdG1hcF9hbmQocm9vdCwgcmVs LCBpbmRsaXN0KTsKLQkJCXBhdGhsaXN0ID0gbGFwcGVuZChwYXRobGlzdCwgYml0bWFwcXVh bCk7CisJCQlpZiAoIXN1Y2Nlc3MpCisJCQl7CisJCQkJLyoKKwkJCQkqIEVhY2ggZ3JvdXAg Y29udGFpbnMgb25seSBvbmUgZWxlbWVudCAtIHVzZSByaW5mbyBhcyBpcy4KKwkJCQkqLwor CQkJCW1vZGlmaWVkX3JpbmZvID0gbGFwcGVuZChtb2RpZmllZF9yaW5mbywgcmluZm8pOwor CQkJCWxpc3RfZnJlZShvcl9saXN0KTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlSZXN0 cmljdEluZm8gKnJpOworCQkJCUxpc3QgKm9yYXJnczsKKwkJCQlMaXN0ICppbmRsaXN0Owor CQkJCXJpID0gbWFrZV9yZXN0cmljdGluZm8ocm9vdCwKKwkJCQkgIGxpc3RfbGVuZ3RoKG9y X2xpc3QpID4gMSA/IG1ha2Vfb3JjbGF1c2Uob3JfbGlzdCkgOgorCQkJCQkJCQkJCQkgKEV4 cHIgKikgbGluaXRpYWwob3JfbGlzdCksCisJCQkJICByaS0+aXNfcHVzaGVkX2Rvd24sCisJ CQkJICByaS0+aGFzX2Nsb25lLAorCQkJCSAgcmktPmlzX2Nsb25lLAorCQkJCSAgcmktPnBz ZXVkb2NvbnN0YW50LAorCQkJCSAgcmktPnNlY3VyaXR5X2xldmVsLAorCQkJCSAgcmktPnJl cXVpcmVkX3JlbGlkcywKKwkJCQkgIHJpLT5pbmNvbXBhdGlibGVfcmVsaWRzLAorCQkJCSAg cmktPm91dGVyX3JlbGlkcyk7CisJCQkJCisJCQkJcmktPmV2YWxfY29zdD1yaW5mby0+ZXZh bF9jb3N0OworCQkJCXJpLT5ub3JtX3NlbGVjPXJpbmZvLT5ub3JtX3NlbGVjOworCQkJCXJp LT5vdXRlcl9zZWxlYz1yaW5mby0+b3V0ZXJfc2VsZWM7CisJCQkJcmktPmxlZnRfYnVja2V0 c2l6ZT1yaW5mby0+bGVmdF9idWNrZXRzaXplOworCQkJCXJpLT5yaWdodF9idWNrZXRzaXpl PXJpbmZvLT5yaWdodF9idWNrZXRzaXplOworCQkJCXJpLT5sZWZ0X21jdmZyZXE9cmluZm8t PmxlZnRfbWN2ZnJlcTsKKwkJCQlyaS0+cmlnaHRfbWN2ZnJlcT1yaW5mby0+cmlnaHRfbWN2 ZnJlcTsKKwkJCQltb2RpZmllZF9yaW5mbyA9IGxhcHBlbmQobW9kaWZpZWRfcmluZm8sIHJp KTsKKwkJCX0KIAkJfQogCiAJCS8qCkBAIC0xMzIyLDEwICsxNzAzLDEwIEBAIGdlbmVyYXRl X2JpdG1hcF9vcl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CQl9CiAJfQogCisJcmVsLT5iYXNlcmVzdHJpY3RpbmZvID0gbW9kaWZpZWRfcmluZm87CiAJ cmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKgogICogY2hvb3NlX2JpdG1hcF9hbmQKICAqCQlH aXZlbiBhIG5vbmVtcHR5IGxpc3Qgb2YgYml0bWFwIHBhdGhzLCBBTkQgdGhlbSBpbnRvIG9u ZSBwYXRoLgo= --------------ZHp09V5As5kbhp7uoWegm96j--