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 1sveYQ-00Gf4g-1E for pgsql-hackers@arkaria.postgresql.org; Tue, 01 Oct 2024 15:12:47 +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 1sveYP-000rIs-9l for pgsql-hackers@arkaria.postgresql.org; Tue, 01 Oct 2024 15:12:45 +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 1sveYO-000rIR-PA for pgsql-hackers@lists.postgresql.org; Tue, 01 Oct 2024 15:12:44 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sveYK-0022AP-1Y for pgsql-hackers@lists.postgresql.org; Tue, 01 Oct 2024 15:12:43 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1727795560; bh=tjDnBMZbiHJhm9oQaYA6E/QmmzJImkccxTlEnMKOpUE=; h=Date:From:To:Cc:Subject:In-Reply-To:References:User-Agent: Message-ID:From; b=fLG1RfGr6G2YCZU6AUZ0ZEZIsR0I84cdDMclwoJTkXXY9mepDIVgXvyFL83B/kjef yfh2ic1QxCyqhbL20rGYLsrf2fMicOy900erBBpIB2rx1IGp09uSgbCKsrilfUC4jq hhUsD/ZkHzDVhMrG0Aq2xu1ld9PvwxQo9YLWzhWnvGTJkvaimrqpqNY0znhNsN7qVC f3FvNoHaOXdz2TORVMQh+w5Dz8/Nex6l8JdK+HbWvPzZgUQUi9Mx+htIt3mC0uS51C KpUoEP075cbbNO5vFXhChpAaDcaG8yGEaGlKi0AlNOqbLyoPCgPsU3BBOsBBIEP+PG qg0GLW0x6VOvg== Received: from mail.postgrespro.ru (unknown [192.168.2.28]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: a.pyhalov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 10AE260195; Tue, 1 Oct 2024 18:12:40 +0300 (MSK) MIME-Version: 1.0 Date: Tue, 01 Oct 2024 18:12:40 +0300 From: Alexander Pyhalov To: Alexander Korotkov Cc: pgsql-hackers@lists.postgresql.org, Ronan Dunklau , Tom Lane Subject: Re: SQLFunctionCache and generic plans In-Reply-To: References: <8216639.NyiUUSuA9g@aivenlaptop> <3084885.1675783797@sss.pgh.pa.us> User-Agent: Roundcube Webmail/1.6.9 Message-ID: <758251661a3e8760ff52dd5c672a7505@postgrespro.ru> X-Sender: a.pyhalov@postgrespro.ru Content-Type: multipart/mixed; boundary="=_634d2ce0896a7c987f26ca32fda64a9a" X-KSMG-AntiPhishing: NotDetected X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2024/10/01 12:27:00 #26689003 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_634d2ce0896a7c987f26ca32fda64a9a Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi. >> What should we do with "pre-parsed" SQL functions (when prosrc is >> empty)? How should we create cached plans when we don't have raw >> parsetrees? >> Currently we can create cached plans without raw parsetrees, but this >> means that plan revalidation doesn't work, choose_custom_plan() >> always returns false and we get generic plan. Perhaps, we need some >> form >> of GetCachedPlan(), which ignores raw_parse_tree? > > I don't think you need a new form of GetCachedPlan(). Instead, it > seems that StmtPlanRequiresRevalidation() should be revised. As I got > from comments and the d8b2fcc9d4 commit message, the primary goal was > to skip revalidation of utility statements. Skipping revalidation was > a positive side effect, as long as we didn't support custom plans for > them anyway. But as you're going to change this, > StmtPlanRequiresRevalidation() needs to be revised. > Thanks for feedback. I've modifed StmtPlanRequiresRevalidation() so that it looks on queries command type. Not sure if it's enough or I have to recreate something more similar to stmt_requires_parse_analysis() logic. I was wondering if this can lead to triggering plan revalidation in RevalidateCachedQuery(). I suppose not - as we plan in executor (so shouldn't catch userid change or see some changes in related objects. Revalidation would kill our plan, destroying resultDesc. Also while looking at this, fixed processing of instead of rules (which would lead to NULL execution_state). -- Best regards, Alexander Pyhalov, Postgres Professional --=_634d2ce0896a7c987f26ca32fda64a9a Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v2-0001-Use-custom-plan-machinery-for-SQL-functions.patch Content-Disposition: attachment; filename=v2-0001-Use-custom-plan-machinery-for-SQL-functions.patch; size=26081 RnJvbSBiNWIxMmM3Zjg3NTQ0ZWZjNzE0ZTg5OGNmNzFlYTc1MjBiMDBhMDMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBGcmksIDIzIEF1ZyAyMDI0IDE1OjQ4OjM4ICswMzAwClN1YmplY3Q6IFtQ QVRDSF0gVXNlIGN1c3RvbSBwbGFuIG1hY2hpbmVyeSBmb3IgU1FMIGZ1bmN0aW9ucwoKLS0tCiBj b250cmliL2NpdGV4dC9leHBlY3RlZC9jaXRleHQub3V0ICAgICAgICAgICAgfCAgIDIgKy0KIGNv bnRyaWIvY2l0ZXh0L2V4cGVjdGVkL2NpdGV4dF8xLm91dCAgICAgICAgICB8ICAgMiArLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMgICAgICAgICAgICAgIHwgMzM0ICsrKysrKysr KysrKysrLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMgICAgICAgICAg IHwgIDQ0ICsrLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAgICAg IHwgIDEyICsKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2Z1bmN0aW9ucy5oICAgICAgICAgICAgICB8 ICAgMiArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL251bWVyaWMub3V0ICAgICAgICAgfCAg IDQgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGxwZ3NxbC5vdXQgICAgICAgICB8ICAg MiArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQgICAgICAgICAgIHwgIDM1 ICsrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdF9wYXJhbGxlbC5vdXQgfCAgIDQg Ky0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RyaW5ncy5vdXQgICAgICAgICB8ICAgMiAr LQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgICAgICAgIHwgICAzICst CiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9ydWxlcy5zcWwgICAgICAgICAgICAgICAgfCAgMjQgKysK IDEzIGZpbGVzIGNoYW5nZWQsIDM4NSBpbnNlcnRpb25zKCspLCA4NSBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9jb250cmliL2NpdGV4dC9leHBlY3RlZC9jaXRleHQub3V0IGIvY29udHJpYi9j aXRleHQvZXhwZWN0ZWQvY2l0ZXh0Lm91dAppbmRleCA4YzBiZjU0ZjBmMy4uZjg3NjUwNTM2NTEg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvY2l0ZXh0L2V4cGVjdGVkL2NpdGV4dC5vdXQKKysrIGIvY29u dHJpYi9jaXRleHQvZXhwZWN0ZWQvY2l0ZXh0Lm91dApAQCAtMTgxNiw3ICsxODE2LDcgQEAgU0VM RUNUIHJlZ2V4cF9tYXRjaCgnZm9vYmFyYmVxdWViYXonOjpjaXRleHQsICcoQkFSKShCRVFVRSkn OjpjaXRleHQsICdjJzo6Y2l0ZXgKIFNFTEVDVCByZWdleHBfbWF0Y2goJ2Zvb2JhcmJlcXVlYmF6 bW9yZWJhcmJlcXVldG9vJzo6Y2l0ZXh0LCAnKEJBUikoQkVRVUUpJzo6Y2l0ZXh0LCAnZycpIEFT ICJlcnJvciI7CiBFUlJPUjogIHJlZ2V4cF9tYXRjaCgpIGRvZXMgbm90IHN1cHBvcnQgdGhlICJn bG9iYWwiIG9wdGlvbgogSElOVDogIFVzZSB0aGUgcmVnZXhwX21hdGNoZXMgZnVuY3Rpb24gaW5z dGVhZC4KLUNPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gInJlZ2V4cF9tYXRjaCIgc3RhdGVtZW50IDEK K0NPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gInJlZ2V4cF9tYXRjaCIgZHVyaW5nIHN0YXJ0dXAKIFNF TEVDVCByZWdleHBfbWF0Y2hlcygnZm9vYmFyYmVxdWViYXonOjpjaXRleHQsICcoYmFyKShiZXF1 ZSknKSA9IEFSUkFZWyAnYmFyJywgJ2JlcXVlJyBdIEFTIHQ7CiAgdCAKIC0tLQpkaWZmIC0tZ2l0 IGEvY29udHJpYi9jaXRleHQvZXhwZWN0ZWQvY2l0ZXh0XzEub3V0IGIvY29udHJpYi9jaXRleHQv ZXhwZWN0ZWQvY2l0ZXh0XzEub3V0CmluZGV4IGM1ZTVmMTgwZjJiLi4zNTZkYzZiYmE0MyAxMDA2 NDQKLS0tIGEvY29udHJpYi9jaXRleHQvZXhwZWN0ZWQvY2l0ZXh0XzEub3V0CisrKyBiL2NvbnRy aWIvY2l0ZXh0L2V4cGVjdGVkL2NpdGV4dF8xLm91dApAQCAtMTgxNiw3ICsxODE2LDcgQEAgU0VM RUNUIHJlZ2V4cF9tYXRjaCgnZm9vYmFyYmVxdWViYXonOjpjaXRleHQsICcoQkFSKShCRVFVRSkn OjpjaXRleHQsICdjJzo6Y2l0ZXgKIFNFTEVDVCByZWdleHBfbWF0Y2goJ2Zvb2JhcmJlcXVlYmF6 bW9yZWJhcmJlcXVldG9vJzo6Y2l0ZXh0LCAnKEJBUikoQkVRVUUpJzo6Y2l0ZXh0LCAnZycpIEFT ICJlcnJvciI7CiBFUlJPUjogIHJlZ2V4cF9tYXRjaCgpIGRvZXMgbm90IHN1cHBvcnQgdGhlICJn bG9iYWwiIG9wdGlvbgogSElOVDogIFVzZSB0aGUgcmVnZXhwX21hdGNoZXMgZnVuY3Rpb24gaW5z dGVhZC4KLUNPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gInJlZ2V4cF9tYXRjaCIgc3RhdGVtZW50IDEK K0NPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gInJlZ2V4cF9tYXRjaCIgZHVyaW5nIHN0YXJ0dXAKIFNF TEVDVCByZWdleHBfbWF0Y2hlcygnZm9vYmFyYmVxdWViYXonOjpjaXRleHQsICcoYmFyKShiZXF1 ZSknKSA9IEFSUkFZWyAnYmFyJywgJ2JlcXVlJyBdIEFTIHQ7CiAgdCAKIC0tLQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9mdW5jdGlvbnMuYwppbmRleCA2OTI4NTRlMmIzZS4uOWM1MjZmYTg4ZjggMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2Z1bmN0aW9ucy5jCkBAIC0zMyw5ICszMywxNCBAQAogI2luY2x1ZGUgInV0aWxzL2RhdHVt LmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRp bHMuaCIKKyNpbmNsdWRlICJ1dGlscy9wbGFuY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFw bWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAorLyoKKyAqIEdVQyB2YXJpYWJs ZXMKKyAqLworYm9vbAkJZW5hYmxlX3NxbF9mdW5jX2N1c3RvbV9wbGFucyA9IHRydWU7CiAKIC8q CiAgKiBTcGVjaWFsaXplZCBEZXN0UmVjZWl2ZXIgZm9yIGNvbGxlY3RpbmcgcXVlcnkgb3V0cHV0 IGluIGEgU1FMIGZ1bmN0aW9uCkBAIC0xMTIsNiArMTE3LDExIEBAIHR5cGVkZWYgc3RydWN0CiAK IAlKdW5rRmlsdGVyICpqdW5rRmlsdGVyOwkJLyogd2lsbCBiZSBOVUxMIGlmIGZ1bmN0aW9uIHJl dHVybnMgVk9JRCAqLwogCisJLyogQ2FjaGVkIHBsYW5zIHN1cHBvcnQgKi8KKwlMaXN0CSAgICpx dWVyeVRyZWVfbGlzdDsgLyogbGlzdCBvZiBxdWVyeSBsaXN0cyAqLworCUxpc3QJICAgKnBsYW5z b3VyY2VfbGlzdDsJLyogbGlzdCBvZiBwbGFuc291cmNlICovCisJTGlzdAkgICAqY3BsYW5fbGlz dDsJCS8qIGxpc3Qgb2YgY2FjaGVkIHBsYW5zICovCisKIAkvKgogCSAqIGZ1bmNfc3RhdGUgaXMg YSBMaXN0IG9mIGV4ZWN1dGlvbl9zdGF0ZSByZWNvcmRzLCBlYWNoIG9mIHdoaWNoIGlzIHRoZQog CSAqIGZpcnN0IGZvciBpdHMgb3JpZ2luYWwgcGFyc2V0cmVlLCB3aXRoIGFueSBhZGRpdGlvbmFs IHJlY29yZHMgY2hhaW5lZApAQCAtNDU0LDYgKzQ2NCw0MCBAQCBzcWxfZm5fcmVzb2x2ZV9wYXJh bV9uYW1lKFNRTEZ1bmN0aW9uUGFyc2VJbmZvUHRyIHBpbmZvLAogCXJldHVybiBOVUxMOwogfQog CisvKiBQcmVjaGVjayBjb21tYW5kIGZvciB2YWxpZGl0eSBpbiBhIGZ1bmN0aW9uICovCitzdGF0 aWMgdm9pZAorY2hlY2tfcGxhbm5lZF9zdG10KFBsYW5uZWRTdG10ICpzdG10LCBTUUxGdW5jdGlv bkNhY2hlUHRyIGZjYWNoZSkKK3sKKworCS8qCisJICogUHJlY2hlY2sgYWxsIGNvbW1hbmRzIGZv ciB2YWxpZGl0eSBpbiBhIGZ1bmN0aW9uLiAgVGhpcyBzaG91bGQKKwkgKiBnZW5lcmFsbHkgbWF0 Y2ggdGhlIHJlc3RyaWN0aW9ucyBzcGkuYyBhcHBsaWVzLgorCSAqLworCWlmIChzdG10LT5jb21t YW5kVHlwZSA9PSBDTURfVVRJTElUWSkKKwl7CisJCWlmIChJc0Eoc3RtdC0+dXRpbGl0eVN0bXQs IENvcHlTdG10KSAmJgorCQkJKChDb3B5U3RtdCAqKSBzdG10LT51dGlsaXR5U3RtdCktPmZpbGVu YW1lID09IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZF QVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCSBlcnJtc2coImNhbm5vdCBDT1BZIHRvL2Zyb20g Y2xpZW50IGluIGFuIFNRTCBmdW5jdGlvbiIpKSk7CisKKwkJaWYgKElzQShzdG10LT51dGlsaXR5 U3RtdCwgVHJhbnNhY3Rpb25TdG10KSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2Rl KEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCS8qIHRyYW5zbGF0b3I6ICVzIGlz IGEgU1FMIHN0YXRlbWVudCBuYW1lICovCisJCQkJCSBlcnJtc2coIiVzIGlzIG5vdCBhbGxvd2Vk IGluIGFuIFNRTCBmdW5jdGlvbiIsCisJCQkJCQkJQ3JlYXRlQ29tbWFuZE5hbWUoc3RtdC0+dXRp bGl0eVN0bXQpKSkpOworCX0KKworCWlmIChmY2FjaGUtPnJlYWRvbmx5X2Z1bmMgJiYgIUNvbW1h bmRJc1JlYWRPbmx5KHN0bXQpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNP REVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJLyogdHJhbnNsYXRvcjogJXMgaXMgYSBTUUwg c3RhdGVtZW50IG5hbWUgKi8KKwkJCQkgZXJybXNnKCIlcyBpcyBub3QgYWxsb3dlZCBpbiBhIG5v bi12b2xhdGlsZSBmdW5jdGlvbiIsCisJCQkJCQlDcmVhdGVDb21tYW5kTmFtZSgoTm9kZSAqKSBz dG10KSkpKTsKKworfQorCiAvKgogICogU2V0IHVwIHRoZSBwZXItcXVlcnkgZXhlY3V0aW9uX3N0 YXRlIHJlY29yZHMgZm9yIGEgU1FMIGZ1bmN0aW9uLgogICoKQEAgLTQ2Niw4NSArNTEwLDExNyBA QCBpbml0X2V4ZWN1dGlvbl9zdGF0ZShMaXN0ICpxdWVyeVRyZWVfbGlzdCwKIAkJCQkJIGJvb2wg bGF6eUV2YWxPSykKIHsKIAlMaXN0CSAgICplc2xpc3QgPSBOSUw7CisJTGlzdAkgICAqY3BsYW5f bGlzdCA9IE5JTDsKIAlleGVjdXRpb25fc3RhdGUgKmxhc3R0YWdlcyA9IE5VTEw7CiAJTGlzdENl bGwgICAqbGMxOwogCiAJZm9yZWFjaChsYzEsIHF1ZXJ5VHJlZV9saXN0KQogCXsKLQkJTGlzdAkg ICAqcXRsaXN0ID0gbGZpcnN0X25vZGUoTGlzdCwgbGMxKTsKKwkJTGlzdAkgICAqcXRsaXN0Owog CQlleGVjdXRpb25fc3RhdGUgKmZpcnN0ZXMgPSBOVUxMOwogCQlleGVjdXRpb25fc3RhdGUgKnBy ZXZlcyA9IE5VTEw7CiAJCUxpc3RDZWxsICAgKmxjMjsKIAotCQlmb3JlYWNoKGxjMiwgcXRsaXN0 KQorCQlpZiAoZmNhY2hlLT5wbGFuc291cmNlX2xpc3QpCiAJCXsKLQkJCVF1ZXJ5CSAgICpxdWVy eVRyZWUgPSBsZmlyc3Rfbm9kZShRdWVyeSwgbGMyKTsKLQkJCVBsYW5uZWRTdG10ICpzdG10Owot CQkJZXhlY3V0aW9uX3N0YXRlICpuZXdlczsKKwkJCUNhY2hlZFBsYW4gKmNwbGFuOworCQkJQ2Fj aGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZTsKKwkJCWludAkJCWN1cl9pZHg7CiAKLQkJCS8qIFBs YW4gdGhlIHF1ZXJ5IGlmIG5lZWRlZCAqLwotCQkJaWYgKHF1ZXJ5VHJlZS0+Y29tbWFuZFR5cGUg PT0gQ01EX1VUSUxJVFkpCi0JCQl7Ci0JCQkJLyogVXRpbGl0eSBjb21tYW5kcyByZXF1aXJlIG5v IHBsYW5uaW5nLiAqLwotCQkJCXN0bXQgPSBtYWtlTm9kZShQbGFubmVkU3RtdCk7Ci0JCQkJc3Rt dC0+Y29tbWFuZFR5cGUgPSBDTURfVVRJTElUWTsKLQkJCQlzdG10LT5jYW5TZXRUYWcgPSBxdWVy eVRyZWUtPmNhblNldFRhZzsKLQkJCQlzdG10LT51dGlsaXR5U3RtdCA9IHF1ZXJ5VHJlZS0+dXRp bGl0eVN0bXQ7Ci0JCQkJc3RtdC0+c3RtdF9sb2NhdGlvbiA9IHF1ZXJ5VHJlZS0+c3RtdF9sb2Nh dGlvbjsKLQkJCQlzdG10LT5zdG10X2xlbiA9IHF1ZXJ5VHJlZS0+c3RtdF9sZW47Ci0JCQkJc3Rt dC0+cXVlcnlJZCA9IHF1ZXJ5VHJlZS0+cXVlcnlJZDsKLQkJCX0KLQkJCWVsc2UKLQkJCQlzdG10 ID0gcGdfcGxhbl9xdWVyeShxdWVyeVRyZWUsCi0JCQkJCQkJCQkgZmNhY2hlLT5zcmMsCi0JCQkJ CQkJCQkgQ1VSU09SX09QVF9QQVJBTExFTF9PSywKLQkJCQkJCQkJCSBOVUxMKTsKKwkJCS8qIEZp bmQgcGxhbiBzb3VyY2UsIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBxdWVyeSBsaXN0ICovCisJCQlj dXJfaWR4ID0gZm9yZWFjaF9jdXJyZW50X2luZGV4KGxjMSk7CisJCQlwbGFuc291cmNlID0gbGlz dF9udGgoZmNhY2hlLT5wbGFuc291cmNlX2xpc3QsIGN1cl9pZHgpOwogCiAJCQkvKgotCQkJICog UHJlY2hlY2sgYWxsIGNvbW1hbmRzIGZvciB2YWxpZGl0eSBpbiBhIGZ1bmN0aW9uLiAgVGhpcyBz aG91bGQKLQkJCSAqIGdlbmVyYWxseSBtYXRjaCB0aGUgcmVzdHJpY3Rpb25zIHNwaS5jIGFwcGxp ZXMuCisJCQkgKiBHZXQgcGxhbiBmb3IgdGhlIHF1ZXJ5LiBJZiBwYXJhbUxJIGlzIHNldCwgd2Ug Y2FuIGdldCBjdXN0b20KKwkJCSAqIHBsYW4KIAkJCSAqLwotCQkJaWYgKHN0bXQtPmNvbW1hbmRU eXBlID09IENNRF9VVElMSVRZKQorCQkJY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBsYW5zb3VyY2Us IGZjYWNoZS0+cGFyYW1MSSwgTlVMTCwgTlVMTCk7CisKKwkJCS8qIFJlY29yZCBjcGxhbiBpbiBw bGFuIGxpc3QgdG8gYmUgcmVsZWFzZWQgb24gcmVwbGFubmluZyAqLworCQkJY3BsYW5fbGlzdCA9 IGxhcHBlbmQoY3BsYW5fbGlzdCwgY3BsYW4pOworCisJCQkvKiBGb3IgZWFjaCBwbGFubmVkIHN0 YXRlbWVudCBjcmVhdGUgZXhlY3V0aW9uIHN0YXRlICovCisJCQlmb3JlYWNoKGxjMiwgY3BsYW4t PnN0bXRfbGlzdCkKIAkJCXsKLQkJCQlpZiAoSXNBKHN0bXQtPnV0aWxpdHlTdG10LCBDb3B5U3Rt dCkgJiYKLQkJCQkJKChDb3B5U3RtdCAqKSBzdG10LT51dGlsaXR5U3RtdCktPmZpbGVuYW1lID09 IE5VTEwpCi0JCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAotCQkJCQkJCSBlcnJtc2coImNhbm5vdCBDT1BZIHRvL2Zyb20g Y2xpZW50IGluIGFuIFNRTCBmdW5jdGlvbiIpKSk7CisJCQkJUGxhbm5lZFN0bXQgKnN0bXQgPSBs Zmlyc3QobGMyKTsKKwkJCQlleGVjdXRpb25fc3RhdGUgKm5ld2VzOwogCi0JCQkJaWYgKElzQShz dG10LT51dGlsaXR5U3RtdCwgVHJhbnNhY3Rpb25TdG10KSkKLQkJCQkJZXJlcG9ydChFUlJPUiwK LQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJCS8q IHRyYW5zbGF0b3I6ICVzIGlzIGEgU1FMIHN0YXRlbWVudCBuYW1lICovCi0JCQkJCQkJIGVycm1z ZygiJXMgaXMgbm90IGFsbG93ZWQgaW4gYW4gU1FMIGZ1bmN0aW9uIiwKLQkJCQkJCQkJCUNyZWF0 ZUNvbW1hbmROYW1lKHN0bXQtPnV0aWxpdHlTdG10KSkpKTsKKwkJCQkvKiBDaGVjayB0aGF0IHN0 bXQgaXMgdmFsaWQgZm9yIFNRTCBmdW5jdGlvbiAqLworCQkJCWNoZWNrX3BsYW5uZWRfc3RtdChz dG10LCBmY2FjaGUpOworCisJCQkJbmV3ZXMgPSAoZXhlY3V0aW9uX3N0YXRlICopIHBhbGxvYyhz aXplb2YoZXhlY3V0aW9uX3N0YXRlKSk7CisKKwkJCQlpZiAocHJldmVzKQorCQkJCQlwcmV2ZXMt Pm5leHQgPSBuZXdlczsKKwkJCQllbHNlCisJCQkJCWZpcnN0ZXMgPSBuZXdlczsKKworCQkJCW5l d2VzLT5uZXh0ID0gTlVMTDsKKwkJCQluZXdlcy0+c3RhdHVzID0gRl9FWEVDX1NUQVJUOworCQkJ CW5ld2VzLT5zZXRzUmVzdWx0ID0gZmFsc2U7CS8qIG1pZ2h0IGNoYW5nZSBiZWxvdyAqLworCQkJ CW5ld2VzLT5sYXp5RXZhbCA9IGZhbHNlOwkvKiBtaWdodCBjaGFuZ2UgYmVsb3cgKi8KKwkJCQlu ZXdlcy0+c3RtdCA9IHN0bXQ7CisJCQkJbmV3ZXMtPnFkID0gTlVMTDsKKworCQkJCWlmIChzdG10 LT5jYW5TZXRUYWcpCisJCQkJCWxhc3R0YWdlcyA9IG5ld2VzOworCisJCQkJcHJldmVzID0gbmV3 ZXM7CiAJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlxdGxpc3QgPSBsZmlyc3Rfbm9kZShMaXN0 LCBsYzEpOwogCi0JCQlpZiAoZmNhY2hlLT5yZWFkb25seV9mdW5jICYmICFDb21tYW5kSXNSZWFk T25seShzdG10KSkKLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9G RUFUVVJFX05PVF9TVVBQT1JURUQpLAotCQkJCS8qIHRyYW5zbGF0b3I6ICVzIGlzIGEgU1FMIHN0 YXRlbWVudCBuYW1lICovCi0JCQkJCQkgZXJybXNnKCIlcyBpcyBub3QgYWxsb3dlZCBpbiBhIG5v bi12b2xhdGlsZSBmdW5jdGlvbiIsCi0JCQkJCQkJCUNyZWF0ZUNvbW1hbmROYW1lKChOb2RlICop IHN0bXQpKSkpOwotCi0JCQkvKiBPSywgYnVpbGQgdGhlIGV4ZWN1dGlvbl9zdGF0ZSBmb3IgdGhp cyBxdWVyeSAqLwotCQkJbmV3ZXMgPSAoZXhlY3V0aW9uX3N0YXRlICopIHBhbGxvYyhzaXplb2Yo ZXhlY3V0aW9uX3N0YXRlKSk7Ci0JCQlpZiAocHJldmVzKQotCQkJCXByZXZlcy0+bmV4dCA9IG5l d2VzOwotCQkJZWxzZQotCQkJCWZpcnN0ZXMgPSBuZXdlczsKKwkJCWZvcmVhY2gobGMyLCBxdGxp c3QpCisJCQl7CisJCQkJUXVlcnkJICAgKnF1ZXJ5VHJlZSA9IGxmaXJzdF9ub2RlKFF1ZXJ5LCBs YzIpOworCQkJCVBsYW5uZWRTdG10ICpzdG10OworCQkJCWV4ZWN1dGlvbl9zdGF0ZSAqbmV3ZXM7 CisKKwkJCQkvKiBQbGFuIHRoZSBxdWVyeSBpZiBuZWVkZWQgKi8KKwkJCQlpZiAocXVlcnlUcmVl LT5jb21tYW5kVHlwZSA9PSBDTURfVVRJTElUWSkKKwkJCQl7CisJCQkJCS8qIFV0aWxpdHkgY29t bWFuZHMgcmVxdWlyZSBubyBwbGFubmluZy4gKi8KKwkJCQkJc3RtdCA9IG1ha2VOb2RlKFBsYW5u ZWRTdG10KTsKKwkJCQkJc3RtdC0+Y29tbWFuZFR5cGUgPSBDTURfVVRJTElUWTsKKwkJCQkJc3Rt dC0+Y2FuU2V0VGFnID0gcXVlcnlUcmVlLT5jYW5TZXRUYWc7CisJCQkJCXN0bXQtPnV0aWxpdHlT dG10ID0gcXVlcnlUcmVlLT51dGlsaXR5U3RtdDsKKwkJCQkJc3RtdC0+c3RtdF9sb2NhdGlvbiA9 IHF1ZXJ5VHJlZS0+c3RtdF9sb2NhdGlvbjsKKwkJCQkJc3RtdC0+c3RtdF9sZW4gPSBxdWVyeVRy ZWUtPnN0bXRfbGVuOworCQkJCQlzdG10LT5xdWVyeUlkID0gcXVlcnlUcmVlLT5xdWVyeUlkOwor CQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvKiBHZXQgZ2VuZXJpYyBwbGFuIGZvciB0aGUg cXVlcnkgKi8KKwkJCQkJc3RtdCA9IHBnX3BsYW5fcXVlcnkocXVlcnlUcmVlLAorCQkJCQkJCQkJ CSBmY2FjaGUtPnNyYywKKwkJCQkJCQkJCQkgQ1VSU09SX09QVF9QQVJBTExFTF9PSywKKwkJCQkJ CQkJCQkgTlVMTCk7CisJCQkJfQorCisJCQkJLyogQ2hlY2sgdGhhdCBzdG10IGlzIHZhbGlkIGZv ciBTUUwgZnVuY3Rpb24gKi8KKwkJCQljaGVja19wbGFubmVkX3N0bXQoc3RtdCwgZmNhY2hlKTsK IAotCQkJbmV3ZXMtPm5leHQgPSBOVUxMOwotCQkJbmV3ZXMtPnN0YXR1cyA9IEZfRVhFQ19TVEFS VDsKLQkJCW5ld2VzLT5zZXRzUmVzdWx0ID0gZmFsc2U7CS8qIG1pZ2h0IGNoYW5nZSBiZWxvdyAq LwotCQkJbmV3ZXMtPmxhenlFdmFsID0gZmFsc2U7CS8qIG1pZ2h0IGNoYW5nZSBiZWxvdyAqLwot CQkJbmV3ZXMtPnN0bXQgPSBzdG10OwotCQkJbmV3ZXMtPnFkID0gTlVMTDsKKwkJCQluZXdlcyA9 IChleGVjdXRpb25fc3RhdGUgKikgcGFsbG9jKHNpemVvZihleGVjdXRpb25fc3RhdGUpKTsKKwkJ CQlpZiAocHJldmVzKQorCQkJCQlwcmV2ZXMtPm5leHQgPSBuZXdlczsKKwkJCQllbHNlCisJCQkJ CWZpcnN0ZXMgPSBuZXdlczsKKworCQkJCW5ld2VzLT5uZXh0ID0gTlVMTDsKKwkJCQluZXdlcy0+ c3RhdHVzID0gRl9FWEVDX1NUQVJUOworCQkJCW5ld2VzLT5zZXRzUmVzdWx0ID0gZmFsc2U7CS8q IG1pZ2h0IGNoYW5nZSBiZWxvdyAqLworCQkJCW5ld2VzLT5sYXp5RXZhbCA9IGZhbHNlOwkvKiBt aWdodCBjaGFuZ2UgYmVsb3cgKi8KKwkJCQluZXdlcy0+c3RtdCA9IHN0bXQ7CisJCQkJbmV3ZXMt PnFkID0gTlVMTDsKIAotCQkJaWYgKHF1ZXJ5VHJlZS0+Y2FuU2V0VGFnKQotCQkJCWxhc3R0YWdl cyA9IG5ld2VzOworCQkJCWlmIChxdWVyeVRyZWUtPmNhblNldFRhZykKKwkJCQkJbGFzdHRhZ2Vz ID0gbmV3ZXM7CiAKLQkJCXByZXZlcyA9IG5ld2VzOworCQkJCXByZXZlcyA9IG5ld2VzOworCQkJ fQogCQl9CiAKIAkJZXNsaXN0ID0gbGFwcGVuZChlc2xpc3QsIGZpcnN0ZXMpOwpAQCAtNTczLDYg KzY0OSw3IEBAIGluaXRfZXhlY3V0aW9uX3N0YXRlKExpc3QgKnF1ZXJ5VHJlZV9saXN0LAogCQkJ ZmNhY2hlLT5sYXp5RXZhbCA9IGxhc3R0YWdlcy0+bGF6eUV2YWwgPSB0cnVlOwogCX0KIAorCWZj YWNoZS0+Y3BsYW5fbGlzdCA9IGNwbGFuX2xpc3Q7CiAJcmV0dXJuIGVzbGlzdDsKIH0KIApAQCAt NTk2LDYgKzY3Myw3IEBAIGluaXRfc3FsX2ZjYWNoZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywg T2lkIGNvbGxhdGlvbiwgYm9vbCBsYXp5RXZhbE9LKQogCUxpc3RDZWxsICAgKmxjOwogCURhdHVt CQl0bXA7CiAJYm9vbAkJaXNOdWxsOworCUxpc3QJICAgKnBsYW5zb3VyY2VfbGlzdDsKIAogCS8q CiAJICogQ3JlYXRlIG1lbW9yeSBjb250ZXh0IHRoYXQgaG9sZHMgYWxsIHRoZSBTUUxGdW5jdGlv bkNhY2hlIGRhdGEuICBJdApAQCAtNjgwLDYgKzc1OCw3IEBAIGluaXRfc3FsX2ZjYWNoZShGdW5j dGlvbkNhbGxJbmZvIGZjaW5mbywgT2lkIGNvbGxhdGlvbiwgYm9vbCBsYXp5RXZhbE9LKQogCSAq IHBsYW5jYWNoZS5jLgogCSAqLwogCXF1ZXJ5VHJlZV9saXN0ID0gTklMOworCXBsYW5zb3VyY2Vf bGlzdCA9IE5JTDsKIAlpZiAoIWlzTnVsbCkKIAl7CiAJCU5vZGUJICAgKm47CkBAIC02OTUsOCAr Nzc0LDE2IEBAIGluaXRfc3FsX2ZjYWNoZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgT2lkIGNv bGxhdGlvbiwgYm9vbCBsYXp5RXZhbE9LKQogCQl7CiAJCQlRdWVyeQkgICAqcGFyc2V0cmVlID0g bGZpcnN0X25vZGUoUXVlcnksIGxjKTsKIAkJCUxpc3QJICAgKnF1ZXJ5VHJlZV9zdWJsaXN0Owor CQkJQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZTsKIAogCQkJQWNxdWlyZVJld3JpdGVMb2Nr cyhwYXJzZXRyZWUsIHRydWUsIGZhbHNlKTsKKworCQkJaWYgKGVuYWJsZV9zcWxfZnVuY19jdXN0 b21fcGxhbnMpCisJCQl7CisJCQkJcGxhbnNvdXJjZSA9IENyZWF0ZUNhY2hlZFBsYW4oTlVMTCwg ZmNhY2hlLT5zcmMsIENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKilwYXJzZXRyZWUpKTsKKwkJCQlw bGFuc291cmNlX2xpc3QgPSBsYXBwZW5kKHBsYW5zb3VyY2VfbGlzdCwgcGxhbnNvdXJjZSk7CisJ CQl9CisKIAkJCXF1ZXJ5VHJlZV9zdWJsaXN0ID0gcGdfcmV3cml0ZV9xdWVyeShwYXJzZXRyZWUp OwogCQkJcXVlcnlUcmVlX2xpc3QgPSBsYXBwZW5kKHF1ZXJ5VHJlZV9saXN0LCBxdWVyeVRyZWVf c3VibGlzdCk7CiAJCX0KQEAgLTcxMSw2ICs3OTgsMTMgQEAgaW5pdF9zcWxfZmNhY2hlKEZ1bmN0 aW9uQ2FsbEluZm8gZmNpbmZvLCBPaWQgY29sbGF0aW9uLCBib29sIGxhenlFdmFsT0spCiAJCXsK IAkJCVJhd1N0bXQgICAgKnBhcnNldHJlZSA9IGxmaXJzdF9ub2RlKFJhd1N0bXQsIGxjKTsKIAkJ CUxpc3QJICAgKnF1ZXJ5VHJlZV9zdWJsaXN0OworCQkJQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNv dXJjZTsKKworCQkJaWYgKGVuYWJsZV9zcWxfZnVuY19jdXN0b21fcGxhbnMpCisJCQl7CisJCQkJ cGxhbnNvdXJjZSA9IENyZWF0ZUNhY2hlZFBsYW4ocGFyc2V0cmVlLCBmY2FjaGUtPnNyYywgQ3Jl YXRlQ29tbWFuZFRhZyhwYXJzZXRyZWUtPnN0bXQpKTsKKwkJCQlwbGFuc291cmNlX2xpc3QgPSBs YXBwZW5kKHBsYW5zb3VyY2VfbGlzdCwgcGxhbnNvdXJjZSk7CisJCQl9CiAKIAkJCXF1ZXJ5VHJl ZV9zdWJsaXN0ID0gcGdfYW5hbHl6ZV9hbmRfcmV3cml0ZV93aXRoY2IocGFyc2V0cmVlLAogCQkJ CQkJCQkJCQkJCQkJICBmY2FjaGUtPnNyYywKQEAgLTc1MSw2ICs4NDUsMzQgQEAgaW5pdF9zcWxf ZmNhY2hlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBPaWQgY29sbGF0aW9uLCBib29sIGxhenlF dmFsT0spCiAJCQkJCQkJCQkJCSAgIGZhbHNlLAogCQkJCQkJCQkJCQkgICAmcmVzdWx0dGxpc3Qp OwogCisJLyoKKwkgKiBRdWVyaWVzIGNvdWxkIGJlIHJld3JpdHRlbiBieSBjaGVja19zcWxfZm5f cmV0dmFsKCkuIE5vdyB3aGVuIHRoZXkgaGF2ZQorCSAqIHRoZWlyIGZpbmFsIGZvcm0sIHdlIGNh biBjb21wbGV0ZSBwbGFuIGNhY2hlIGVudHJ5IGNyZWF0aW9uLgorCSAqLworCWlmIChwbGFuc291 cmNlX2xpc3QgIT0gTklMKQorCXsKKwkJTGlzdENlbGwgICAqcWxjOworCQlMaXN0Q2VsbCAgICpw bGM7CisKKwkJZm9yYm90aChxbGMsIHF1ZXJ5VHJlZV9saXN0LCBwbGMsIHBsYW5zb3VyY2VfbGlz dCkKKwkJeworCQkJTGlzdAkgICAqcXVlcnlUcmVlX3N1Ymxpc3QgPSBsZmlyc3QocWxjKTsKKwkJ CUNhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UgPSBsZmlyc3QocGxjKTsKKworCisJCQkvKiBG aW5pc2ggZmlsbGluZyBpbiB0aGUgQ2FjaGVkUGxhblNvdXJjZSAqLworCQkJQ29tcGxldGVDYWNo ZWRQbGFuKHBsYW5zb3VyY2UsCisJCQkJCQkJICAgcXVlcnlUcmVlX3N1Ymxpc3QsCisJCQkJCQkJ ICAgTlVMTCwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgIDAsCisJCQkJCQkJICAgKFBhcnNl clNldHVwSG9vaykgc3FsX2ZuX3BhcnNlcl9zZXR1cCwKKwkJCQkJCQkgICBmY2FjaGUtPnBpbmZv LAorCQkJCQkJCSAgIENVUlNPUl9PUFRfUEFSQUxMRUxfT0sgfCBDVVJTT1JfT1BUX05PX1NDUk9M TCwKKwkJCQkJCQkgICBmYWxzZSk7CisJCX0KKwl9CisKIAkvKgogCSAqIENvbnN0cnVjdCBhIEp1 bmtGaWx0ZXIgd2UgY2FuIHVzZSB0byBjb2VyY2UgdGhlIHJldHVybmVkIHJvd3R5cGUgdG8gdGhl CiAJICogZGVzaXJlZCBmb3JtLCB1bmxlc3MgdGhlIHJlc3VsdCB0eXBlIGlzIFZPSUQsIGluIHdo aWNoIGNhc2UgdGhlcmUncwpAQCAtNzk1LDEwICs5MTcsMTggQEAgaW5pdF9zcWxfZmNhY2hlKEZ1 bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBPaWQgY29sbGF0aW9uLCBib29sIGxhenlFdmFsT0spCiAJ CWxhenlFdmFsT0sgPSB0cnVlOwogCX0KIAotCS8qIEZpbmFsbHksIHBsYW4gdGhlIHF1ZXJpZXMg Ki8KLQlmY2FjaGUtPmZ1bmNfc3RhdGUgPSBpbml0X2V4ZWN1dGlvbl9zdGF0ZShxdWVyeVRyZWVf bGlzdCwKLQkJCQkJCQkJCQkJICBmY2FjaGUsCi0JCQkJCQkJCQkJCSAgbGF6eUV2YWxPSyk7CisJ ZmNhY2hlLT5xdWVyeVRyZWVfbGlzdCA9IHF1ZXJ5VHJlZV9saXN0OworCWZjYWNoZS0+cGxhbnNv dXJjZV9saXN0ID0gcGxhbnNvdXJjZV9saXN0OworCisJLyoKKwkgKiBGaW5hbGx5LCBwbGFuIHRo ZSBxdWVyaWVzLiBTa2lwIHBsYW5uaW5nIGlmIHdlIHVzZSBjYWNoZWQgcGxhbnMKKwkgKiBtYWNo aW5lcnkgLSBhbnl3YXkgd2UnbGwgaGF2ZSB0byByZXBsYW4gb24gdGhlIGZpcnN0IHJ1biB3aGVu CisJICogcGFyYW1ldGVycyBhcmUgc3Vic3RpdHV0ZWQuCisJICovCisJaWYgKHBsYW5zb3VyY2Vf bGlzdCA9PSBOSUwpCisJCWZjYWNoZS0+ZnVuY19zdGF0ZSA9IGluaXRfZXhlY3V0aW9uX3N0YXRl KHF1ZXJ5VHJlZV9saXN0LAorCQkJCQkJCQkJCQkJICBmY2FjaGUsCisJCQkJCQkJCQkJCQkgIGxh enlFdmFsT0spOwogCiAJLyogTWFyayBmY2FjaGUgd2l0aCB0aW1lIG9mIGNyZWF0aW9uIHRvIHNo b3cgaXQncyB2YWxpZCAqLwogCWZjYWNoZS0+bHhpZCA9IE15UHJvYy0+dnhpZC5seGlkOwpAQCAt OTY5LDcgKzEwOTksMTMgQEAgcG9zdHF1ZWxfc3ViX3BhcmFtcyhTUUxGdW5jdGlvbkNhY2hlUHRy IGZjYWNoZSwKIAkJCXBybS0+dmFsdWUgPSBNYWtlRXhwYW5kZWRPYmplY3RSZWFkT25seShmY2lu Zm8tPmFyZ3NbaV0udmFsdWUsCiAJCQkJCQkJCQkJCQkJcHJtLT5pc251bGwsCiAJCQkJCQkJCQkJ CQkJZ2V0X3R5cGxlbihhcmd0eXBlc1tpXSkpOwotCQkJcHJtLT5wZmxhZ3MgPSAwOworCisJCQkv KgorCQkJICogUEFSQU1fRkxBR19DT05TVCBpcyBuZWNlc3NhcnkgdG8gYnVpbGQgZWZmaWNpZW50 IGN1c3RvbSBwbGFuLgorCQkJICovCisJCQlpZiAoZmNhY2hlLT5wbGFuc291cmNlX2xpc3QpCisJ CQkJcHJtLT5wZmxhZ3MgPSBQQVJBTV9GTEFHX0NPTlNUOworCiAJCQlwcm0tPnB0eXBlID0gYXJn dHlwZXNbaV07CiAJCX0KIAl9CkBAIC0xMDIyLDYgKzExNTgsMzMgQEAgcG9zdHF1ZWxfZ2V0X3Np bmdsZV9yZXN1bHQoVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJcmV0dXJuIHZhbHVlOwogfQogCisv KgorICogUmVsZWFzZSBwbGFucy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgcHJpb3IgdG8gcGxh bm5pbmcKKyAqIHN0YXRlbWVudHMgd2l0aCBuZXcgcGFyYW1ldGVycy4gV2hlbiBjdXN0b20gcGxh bnMgYXJlIGdlbmVyYXRlZAorICogZm9yIGVhY2ggZnVuY3Rpb24gY2FsbCBpbiBhIHN0YXRlbWVu dCwgdGhleSBjYW4gY29uc3VtZSB0b28gbXVjaCBtZW1vcnksIHNvCisgKiByZWxlYXNlIHRoZW0u IEdlbmVyaWMgcGxhbnMgd2lsbCBzdXJ2aXZlIGl0IGFzIHBsYW5zb3VyY2UgaG9sZHMKKyAqIHJl ZmVyZW5jZSB0byBhIGdlbmVyaWMgcGxhbi4KKyAqLworc3RhdGljIHZvaWQKK3JlbGVhc2VfcGxh bnMoTGlzdCAqY3BsYW5zKQoreworCUxpc3RDZWxsICAgKmxjOworCisJLyoKKwkgKiBXZSBzdXBw b3J0IHNlcGFyYXRlIHBsYW4gbGlzdCwgc28gdGhhdCB3ZSB2aXNpdCBlYWNoIHBsYW4gaGVyZSBv bmx5CisJICogb25jZQorCSAqLworCWZvcmVhY2gobGMsIGNwbGFucykKKwl7CisJCUNhY2hlZFBs YW4gKmNwbGFuID0gbGZpcnN0KGxjKTsKKworCQlSZWxlYXNlQ2FjaGVkUGxhbihjcGxhbiwgTlVM TCk7CisJfQorCisJLyogQ2xlYW51cCB0aGUgbGlzdCBpdHNlbGYgKi8KKwlsaXN0X2ZyZWUoY3Bs YW5zKTsKK30KKwogLyoKICAqIGZtZ3Jfc3FsOiBmdW5jdGlvbiBjYWxsIG1hbmFnZXIgZm9yIFNR TCBmdW5jdGlvbnMKICAqLwpAQCAtMTA0MCw2ICsxMjAzLDcgQEAgZm1ncl9zcWwoUEdfRlVOQ1RJ T05fQVJHUykKIAlEYXR1bQkJcmVzdWx0OwogCUxpc3QJICAgKmVzbGlzdDsKIAlMaXN0Q2VsbCAg ICplc2xjOworCWJvb2wJCWJ1aWxkX2NhY2hlZF9wbGFucyA9IGZhbHNlOwogCiAJLyoKIAkgKiBT ZXR1cCBlcnJvciB0cmFjZWJhY2sgc3VwcG9ydCBmb3IgZXJlcG9ydCgpCkBAIC0xMTI5LDEyICsx MjkzLDU0IEBAIGZtZ3Jfc3FsKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQlicmVhazsKIAl9CiAKKwkv KgorCSAqIFdlIGNvdWxkIHNraXAgYWN0dWFsIHBsYW5uaW5nIGlmIGRlY2lkZWQgdG8gdXNlIGNh Y2hlZCBwbGFucy4gSW4gdGhpcworCSAqIGNhc2Ugd2UgaGF2ZSB0byBidWlsZCBjYWNoZWQgcGxh bnMgbm93LgorCSAqLworCWlmIChmY2FjaGUtPnBsYW5zb3VyY2VfbGlzdCAhPSBOSUwgJiYgZXNs aXN0ID09IE5JTCkKKwkJYnVpbGRfY2FjaGVkX3BsYW5zID0gdHJ1ZTsKKwogCS8qCiAJICogQ29u dmVydCBwYXJhbXMgdG8gYXBwcm9wcmlhdGUgZm9ybWF0IGlmIHN0YXJ0aW5nIGEgZnJlc2ggZXhl Y3V0aW9uLiAoSWYKIAkgKiBjb250aW51aW5nIGV4ZWN1dGlvbiwgd2UgY2FuIHJlLXVzZSBwcmlv ciBwYXJhbXMuKQogCSAqLwotCWlmIChpc19maXJzdCAmJiBlcyAmJiBlcy0+c3RhdHVzID09IEZf RVhFQ19TVEFSVCkKKwlpZiAoKGlzX2ZpcnN0ICYmIGVzICYmIGVzLT5zdGF0dXMgPT0gRl9FWEVD X1NUQVJUKSB8fCBidWlsZF9jYWNoZWRfcGxhbnMpCisJewogCQlwb3N0cXVlbF9zdWJfcGFyYW1z KGZjYWNoZSwgZmNpbmZvKTsKKwkJaWYgKGZjYWNoZS0+cGxhbnNvdXJjZV9saXN0KQorCQl7CisJ CQlMaXN0Q2VsbCAqbGM7CisKKwkJCS8qIHJlcGxhbiB0aGUgcXVlcmllcyAqLworCQkJcmVsZWFz ZV9wbGFucyhmY2FjaGUtPmNwbGFuX2xpc3QpOworCisJCQlmb3JlYWNoIChsYywgZmNhY2hlLT5m dW5jX3N0YXRlKQorCQkJeworCQkJCWV4ZWN1dGlvbl9zdGF0ZSAqY3VyX2VzID0gbGZpcnN0KGxj KTsKKwkJCQkvKgorCQkJCSAqIEV4ZWN1dGlvbiBzdGF0ZSBjYW4gYmUgTlVMTCBpZiBzdGF0ZW1l bnQgaXMKKwkJCQkgKiBjb21wbGV0ZWx5IHJlcGxhY2VkIGJ5IGRvIGluc3RlYWQgbm90aGluZyBy dWxlLgorCQkJCSAqLworCQkJCWlmIChjdXJfZXMpCisJCQkJCXBmcmVlKGN1cl9lcyk7CisJCQl9 CisJCQlsaXN0X2ZyZWUoZmNhY2hlLT5mdW5jX3N0YXRlKTsKKworCQkJZmNhY2hlLT5mdW5jX3N0 YXRlID0gaW5pdF9leGVjdXRpb25fc3RhdGUoZmNhY2hlLT5xdWVyeVRyZWVfbGlzdCwKKwkJCQkJ CQkJCQkJCQkgIGZjYWNoZSwKKwkJCQkJCQkJCQkJCQkgIGxhenlFdmFsT0spOworCQkJLyogcmVz dG9yZSBleGVjdXRpb24gc3RhdGUgYW5kIGVzbGlzdC1yZWxhdGVkIHZhcmlhYmxlcyAqLworCQkJ ZXNsaXN0ID0gZmNhY2hlLT5mdW5jX3N0YXRlOworCQkJLyogZmluZCB0aGUgZmlyc3Qgbm9uLU5V TEwgZXhlY3V0aW9uIHN0YXRlICovCisJCQlmb3JlYWNoKGVzbGMsIGVzbGlzdCkKKwkJCXsKKwkJ CQllcyA9IChleGVjdXRpb25fc3RhdGUgKikgbGZpcnN0KGVzbGMpOworCisJCQkJaWYgKGVzKQor CQkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KIAogCS8qCiAJICogQnVpbGQgdHVwbGVzdG9yZSB0 byBob2xkIHJlc3VsdHMsIGlmIHdlIGRvbid0IGhhdmUgb25lIGFscmVhZHkuIE5vdGUKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKaW5kZXggNWFmMWExNjhlYzIuLjNiNDIzMjk5MjE4IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYwpAQCAtNzQsMTggKzc0LDYgQEAKICNpbmNs dWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCiAKLS8qCi0gKiBXZSBtdXN0IHNraXAgIm92ZXJoZWFk IiBvcGVyYXRpb25zIHRoYXQgaW52b2x2ZSBkYXRhYmFzZSBhY2Nlc3Mgd2hlbiB0aGUKLSAqIGNh Y2hlZCBwbGFuJ3Mgc3ViamVjdCBzdGF0ZW1lbnQgaXMgYSB0cmFuc2FjdGlvbiBjb250cm9sIGNv bW1hbmQgb3Igb25lCi0gKiB0aGF0IHJlcXVpcmVzIGEgc25hcHNob3Qgbm90IHRvIGJlIHNldCB5 ZXQgKHN1Y2ggYXMgU0VUIG9yIExPQ0spLiAgTW9yZQotICogZ2VuZXJhbGx5LCBzdGF0ZW1lbnRz IHRoYXQgZG8gbm90IHJlcXVpcmUgcGFyc2UgYW5hbHlzaXMvcmV3cml0ZS9wbGFuCi0gKiBhY3Rp dml0eSBuZXZlciBuZWVkIHRvIGJlIHJldmFsaWRhdGVkLCBzbyB3ZSBjYW4gdHJlYXQgdGhlbSBh bGwgbGlrZSB0aGF0LgotICogRm9yIHRoZSBjb252ZW5pZW5jZSBvZiBwb3N0Z3Jlcy5jLCB0cmVh dCBlbXB0eSBzdGF0ZW1lbnRzIHRoYXQgd2F5IHRvby4KLSAqLwotI2RlZmluZSBTdG10UGxhblJl cXVpcmVzUmV2YWxpZGF0aW9uKHBsYW5zb3VyY2UpICBcCi0JKChwbGFuc291cmNlKS0+cmF3X3Bh cnNlX3RyZWUgIT0gTlVMTCAmJiBcCi0JIHN0bXRfcmVxdWlyZXNfcGFyc2VfYW5hbHlzaXMoKHBs YW5zb3VyY2UpLT5yYXdfcGFyc2VfdHJlZSkpCi0KIC8qCiAgKiBUaGlzIGlzIHRoZSBoZWFkIG9m IHRoZSBiYWNrZW5kJ3MgbGlzdCBvZiAic2F2ZWQiIENhY2hlZFBsYW5Tb3VyY2VzIChpLmUuLAog ICogdGhvc2UgdGhhdCBhcmUgaW4gbG9uZy1saXZlZCBzdG9yYWdlIGFuZCBhcmUgZXhhbWluZWQg Zm9yIHNpbnZhbCBldmVudHMpLgpAQCAtMTMwLDYgKzExOCwzOCBAQCBzdGF0aWMgY29uc3QgUmVz b3VyY2VPd25lckRlc2MgcGxhbnJlZl9yZXNvd25lcl9kZXNjID0KIAkuRGVidWdQcmludCA9IE5V TEwJCQkvKiB0aGUgZGVmYXVsdCBtZXNzYWdlIGlzIGZpbmUgKi8KIH07CiAKKy8qCisgKiBXZSBt dXN0IHNraXAgIm92ZXJoZWFkIiBvcGVyYXRpb25zIHRoYXQgaW52b2x2ZSBkYXRhYmFzZSBhY2Nl c3Mgd2hlbiB0aGUKKyAqIGNhY2hlZCBwbGFuJ3Mgc3ViamVjdCBzdGF0ZW1lbnQgaXMgYSB0cmFu c2FjdGlvbiBjb250cm9sIGNvbW1hbmQgb3Igb25lCisgKiB0aGF0IHJlcXVpcmVzIGEgc25hcHNo b3Qgbm90IHRvIGJlIHNldCB5ZXQgKHN1Y2ggYXMgU0VUIG9yIExPQ0spLiAgTW9yZQorICogZ2Vu ZXJhbGx5LCBzdGF0ZW1lbnRzIHRoYXQgZG8gbm90IHJlcXVpcmUgcGFyc2UgYW5hbHlzaXMvcmV3 cml0ZS9wbGFuCisgKiBhY3Rpdml0eSBuZXZlciBuZWVkIHRvIGJlIHJldmFsaWRhdGVkLCBzbyB3 ZSBjYW4gdHJlYXQgdGhlbSBhbGwgbGlrZSB0aGF0LgorICogRm9yIHRoZSBjb252ZW5pZW5jZSBv ZiBwb3N0Z3Jlcy5jLCB0cmVhdCBlbXB0eSBzdGF0ZW1lbnRzIHRoYXQgd2F5IHRvby4KKyAqIElm IHBsYW5zb3VyY2UgZG9lc24ndCBoYXZlIHJhd19wYXJzZV90cmVlLCBsb29rIGF0IHF1ZXJ5X2xp c3QgdG8gZmluZCBvdXQKKyAqIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXV0aWxpdHkgc3RhdGVtZW50 cy4KKyAqLworc3RhdGljIGlubGluZSBib29sCitTdG10UGxhblJlcXVpcmVzUmV2YWxpZGF0aW9u KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpCit7CisJaWYgKHBsYW5zb3VyY2UtPnJhd19w YXJzZV90cmVlICE9IE5VTEwpCisJeworCQlyZXR1cm4gc3RtdF9yZXF1aXJlc19wYXJzZV9hbmFs eXNpcyhwbGFuc291cmNlLT5yYXdfcGFyc2VfdHJlZSk7CisJfQorCWVsc2UKKwl7CisJCUxpc3RD ZWxsICpsYzsKKworCQlmb3JlYWNoIChsYywgcGxhbnNvdXJjZS0+cXVlcnlfbGlzdCkKKwkJewor CQkJUXVlcnkgKnF1ZXJ5ID0gY2FzdE5vZGUoUXVlcnksIGxmaXJzdChsYykpOworCisJCQlpZiAo cXVlcnktPmNvbW1hbmRUeXBlICE9IENNRF9VVElMSVRZKQorCQkJCXJldHVybiB0cnVlOworCQl9 CisJfQorCXJldHVybiBmYWxzZTsKK30KKwogLyogQ29udmVuaWVuY2Ugd3JhcHBlcnMgb3ZlciBS ZXNvdXJjZU93bmVyUmVtZW1iZXIvRm9yZ2V0ICovCiBzdGF0aWMgaW5saW5lIHZvaWQKIFJlc291 cmNlT3duZXJSZW1lbWJlclBsYW5DYWNoZVJlZihSZXNvdXJjZU93bmVyIG93bmVyLCBDYWNoZWRQ bGFuICpwbGFuKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVz LmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCA1MjFlYzU1OTFj OC4uOGY2NmQ1ZmY5ZmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Rh Ymxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBAIC00Niw2 ICs0Niw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvdmFjdXVtLmgiCiAjaW5jbHVkZSAiY29tbW9u L2ZpbGVfdXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vc2NyYW0tY29tbW9uLmgiCisjaW5jbHVk ZSAiZXhlY3V0b3IvZnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgogI2luY2x1ZGUg ImxpYnBxL2F1dGguaCIKICNpbmNsdWRlICJsaWJwcS9saWJwcS5oIgpAQCAtOTc2LDYgKzk3Nywx NyBAQCBzdHJ1Y3QgY29uZmlnX2Jvb2wgQ29uZmlndXJlTmFtZXNCb29sW10gPQogCQl0cnVlLAog CQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwKKwl7CisJCXsiZW5hYmxlX3NxbF9mdW5jX2N1c3RvbV9w bGFucyIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5JTkdfTUVUSE9ELAorCQkJZ2V0dGV4dF9ub29w KCJFbmFibGUgcGxhbiBjYWNoZSBtYWNoaW5lcnkgYW5kIGN1c3RvbSBwbGFucyBmb3IgIgorCQkJ CQkJICJTUUwgbGFuZ3VhZ2UgZnVuY3Rpb25zLiIpLAorCQkJTlVMTCwKKwkJCUdVQ19OT1RfSU5f U0FNUExFIHwgR1VDX0VYUExBSU4KKwkJfSwKKwkJJmVuYWJsZV9zcWxfZnVuY19jdXN0b21fcGxh bnMsCisJCXRydWUsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAogCXsKIAkJeyJlbmFibGVfYXN5 bmNfYXBwZW5kIiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RVTklOR19NRVRIT0QsCiAJCQlnZXR0ZXh0 X25vb3AoIkVuYWJsZXMgdGhlIHBsYW5uZXIncyB1c2Ugb2YgYXN5bmMgYXBwZW5kIHBsYW5zLiIp LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZnVuY3Rpb25zLmggYi9zcmMvaW5j bHVkZS9leGVjdXRvci9mdW5jdGlvbnMuaAppbmRleCAyN2Y5NDhjNmY1Mi4uOGYzODA1ZDc3ODIg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2Z1bmN0aW9ucy5oCisrKyBiL3NyYy9p bmNsdWRlL2V4ZWN1dG9yL2Z1bmN0aW9ucy5oCkBAIC01Myw0ICs1Myw2IEBAIGV4dGVybiBib29s IGNoZWNrX3NxbF9mbl9yZXR2YWwoTGlzdCAqcXVlcnlUcmVlTGlzdHMsCiAKIGV4dGVybiBEZXN0 UmVjZWl2ZXIgKkNyZWF0ZVNRTEZ1bmN0aW9uRGVzdFJlY2VpdmVyKHZvaWQpOwogCitleHRlcm4g UEdETExJTVBPUlQgYm9vbCBlbmFibGVfc3FsX2Z1bmNfY3VzdG9tX3BsYW5zOworCiAjZW5kaWYJ CQkJCQkJLyogRlVOQ1RJT05TX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvbnVtZXJpYy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL251bWVyaWMub3V0 CmluZGV4IGYzMGFjMjM2ZjUyLi41NWI4MWY3ZTczYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9udW1lcmljLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L251bWVyaWMub3V0CkBAIC0zMjQxLDEwICszMjQxLDEwIEBAIHNlbGVjdCBsbig5LjM0MjUzNjM1 NWUzNCk7CiAtLSBpbnZhbGlkIGlucHV0cwogc2VsZWN0IGxvZygtMTIuMzQpOwogRVJST1I6ICBj YW5ub3QgdGFrZSBsb2dhcml0aG0gb2YgYSBuZWdhdGl2ZSBudW1iZXIKLUNPTlRFWFQ6ICBTUUwg ZnVuY3Rpb24gImxvZyIgc3RhdGVtZW50IDEKK0NPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gImxvZyIg ZHVyaW5nIHN0YXJ0dXAKIHNlbGVjdCBsb2coMC4wKTsKIEVSUk9SOiAgY2Fubm90IHRha2UgbG9n YXJpdGhtIG9mIHplcm8KLUNPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gImxvZyIgc3RhdGVtZW50IDEK K0NPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gImxvZyIgZHVyaW5nIHN0YXJ0dXAKIC0tIHNvbWUgcmFu ZG9tIHRlc3RzCiBzZWxlY3QgbG9nKDEuMjM0NTY3ZS04OSk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wbHBnc3FsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGxwZ3NxbC5v dXQKaW5kZXggMDc0YWY4ZjMzYTguLmMxYTYyOTcwNDNlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3BscGdzcWwub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcGxwZ3NxbC5vdXQKQEAgLTQ0NzQsNyArNDQ3NCw3IEBAIGNyZWF0ZSB0YWJsZSBwdWJsaWMu c3R1ZmZzIChzdHVmZiB0ZXh0KTsKIFNBVkVQT0lOVCBhOwogc2VsZWN0IGVycm9yMignbm9uZXhp c3RlbnQuc3R1ZmZzJyk7CiBFUlJPUjogIHNjaGVtYSAibm9uZXhpc3RlbnQiIGRvZXMgbm90IGV4 aXN0Ci1DT05URVhUOiAgU1FMIGZ1bmN0aW9uICJlcnJvcjEiIHN0YXRlbWVudCAxCitDT05URVhU OiAgU1FMIGZ1bmN0aW9uICJlcnJvcjEiIGR1cmluZyBzdGFydHVwCiBQTC9wZ1NRTCBmdW5jdGlv biBlcnJvcjIodGV4dCkgbGluZSAzIGF0IFJFVFVSTgogUk9MTEJBQ0sgVE8gYTsKIHNlbGVjdCBl cnJvcjIoJ3B1YmxpYy5zdHVmZnMnKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKaW5k ZXggODYyNDMzZWU1MmIuLmZhZGEyZDFiMjRlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3J1bGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVz Lm91dApAQCAtMzgzNywzICszODM3LDM4IEBAIERST1AgVEFCTEUgcnVsZXRlc3RfdDM7CiBEUk9Q IFRBQkxFIHJ1bGV0ZXN0X3QyOwogRFJPUCBUQUJMRSBydWxldGVzdF90MTsKIERST1AgVVNFUiBy ZWdyZXNzX3J1bGVfdXNlcjE7CistLSBUZXN0IHRoYXQgU1FMIGZ1bmN0aW9ucyBjb3JyZWN0bHkg aGFuZGxlIERPIE5PVEhJTkcgcnVsZQorQ1JFQVRFIFRBQkxFIHNvbWVfZGF0YSAoaSBpbnQsIGRh dGEgdGV4dCk7CitDUkVBVEUgVEFCTEUgc29tZV9kYXRhX3ZhbHVlcyAoaSBpbnQsIGRhdGEgdGV4 dCk7CitDUkVBVEUgRlVOQ1RJT04gaW5zZXJ0X2RhdGEoaSBpbnQsIGRhdGEgdGV4dCkKK1JFVFVS TlMgSU5UCitBUyAkJAorSU5TRVJUIElOVE8gc29tZV9kYXRhIFZBTFVFUyAoJDEsICQyKTsKK1NF TEVDVCAxOworJCQgTEFOR1VBR0UgU1FMOworSU5TRVJUIElOVE8gc29tZV9kYXRhX3ZhbHVlcyBT RUxFQ1QgaSAsICdkYXRhJ3x8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApIGk7CitDUkVB VEUgUlVMRSBzb21lX2RhdGFfbm9pbnNlcnQgQVMgT04gSU5TRVJUIFRPIHNvbWVfZGF0YSBETyBJ TlNURUFEIE5PVEhJTkc7CitTRUxFQ1QgaW5zZXJ0X2RhdGEoaSwgZGF0YSkgRlJPTSBzb21lX2Rh dGFfdmFsdWVzOworIGluc2VydF9kYXRhIAorLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAxCisg ICAgICAgICAgIDEKKyAgICAgICAgICAgMQorICAgICAgICAgICAxCisgICAgICAgICAgIDEKKyAg ICAgICAgICAgMQorICAgICAgICAgICAxCisgICAgICAgICAgIDEKKyAgICAgICAgICAgMQorICAg ICAgICAgICAxCisoMTAgcm93cykKKworU0VMRUNUICogRlJPTSBzb21lX2RhdGEgT1JERVIgQlkg aTsKKyBpIHwgZGF0YSAKKy0tLSstLS0tLS0KKygwIHJvd3MpCisKK0RST1AgUlVMRSBzb21lX2Rh dGFfbm9pbnNlcnQgT04gc29tZV9kYXRhOworRFJPUCBUQUJMRSBzb21lX2RhdGFfdmFsdWVzOwor RFJPUCBUQUJMRSBzb21lX2RhdGE7CitEUk9QIEZVTkNUSU9OIGluc2VydF9kYXRhKGludCwgdGV4 dCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdF9wYXJhbGxl bC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdF9wYXJhbGxlbC5vdXQKaW5k ZXggYzU2NTQwNzA4MmMuLjRhMWMyZTUzYmJhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3NlbGVjdF9wYXJhbGxlbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zZWxlY3RfcGFyYWxsZWwub3V0CkBAIC0xMzcwLDcgKzEzNzAsNyBAQCBzZWxlY3Qgc2V0 X2FuZF9yZXBvcnRfcm9sZSgpOwogCiBzZWxlY3Qgc2V0X3JvbGVfYW5kX2Vycm9yKDApOwogRVJS T1I6ICBkaXZpc2lvbiBieSB6ZXJvCi1DT05URVhUOiAgU1FMIGZ1bmN0aW9uICJzZXRfcm9sZV9h bmRfZXJyb3IiIHN0YXRlbWVudCAxCitDT05URVhUOiAgU1FMIGZ1bmN0aW9uICJzZXRfcm9sZV9h bmRfZXJyb3IiIGR1cmluZyBzdGFydHVwCiBzZXQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSAxOwog c2VsZWN0IHNldF9hbmRfcmVwb3J0X3JvbGUoKTsKICAgIHNldF9hbmRfcmVwb3J0X3JvbGUgICAK QEAgLTEzODAsNyArMTM4MCw3IEBAIHNlbGVjdCBzZXRfYW5kX3JlcG9ydF9yb2xlKCk7CiAKIHNl bGVjdCBzZXRfcm9sZV9hbmRfZXJyb3IoMCk7CiBFUlJPUjogIGRpdmlzaW9uIGJ5IHplcm8KLUNP TlRFWFQ6ICBTUUwgZnVuY3Rpb24gInNldF9yb2xlX2FuZF9lcnJvciIgc3RhdGVtZW50IDEKK0NP TlRFWFQ6ICBTUUwgZnVuY3Rpb24gInNldF9yb2xlX2FuZF9lcnJvciIgZHVyaW5nIHN0YXJ0dXAK IHBhcmFsbGVsIHdvcmtlcgogcmVzZXQgZGVidWdfcGFyYWxsZWxfcXVlcnk7CiBkcm9wIGZ1bmN0 aW9uIHNldF9hbmRfcmVwb3J0X3JvbGUoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3RyaW5ncy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0cmluZ3Mu b3V0CmluZGV4IGI2NWJiMmQ1MzY4Li43YWI1YWFmY2QyOSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zdHJpbmdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3N0cmluZ3Mub3V0CkBAIC01MTEsNyArNTExLDcgQEAgU0VMRUNUIFNVQlNUUklORygnYWJj ZGVmZycgU0lNSUxBUiAnYSMiJXxhYiMiZycgRVNDQVBFICcjJykgQVMgImJjZGVmIjsKIC0tIENh bid0IGhhdmUgbW9yZSB0aGFuIHR3byBwYXJ0IHNlcGFyYXRvcnMKIFNFTEVDVCBTVUJTVFJJTkco J2FiY2RlZmcnIFNJTUlMQVIgJ2EqIyIlIyJnKiMieCcgRVNDQVBFICcjJykgQVMgImVycm9yIjsK IEVSUk9SOiAgU1FMIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXkgbm90IGNvbnRhaW4gbW9yZSB0aGFu IHR3byBlc2NhcGUtZG91YmxlLXF1b3RlIHNlcGFyYXRvcnMKLUNPTlRFWFQ6ICBTUUwgZnVuY3Rp b24gInN1YnN0cmluZyIgc3RhdGVtZW50IDEKK0NPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gInN1YnN0 cmluZyIgZHVyaW5nIHN0YXJ0dXAKIC0tIFBvc3RncmVzIGV4dGVuc2lvbjogd2l0aCAwIG9yIDEg c2VwYXJhdG9yLCBhc3N1bWUgcGFydHMgMSBhbmQgMyBhcmUgZW1wdHkKIFNFTEVDVCBTVUJTVFJJ TkcoJ2FiY2RlZmcnIFNJTUlMQVIgJ2EjIiVnJyBFU0NBUEUgJyMnKSBBUyAiYmNkZWZnIjsKICBi Y2RlZmcgCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CmluZGV4IGZhZDdmYzNh N2UwLi40OGRmMDg4ZDU2OCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z eXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQK QEAgLTE2OSw4ICsxNjksOSBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdz IHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX3ByZXNvcnRlZF9hZ2dyZWdhdGUg ICAgIHwgb24KICBlbmFibGVfc2Vxc2NhbiAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9z b3J0ICAgICAgICAgICAgICAgICAgICB8IG9uCisgZW5hYmxlX3NxbF9mdW5jX2N1c3RvbV9wbGFu cyAgIHwgb24KICBlbmFibGVfdGlkc2NhbiAgICAgICAgICAgICAgICAgfCBvbgotKDIyIHJvd3Mp CisoMjMgcm93cykKIAogLS0gVGhlcmUgYXJlIGFsd2F5cyB3YWl0IGV2ZW50IGRlc2NyaXB0aW9u cyBmb3IgdmFyaW91cyB0eXBlcy4gIEluamVjdGlvblBvaW50CiAtLSBtYXkgYmUgcHJlc2VudCBv ciBhYnNlbnQsIGRlcGVuZGluZyBvbiBoaXN0b3J5IHNpbmNlIGxhc3QgcG9zdG1hc3RlciBzdGFy dC4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3J1bGVzLnNxbCBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3J1bGVzLnNxbAppbmRleCA0YTVmYTUwNTg1NS4uZjgxZTVkMzExNDkgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3J1bGVzLnNxbAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9ydWxlcy5zcWwKQEAgLTE0MjgsMyArMTQyOCwyNyBAQCBEUk9QIFRBQkxFIHJ1 bGV0ZXN0X3QyOwogRFJPUCBUQUJMRSBydWxldGVzdF90MTsKIAogRFJPUCBVU0VSIHJlZ3Jlc3Nf cnVsZV91c2VyMTsKKworLS0gVGVzdCB0aGF0IFNRTCBmdW5jdGlvbnMgY29ycmVjdGx5IGhhbmRs ZSBETyBOT1RISU5HIHJ1bGUKK0NSRUFURSBUQUJMRSBzb21lX2RhdGEgKGkgaW50LCBkYXRhIHRl eHQpOworQ1JFQVRFIFRBQkxFIHNvbWVfZGF0YV92YWx1ZXMgKGkgaW50LCBkYXRhIHRleHQpOwor CitDUkVBVEUgRlVOQ1RJT04gaW5zZXJ0X2RhdGEoaSBpbnQsIGRhdGEgdGV4dCkKK1JFVFVSTlMg SU5UCitBUyAkJAorSU5TRVJUIElOVE8gc29tZV9kYXRhIFZBTFVFUyAoJDEsICQyKTsKK1NFTEVD VCAxOworJCQgTEFOR1VBR0UgU1FMOworCitJTlNFUlQgSU5UTyBzb21lX2RhdGFfdmFsdWVzIFNF TEVDVCBpICwgJ2RhdGEnfHwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMCkgaTsKKworQ1JF QVRFIFJVTEUgc29tZV9kYXRhX25vaW5zZXJ0IEFTIE9OIElOU0VSVCBUTyBzb21lX2RhdGEgRE8g SU5TVEVBRCBOT1RISU5HOworCitTRUxFQ1QgaW5zZXJ0X2RhdGEoaSwgZGF0YSkgRlJPTSBzb21l X2RhdGFfdmFsdWVzOworCitTRUxFQ1QgKiBGUk9NIHNvbWVfZGF0YSBPUkRFUiBCWSBpOworCitE Uk9QIFJVTEUgc29tZV9kYXRhX25vaW5zZXJ0IE9OIHNvbWVfZGF0YTsKK0RST1AgVEFCTEUgc29t ZV9kYXRhX3ZhbHVlczsKK0RST1AgVEFCTEUgc29tZV9kYXRhOworRFJPUCBGVU5DVElPTiBpbnNl cnRfZGF0YShpbnQsIHRleHQpOwotLSAKMi4zNC4xCgo= --=_634d2ce0896a7c987f26ca32fda64a9a--