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 1rN9xD-009idE-69 for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Jan 2024 11:07:32 +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 1rN9xC-00BziB-DJ for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Jan 2024 11:07:30 +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 1rN9xB-00BzhS-RJ for pgsql-hackers@lists.postgresql.org; Tue, 09 Jan 2024 11:07:30 +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 1rN9x8-000dUd-HU for pgsql-hackers@lists.postgresql.org; Tue, 09 Jan 2024 11:07:29 +0000 Received: from [192.168.1.58] (node-1cyd.pool-101-51.dynamic.totinternet.net [101.51.247.213]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: a.lepikhov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id E7896E20E4E; Tue, 9 Jan 2024 14:07:22 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1704798445; bh=Ykt/1o5gsasAz0aPmup6HADA9K8oNjgIs8GEoI5/fZY=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=vnLGEeFnDPbqavqQ9beZbQHi4/C2xBkniQAakc2MaBKKWB0pDKD+VD+ojJgJWpgRL tpFZHz8b5sTzvBGPKqb4wx5dJ/jt0Zw6SJmegCpaaQTY771zsDEot9FSnqX3lw9mUI 0ZH9E32HK1y/aH7Fq8xZ1j5YDz+uwqUYr4DBeXe77IVIMYXcTouMGgWBhp7DOibSPq TCMgvmB6oabCE5fCo33JbCQXluPL68DN4ZUOJBZhfKg8h7e2Hu4rkaBzP7eiB0gEoe 6hALNmLxYEXIewIn4oCbTsFLhMzpvDrjC8vQ/xAEK4jXTCpaTBHZyYyV1jC/axRNUv MKfSYMa3RTZTw== Content-Type: multipart/mixed; boundary="------------buEeZ5apO0R2FfKs1j0TmAnK" Message-ID: <138cb2df-1a0d-48c0-be80-48aaf62e8aeb@postgrespro.ru> Date: Tue, 9 Jan 2024 18:07:19 +0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC: GROUP BY optimization Content-Language: en-US To: vignesh C Cc: Alexander Korotkov , PostgreSQL Developers , Tomas Vondra , Teodor Sigaev , David Rowley , "a.rybakina" , Tom Lane References: <9af89543-3d17-4c98-59de-1daa5bceeb06@enterprisedb.com> <9408e450-60c6-6fbc-d5c4-467bb0abfe67@postgrespro.ru> <44472925-f6c6-e8de-6f72-0451458532c4@enterprisedb.com> <7a80a207-5e8e-b80c-476c-2d290b0526e9@enterprisedb.com> <65941e87-86c1-c09c-8ad5-8e102aebe8ee@enterprisedb.com> <7256159a-bb83-7ef3-c9c9-b2188a29aaf8@postgrespro.ru> <60610df1-c32f-ebdf-e58c-7a664431f452@enterprisedb.com> <9acd27e9-3372-4d78-b9bc-73e407b8a007@postgrespro.ru> From: Andrei Lepikhov Organization: Postgres Professional In-Reply-To: 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. --------------buEeZ5apO0R2FfKs1j0TmAnK Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 9/1/2024 16:45, vignesh C wrote: > On Tue, 9 Jan 2024 at 14:31, Andrei Lepikhov wrote: >> >> Here is a new version of GROUP-BY optimization without sort model. >> >> On 21/12/2023 17:53, Alexander Korotkov wrote: >>> I'd like to make some notes. >>> >>> 1) As already mentioned, there is clearly a repetitive pattern for the >>> code following after get_useful_group_keys_orderings() calls. I think >>> it would be good to extract it into a separate function. Please, do >>> this as a separate patch coming before the group-by patch. That would >>> simplify the review. >> Done. See patch 0001-*. Unfortunately, extraction of whole cycle isn't >> practical, because it blows out the interface of the routine. >> >>> 2) I wonder what planning overhead this patch could introduce? Could >>> you try to measure the worst case? What if we have a table with a lot >>> of indexes and a long list of group-by clauses partially patching >>> every index. This should give us an understanding on whether we need >>> a separate GUC to control this feature. >> In current implementation I don't anticipate any significant overhead. >> GUC is needed here to allow users adhere their own ordering and to >> disable feature in the case of problems. >> >>> 4) I think we can do some optimizations when enable_incremental_sort >>> == off. Then in get_useful_group_keys_orderings() we should only deal >>> with input_path fully matching the group-by clause, and try only full >>> match of group-by output to the required order. >> Hm, is it really make sense in current implementation? > > CFBot shows the following errors at [1] with: > [08:33:28.813] ../src/backend/utils/adt/selfuncs.c: In function > ‘estimate_num_groups’: > [08:33:28.813] ../src/backend/utils/adt/selfuncs.c:3389:9: warning: > implicit declaration of function ‘estimate_num_groups_incremental’ > [-Wimplicit-function-declaration] > [08:33:28.813] 3389 | return estimate_num_groups_incremental(root, groupExprs, > [08:33:28.813] | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > [08:33:28.813] ../src/backend/utils/adt/selfuncs.c: At top level: > [08:33:28.813] ../src/backend/utils/adt/selfuncs.c:3400:1: warning: no > previous prototype for ‘estimate_num_groups_incremental’ > [-Wmissing-prototypes] > [08:33:28.813] 3400 | estimate_num_groups_incremental(PlannerInfo > *root, List *groupExprs, > [08:33:28.813] | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > [08:33:28.813] ../src/backend/utils/adt/selfuncs.c:3400:1: error: > conflicting types for ‘estimate_num_groups_incremental’ > [08:33:28.813] ../src/backend/utils/adt/selfuncs.c:3389:9: note: > previous implicit declaration of ‘estimate_num_groups_incremental’ was > here > [08:33:28.813] 3389 | return estimate_num_groups_incremental(root, groupExprs, Hmm, I don't see this old code in these patches. Resend 0002-* because of trailing spaces. -- regards, Andrei Lepikhov Postgres Professional --------------buEeZ5apO0R2FfKs1j0TmAnK Content-Type: text/plain; charset=UTF-8; name="0002-Explore-alternative-orderings-of-group-by-pathkeys-d-20240109.patch" Content-Disposition: attachment; filename*0="0002-Explore-alternative-orderings-of-group-by-pathkeys-d-20"; filename*1="240109.patch" Content-Transfer-Encoding: base64 RnJvbSA0NWNmZmY1NzMxYjgxYzBkZjJhZjAwZjVlNDIxMmZjNTk4ZjZhMjMxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmV5IFYuIExlcGlraG92IiA8YS5sZXBpa2hv dkBwb3N0Z3Jlc3Byby5ydT4KRGF0ZTogVHVlLCA5IEphbiAyMDI0IDEyOjMyOjE1ICswNzAw ClN1YmplY3Q6IFtQQVRDSCAyLzJdIEV4cGxvcmUgYWx0ZXJuYXRpdmUgb3JkZXJpbmdzIG9m IGdyb3VwLWJ5IHBhdGhrZXlzIGR1cmluZwogb3B0aW1pemF0aW9uLgoKV2hlbiBldmFsdWF0 aW5nIGEgcXVlcnkgd2l0aCBhIG11bHRpLWNvbHVtbiBHUk9VUCBCWSBjbGF1c2UsIHdlIGNh biBtaW5pbWl6ZQpzb3J0IG9wZXJhdGlvbnMgb3IgYXZvaWQgdGhlbSBpZiB3ZSBzeW5jaHJv bml6ZSB0aGUgb3JkZXIgb2YgR1JPVVAgQlkgY2xhdXNlcwp3aXRoIHRoZSBPUkRFUiBCWSBz b3J0IGNsYXVzZSBvciBzb3J0IG9yZGVyLCB3aGljaCBjb21lcyBmcm9tIHRoZSB1bmRlcmx5 aW5nCnF1ZXJ5IHRyZWUuIEdyb3VwaW5nIGRvZXMgbm90IGltcGx5IGFueSBvcmRlcmluZywg c28gd2UgY2FuIGNvbXBhcmUKdGhlIGtleXMgaW4gYXJiaXRyYXJ5IG9yZGVyLCBhbmQgYSBI YXNoIEFnZyBsZXZlcmFnZXMgdGhpcy4gQnV0IGZvciBHcm91cCBBZ2csCndlIHNpbXBseSBj b21wYXJlZCBrZXlzIGluIHRoZSBvcmRlciBzcGVjaWZpZWQgaW4gdGhlIHF1ZXJ5LiBUaGlz IGNvbW1pdApleHBsb3JlcyBhbHRlcm5hdGl2ZSBvcmRlcmluZyBvZiB0aGUga2V5cywgdHJ5 aW5nIHRvIGZpbmQgYSBjaGVhcGVyIG9uZS4KClRoZSBvcmRlcmluZyBvZiBncm91cCBrZXlz IG1heSBpbnRlcmFjdCB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBxdWVyeSwgc29tZSBvZgp3 aGljaCBtYXkgbm90IGJlIGtub3duIHdoaWxlIHBsYW5uaW5nIHRoZSBncm91cGluZy4gRm9y IGV4YW1wbGUsIHRoZXJlIG1heSBiZQphbiBleHBsaWNpdCBPUkRFUiBCWSBjbGF1c2Ugb3Ig c29tZSBvdGhlciBvcmRlcmluZy1kZXBlbmRlbnQgb3BlcmF0aW9uIGhpZ2hlciB1cAppbiB0 aGUgcXVlcnksIGFuZCB1c2luZyB0aGUgc2FtZSBvcmRlcmluZyBtYXkgYWxsb3cgdXNpbmcg ZWl0aGVyIGluY3JlbWVudGFsCnNvcnQgb3IgZXZlbiBlbGltaW5hdGluZyB0aGUgc29ydCBl bnRpcmVseS4KClRoZSBwYXRjaCBhbHdheXMga2VlcHMgdGhlIG9yZGVyaW5nIHNwZWNpZmll ZCBpbiB0aGUgcXVlcnksIGFzc3VtaW5nIHRoZSB1c2VyCm1pZ2h0IGhhdmUgYWRkaXRpb25h bCBpbnNpZ2h0cy4KClRoaXMgaW50cm9kdWNlcyBhIG5ldyBHVUMgZW5hYmxlX2dyb3VwX2J5 X3Jlb3JkZXJpbmcgc28gdGhhdCB0aGUgb3B0aW1pemF0aW9uCm1heSBiZSBkaXNhYmxlZCBp ZiBuZWVkZWQuCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1aXZjbGFzcy5j ICAgICAgIHwgIDEzICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9wYXRoa2V5cy5j ICAgICAgICAgfCAyMjIgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9wbGFubmVyLmMgICAgICAgICAgfCAyMTQgKysrKysrKysrKystLS0tLS0KIHNy Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAxMCArCiBz cmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDEgKwog c3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgICAgICAgIHwgIDEwICsK IHNyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oICAgICAgICAgICAgICAgICB8ICAgMyAr CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0ICAgICAgfCAxMzIg KysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0ICAg ICAgICB8ICAgMyArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWdncmVnYXRlcy5zcWwgICAg ICAgICAgIHwgIDQ3ICsrKysKIDEwIGZpbGVzIGNoYW5nZWQsIDU4NiBpbnNlcnRpb25zKCsp LCA2OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9lcXVpdmNsYXNzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNs YXNzLmMKaW5kZXggZTg2ZGZlYWVjZC4uN2RkMTRkMGE0MyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1aXZjbGFzcy5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2VxdWl2Y2xhc3MuYwpAQCAtNjUyLDcgKzY1MiwxOCBAQCBnZXRfZWNs YXNzX2Zvcl9zb3J0X2V4cHIoUGxhbm5lckluZm8gKnJvb3QsCiAKIAkJCWlmIChvcGNpbnR5 cGUgPT0gY3VyX2VtLT5lbV9kYXRhdHlwZSAmJgogCQkJCWVxdWFsKGV4cHIsIGN1cl9lbS0+ ZW1fZXhwcikpCi0JCQkJcmV0dXJuIGN1cl9lYzsJLyogTWF0Y2ghICovCisJCQl7CisJCQkJ LyoKKwkJCQkgKiBNYXRjaCEKKwkJCQkgKgorCQkJCSAqIENvcHkgdGhlIHNvcnRyZWYgaWYg aXQgd2Fzbid0IHNldCB5ZXQuIFRoYXQgbWF5IGhhcHBlbiBpZgorCQkJCSAqIHRoZSBlYyB3 YXMgY29uc3RydWN0ZWQgZnJvbSBXSEVSRSBjbGF1c2UsIGkuZS4gaXQgZG9lc24ndAorCQkJ CSAqIGhhdmUgYSB0YXJnZXQgcmVmZXJlbmNlIGF0IGFsbC4KKwkJCQkgKi8KKwkJCQlpZiAo Y3VyX2VjLT5lY19zb3J0cmVmID09IDAgJiYgc29ydHJlZiA+IDApCisJCQkJCWN1cl9lYy0+ ZWNfc29ydHJlZiA9IHNvcnRyZWY7CisJCQkJcmV0dXJuIGN1cl9lYzsKKwkJCX0KIAkJfQog CX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvcGF0aGtleXMu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMKaW5kZXggY2E5NGEz MWY3MS4uOGJjNGViOWYwMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvcGF0aGtleXMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9wYXRoa2V5 cy5jCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAicGFydGl0aW9uaW5nL3BhcnRib3Vu ZHMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKIAorLyogQ29uc2lkZXIgcmVv cmRlcmluZyBvZiBHUk9VUCBCWSBrZXlzPyAqLworYm9vbAkJZW5hYmxlX2dyb3VwX2J5X3Jl b3JkZXJpbmcgPSB0cnVlOwogCiBzdGF0aWMgYm9vbCBwYXRoa2V5X2lzX3JlZHVuZGFudChQ YXRoS2V5ICpuZXdfcGF0aGtleSwgTGlzdCAqcGF0aGtleXMpOwogc3RhdGljIGJvb2wgbWF0 Y2hlc19ib29sZWFuX3BhcnRpdGlvbl9jbGF1c2UoUmVzdHJpY3RJbmZvICpyaW5mbywKQEAg LTM1MCw2ICszNTIsMTczIEBAIHBhdGhrZXlzX2NvbnRhaW5lZF9pbihMaXN0ICprZXlzMSwg TGlzdCAqa2V5czIpCiAJcmV0dXJuIGZhbHNlOwogfQogCisvKgorICogZ3JvdXBfa2V5c19y ZW9yZGVyX2J5X3BhdGhrZXlzCisgKgkJUmVvcmRlciBHUk9VUCBCWSBrZXlzIHRvIG1hdGNo IHBhdGhrZXlzIG9mIGlucHV0IHBhdGguCisgKgorICogRnVuY3Rpb24gcmV0dXJucyBuZXcg bGlzdHMgKHBhdGhrZXlzIGFuZCBjbGF1c2VzKSwgb3JpZ2luYWwgR1JPVVAgQlkgbGlzdHMK KyAqIHN0YXkgdW50b3VjaGVkLgorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBHUk9V UCBCWSBrZXlzIHdpdGggYSBtYXRjaGluZyBwYXRoa2V5LgorICovCitzdGF0aWMgaW50Citn cm91cF9rZXlzX3Jlb3JkZXJfYnlfcGF0aGtleXMoTGlzdCAqcGF0aGtleXMsIExpc3QgKipn cm91cF9wYXRoa2V5cywKKwkJCQkJCQkgICBMaXN0ICoqZ3JvdXBfY2xhdXNlcywKKwkJCQkJ CQkgICBpbnQgbnVtX2dyb3VwYnlfcGF0aGtleXMpCit7CisJTGlzdAkgICAqbmV3X2dyb3Vw X3BhdGhrZXlzID0gTklMLAorCQkJICAgKm5ld19ncm91cF9jbGF1c2VzID0gTklMOworCUxp c3RDZWxsICAgKmxjOworCWludAkJCW47CisKKwlpZiAocGF0aGtleXMgPT0gTklMIHx8ICpn cm91cF9wYXRoa2V5cyA9PSBOSUwpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBXYWxrIHRo ZSBwYXRoa2V5cyAoZGV0ZXJtaW5pbmcgb3JkZXJpbmcgb2YgdGhlIGlucHV0IHBhdGgpIGFu ZCBzZWUgaWYKKwkgKiB0aGVyZSdzIGEgbWF0Y2hpbmcgR1JPVVAgQlkga2V5LiBJZiB3ZSBm aW5kIG9uZSwgd2UgYXBwZW5kIGl0IHRvIHRoZQorCSAqIGxpc3QsIGFuZCBkbyB0aGUgc2Ft ZSBmb3IgdGhlIGNsYXVzZXMuCisJICoKKwkgKiBPbmNlIHdlIGZpbmQgdGhlIGZpcnN0IHBh dGhrZXkgd2l0aG91dCBhIG1hdGNoaW5nIEdST1VQIEJZIGtleSwgdGhlCisJICogcmVzdCBv ZiB0aGUgcGF0aGtleXMgYXJlIHVzZWxlc3MgYW5kIGNhbid0IGJlIHVzZWQgdG8gZXZhbHVh dGUgdGhlCisJICogZ3JvdXBpbmcsIHNvIHdlIGFib3J0IHRoZSBsb29wIGFuZCBpZ25vcmUg dGhlIHJlbWFpbmluZyBwYXRoa2V5cy4KKwkgKgorCSAqIFhYWCBQYXRoa2V5cyBhcmUgYnVp bHQgaW4gYSB3YXkgdG8gYWxsb3cgc2ltcGx5IGNvbXBhcmluZyBwb2ludGVycy4KKwkgKi8K Kwlmb3JlYWNoKGxjLCBwYXRoa2V5cykKKwl7CisJCVBhdGhLZXkJCQkgICAqcGF0aGtleSA9 IChQYXRoS2V5ICopIGxmaXJzdChsYyk7CisJCVNvcnRHcm91cENsYXVzZQkgICAqc2djOwor CisJCWlmIChmb3JlYWNoX2N1cnJlbnRfaW5kZXgobGMpID49IG51bV9ncm91cGJ5X3BhdGhr ZXlzIHx8CisJCQkhbGlzdF9tZW1iZXJfcHRyKCpncm91cF9wYXRoa2V5cywgcGF0aGtleSkp CisJCQkvKiAqLworCQkJYnJlYWs7CisKKwkJLyogYWJvcnQgb24gZmlyc3QgbWlzbWF0Y2gg Ki8KKwkJc2djID0gZ2V0X3NvcnRncm91cHJlZl9jbGF1c2Vfbm9lcnIocGF0aGtleS0+cGtf ZWNsYXNzLT5lY19zb3J0cmVmLAorCQkJCQkJCQkJCQkqZ3JvdXBfY2xhdXNlcyk7CisJCWlm ICghc2djKQorCQkJLyogVGhlIGdyb3VwaW5nIGNsYXVzZSBpcyBub3QgY292ZXIgdGhpcyBw YXRoa2V5ICovCisJCQlicmVhazsKKworCQluZXdfZ3JvdXBfcGF0aGtleXMgPSBsYXBwZW5k KG5ld19ncm91cF9wYXRoa2V5cywgcGF0aGtleSk7CisJCW5ld19ncm91cF9jbGF1c2VzID0g bGFwcGVuZChuZXdfZ3JvdXBfY2xhdXNlcywgc2djKTsKKwl9CisKKwkvKiByZW1lbWJlciB0 aGUgbnVtYmVyIG9mIHBhdGhrZXlzIHdpdGggYSBtYXRjaGluZyBHUk9VUCBCWSBrZXkgKi8K KwluID0gbGlzdF9sZW5ndGgobmV3X2dyb3VwX3BhdGhrZXlzKTsKKworCS8qIGFwcGVuZCB0 aGUgcmVtYWluaW5nIGdyb3VwIHBhdGhrZXlzICh3aWxsIGJlIHRyZWF0ZWQgYXMgbm90IHNv cnRlZCkgKi8KKwkqZ3JvdXBfcGF0aGtleXMgPSBsaXN0X2NvbmNhdF91bmlxdWVfcHRyKG5l d19ncm91cF9wYXRoa2V5cywKKwkJCQkJCQkJCQkJICpncm91cF9wYXRoa2V5cyk7CisJKmdy b3VwX2NsYXVzZXMgPSBsaXN0X2NvbmNhdF91bmlxdWVfcHRyKG5ld19ncm91cF9jbGF1c2Vz LAorCQkJCQkJCQkJCQkqZ3JvdXBfY2xhdXNlcyk7CisKKwlyZXR1cm4gbjsKK30KKworLyoK KyAqIGdldF91c2VmdWxfZ3JvdXBfa2V5c19vcmRlcmluZ3MKKyAqCQlEZXRlcm1pbmUgd2hp Y2ggb3JkZXJpbmdzIG9mIEdST1VQIEJZIGtleXMgYXJlIHBvdGVudGlhbGx5IGludGVyZXN0 aW5nLgorICoKKyAqIFJldHVybnMgbGlzdCBvZiBQYXRoS2V5SW5mbyBpdGVtcywgZWFjaCBy ZXByZXNlbnRpbmcgYW4gaW50ZXJlc3Rpbmcgb3JkZXJpbmcKKyAqIG9mIEdST1VQIEJZIGtl eXMuIEVhY2ggaXRlbSBzdG9yZXMgcGF0aGtleXMgYW5kIGNsYXVzZXMgaW4gbWF0Y2hpbmcg b3JkZXIuCisgKgorICogVGhlIGZ1bmN0aW9uIGNvbnNpZGVycyAoYW5kIGtlZXBzKSBtdWx0 aXBsZSBncm91cCBieSBvcmRlcmluZ3M6CisgKgorICogLSB0aGUgb3JpZ2luYWwgb3JkZXJp bmcsIGFzIHNwZWNpZmllZCBieSB0aGUgR1JPVVAgQlkgY2xhdXNlCisgKgorICogLSBHUk9V UCBCWSBrZXlzIHJlb3JkZXJlZCB0byBtYXRjaCBwYXRoIG9yZGVyaW5nIChhcyBtdWNoIGFz IHBvc3NpYmxlKSwgd2l0aAorICogICB0aGUgdGFpbCByZW9yZGVyZWQgdG8gbWluaW1pemUg dGhlIHNvcnQgY29zdAorICoKKyAqIC0gR1JPVVAgQlkga2V5cyB0byBtYXRjaCB0YXJnZXQg T1JERVIgQlkgY2xhdXNlIChhcyBtdWNoIGFzIHBvc3NpYmxlKQorICoKKyAqIFRoZXJlIGFy ZSBvdGhlciBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBvcmRlcmluZ3MuIEp1c3QgdG8gbWVt b3JpemU6CisgKiAxLiBJdCBtaWdodCBiZSBiZXN0IHRvIG1hdGNoIHRoZSBmaXJzdCBPUkRF UiBCWSBrZXksIG9yZGVyIHRoZSByZW1haW5pbmcga2V5cworICogZGlmZmVyZW50bHkgYW5k IHRoZW4gcmVseSBvbiB0aGUgaW5jcmVtZW50YWwgc29ydCB0byBmaXggdGhpcykuCisgKiAy LiBQbGFjZSBpbnRlZ2VyIGZpeGVkLWxlbmd0aCBjb2x1bW5zIGluIHRoZSBmcm9udCBvZiB0 ZXh0L2J5dGVhIGNvbHVtbnMKKyAqIDMuIFJlYXJyYW5nZSBjb2x1bW5zIGFjY29yZGluZyB0 byBuZGlzdGluY3QgZXN0aW1hdGlvbnMuCisgKi8KK0xpc3QgKgorZ2V0X3VzZWZ1bF9ncm91 cF9rZXlzX29yZGVyaW5ncyhQbGFubmVySW5mbyAqcm9vdCwgZG91YmxlIG5yb3dzLAorCQkJ CQkJCQlMaXN0ICpwYXRoX3BhdGhrZXlzKQoreworCVF1ZXJ5CSAgICpwYXJzZSA9IHJvb3Qt PnBhcnNlOworCUxpc3QJICAgKmluZm9zID0gTklMOworCVBhdGhLZXlJbmZvICppbmZvOwor CisJTGlzdAkgICAqcGF0aGtleXMgPSByb290LT5ncm91cF9wYXRoa2V5czsKKwlMaXN0CSAg ICpjbGF1c2VzID0gcm9vdC0+cHJvY2Vzc2VkX2dyb3VwQ2xhdXNlOworCisJLyogYWx3YXlz IHJldHVybiBhdCBsZWFzdCB0aGUgb3JpZ2luYWwgcGF0aGtleXMvY2xhdXNlcyAqLworCWlu Zm8gPSBtYWtlTm9kZShQYXRoS2V5SW5mbyk7CisJaW5mby0+cGF0aGtleXMgPSBwYXRoa2V5 czsKKwlpbmZvLT5jbGF1c2VzID0gY2xhdXNlczsKKwlpbmZvcyA9IGxhcHBlbmQoaW5mb3Ms IGluZm8pOworCisJLyoKKwkgKiBTaG91bGQgd2UgdHJ5IGdlbmVyYXRpbmcgYWx0ZXJuYXRp dmUgb3JkZXJpbmdzIG9mIHRoZSBncm91cCBrZXlzPyBJZgorCSAqIG5vdCwgd2UgcHJvZHVj ZSBvbmx5IHRoZSBvcmRlciBzcGVjaWZpZWQgaW4gdGhlIHF1ZXJ5LCBpLmUuIHRoZQorCSAq IG9wdGltaXphdGlvbiBpcyBlZmZlY3RpdmVseSBkaXNhYmxlZC4KKwkgKi8KKwlpZiAoIWVu YWJsZV9ncm91cF9ieV9yZW9yZGVyaW5nKQorCQlyZXR1cm4gaW5mb3M7CisKKwkvKiBmb3Ig Z3JvdXBpbmcgc2V0cyB3ZSBjYW4ndCBkbyBhbnkgcmVvcmRlcmluZyAqLworCWlmIChwYXJz ZS0+Z3JvdXBpbmdTZXRzKQorCQlyZXR1cm4gaW5mb3M7CisKKwkvKgorCSAqIElmIHRoZSBw YXRoIGlzIHNvcnRlZCBpbiBzb21lIHdheSwgdHJ5IHJlb3JkZXJpbmcgdGhlIGdyb3VwIGtl eXMgdG8KKwkgKiBtYXRjaCBhcyBtdWNoIG9mIHRoZSBvcmRlcmluZyBhcyBwb3NzaWJsZSAt IHdlIGdldCB0aGlzIHNvcnQgZm9yIGZyZWUKKwkgKiAobW9zdGx5KS4KKwkgKgorCSAqIFdl IG11c3Qgbm90IGRvIHRoaXMgd2hlbiB0aGVyZSBhcmUgbm8gZ3JvdXBpbmcgc2V0cywgYmVj YXVzZSB0aG9zZSB1c2UKKwkgKiBtb3JlIGNvbXBsZXggbG9naWMgdG8gZGVjaWRlIHRoZSBv cmRlcmluZy4KKwkgKgorCSAqIFhYWCBJc24ndCB0aGlzIHNvbWV3aGF0IHJlZHVuZGFudCB3 aXRoIHByZXNvcnRlZF9rZXlzPyBBY3R1YWxseSwgaXQncworCSAqIG1vcmUgYSBjb21wbGVt ZW50LCBiZWNhdXNlIGl0IGFsbG93cyBiZW5lZml0aW5nIGZyb20gaW5jcmVtZW50YWwgc29y dAorCSAqIGFzIG11Y2ggYXMgcG9zc2libGUuCisJICovCisJaWYgKHBhdGhfcGF0aGtleXMp CisJeworCQlncm91cF9rZXlzX3Jlb3JkZXJfYnlfcGF0aGtleXMocGF0aF9wYXRoa2V5cywg JnBhdGhrZXlzLCAmY2xhdXNlcywKKwkJCQkJCQkJCSAgIHJvb3QtPm51bV9ncm91cGJ5X3Bh dGhrZXlzKTsKKworCQkvKgorCQkgKiByZW9yZGVyIHRoZSB0YWlsIHRvIG1pbmltaXplIHNv cnQgY29zdAorCQkgKgorCQkgKiBYWFggSWdub3JlIHRoZSByZXR1cm4gdmFsdWUgLSB0aGVy ZSBtYXkgYmUgbm90aGluZyB0byByZW9yZGVyLCBCdXQgd2UKKwkJICogc3RpbGwgd2FudCB0 byBrZWVwIHRoZSBrZXlzIHJlb3JkZXJlZCB0byBwYXRoX3BhdGhrZXlzLgorCQkgKi8KKwkJ aW5mbyA9IG1ha2VOb2RlKFBhdGhLZXlJbmZvKTsKKwkJaW5mby0+cGF0aGtleXMgPSBwYXRo a2V5czsKKwkJaW5mby0+Y2xhdXNlcyA9IGNsYXVzZXM7CisKKwkJaW5mb3MgPSBsYXBwZW5k KGluZm9zLCBpbmZvKTsKKwl9CisKKwkvKgorCSAqIFRyeSByZW9yZGVyaW5nIHBhdGhrZXlz IHRvIG1pbmltaXplIHRoZSBzb3J0IGNvc3QgKHRoaXMgdGltZSBjb25zaWRlcgorCSAqIHRo ZSBPUkRFUiBCWSBjbGF1c2UpLgorCSAqLworCWlmIChyb290LT5zb3J0X3BhdGhrZXlzKQor CXsKKwkJZ3JvdXBfa2V5c19yZW9yZGVyX2J5X3BhdGhrZXlzKHJvb3QtPnNvcnRfcGF0aGtl eXMsICZwYXRoa2V5cywgJmNsYXVzZXMsCisJCQkJCQkJCQkgICByb290LT5udW1fZ3JvdXBi eV9wYXRoa2V5cyk7CisKKwkJLyoga2VlcCB0aGUgZ3JvdXAga2V5cyByZW9yZGVyZWQgdG8g bWF0Y2ggb3JkZXJpbmcgb2YgaW5wdXQgcGF0aCAqLworCQlpbmZvID0gbWFrZU5vZGUoUGF0 aEtleUluZm8pOworCQlpbmZvLT5wYXRoa2V5cyA9IHBhdGhrZXlzOworCQlpbmZvLT5jbGF1 c2VzID0gY2xhdXNlczsKKworCQlpbmZvcyA9IGxhcHBlbmQoaW5mb3MsIGluZm8pOworCX0K KworCXJldHVybiBpbmZvczsKK30KKwogLyoKICAqIHBhdGhrZXlzX2NvdW50X2NvbnRhaW5l ZF9pbgogICogICAgU2FtZSBhcyBwYXRoa2V5c19jb250YWluZWRfaW4sIGJ1dCBhbHNvIHNl dHMgbGVuZ3RoIG9mIGxvbmdlc3QKQEAgLTE5MzksNiArMjEwOCw1NCBAQCBwYXRoa2V5c191 c2VmdWxfZm9yX29yZGVyaW5nKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpwYXRoa2V5cykK IAlyZXR1cm4gbl9jb21tb25fcGF0aGtleXM7CiB9CiAKKy8qCisgKiBwYXRoa2V5c191c2Vm dWxfZm9yX2dyb3VwaW5nCisgKgkJQ291bnQgdGhlIG51bWJlciBvZiBwYXRoa2V5cyB0aGF0 IGFyZSB1c2VmdWwgZm9yIGdyb3VwaW5nIChpbnN0ZWFkIG9mCisgKgkJZXhwbGljaXQgc29y dCkKKyAqCisgKiBHcm91cCBwYXRoa2V5cyBjb3VsZCBiZSByZW9yZGVyZWQgdG8gYmVuZWZp dCBmcm9tIHRoZSBvcmRlcmluZy4gVGhlCisgKiBvcmRlcmluZyBtYXkgbm90IGJlICJjb21w bGV0ZSIgYW5kIG1heSByZXF1aXJlIGluY3JlbWVudGFsIHNvcnQsIGJ1dCB0aGF0J3MKKyAq IGZpbmUuIFNvIHdlIHNpbXBseSBjb3VudCBwcmVmaXggcGF0aGtleXMgd2l0aCBhIG1hdGNo aW5nIGdyb3VwIGtleSwgYW5kCisgKiBzdG9wIG9uY2Ugd2UgZmluZCB0aGUgZmlyc3QgcGF0 aGtleSB3aXRob3V0IGEgbWF0Y2guCisgKgorICogU28gZS5nLiB3aXRoIHBhdGhrZXlzIChh LGIsYykgYW5kIGdyb3VwIGtleXMgKGEsYixlKSB0aGlzIGRldGVybWluZXMgKGEsYikKKyAq IHBhdGhrZXlzIGFyZSB1c2VmdWwgZm9yIGdyb3VwaW5nLCBhbmQgd2UgbWlnaHQgZG8gaW5j cmVtZW50YWwgc29ydCB0byBnZXQKKyAqIHBhdGggb3JkZXJlZCBieSAoYSxiLGUpLgorICoK KyAqIFRoaXMgbG9naWMgaXMgbmVjZXNzYXJ5IHRvIHJldGFpbiBwYXRocyB3aXRoIG9yZGVy aW5nIG5vdCBtYXRjaGluZyBncm91cGluZworICoga2V5cyBkaXJlY3RseSwgd2l0aG91dCB0 aGUgcmVvcmRlcmluZy4KKyAqCisgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgcGF0aGtleSBw cmVmaXggd2l0aCBtYXRjaGluZyBncm91cCBrZXlzLgorICovCitzdGF0aWMgaW50CitwYXRo a2V5c191c2VmdWxfZm9yX2dyb3VwaW5nKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpwYXRo a2V5cykKK3sKKwlMaXN0Q2VsbCAgICprZXk7CisJaW50CQkJbiA9IDA7CisKKwkvKiBubyBz cGVjaWFsIG9yZGVyaW5nIHJlcXVlc3RlZCBmb3IgZ3JvdXBpbmcgKi8KKwlpZiAocm9vdC0+ Z3JvdXBfcGF0aGtleXMgPT0gTklMKQorCQlyZXR1cm4gMDsKKworCS8qIHVub3JkZXJlZCBw YXRoICovCisJaWYgKHBhdGhrZXlzID09IE5JTCkKKwkJcmV0dXJuIDA7CisKKwkvKiB3YWxr IHRoZSBwYXRoa2V5cyBhbmQgc2VhcmNoIGZvciBtYXRjaGluZyBncm91cCBrZXkgKi8KKwlm b3JlYWNoKGtleSwgcGF0aGtleXMpCisJeworCQlQYXRoS2V5ICAgICpwYXRoa2V5ID0gKFBh dGhLZXkgKikgbGZpcnN0KGtleSk7CisKKwkJLyogbm8gbWF0Y2hpbmcgZ3JvdXAga2V5LCB3 ZSdyZSBkb25lICovCisJCWlmICghbGlzdF9tZW1iZXJfcHRyKHJvb3QtPmdyb3VwX3BhdGhr ZXlzLCBwYXRoa2V5KSkKKwkJCWJyZWFrOworCisJCW4rKzsKKwl9CisKKwlyZXR1cm4gbjsK K30KKwogLyoKICAqIHRydW5jYXRlX3VzZWxlc3NfcGF0aGtleXMKICAqCQlTaG9ydGVuIHRo ZSBnaXZlbiBwYXRoa2V5IGxpc3QgdG8ganVzdCB0aGUgdXNlZnVsIHBhdGhrZXlzLgpAQCAt MTk1Myw2ICsyMTcwLDkgQEAgdHJ1bmNhdGVfdXNlbGVzc19wYXRoa2V5cyhQbGFubmVySW5m byAqcm9vdCwKIAogCW51c2VmdWwgPSBwYXRoa2V5c191c2VmdWxfZm9yX21lcmdpbmcocm9v dCwgcmVsLCBwYXRoa2V5cyk7CiAJbnVzZWZ1bDIgPSBwYXRoa2V5c191c2VmdWxfZm9yX29y ZGVyaW5nKHJvb3QsIHBhdGhrZXlzKTsKKwlpZiAobnVzZWZ1bDIgPiBudXNlZnVsKQorCQlu dXNlZnVsID0gbnVzZWZ1bDI7CisJbnVzZWZ1bDIgPSBwYXRoa2V5c191c2VmdWxfZm9yX2dy b3VwaW5nKHJvb3QsIHBhdGhrZXlzKTsKIAlpZiAobnVzZWZ1bDIgPiBudXNlZnVsKQogCQlu dXNlZnVsID0gbnVzZWZ1bDI7CiAKQEAgLTE5ODgsNiArMjIwOCw4IEBAIGhhc191c2VmdWxf cGF0aGtleXMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKIHsKIAlpZiAo cmVsLT5qb2luaW5mbyAhPSBOSUwgfHwgcmVsLT5oYXNfZWNsYXNzX2pvaW5zKQogCQlyZXR1 cm4gdHJ1ZTsJCQkvKiBtaWdodCBiZSBhYmxlIHRvIHVzZSBwYXRoa2V5cyBmb3IgbWVyZ2lu ZyAqLworCWlmIChyb290LT5ncm91cF9wYXRoa2V5cyAhPSBOSUwpCisJCXJldHVybiB0cnVl OwkJCS8qIG1pZ2h0IGJlIGFibGUgdG8gdXNlIHBhdGhrZXlzIGZvciBncm91cGluZyAqLwog CWlmIChyb290LT5xdWVyeV9wYXRoa2V5cyAhPSBOSUwpCiAJCXJldHVybiB0cnVlOwkJCS8q IG1pZ2h0IGJlIGFibGUgdG8gdXNlIHRoZW0gZm9yIG9yZGVyaW5nICovCiAJcmV0dXJuIGZh bHNlOwkJCQkvKiBkZWZpbml0ZWx5IHVzZWxlc3MgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3BsYW5uZXIuYwppbmRleCBmY2Y2NDc5NDBlLi41MDQ1M2MyNDcwIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC0yODA1LDggKzI4MDUsOSBAQCByZW1v dmVfdXNlbGVzc19ncm91cGJ5X2NvbHVtbnMoUGxhbm5lckluZm8gKnJvb3QpCiAgKgogICog SW4gcHJpbmNpcGxlIGl0IG1pZ2h0IGJlIGludGVyZXN0aW5nIHRvIGNvbnNpZGVyIG90aGVy IG9yZGVyaW5ncyBvZiB0aGUKICAqIEdST1VQIEJZIGVsZW1lbnRzLCB3aGljaCBjb3VsZCBt YXRjaCB0aGUgc29ydCBvcmRlcmluZyBvZiBvdGhlcgotICogcG9zc2libGUgcGxhbnMgKGVn IGFuIGluZGV4c2NhbikgYW5kIHRoZXJlYnkgcmVkdWNlIGNvc3QuICBXZSBkb24ndAotICog Ym90aGVyIHdpdGggdGhhdCwgdGhvdWdoLiAgSGFzaGVkIGdyb3VwaW5nIHdpbGwgZnJlcXVl bnRseSB3aW4gYW55d2F5LgorICogcG9zc2libGUgcGxhbnMgKGVnIGFuIGluZGV4c2Nhbikg YW5kIHRoZXJlYnkgcmVkdWNlIGNvc3QuICBIb3dldmVyLCB3ZQorICogZG9uJ3QgeWV0IGhh dmUgc3VmZmljaWVudCBpbmZvcm1hdGlvbiB0byBkbyB0aGF0IGhlcmUsIHNvIHRoYXQncyBs ZWZ0IHVudGlsCisgKiBsYXRlciBpbiBwbGFubmluZy4gIFNlZSBnZXRfdXNlZnVsX2dyb3Vw X2tleXNfb3JkZXJpbmdzKCkuCiAgKgogICogTm90ZTogd2UgbmVlZCBubyBjb21wYXJhYmxl IHByb2Nlc3Npbmcgb2YgdGhlIGRpc3RpbmN0Q2xhdXNlIGJlY2F1c2UKICAqIHRoZSBwYXJz ZXIgYWxyZWFkeSBlbmZvcmNlZCB0aGF0IHRoYXQgbWF0Y2hlcyBPUkRFUiBCWS4KQEAgLTY4 MTEsMTIgKzY4MTIsMTIgQEAgZG9uZToKIAogc3RhdGljIFBhdGggKgogdHJ5X3ByZXNvcnRp bmcoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmdyb3VwZWRfcmVsLAotCQkJCQlQ YXRoICpwYXRoLCBQYXRoICpjaGVhcGVzdF9wYXRoKQorCQkJCQlQYXRoICpwYXRoLCBQYXRo ICpjaGVhcGVzdF9wYXRoLCBQYXRoS2V5SW5mbyAqaW5mbykKIHsKIAlib29sCQlpc19zb3J0 ZWQ7CiAJaW50CQkJcHJlc29ydGVkX2tleXM7CiAKLQlpc19zb3J0ZWQgPSBwYXRoa2V5c19j b3VudF9jb250YWluZWRfaW4ocm9vdC0+Z3JvdXBfcGF0aGtleXMsCisJaXNfc29ydGVkID0g cGF0aGtleXNfY291bnRfY29udGFpbmVkX2luKGluZm8tPnBhdGhrZXlzLAogCQkJCQkJCQkJ CQlwYXRoLT5wYXRoa2V5cywKIAkJCQkJCQkJCQkJJnByZXNvcnRlZF9rZXlzKTsKIApAQCAt Njg0MiwxMyArNjg0MywxMyBAQCB0cnlfcHJlc29ydGluZyhQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqZ3JvdXBlZF9yZWwsCiAJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX3Nv cnRfcGF0aChyb290LAogCQkJCQkJCQkJCQkgZ3JvdXBlZF9yZWwsCiAJCQkJCQkJCQkJCSBw YXRoLAotCQkJCQkJCQkJCQkgcm9vdC0+Z3JvdXBfcGF0aGtleXMsCisJCQkJCQkJCQkJCSBp bmZvLT5wYXRoa2V5cywKIAkJCQkJCQkJCQkJIC0xLjApOwogCQllbHNlCiAJCQlwYXRoID0g KFBhdGggKikgY3JlYXRlX2luY3JlbWVudGFsX3NvcnRfcGF0aChyb290LAogCQkJCQkJCQkJ CQkJCQkgZ3JvdXBlZF9yZWwsCiAJCQkJCQkJCQkJCQkJCSBwYXRoLAotCQkJCQkJCQkJCQkJ CQkgcm9vdC0+Z3JvdXBfcGF0aGtleXMsCisJCQkJCQkJCQkJCQkJCSBpbmZvLT5wYXRoa2V5 cywKIAkJCQkJCQkJCQkJCQkJIHByZXNvcnRlZF9rZXlzLAogCQkJCQkJCQkJCQkJCQkgLTEu MCk7CiAJfQpAQCAtNjg4NSw1NiArNjg4Niw3NCBAQCBhZGRfcGF0aHNfdG9fZ3JvdXBpbmdf cmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJCSAqLwog CQlmb3JlYWNoKGxjLCBpbnB1dF9yZWwtPnBhdGhsaXN0KQogCQl7CisJCQlMaXN0Q2VsbCAg ICpsYzI7CiAJCQlQYXRoCSAgICpwYXRoID0gKFBhdGggKikgbGZpcnN0KGxjKTsKKwkJCVBh dGgJICAgKnBhdGhfc2F2ZSA9IHBhdGg7CisJCQlMaXN0CSAgICpwYXRoa2V5X29yZGVyaW5n cyA9IE5JTDsKIAotCQkJcGF0aCA9IHRyeV9wcmVzb3J0aW5nKHJvb3QsIGdyb3VwZWRfcmVs LCBwYXRoLCBjaGVhcGVzdF9wYXRoKTsKKwkJCS8qIGdlbmVyYXRlIGFsdGVybmF0aXZlIGdy b3VwIG9yZGVyaW5ncyB0aGF0IG1pZ2h0IGJlIHVzZWZ1bCAqLworCQkJcGF0aGtleV9vcmRl cmluZ3MgPSBnZXRfdXNlZnVsX2dyb3VwX2tleXNfb3JkZXJpbmdzKHJvb3QsCisJCQkJCQkJ CQkJCQkJCQkJcGF0aC0+cm93cywKKwkJCQkJCQkJCQkJCQkJCQlwYXRoLT5wYXRoa2V5cyk7 CiAKLQkJCWlmIChwYXRoID09IE5VTEwpCi0JCQkJY29udGludWU7CisJCQlBc3NlcnQobGlz dF9sZW5ndGgocGF0aGtleV9vcmRlcmluZ3MpID4gMCk7CiAKLQkJCS8qIE5vdyBkZWNpZGUg d2hhdCB0byBzdGljayBhdG9wIGl0ICovCi0JCQlpZiAocGFyc2UtPmdyb3VwaW5nU2V0cykK KwkJCWZvcmVhY2gobGMyLCBwYXRoa2V5X29yZGVyaW5ncykKIAkJCXsKLQkJCQljb25zaWRl cl9ncm91cGluZ3NldHNfcGF0aHMocm9vdCwgZ3JvdXBlZF9yZWwsCi0JCQkJCQkJCQkJCXBh dGgsIHRydWUsIGNhbl9oYXNoLAotCQkJCQkJCQkJCQlnZCwgYWdnX2Nvc3RzLCBkTnVtR3Jv dXBzKTsKLQkJCX0KLQkJCWVsc2UgaWYgKHBhcnNlLT5oYXNBZ2dzKQotCQkJewotCQkJCS8q Ci0JCQkJICogV2UgaGF2ZSBhZ2dyZWdhdGlvbiwgcG9zc2libHkgd2l0aCBwbGFpbiBHUk9V UCBCWS4gTWFrZSBhbgotCQkJCSAqIEFnZ1BhdGguCi0JCQkJICovCi0JCQkJYWRkX3BhdGgo Z3JvdXBlZF9yZWwsIChQYXRoICopCisJCQkJUGF0aEtleUluZm8JICAgKmluZm8gPSAoUGF0 aEtleUluZm8gKikgbGZpcnN0KGxjMik7CisKKwkJCQkvKiByZXN0b3JlIHRoZSBwYXRoICh3 ZSByZXBsYWNlIGl0IGluIHRoZSBsb29wKSAqLworCQkJCXBhdGggPSBwYXRoX3NhdmU7CisK KwkJCQlwYXRoID0gdHJ5X3ByZXNvcnRpbmcocm9vdCwgZ3JvdXBlZF9yZWwsIHBhdGgsIGNo ZWFwZXN0X3BhdGgsIGluZm8pOworCisJCQkJaWYgKHBhdGggPT0gTlVMTCkKKwkJCQljb250 aW51ZTsKKworCQkJCS8qIE5vdyBkZWNpZGUgd2hhdCB0byBzdGljayBhdG9wIGl0ICovCisJ CQkJaWYgKHBhcnNlLT5ncm91cGluZ1NldHMpCisJCQkJeworCQkJCQljb25zaWRlcl9ncm91 cGluZ3NldHNfcGF0aHMocm9vdCwgZ3JvdXBlZF9yZWwsCisJCQkJCQkJCQkJCQlwYXRoLCB0 cnVlLCBjYW5faGFzaCwKKwkJCQkJCQkJCQkJCWdkLCBhZ2dfY29zdHMsIGROdW1Hcm91cHMp OworCQkJCX0KKwkJCQllbHNlIGlmIChwYXJzZS0+aGFzQWdncykKKwkJCQl7CisJCQkJCS8q CisJCQkJCSAqIFdlIGhhdmUgYWdncmVnYXRpb24sIHBvc3NpYmx5IHdpdGggcGxhaW4gR1JP VVAgQlkuIE1ha2UgYW4KKwkJCQkJICogQWdnUGF0aC4KKwkJCQkJICovCisJCQkJCWFkZF9w YXRoKGdyb3VwZWRfcmVsLCAoUGF0aCAqKQogCQkJCQkJIGNyZWF0ZV9hZ2dfcGF0aChyb290 LAogCQkJCQkJCQkJCSBncm91cGVkX3JlbCwKIAkJCQkJCQkJCQkgcGF0aCwKIAkJCQkJCQkJ CQkgZ3JvdXBlZF9yZWwtPnJlbHRhcmdldCwKIAkJCQkJCQkJCQkgcGFyc2UtPmdyb3VwQ2xh dXNlID8gQUdHX1NPUlRFRCA6IEFHR19QTEFJTiwKIAkJCQkJCQkJCQkgQUdHU1BMSVRfU0lN UExFLAotCQkJCQkJCQkJCSByb290LT5wcm9jZXNzZWRfZ3JvdXBDbGF1c2UsCisJCQkJCQkJ CQkJIGluZm8tPmNsYXVzZXMsCiAJCQkJCQkJCQkJIGhhdmluZ1F1YWwsCiAJCQkJCQkJCQkJ IGFnZ19jb3N0cywKIAkJCQkJCQkJCQkgZE51bUdyb3VwcykpOwotCQkJfQotCQkJZWxzZSBp ZiAocGFyc2UtPmdyb3VwQ2xhdXNlKQotCQkJewotCQkJCS8qCi0JCQkJICogV2UgaGF2ZSBH Uk9VUCBCWSB3aXRob3V0IGFnZ3JlZ2F0aW9uIG9yIGdyb3VwaW5nIHNldHMuIE1ha2UKLQkJ CQkgKiBhIEdyb3VwUGF0aC4KLQkJCQkgKi8KLQkJCQlhZGRfcGF0aChncm91cGVkX3JlbCwg KFBhdGggKikKKwkJCQl9CisJCQkJZWxzZSBpZiAocGFyc2UtPmdyb3VwQ2xhdXNlKQorCQkJ CXsKKwkJCQkJLyoKKwkJCQkJICogV2UgaGF2ZSBHUk9VUCBCWSB3aXRob3V0IGFnZ3JlZ2F0 aW9uIG9yIGdyb3VwaW5nIHNldHMuIE1ha2UKKwkJCQkJICogYSBHcm91cFBhdGguCisJCQkJ CSAqLworCQkJCQlhZGRfcGF0aChncm91cGVkX3JlbCwgKFBhdGggKikKIAkJCQkJCSBjcmVh dGVfZ3JvdXBfcGF0aChyb290LAogCQkJCQkJCQkJCSAgIGdyb3VwZWRfcmVsLAogCQkJCQkJ CQkJCSAgIHBhdGgsCi0JCQkJCQkJCQkJICAgcm9vdC0+cHJvY2Vzc2VkX2dyb3VwQ2xhdXNl LAorCQkJCQkJCQkJCSAgIGluZm8tPmNsYXVzZXMsCiAJCQkJCQkJCQkJICAgaGF2aW5nUXVh bCwKIAkJCQkJCQkJCQkgICBkTnVtR3JvdXBzKSk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0J CQkJLyogT3RoZXIgY2FzZXMgc2hvdWxkIGhhdmUgYmVlbiBoYW5kbGVkIGFib3ZlICovCi0J CQkJQXNzZXJ0KGZhbHNlKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLyogT3Ro ZXIgY2FzZXMgc2hvdWxkIGhhdmUgYmVlbiBoYW5kbGVkIGFib3ZlICovCisJCQkJCUFzc2Vy dChmYWxzZSk7CisJCQkJfQogCQkJfQogCQl9CiAKQEAgLTY5NDYsMzUgKzY5NjUsNTUgQEAg YWRkX3BhdGhzX3RvX2dyb3VwaW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqaW5wdXRfcmVsLAogCQl7CiAJCQlmb3JlYWNoKGxjLCBwYXJ0aWFsbHlfZ3JvdXBlZF9y ZWwtPnBhdGhsaXN0KQogCQkJeworCQkJCUxpc3RDZWxsICAgKmxjMjsKIAkJCQlQYXRoCSAg ICpwYXRoID0gKFBhdGggKikgbGZpcnN0KGxjKTsKKwkJCQlQYXRoCSAgICpwYXRoX3NhdmUg PSBwYXRoOworCQkJCUxpc3QJICAgKnBhdGhrZXlfb3JkZXJpbmdzID0gTklMOwogCi0JCQkJ cGF0aCA9IHRyeV9wcmVzb3J0aW5nKHJvb3QsIGdyb3VwZWRfcmVsLCBwYXRoLAotCQkJCQkJ CQkJICBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGgpOworCQkJ CS8qIGdlbmVyYXRlIGFsdGVybmF0aXZlIGdyb3VwIG9yZGVyaW5ncyB0aGF0IG1pZ2h0IGJl IHVzZWZ1bCAqLworCQkJCXBhdGhrZXlfb3JkZXJpbmdzID0gZ2V0X3VzZWZ1bF9ncm91cF9r ZXlzX29yZGVyaW5ncyhyb290LAorCQkJCQkJCQkJCQkJCQkJCQlwYXRoLT5yb3dzLAorCQkJ CQkJCQkJCQkJCQkJCQlwYXRoLT5wYXRoa2V5cyk7CiAKLQkJCQlpZiAocGF0aCA9PSBOVUxM KQotCQkJCQljb250aW51ZTsKKwkJCQlBc3NlcnQobGlzdF9sZW5ndGgocGF0aGtleV9vcmRl cmluZ3MpID4gMCk7CiAKLQkJCQlpZiAocGFyc2UtPmhhc0FnZ3MpCi0JCQkJCWFkZF9wYXRo KGdyb3VwZWRfcmVsLCAoUGF0aCAqKQorCQkJCS8qIHByb2Nlc3MgYWxsIHBvdGVudGlhbGx5 IGludGVyZXN0aW5nIGdyb3VwaW5nIHJlb3JkZXJpbmdzICovCisJCQkJZm9yZWFjaChsYzIs IHBhdGhrZXlfb3JkZXJpbmdzKQorCQkJCXsKKwkJCQkJUGF0aEtleUluZm8gICAgKmluZm8g PSAoUGF0aEtleUluZm8gKikgbGZpcnN0KGxjMik7CisKKwkJCQkJLyogcmVzdG9yZSB0aGUg cGF0aCAod2UgcmVwbGFjZSBpdCBpbiB0aGUgbG9vcCkgKi8KKwkJCQkJcGF0aCA9IHBhdGhf c2F2ZTsKKworCQkJCQlwYXRoID0gdHJ5X3ByZXNvcnRpbmcocm9vdCwgZ3JvdXBlZF9yZWws IHBhdGgsCisJCQkJCQkJCQkJICBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPmNoZWFwZXN0X3Rv dGFsX3BhdGgsCisJCQkJCQkJCQkJICBpbmZvKTsKKworCQkJCQlpZiAocGF0aCA9PSBOVUxM KQorCQkJCQkJY29udGludWU7CisKKwkJCQkJaWYgKHBhcnNlLT5oYXNBZ2dzKQorCQkJCQkJ YWRkX3BhdGgoZ3JvdXBlZF9yZWwsIChQYXRoICopCiAJCQkJCQkJIGNyZWF0ZV9hZ2dfcGF0 aChyb290LAogCQkJCQkJCQkJCQkgZ3JvdXBlZF9yZWwsCiAJCQkJCQkJCQkJCSBwYXRoLAog CQkJCQkJCQkJCQkgZ3JvdXBlZF9yZWwtPnJlbHRhcmdldCwKIAkJCQkJCQkJCQkJIHBhcnNl LT5ncm91cENsYXVzZSA/IEFHR19TT1JURUQgOiBBR0dfUExBSU4sCiAJCQkJCQkJCQkJCSBB R0dTUExJVF9GSU5BTF9ERVNFUklBTCwKLQkJCQkJCQkJCQkJIHJvb3QtPnByb2Nlc3NlZF9n cm91cENsYXVzZSwKKwkJCQkJCQkJCQkJIGluZm8tPmNsYXVzZXMsCiAJCQkJCQkJCQkJCSBo YXZpbmdRdWFsLAogCQkJCQkJCQkJCQkgYWdnX2ZpbmFsX2Nvc3RzLAogCQkJCQkJCQkJCQkg ZE51bUdyb3VwcykpOwotCQkJCWVsc2UKLQkJCQkJYWRkX3BhdGgoZ3JvdXBlZF9yZWwsIChQ YXRoICopCisJCQkJCWVsc2UKKwkJCQkJCWFkZF9wYXRoKGdyb3VwZWRfcmVsLCAoUGF0aCAq KQogCQkJCQkJCSBjcmVhdGVfZ3JvdXBfcGF0aChyb290LAogCQkJCQkJCQkJCQkgICBncm91 cGVkX3JlbCwKIAkJCQkJCQkJCQkJICAgcGF0aCwKLQkJCQkJCQkJCQkJICAgcm9vdC0+cHJv Y2Vzc2VkX2dyb3VwQ2xhdXNlLAorCQkJCQkJCQkJCQkgICBpbmZvLT5jbGF1c2VzLAogCQkJ CQkJCQkJCQkgICBoYXZpbmdRdWFsLAogCQkJCQkJCQkJCQkgICBkTnVtR3JvdXBzKSk7CiAK KwkJCQl9CiAJCQl9CiAJCX0KIAl9CkBAIC03MTc3LDM0ICs3MjE2LDUzIEBAIGNyZWF0ZV9w YXJ0aWFsX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkgKi8KIAkJZm9y ZWFjaChsYywgaW5wdXRfcmVsLT5wYXRobGlzdCkKIAkJeworCQkJTGlzdENlbGwgICAqbGMy OwogCQkJUGF0aAkgICAqcGF0aCA9IChQYXRoICopIGxmaXJzdChsYyk7CisJCQlQYXRoCSAg ICpwYXRoX3NhdmUgPSBwYXRoOworCQkJTGlzdAkgICAqcGF0aGtleV9vcmRlcmluZ3MgPSBO SUw7CiAKLQkJCXBhdGggPSB0cnlfcHJlc29ydGluZyhyb290LCBwYXJ0aWFsbHlfZ3JvdXBl ZF9yZWwsIHBhdGgsCi0JCQkJCQkJCSAgY2hlYXBlc3RfdG90YWxfcGF0aCk7CisJCQkvKiBn ZW5lcmF0ZSBhbHRlcm5hdGl2ZSBncm91cCBvcmRlcmluZ3MgdGhhdCBtaWdodCBiZSB1c2Vm dWwgKi8KKwkJCXBhdGhrZXlfb3JkZXJpbmdzID0gZ2V0X3VzZWZ1bF9ncm91cF9rZXlzX29y ZGVyaW5ncyhyb290LAorCQkJCQkJCQkJCQkJCQkJCXBhdGgtPnJvd3MsCisJCQkJCQkJCQkJ CQkJCQkJcGF0aC0+cGF0aGtleXMpOwogCi0JCQlpZiAocGF0aCA9PSBOVUxMKQotCQkJCWNv bnRpbnVlOworCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHBhdGhrZXlfb3JkZXJpbmdzKSA+IDAp OworCisJCQkvKiBwcm9jZXNzIGFsbCBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBncm91cGlu ZyByZW9yZGVyaW5ncyAqLworCQkJZm9yZWFjaChsYzIsIHBhdGhrZXlfb3JkZXJpbmdzKQor CQkJeworCQkJCVBhdGhLZXlJbmZvCSAgICppbmZvID0gKFBhdGhLZXlJbmZvICopIGxmaXJz dChsYzIpOworCisJCQkJLyogcmVzdG9yZSB0aGUgcGF0aCAod2UgcmVwbGFjZSBpdCBpbiB0 aGUgbG9vcCkgKi8KKwkJCQlwYXRoID0gcGF0aF9zYXZlOwogCi0JCQlpZiAocGFyc2UtPmhh c0FnZ3MpCi0JCQkJYWRkX3BhdGgocGFydGlhbGx5X2dyb3VwZWRfcmVsLCAoUGF0aCAqKQor CQkJCXBhdGggPSB0cnlfcHJlc29ydGluZyhyb290LCBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWws IHBhdGgsCisJCQkJCQkJCQkgIGNoZWFwZXN0X3RvdGFsX3BhdGgsIGluZm8pOworCisJCQkJ aWYgKHBhdGggPT0gTlVMTCkKKwkJCQkJY29udGludWU7CisKKwkJCQlpZiAocGFyc2UtPmhh c0FnZ3MpCisJCQkJCWFkZF9wYXRoKHBhcnRpYWxseV9ncm91cGVkX3JlbCwgKFBhdGggKikK IAkJCQkJCSBjcmVhdGVfYWdnX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkgcGFydGlhbGx5X2dy b3VwZWRfcmVsLAogCQkJCQkJCQkJCSBwYXRoLAogCQkJCQkJCQkJCSBwYXJ0aWFsbHlfZ3Jv dXBlZF9yZWwtPnJlbHRhcmdldCwKIAkJCQkJCQkJCQkgcGFyc2UtPmdyb3VwQ2xhdXNlID8g QUdHX1NPUlRFRCA6IEFHR19QTEFJTiwKIAkJCQkJCQkJCQkgQUdHU1BMSVRfSU5JVElBTF9T RVJJQUwsCi0JCQkJCQkJCQkJIHJvb3QtPnByb2Nlc3NlZF9ncm91cENsYXVzZSwKKwkJCQkJ CQkJCQkgaW5mby0+Y2xhdXNlcywKIAkJCQkJCQkJCQkgTklMLAogCQkJCQkJCQkJCSBhZ2df cGFydGlhbF9jb3N0cywKIAkJCQkJCQkJCQkgZE51bVBhcnRpYWxHcm91cHMpKTsKLQkJCWVs c2UKLQkJCQlhZGRfcGF0aChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsIChQYXRoICopCisJCQkJ ZWxzZQorCQkJCQlhZGRfcGF0aChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsIChQYXRoICopCiAJ CQkJCQkgY3JlYXRlX2dyb3VwX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkgICBwYXJ0aWFsbHlf Z3JvdXBlZF9yZWwsCiAJCQkJCQkJCQkJICAgcGF0aCwKLQkJCQkJCQkJCQkgICByb290LT5w cm9jZXNzZWRfZ3JvdXBDbGF1c2UsCisJCQkJCQkJCQkJICAgaW5mby0+Y2xhdXNlcywKIAkJ CQkJCQkJCQkgICBOSUwsCiAJCQkJCQkJCQkJICAgZE51bVBhcnRpYWxHcm91cHMpKTsKKwkJ CX0KIAkJfQogCX0KIApAQCAtNzIxMywzNCArNzI3MSw1NCBAQCBjcmVhdGVfcGFydGlhbF9n cm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJLyogU2ltaWxhciB0byBhYm92 ZSBsb2dpYywgYnV0IGZvciBwYXJ0aWFsIHBhdGhzLiAqLwogCQlmb3JlYWNoKGxjLCBpbnB1 dF9yZWwtPnBhcnRpYWxfcGF0aGxpc3QpCiAJCXsKKwkJCUxpc3RDZWxsICAgKmxjMjsKIAkJ CVBhdGgJICAgKnBhdGggPSAoUGF0aCAqKSBsZmlyc3QobGMpOworCQkJUGF0aAkgICAqcGF0 aF9zYXZlID0gcGF0aDsKKwkJCUxpc3QJICAgKnBhdGhrZXlfb3JkZXJpbmdzID0gTklMOwog Ci0JCQlwYXRoID0gdHJ5X3ByZXNvcnRpbmcocm9vdCwgcGFydGlhbGx5X2dyb3VwZWRfcmVs LCBwYXRoLAotCQkJCQkJCQkgIGNoZWFwZXN0X3BhcnRpYWxfcGF0aCk7CisJCQkvKiBnZW5l cmF0ZSBhbHRlcm5hdGl2ZSBncm91cCBvcmRlcmluZ3MgdGhhdCBtaWdodCBiZSB1c2VmdWwg Ki8KKwkJCXBhdGhrZXlfb3JkZXJpbmdzID0gZ2V0X3VzZWZ1bF9ncm91cF9rZXlzX29yZGVy aW5ncyhyb290LAorCQkJCQkJCQkJCQkJCQkJCXBhdGgtPnJvd3MsCisJCQkJCQkJCQkJCQkJ CQkJcGF0aC0+cGF0aGtleXMpOwogCi0JCQlpZiAocGF0aCA9PSBOVUxMKQotCQkJCWNvbnRp bnVlOworCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHBhdGhrZXlfb3JkZXJpbmdzKSA+IDApOwor CisJCQkvKiBwcm9jZXNzIGFsbCBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBncm91cGluZyBy ZW9yZGVyaW5ncyAqLworCQkJZm9yZWFjaChsYzIsIHBhdGhrZXlfb3JkZXJpbmdzKQorCQkJ eworCQkJCVBhdGhLZXlJbmZvICppbmZvID0gKFBhdGhLZXlJbmZvICopIGxmaXJzdChsYzIp OworCisKKwkJCQkvKiByZXN0b3JlIHRoZSBwYXRoICh3ZSByZXBsYWNlIGl0IGluIHRoZSBs b29wKSAqLworCQkJCXBhdGggPSBwYXRoX3NhdmU7CiAKLQkJCWlmIChwYXJzZS0+aGFzQWdn cykKLQkJCQlhZGRfcGFydGlhbF9wYXRoKHBhcnRpYWxseV9ncm91cGVkX3JlbCwgKFBhdGgg KikKKwkJCQlwYXRoID0gdHJ5X3ByZXNvcnRpbmcocm9vdCwgcGFydGlhbGx5X2dyb3VwZWRf cmVsLCBwYXRoLAorCQkJCQkJCQkJICBjaGVhcGVzdF9wYXJ0aWFsX3BhdGgsIGluZm8pOwor CisJCQkJaWYgKHBhdGggPT0gTlVMTCkKKwkJCQkJY29udGludWU7CisKKwkJCQlpZiAocGFy c2UtPmhhc0FnZ3MpCisJCQkJCWFkZF9wYXJ0aWFsX3BhdGgocGFydGlhbGx5X2dyb3VwZWRf cmVsLCAoUGF0aCAqKQogCQkJCQkJCQkgY3JlYXRlX2FnZ19wYXRoKHJvb3QsCiAJCQkJCQkJ CQkJCQkgcGFydGlhbGx5X2dyb3VwZWRfcmVsLAogCQkJCQkJCQkJCQkJIHBhdGgsCiAJCQkJ CQkJCQkJCQkgcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5yZWx0YXJnZXQsCiAJCQkJCQkJCQkJ CQkgcGFyc2UtPmdyb3VwQ2xhdXNlID8gQUdHX1NPUlRFRCA6IEFHR19QTEFJTiwKIAkJCQkJ CQkJCQkJCSBBR0dTUExJVF9JTklUSUFMX1NFUklBTCwKLQkJCQkJCQkJCQkJCSByb290LT5w cm9jZXNzZWRfZ3JvdXBDbGF1c2UsCisJCQkJCQkJCQkJCQkgaW5mby0+Y2xhdXNlcywKIAkJ CQkJCQkJCQkJCSBOSUwsCiAJCQkJCQkJCQkJCQkgYWdnX3BhcnRpYWxfY29zdHMsCiAJCQkJ CQkJCQkJCQkgZE51bVBhcnRpYWxQYXJ0aWFsR3JvdXBzKSk7Ci0JCQllbHNlCi0JCQkJYWRk X3BhcnRpYWxfcGF0aChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsIChQYXRoICopCisJCQkJZWxz ZQorCQkJCQlhZGRfcGFydGlhbF9wYXRoKHBhcnRpYWxseV9ncm91cGVkX3JlbCwgKFBhdGgg KikKIAkJCQkJCQkJIGNyZWF0ZV9ncm91cF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJCQkgICBw YXJ0aWFsbHlfZ3JvdXBlZF9yZWwsCiAJCQkJCQkJCQkJCQkgICBwYXRoLAotCQkJCQkJCQkJ CQkJICAgcm9vdC0+cHJvY2Vzc2VkX2dyb3VwQ2xhdXNlLAorCQkJCQkJCQkJCQkJICAgaW5m by0+Y2xhdXNlcywKIAkJCQkJCQkJCQkJCSAgIE5JTCwKIAkJCQkJCQkJCQkJCSAgIGROdW1Q YXJ0aWFsUGFydGlhbEdyb3VwcykpOworCQkJfQogCQl9CiAJfQogCkBAIC03MzU0LDYgKzc0 MzIsOCBAQCBnYXRoZXJfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCkKIAkgKiBXZSBjYW4gYWxzbyBza2lwIHRoZSBlbnRpcmUgbG9vcCB3aGVu IHdlIG9ubHkgaGF2ZSBhIHNpbmdsZS1pdGVtCiAJICogZ3JvdXBfcGF0aGtleXMgYmVjYXVz ZSB0aGVuIHdlIGNhbid0IHBvc3NpYmx5IGhhdmUgYSBwcmVzb3J0ZWQgcHJlZml4CiAJICog b2YgdGhlIGxpc3Qgd2l0aG91dCBoYXZpbmcgdGhlIGxpc3QgYmUgZnVsbHkgc29ydGVkLgor CSAqCisJICogWFhYIFNob3VsZG4ndCB0aGlzIGFsc28gY29uc2lkZXIgdGhlIGdyb3VwLWtl eS1yZW9yZGVyaW5nPwogCSAqLwogCWlmICghZW5hYmxlX2luY3JlbWVudGFsX3NvcnQgfHwg bGlzdF9sZW5ndGgocm9vdC0+Z3JvdXBfcGF0aGtleXMpID09IDEpCiAJCXJldHVybjsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggZTUzZWJjNmRjMi4uN2ZlNTg1 MThkNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTEwNTAsNiAr MTA1MCwxNiBAQCBzdHJ1Y3QgY29uZmlnX2Jvb2wgQ29uZmlndXJlTmFtZXNCb29sW10gPQog CQl0cnVlLAogCQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwKKwl7CisJCXsiZW5hYmxlX2dyb3Vw X2J5X3Jlb3JkZXJpbmciLCBQR0NfVVNFUlNFVCwgUVVFUllfVFVOSU5HX01FVEhPRCwKKwkJ CWdldHRleHRfbm9vcCgiRW5hYmxlcyByZW9yZGVyaW5nIG9mIEdST1VQIEJZIGtleXMuIiks CisJCQlOVUxMLAorCQkJR1VDX0VYUExBSU4KKwkJfSwKKwkJJmVuYWJsZV9ncm91cF9ieV9y ZW9yZGVyaW5nLAorCQl0cnVlLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKIAl7CiAJCXsi Z2VxbyIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5JTkdfR0VRTywKIAkJCWdldHRleHRfbm9v cCgiRW5hYmxlcyBnZW5ldGljIHF1ZXJ5IG9wdGltaXphdGlvbi4iKSwKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBiMjgwOWM3 MTFhLi5kYzgyZmNlYjA1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0 Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0zOTksNiArMzk5LDcgQEAKICNlbmFibGVfc2Vxc2Nh biA9IG9uCiAjZW5hYmxlX3NvcnQgPSBvbgogI2VuYWJsZV90aWRzY2FuID0gb24KKyNlbmFi bGVfZ3JvdXBfYnlfcmVvcmRlcmluZyA9IG9uCiAKICMgLSBQbGFubmVyIENvc3QgQ29uc3Rh bnRzIC0KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCBiOTcxM2VjOWFhLi4wYTI1MTk4 NGMxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTQ1Niw2ICsxNDU2LDE2IEBAIHR5 cGVkZWYgc3RydWN0IFBhdGhLZXkKIAlib29sCQlwa19udWxsc19maXJzdDsgLyogZG8gTlVM THMgY29tZSBiZWZvcmUgbm9ybWFsIHZhbHVlcz8gKi8KIH0gUGF0aEtleTsKIAorLyoKKyAq IENvbWJpbmVzIGluZm9ybWF0aW9uIGFib3V0IHBhdGhrZXlzIGFuZCB0aGUgYXNzb2NpYXRl ZCBjbGF1c2VzLgorICovCit0eXBlZGVmIHN0cnVjdCBQYXRoS2V5SW5mbworeworCU5vZGVU YWcJCXR5cGU7CisJTGlzdAkgICAqcGF0aGtleXM7CisJTGlzdAkgICAqY2xhdXNlczsKK30g UGF0aEtleUluZm87CisKIC8qCiAgKiBWb2xhdGlsZUZ1bmN0aW9uU3RhdHVzIC0tIGFsbG93 cyBub2RlcyB0byBjYWNoZSB0aGVpcgogICogY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnMg cHJvcGVydGllcy4gVk9MQVRJTElUWV9VTktOT1dOIG1lYW5zIG5vdCB5ZXQKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oIGIvc3JjL2luY2x1ZGUvb3B0aW1p emVyL3BhdGhzLmgKaW5kZXggZWZkNGFiYzI4Zi4uZTgwMTU2YzQ5ZiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1p emVyL3BhdGhzLmgKQEAgLTI0LDYgKzI0LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wg ZW5hYmxlX2dlcW87CiBleHRlcm4gUEdETExJTVBPUlQgaW50IGdlcW9fdGhyZXNob2xkOwog ZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplOwog ZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtaW5fcGFyYWxsZWxfaW5kZXhfc2Nhbl9zaXplOwor ZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2dyb3VwX2J5X3Jlb3JkZXJpbmc7CiAK IC8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgaW4gc2V0X3JlbF9wYXRobGlz dCgpICovCiB0eXBlZGVmIHZvaWQgKCpzZXRfcmVsX3BhdGhsaXN0X2hvb2tfdHlwZSkgKFBs YW5uZXJJbmZvICpyb290LApAQCAtMjA0LDYgKzIwNSw4IEBAIHR5cGVkZWYgZW51bQogZXh0 ZXJuIFBhdGhLZXlzQ29tcGFyaXNvbiBjb21wYXJlX3BhdGhrZXlzKExpc3QgKmtleXMxLCBM aXN0ICprZXlzMik7CiBleHRlcm4gYm9vbCBwYXRoa2V5c19jb250YWluZWRfaW4oTGlzdCAq a2V5czEsIExpc3QgKmtleXMyKTsKIGV4dGVybiBib29sIHBhdGhrZXlzX2NvdW50X2NvbnRh aW5lZF9pbihMaXN0ICprZXlzMSwgTGlzdCAqa2V5czIsIGludCAqbl9jb21tb24pOworZXh0 ZXJuIExpc3QgKmdldF91c2VmdWxfZ3JvdXBfa2V5c19vcmRlcmluZ3MoUGxhbm5lckluZm8g KnJvb3QsIGRvdWJsZSBucm93cywKKwkJCQkJCQkJCQkJIExpc3QgKnBhdGhfcGF0aGtleXMp OwogZXh0ZXJuIFBhdGggKmdldF9jaGVhcGVzdF9wYXRoX2Zvcl9wYXRoa2V5cyhMaXN0ICpw YXRocywgTGlzdCAqcGF0aGtleXMsCiAJCQkJCQkJCQkJCVJlbGlkcyByZXF1aXJlZF9vdXRl ciwKIAkJCQkJCQkJCQkJQ29zdFNlbGVjdG9yIGNvc3RfY3JpdGVyaW9uLApkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGVzLm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlcy5vdXQKaW5kZXggZjYzNWM1YTFhZi4uNDIz YzhlYzNiNiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdh dGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0 CkBAIC0yNzI4LDYgKzI3MjgsMTM4IEBAIFNFTEVDVCBiYWxrKGh1bmRyZWQpIEZST00gdGVu azE7CiAoMSByb3cpCiAKIFJPTExCQUNLOworLS0gR1JPVVAgQlkgb3B0aW1pemF0aW9uIGJ5 IHJlb3JkZXIgY29sdW1ucworQ1JFQVRFIFRBQkxFIGJ0ZyBBUyBTRUxFQ1QKKyAgaSAlIDEw MCBBUyB4LAorICBpICUgMTAwIEFTIHksCisgICdhYmMnIHx8IGkgJSAxMCBBUyB6LAorICBp IEFTIHcKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIEFTIGk7CitDUkVBVEUgSU5E RVggYWJjIE9OIGJ0Zyh4LHkpOworQU5BTFlaRSBidGc7CistLSBHUk9VUCBCWSBvcHRpbWl6 YXRpb24gYnkgcmVvcmRlciBjb2x1bW5zIGJ5IGZyZXF1ZW5jeQorU0VUIGVuYWJsZV9oYXNo YWdnPW9mZjsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vycz0gMDsKK1NFVCBtYXhfcGFyYWxs ZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKKy0tIFV0aWxpemUgaW5kZXggc2NhbiBvcmRl cmluZyB0byBhdm9pZCBhIFNvcnQgb3BlcmF0aW9uCitFWFBMQUlOIChDT1NUUyBPRkYpIFNF TEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSB4LHk7CisgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgR3JvdXBBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogeCwgeQorICAg LT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBhYmMgb24gYnRnCisoMyByb3dzKQorCitFWFBM QUlOIChDT1NUUyBPRkYpIFNFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSB5LHg7 CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR3JvdXBBZ2dyZWdhdGUKKyAgIEdy b3VwIEtleTogeCwgeQorICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBhYmMgb24gYnRn CisoMyByb3dzKQorCistLSBFbmdhZ2UgaW5jcmVtZW50YWwgc29ydAorZXhwbGFpbiAoQ09T VFMgT0ZGKSBTRUxFQ1QgeCx5IEZST00gYnRnIEdST1VQIEJZIHgseSx6LHc7CisgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHcm91cAorICAgR3JvdXAgS2V5OiB4LCB5LCB6 LCB3CisgICAtPiAgSW5jcmVtZW50YWwgU29ydAorICAgICAgICAgU29ydCBLZXk6IHgsIHks IHosIHcKKyAgICAgICAgIFByZXNvcnRlZCBLZXk6IHgsIHkKKyAgICAgICAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIGFiYyBvbiBidGcKKyg2IHJvd3MpCisKK2V4cGxhaW4gKENPU1RTIE9G RikgU0VMRUNUIHgseSBGUk9NIGJ0ZyBHUk9VUCBCWSB6LHksdyx4OworICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgR3JvdXAKKyAgIEdyb3VwIEtleTogeCwgeSwgeiwgdwor ICAgLT4gIEluY3JlbWVudGFsIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiB4LCB5LCB6LCB3 CisgICAgICAgICBQcmVzb3J0ZWQgS2V5OiB4LCB5CisgICAgICAgICAtPiAgSW5kZXggU2Nh biB1c2luZyBhYmMgb24gYnRnCisoNiByb3dzKQorCitleHBsYWluIChDT1NUUyBPRkYpIFNF TEVDVCB4LHkgRlJPTSBidGcgR1JPVVAgQlkgdyx6LHgseTsKKyAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEdyb3VwCisgICBHcm91cCBLZXk6IHgsIHksIHcsIHoKKyAgIC0+ ICBJbmNyZW1lbnRhbCBTb3J0CisgICAgICAgICBTb3J0IEtleTogeCwgeSwgdywgegorICAg ICAgICAgUHJlc29ydGVkIEtleTogeCwgeQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNp bmcgYWJjIG9uIGJ0ZworKDYgcm93cykKKworZXhwbGFpbiAoQ09TVFMgT0ZGKSBTRUxFQ1Qg eCx5IEZST00gYnRnIEdST1VQIEJZIHcseCx6LHk7CisgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBHcm91cAorICAgR3JvdXAgS2V5OiB4LCB5LCB3LCB6CisgICAtPiAgSW5j cmVtZW50YWwgU29ydAorICAgICAgICAgU29ydCBLZXk6IHgsIHksIHcsIHoKKyAgICAgICAg IFByZXNvcnRlZCBLZXk6IHgsIHkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGFi YyBvbiBidGcKKyg2IHJvd3MpCisKKy0tIFN1YnF1ZXJpZXMKK2V4cGxhaW4gKENPU1RTIE9G RikgU0VMRUNUIHgseQorRlJPTSAoU0VMRUNUICogRlJPTSBidGcgT1JERVIgQlkgeCx5LHcs eikgQVMgcTEKK0dST1VQIEJZICh3LHgseix5KTsKKyAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBHcm91cAorICAgR3JvdXAgS2V5OiBidGcueCwgYnRnLnks IGJ0Zy53LCBidGcuegorICAgLT4gIEluY3JlbWVudGFsIFNvcnQKKyAgICAgICAgIFNvcnQg S2V5OiBidGcueCwgYnRnLnksIGJ0Zy53LCBidGcuegorICAgICAgICAgUHJlc29ydGVkIEtl eTogYnRnLngsIGJ0Zy55CisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBhYmMgb24g YnRnCisoNiByb3dzKQorCitleHBsYWluIChDT1NUUyBPRkYpIFNFTEVDVCB4LHkKK0ZST00g KFNFTEVDVCAqIEZST00gYnRnIE9SREVSIEJZIHgseSx3LHogTElNSVQgMTAwKSBBUyBxMQor R1JPVVAgQlkgKHcseCx6LHkpOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEdyb3VwCisgICBHcm91cCBLZXk6IGJ0Zy54LCBidGcu eSwgYnRnLncsIGJ0Zy56CisgICAtPiAgTGltaXQKKyAgICAgICAgIC0+ICBJbmNyZW1lbnRh bCBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogYnRnLngsIGJ0Zy55LCBidGcudywg YnRnLnoKKyAgICAgICAgICAgICAgIFByZXNvcnRlZCBLZXk6IGJ0Zy54LCBidGcueQorICAg ICAgICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgYWJjIG9uIGJ0ZworKDcgcm93cykK KworLS0gU2hvdWxkIHdvcmsgd2l0aCBhbmQgd2l0aG91dCBHUk9VUC1CWSBvcHRpbWl6YXRp b24KK2V4cGxhaW4gKENPU1RTIE9GRikgU0VMRUNUIHgseSBGUk9NIGJ0ZyBHUk9VUCBCWSB3 LHgseix5IE9SREVSIEJZIHkseCx6LHc7CisgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdyb3VwCisgICBHcm91cCBL ZXk6IHksIHgsIHosIHcKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogeSwgeCwg eiwgdworICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGJ0ZworKDUgcm93cykKKworLS0gVXRp bGl6ZSBpbmNyZW1lbnRhbCBzb3J0IHRvIG1ha2UgdGhlIE9SREVSIEJZIHJ1bGUgYSBiaXQg Y2hlYXBlcgorZXhwbGFpbiAoQ09TVFMgT0ZGKSBTRUxFQ1QgeCx3IEZST00gYnRnIEdST1VQ IEJZIHcseCx5LHogT1JERVIgQlkgeCp4LHo7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0CisgICBTb3J0IEtleTogKCh4ICogeCkpLCB6Cisg ICAtPiAgR3JvdXAKKyAgICAgICAgIEdyb3VwIEtleTogeCwgeSwgdywgegorICAgICAgICAg LT4gIEluY3JlbWVudGFsIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiB4LCB5LCB3 LCB6CisgICAgICAgICAgICAgICBQcmVzb3J0ZWQgS2V5OiB4LCB5CisgICAgICAgICAgICAg ICAtPiAgSW5kZXggU2NhbiB1c2luZyBhYmMgb24gYnRnCisoOCByb3dzKQorCitEUk9QIFRB QkxFIGJ0ZzsKK1JFU0VUIGVuYWJsZV9oYXNoYWdnOworUkVTRVQgbWF4X3BhcmFsbGVsX3dv cmtlcnM7CitSRVNFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyOwogLS0gU2Vj b25kbHkgdGVzdCB0aGUgY2FzZSBvZiBhIHBhcmFsbGVsIGFnZ3JlZ2F0ZSBjb21iaW5lciBm dW5jdGlvbgogLS0gcmV0dXJuaW5nIE5VTEwuIEZvciB0aGF0IHVzZSBub3JtYWwgdHJhbnNp dGlvbiBmdW5jdGlvbiwgYnV0IGEKIC0tIGNvbWJpbmVyIGZ1bmN0aW9uIHJldHVybmluZyBO VUxMLgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAppbmRleCAyNzEz MTNlYmY4Li45YmU3YWNhMmI4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3N5c3ZpZXdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3Zp ZXdzLm91dApAQCAtMTE0LDYgKzExNCw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20g cGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVfYXN5bmNf YXBwZW5kICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9iaXRtYXBzY2FuICAgICAgICAgICAg ICB8IG9uCiAgZW5hYmxlX2dhdGhlcm1lcmdlICAgICAgICAgICAgIHwgb24KKyBlbmFibGVf Z3JvdXBfYnlfcmVvcmRlcmluZyAgICAgfCBvbgogIGVuYWJsZV9oYXNoYWdnICAgICAgICAg ICAgICAgICB8IG9uCiAgZW5hYmxlX2hhc2hqb2luICAgICAgICAgICAgICAgIHwgb24KICBl bmFibGVfaW5jcmVtZW50YWxfc29ydCAgICAgICAgfCBvbgpAQCAtMTMzLDcgKzEzNCw3IEBA IHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtl ICdlbmFibGUlJzsKICBlbmFibGVfc2Vxc2NhbiAgICAgICAgICAgICAgICAgfCBvbgogIGVu YWJsZV9zb3J0ICAgICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3RpZHNjYW4gICAg ICAgICAgICAgICAgIHwgb24KLSgyMiByb3dzKQorKDIzIHJvd3MpCiAKIC0tIFRoZXJlIGFy ZSBhbHdheXMgd2FpdCBldmVudCBkZXNjcmlwdGlvbnMgZm9yIHZhcmlvdXMgdHlwZXMuCiBz ZWxlY3QgdHlwZSwgY291bnQoKikgPiAwIGFzIG9rIEZST00gcGdfd2FpdF9ldmVudHMKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZXMuc3FsIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvYWdncmVnYXRlcy5zcWwKaW5kZXggY2M4ZjBlZmFkNS4uYjlmY2Nl ZWRkNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWdncmVnYXRlcy5zcWwK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWdncmVnYXRlcy5zcWwKQEAgLTExODEsNiAr MTE4MSw1MyBAQCBTRUxFQ1QgYmFsayhodW5kcmVkKSBGUk9NIHRlbmsxOwogCiBST0xMQkFD SzsKIAorLS0gR1JPVVAgQlkgb3B0aW1pemF0aW9uIGJ5IHJlb3JkZXIgY29sdW1ucworCitD UkVBVEUgVEFCTEUgYnRnIEFTIFNFTEVDVAorICBpICUgMTAwIEFTIHgsCisgIGkgJSAxMDAg QVMgeSwKKyAgJ2FiYycgfHwgaSAlIDEwIEFTIHosCisgIGkgQVMgdworRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwxMDAwMCkgQVMgaTsKK0NSRUFURSBJTkRFWCBhYmMgT04gYnRnKHgseSk7 CitBTkFMWVpFIGJ0ZzsKKworLS0gR1JPVVAgQlkgb3B0aW1pemF0aW9uIGJ5IHJlb3JkZXIg Y29sdW1ucyBieSBmcmVxdWVuY3kKKworU0VUIGVuYWJsZV9oYXNoYWdnPW9mZjsKK1NFVCBt YXhfcGFyYWxsZWxfd29ya2Vycz0gMDsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJf Z2F0aGVyID0gMDsKKworLS0gVXRpbGl6ZSBpbmRleCBzY2FuIG9yZGVyaW5nIHRvIGF2b2lk IGEgU29ydCBvcGVyYXRpb24KK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIGNvdW50KCop IEZST00gYnRnIEdST1VQIEJZIHgseTsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIGNv dW50KCopIEZST00gYnRnIEdST1VQIEJZIHkseDsKKworLS0gRW5nYWdlIGluY3JlbWVudGFs IHNvcnQKK2V4cGxhaW4gKENPU1RTIE9GRikgU0VMRUNUIHgseSBGUk9NIGJ0ZyBHUk9VUCBC WSB4LHkseix3OworZXhwbGFpbiAoQ09TVFMgT0ZGKSBTRUxFQ1QgeCx5IEZST00gYnRnIEdS T1VQIEJZIHoseSx3LHg7CitleHBsYWluIChDT1NUUyBPRkYpIFNFTEVDVCB4LHkgRlJPTSBi dGcgR1JPVVAgQlkgdyx6LHgseTsKK2V4cGxhaW4gKENPU1RTIE9GRikgU0VMRUNUIHgseSBG Uk9NIGJ0ZyBHUk9VUCBCWSB3LHgseix5OworCistLSBTdWJxdWVyaWVzCitleHBsYWluIChD T1NUUyBPRkYpIFNFTEVDVCB4LHkKK0ZST00gKFNFTEVDVCAqIEZST00gYnRnIE9SREVSIEJZ IHgseSx3LHopIEFTIHExCitHUk9VUCBCWSAodyx4LHoseSk7CitleHBsYWluIChDT1NUUyBP RkYpIFNFTEVDVCB4LHkKK0ZST00gKFNFTEVDVCAqIEZST00gYnRnIE9SREVSIEJZIHgseSx3 LHogTElNSVQgMTAwKSBBUyBxMQorR1JPVVAgQlkgKHcseCx6LHkpOworCistLSBTaG91bGQg d29yayB3aXRoIGFuZCB3aXRob3V0IEdST1VQLUJZIG9wdGltaXphdGlvbgorZXhwbGFpbiAo Q09TVFMgT0ZGKSBTRUxFQ1QgeCx5IEZST00gYnRnIEdST1VQIEJZIHcseCx6LHkgT1JERVIg QlkgeSx4LHosdzsKKworLS0gVXRpbGl6ZSBpbmNyZW1lbnRhbCBzb3J0IHRvIG1ha2UgdGhl IE9SREVSIEJZIHJ1bGUgYSBiaXQgY2hlYXBlcgorZXhwbGFpbiAoQ09TVFMgT0ZGKSBTRUxF Q1QgeCx3IEZST00gYnRnIEdST1VQIEJZIHcseCx5LHogT1JERVIgQlkgeCp4LHo7CisKK0RS T1AgVEFCTEUgYnRnOworCitSRVNFVCBlbmFibGVfaGFzaGFnZzsKK1JFU0VUIG1heF9wYXJh bGxlbF93b3JrZXJzOworUkVTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcjsK KwogLS0gU2Vjb25kbHkgdGVzdCB0aGUgY2FzZSBvZiBhIHBhcmFsbGVsIGFnZ3JlZ2F0ZSBj b21iaW5lciBmdW5jdGlvbgogLS0gcmV0dXJuaW5nIE5VTEwuIEZvciB0aGF0IHVzZSBub3Jt YWwgdHJhbnNpdGlvbiBmdW5jdGlvbiwgYnV0IGEKIC0tIGNvbWJpbmVyIGZ1bmN0aW9uIHJl dHVybmluZyBOVUxMLgotLSAKMi40My4wCgo= --------------buEeZ5apO0R2FfKs1j0TmAnK--