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 1udypY-0038T6-GM for pgsql-hackers@arkaria.postgresql.org; Mon, 21 Jul 2025 22:17:57 +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 1udypX-003K2f-J7 for pgsql-hackers@arkaria.postgresql.org; Mon, 21 Jul 2025 22:17:55 +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 1udypX-003K2X-7k for pgsql-hackers@lists.postgresql.org; Mon, 21 Jul 2025 22:17:55 +0000 Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1udypU-00074h-10 for pgsql-hackers@lists.postgresql.org; Mon, 21 Jul 2025 22:17:55 +0000 Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-553d52cb80dso5417481e87.1 for ; Mon, 21 Jul 2025 15:17:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1753136271; x=1753741071; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=nzZSQ5zFauZnGiRPHoplXoFtg/b9z73hsm8bi8iTnLk=; b=dG4GXYd5AzE8VgDBmqc8Dkf3JhfhKd2+BiDMipHvCJDsIRNnUbOaguqxB1leQeIbEx E7CcH6eZNf1mTS83Kv7p8DEHuHXipe0adPh2BHqV6bIaKoRM3u8jIv3kf4pNYuWltmFK jrXCujOxvCvWSlSIVEKYU5U9HKgFIW2qAQ4OszJLELIFBQuQnUZ71jXRXDKkwZFlaJ4y 7igBfS8Helyg8G6usHK7acaNlS2inR5mSb2bsg4Kt26gmcsqc070g0V4lyKPFbFVfTh1 JLLq3xCQSOHrj2evs/BePONC04jIM58h3XYAwwe3evnjlDw2wcWCxhNXG0NI0B3BhSok icow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753136271; x=1753741071; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=nzZSQ5zFauZnGiRPHoplXoFtg/b9z73hsm8bi8iTnLk=; b=ueiAIxFTTDSoxQx+cFAytug/USgi6ZOt0KwvdpXw3c/2K9krovlYbjWs9Yz4xnHQiR hdQdRK81bOSSld1zLQxOqD0Ek2n9U5a3ziFKQe9NgnCIcheSqG21h1ljqGDP//qQ8wz9 zk2oEP9+YM9aryCK2fg9cRt2Ua4L6zTTLBLfmK5rp7U3qX4uBzxQjORZL3JlVbomoSia /02a3aFZwKkNiRzCoRA6SnVJdhgu6tK3MlGVQp/nLPKQRRKceaGKUs4usj1/X9PtB3bU ECrTaZ4yTgnR6wfcPAlaBjucd39Uh21bKBGmmvl4DKzOlb793Z0UDX3jm7+jn2p/2wst cIjQ== X-Forwarded-Encrypted: i=1; AJvYcCUnVxEl1EK7Htc+6+l3QJwHQ0XVfYPJVPEOsfd/S7BPuyN9eomWKSvtJAYAhb1zl4WeZMGw2MiggkhEz9lZ@lists.postgresql.org X-Gm-Message-State: AOJu0YyaWLtNKrtT2caJqo8bH0wVSgm94V1YI74NOi3AT2zo9PlatvMD i4HE6M1xTIW/Lt2IFap/85KwXr7v7v4abeZ3ZkfQ1cw+a0B72Q7Wff/T2VMddUWTAPpHKo5Ut8M MIJxz3Og8d0h3KLdFC/nHdVmz0bX3WXw= X-Gm-Gg: ASbGnct+LkXln9EG8d3aZhLDWKk3jlnJT2ElZG1qF7jf14MK8g0iDPS+fqGlAzPuNhA U/GkdGOrun9N36U1J0kyDcJYN5EZkMq4/4Wo/aNLoX429oKIb/HKIggYjUuJutoeplo6PVMsfyT kB8AqViVedAykUWmWQxpByToB7uveduaP7MkMPPSnD05oCcdxR0cAKawVrMnHdV9oA/5/I/3C58 cwQ1Vx/Dn4Ahcj5t5GylZJMb6A8zl6KhcQj9MGYMA== X-Google-Smtp-Source: AGHT+IHsN2Ych9UXc8aTkax3f6rBasUjGhZ0Lf7L6RyZZM4H+dJpGyeQ9JjC9GlllmG/C8tr+7oIGwr/Yb7alTOX7b8= X-Received: by 2002:a05:6512:1153:b0:558:faa8:f667 with SMTP id 2adb3069b0e04-55a48e7bdbdmr316621e87.5.1753136270289; Mon, 21 Jul 2025 15:17:50 -0700 (PDT) MIME-Version: 1.0 References: <3ba16aa7-3cb2-4289-b773-522ae2f03a77@tantorlabs.com> <81ef0f5a-b6a1-4417-ae3a-2bae9b8d419e@gmail.com> <67b5c84a-dedd-4103-af7e-0117046102fe@tantorlabs.com> <580fe72c-85be-45a8-9e00-6b5417690557@tantorlabs.com> <3ea66a50-e4b0-4f20-ae0c-4d9cbaf81cfb@tantorlabs.com> <0e8dc4fa-3655-4e9f-9424-9b32a15e6acd@tantorlabs.com> <7e995158-157e-4ec6-a7c8-266c1a6f7b43@tantorlabs.com> <06840539-e321-4930-9f89-cfc783c5b80a@tantorlabs.com> <15e0422a-31ec-4e82-b0cf-0839f636b185@tantorlabs.com> <5c7034c4-c48b-428b-ab3f-67f14d9f542e@tantorlabs.com> In-Reply-To: <5c7034c4-c48b-428b-ab3f-67f14d9f542e@tantorlabs.com> From: David Rowley Date: Tue, 22 Jul 2025 10:17:36 +1200 X-Gm-Features: Ac12FXy_reVTAvO51ZfvVi8wEVyP5wSFBv3ATpmP5V84mNWeUksnxwc-ApfD_pw Message-ID: Subject: Re: Add estimated hit ratio to Memoize in EXPLAIN to explain cost adjustment To: Ilia Evdokimov Cc: Robert Haas , Tom Lane , Lukas Fittl , Daniel Gustafsson , PostgreSQL Hackers , Nikolay Samokhvalov , Andrei Lepikhov Content-Type: multipart/mixed; boundary="000000000000a24f57063a77d8c0" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a24f57063a77d8c0 Content-Type: text/plain; charset="UTF-8" On Fri, 4 Jul 2025 at 20:30, Ilia Evdokimov wrote: > I attached rebased v10 patch on 5a6c39b. I've gone over this and made some cosmetic adjustments. A few adjustments to the comments and used Cardinality rather than double for some data types. I also moved the MemoizePath.calls field down below est_entries so that est_entries would take up some padding space. This saves 8 bytes of struct, and IMO, improves the logical order of fields. I renamed "calls" to "est_calls" so it's more aligned with the new fields being added by this patch. The final thing which I'm not so sure about is the EXPLAIN format. Currently it looks like: -> Memoize (cost=0.43..0.46 rows=1 width=4) (actual time=0.000..0.000 rows=1.00 loops=1000000) Cache Key: t.a Cache Mode: logical Estimates: capacity=10010 distinct keys=10010 lookups=1000000 hit ratio=99.00% Hits: 989999 Misses: 10001 Evictions: 0 Overflows: 0 Memory Usage: 1016kB This format for the Estimates copies the "Buffers:" format for putting multiple sub-values under a single heading. However, we don't seem very consistent with this as JIT has a similar need but formats things another way, i.e.: JIT: Functions: 6 Options: Inlining false, Optimization false, Expressions true, Deforming true Timing: Generation 0.473 ms (Deform 0.112 ms), Inlining 0.000 ms, Optimization 0.701 ms, Emission 5.778 ms, Total 6.952 ms We could get rid of the "Estimates" heading and just prefix each value with "Estimated", as in: -> Memoize (cost=0.43..0.46 rows=1 width=4) (actual time=0.000..0.000 rows=1.00 loops=1000000) Cache Key: t.a Cache Mode: logical Estimated capacity: 10010 Estimated distinct keys: 10010 Estimated lookups: 1000000 Estimated hit ratio: 99.00% Hits: 989999 Misses: 10001 Evictions: 0 Overflows: 0 Memory Usage: 1016kB Buffers: shared hit=30004 That removes the dilemma about which example to follow, but it's more verbose. Does anyone have any opinions on this? v11 patch attached. David --000000000000a24f57063a77d8c0 Content-Type: application/octet-stream; name="v11-0001-Expose-cache-hit-statistics-in-Memoize-node-EXPL.patch" Content-Disposition: attachment; filename="v11-0001-Expose-cache-hit-statistics-in-Memoize-node-EXPL.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mddnz8xb0 RnJvbSBkN2UzNWNmYWE3ZWZlZjUzNGJkODFhYjIxNTkwZTI0M2RiMWFhNjg1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJbGlhIEV2ZG9raW1vdiA8aWx5YS5ldmRva2ltb3ZAdGFudG9y bGFicy5ydT4KRGF0ZTogRnJpLCA0IEp1bCAyMDI1IDExOjI0OjU2ICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2MTFdIEV4cG9zZSBjYWNoZSBoaXQgc3RhdGlzdGljcyBpbiBNZW1vaXplIG5vZGUgRVhQ TEFJTgogb3V0cHV0LgoKVGhpcyBwYXRjaCBhZGRzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8g dGhlIE1lbW9pemUgbm9kZSdzIEVYUExBSU4gb3V0cHV0Ogplc3RpbWF0ZWQgY2FjaGUgY2FwYWNp dHksIG51bWJlciBvZiBkaXN0aW5jdCBrZXlzLCB0b3RhbCBsb29rdXBzLCBhbmQKY2FjaGUgaGl0 IHBlcmNlbnRhZ2UuCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jICAgICAgICAg IHwgMjAgKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nv c3RzaXplLmMgICB8IDE0ICsrKysrKysrKystLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9jcmVhdGVwbGFuLmMgfCAxMyArKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9wYXRobm9kZS5jICAgfCAxMSArKysrKysrKy0tLQogc3JjL2luY2x1ZGUvbm9kZXMvcGF0 aG5vZGVzLmggICAgICAgICAgIHwgIDQgKysrLQogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmggICAgICAgICAgIHwgMTAgKysrKysrKysrKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhu b2RlLmggICAgICAgIHwgIDIgKy0KIDcgZmlsZXMgY2hhbmdlZCwgNjIgaW5zZXJ0aW9ucygrKSwg MTIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFp bi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IDdlMjc5MmVhZDcxLi5j M2M1MmZiZTE5MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMzYxNiw2ICszNjE2LDI2IEBA IHNob3dfbWVtb2l6ZV9pbmZvKE1lbW9pemVTdGF0ZSAqbXN0YXRlLCBMaXN0ICphbmNlc3RvcnMs IEV4cGxhaW5TdGF0ZSAqZXMpCiAJRXhwbGFpblByb3BlcnR5VGV4dCgiQ2FjaGUgS2V5Iiwga2V5 c3RyLmRhdGEsIGVzKTsKIAlFeHBsYWluUHJvcGVydHlUZXh0KCJDYWNoZSBNb2RlIiwgbXN0YXRl LT5iaW5hcnlfbW9kZSA/ICJiaW5hcnkiIDogImxvZ2ljYWwiLCBlcyk7CiAKKwlpZiAoZXMtPmNv c3RzKQorCXsKKwkJaWYgKGVzLT5mb3JtYXQgPT0gRVhQTEFJTl9GT1JNQVRfVEVYVCkKKwkJewor CQkJRXhwbGFpbkluZGVudFRleHQoZXMpOworCQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAi RXN0aW1hdGVzOiBjYXBhY2l0eT0ldSBkaXN0aW5jdCBrZXlzPSUuMGYgbG9va3Vwcz0lLjBmIGhp dCBwZXJjZW50PSUuMmYlJVxuIiwKKwkJCQkJCQkgKChNZW1vaXplICopIHBsYW4pLT5lc3RfZW50 cmllcywKKwkJCQkJCQkgKChNZW1vaXplICopIHBsYW4pLT5lc3RfdW5pcXVlX2tleXMsCisJCQkJ CQkJICgoTWVtb2l6ZSAqKSBwbGFuKS0+ZXN0X2NhbGxzLAorCQkJCQkJCSAoKE1lbW9pemUgKikg cGxhbiktPmVzdF9oaXRfcmF0aW8gKiAxMDAuMCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlFeHBs YWluUHJvcGVydHlVSW50ZWdlcigiRXN0aW1hdGVkIENhcGFjaXR5IiwgTlVMTCwgKChNZW1vaXpl ICopIHBsYW4pLT5lc3RfZW50cmllcywgZXMpOworCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkVz dGltYXRlZCBEaXN0aW5jdCBMb29rdXAgS2V5cyIsIE5VTEwsICgoTWVtb2l6ZSAqKSBwbGFuKS0+ ZXN0X3VuaXF1ZV9rZXlzLCAwLCBlcyk7CisJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiRXN0aW1h dGVkIExvb2t1cHMiLCBOVUxMLCAoKE1lbW9pemUgKikgcGxhbiktPmVzdF9jYWxscywgMCwgZXMp OworCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkVzdGltYXRlZCBIaXQgUGVyY2VudCIsIE5VTEws ICgoTWVtb2l6ZSAqKSBwbGFuKS0+ZXN0X2hpdF9yYXRpbyAqIDEwMC4wLCAyLCBlcyk7CisJCX0K Kwl9CisKIAlwZnJlZShrZXlzdHIuZGF0YSk7CiAKIAlpZiAoIWVzLT5hbmFseXplKQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXggMWYwNGEyYzE4MmMuLjNhNjBjNTU4MDNj IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTI1NzIsNyArMjU3Miw3 IEBAIGNvc3RfbWVtb2l6ZV9yZXNjYW4oUGxhbm5lckluZm8gKnJvb3QsIE1lbW9pemVQYXRoICpt cGF0aCwKIAlDb3N0CQlpbnB1dF9zdGFydHVwX2Nvc3QgPSBtcGF0aC0+c3VicGF0aC0+c3RhcnR1 cF9jb3N0OwogCUNvc3QJCWlucHV0X3RvdGFsX2Nvc3QgPSBtcGF0aC0+c3VicGF0aC0+dG90YWxf Y29zdDsKIAlkb3VibGUJCXR1cGxlcyA9IG1wYXRoLT5zdWJwYXRoLT5yb3dzOwotCWRvdWJsZQkJ Y2FsbHMgPSBtcGF0aC0+Y2FsbHM7CisJZG91YmxlCQllc3RfY2FsbHMgPSBtcGF0aC0+ZXN0X2Nh bGxzOwogCWludAkJCXdpZHRoID0gbXBhdGgtPnN1YnBhdGgtPnBhdGh0YXJnZXQtPndpZHRoOwog CiAJZG91YmxlCQloYXNoX21lbV9ieXRlczsKQEAgLTI2MDQsNyArMjYwNCw3IEBAIGNvc3RfbWVt b2l6ZV9yZXNjYW4oUGxhbm5lckluZm8gKnJvb3QsIE1lbW9pemVQYXRoICptcGF0aCwKIAllc3Rf Y2FjaGVfZW50cmllcyA9IGZsb29yKGhhc2hfbWVtX2J5dGVzIC8gZXN0X2VudHJ5X2J5dGVzKTsK IAogCS8qIGVzdGltYXRlIG9uIHRoZSBkaXN0aW5jdCBudW1iZXIgb2YgcGFyYW1ldGVyIHZhbHVl cyAqLwotCW5kaXN0aW5jdCA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwgbXBhdGgtPnBhcmFt X2V4cHJzLCBjYWxscywgTlVMTCwKKwluZGlzdGluY3QgPSBlc3RpbWF0ZV9udW1fZ3JvdXBzKHJv b3QsIG1wYXRoLT5wYXJhbV9leHBycywgZXN0X2NhbGxzLCBOVUxMLAogCQkJCQkJCQkJJmVzdGlu Zm8pOwogCiAJLyoKQEAgLTI2MTYsNyArMjYxNiw3IEBAIGNvc3RfbWVtb2l6ZV9yZXNjYW4oUGxh bm5lckluZm8gKnJvb3QsIE1lbW9pemVQYXRoICptcGF0aCwKIAkgKiBjZXJ0YWlubHkgbWVhbiBh IE1lbW9pemVQYXRoIHdpbGwgbmV2ZXIgc3Vydml2ZSBhZGRfcGF0aCgpLgogCSAqLwogCWlmICgo ZXN0aW5mby5mbGFncyAmIFNFTEZMQUdfVVNFRF9ERUZBVUxUKSAhPSAwKQotCQluZGlzdGluY3Qg PSBjYWxsczsKKwkJbmRpc3RpbmN0ID0gZXN0X2NhbGxzOwogCiAJLyoKIAkgKiBTaW5jZSB3ZSd2 ZSBhbHJlYWR5IGVzdGltYXRlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcyB3ZSBjYW4K QEAgLTI2MzAsNiArMjYzMCw5IEBAIGNvc3RfbWVtb2l6ZV9yZXNjYW4oUGxhbm5lckluZm8gKnJv b3QsIE1lbW9pemVQYXRoICptcGF0aCwKIAltcGF0aC0+ZXN0X2VudHJpZXMgPSBNaW4oTWluKG5k aXN0aW5jdCwgZXN0X2NhY2hlX2VudHJpZXMpLAogCQkJCQkJCSBQR19VSU5UMzJfTUFYKTsKIAor CS8qIFJlbWVtYmVyIHRoZSBuZGlzdGluY3QgZXN0aW1hdGUgZm9yIEVYUExBSU4gKi8KKwltcGF0 aC0+ZXN0X3VuaXF1ZV9rZXlzID0gbmRpc3RpbmN0OworCiAJLyoKIAkgKiBXaGVuIHRoZSBudW1i ZXIgb2YgZGlzdGluY3QgcGFyYW1ldGVyIHZhbHVlcyBpcyBhYm92ZSB0aGUgYW1vdW50IHdlIGNh bgogCSAqIHN0b3JlIGluIHRoZSBjYWNoZSwgdGhlbiB3ZSdsbCBoYXZlIHRvIGV2aWN0IHNvbWUg ZW50cmllcyBmcm9tIHRoZQpAQCAtMjY0NCw5ICsyNjQ3LDEyIEBAIGNvc3RfbWVtb2l6ZV9yZXNj YW4oUGxhbm5lckluZm8gKnJvb3QsIE1lbW9pemVQYXRoICptcGF0aCwKIAkgKiBtdXN0IGxvb2sg YXQgaG93IG1hbnkgc2NhbnMgYXJlIGVzdGltYXRlZCBpbiB0b3RhbCBmb3IgdGhpcyBub2RlIGFu ZAogCSAqIGhvdyBtYW55IG9mIHRob3NlIHNjYW5zIHdlIGV4cGVjdCB0byBnZXQgYSBjYWNoZSBo aXQuCiAJICovCi0JaGl0X3JhdGlvID0gKChjYWxscyAtIG5kaXN0aW5jdCkgLyBjYWxscykgKgor CWhpdF9yYXRpbyA9ICgoZXN0X2NhbGxzIC0gbmRpc3RpbmN0KSAvIGVzdF9jYWxscykgKgogCQko ZXN0X2NhY2hlX2VudHJpZXMgLyBNYXgobmRpc3RpbmN0LCBlc3RfY2FjaGVfZW50cmllcykpOwog CisJLyogUmVtZW1iZXIgdGhlIGhpdCByYXRpbyBlc3RpbWF0ZSBmb3IgRVhQTEFJTiAqLworCW1w YXRoLT5lc3RfaGl0X3JhdGlvID0gaGl0X3JhdGlvOworCiAJQXNzZXJ0KGhpdF9yYXRpbyA+PSAw ICYmIGhpdF9yYXRpbyA8PSAxLjApOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2Ny ZWF0ZXBsYW4uYwppbmRleCA4YTlmMWQ3YTk0My4uMzMxYjBiNjZhNjkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKQEAgLTI4NCw3ICsyODQsOSBAQCBzdGF0aWMgTWF0 ZXJpYWwgKm1ha2VfbWF0ZXJpYWwoUGxhbiAqbGVmdHRyZWUpOwogc3RhdGljIE1lbW9pemUgKm1h a2VfbWVtb2l6ZShQbGFuICpsZWZ0dHJlZSwgT2lkICpoYXNob3BlcmF0b3JzLAogCQkJCQkJCSBP aWQgKmNvbGxhdGlvbnMsIExpc3QgKnBhcmFtX2V4cHJzLAogCQkJCQkJCSBib29sIHNpbmdsZXJv dywgYm9vbCBiaW5hcnlfbW9kZSwKLQkJCQkJCQkgdWludDMyIGVzdF9lbnRyaWVzLCBCaXRtYXBz ZXQgKmtleXBhcmFtaWRzKTsKKwkJCQkJCQkgdWludDMyIGVzdF9lbnRyaWVzLCBCaXRtYXBzZXQg KmtleXBhcmFtaWRzLAorCQkJCQkJCSBkb3VibGUgZXN0X2NhbGxzLCBkb3VibGUgZXN0X3VuaXF1 ZV9rZXlzLAorCQkJCQkJCSBkb3VibGUgZXN0X2hpdF9yYXRpbyk7CiBzdGF0aWMgV2luZG93QWdn ICptYWtlX3dpbmRvd2FnZyhMaXN0ICp0bGlzdCwgV2luZG93Q2xhdXNlICp3YywKIAkJCQkJCQkJ IGludCBwYXJ0TnVtQ29scywgQXR0ck51bWJlciAqcGFydENvbElkeCwgT2lkICpwYXJ0T3BlcmF0 b3JzLCBPaWQgKnBhcnRDb2xsYXRpb25zLAogCQkJCQkJCQkgaW50IG9yZE51bUNvbHMsIEF0dHJO dW1iZXIgKm9yZENvbElkeCwgT2lkICpvcmRPcGVyYXRvcnMsIE9pZCAqb3JkQ29sbGF0aW9ucywK QEAgLTE3NTMsNyArMTc1NSw4IEBAIGNyZWF0ZV9tZW1vaXplX3BsYW4oUGxhbm5lckluZm8gKnJv b3QsIE1lbW9pemVQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAogCXBsYW4gPSBtYWtlX21l bW9pemUoc3VicGxhbiwgb3BlcmF0b3JzLCBjb2xsYXRpb25zLCBwYXJhbV9leHBycywKIAkJCQkJ CWJlc3RfcGF0aC0+c2luZ2xlcm93LCBiZXN0X3BhdGgtPmJpbmFyeV9tb2RlLAotCQkJCQkJYmVz dF9wYXRoLT5lc3RfZW50cmllcywga2V5cGFyYW1pZHMpOworCQkJCQkJYmVzdF9wYXRoLT5lc3Rf ZW50cmllcywga2V5cGFyYW1pZHMsIGJlc3RfcGF0aC0+ZXN0X2NhbGxzLAorCQkJCQkJYmVzdF9w YXRoLT5lc3RfdW5pcXVlX2tleXMsIGJlc3RfcGF0aC0+ZXN0X2hpdF9yYXRpbyk7CiAKIAljb3B5 X2dlbmVyaWNfcGF0aF9pbmZvKCZwbGFuLT5wbGFuLCAoUGF0aCAqKSBiZXN0X3BhdGgpOwogCkBA IC02NzQ5LDcgKzY3NTIsOCBAQCBtYXRlcmlhbGl6ZV9maW5pc2hlZF9wbGFuKFBsYW4gKnN1YnBs YW4pCiBzdGF0aWMgTWVtb2l6ZSAqCiBtYWtlX21lbW9pemUoUGxhbiAqbGVmdHRyZWUsIE9pZCAq aGFzaG9wZXJhdG9ycywgT2lkICpjb2xsYXRpb25zLAogCQkJIExpc3QgKnBhcmFtX2V4cHJzLCBi b29sIHNpbmdsZXJvdywgYm9vbCBiaW5hcnlfbW9kZSwKLQkJCSB1aW50MzIgZXN0X2VudHJpZXMs IEJpdG1hcHNldCAqa2V5cGFyYW1pZHMpCisJCQkgdWludDMyIGVzdF9lbnRyaWVzLCBCaXRtYXBz ZXQgKmtleXBhcmFtaWRzLCBkb3VibGUgZXN0X2NhbGxzLAorCQkJIGRvdWJsZSBlc3RfdW5pcXVl X2tleXMsIGRvdWJsZSBlc3RfaGl0X3JhdGlvKQogewogCU1lbW9pemUgICAgKm5vZGUgPSBtYWtl Tm9kZShNZW1vaXplKTsKIAlQbGFuCSAgICpwbGFuID0gJm5vZGUtPnBsYW47CkBAIC02NzY3LDYg KzY3NzEsOSBAQCBtYWtlX21lbW9pemUoUGxhbiAqbGVmdHRyZWUsIE9pZCAqaGFzaG9wZXJhdG9y cywgT2lkICpjb2xsYXRpb25zLAogCW5vZGUtPmJpbmFyeV9tb2RlID0gYmluYXJ5X21vZGU7CiAJ bm9kZS0+ZXN0X2VudHJpZXMgPSBlc3RfZW50cmllczsKIAlub2RlLT5rZXlwYXJhbWlkcyA9IGtl eXBhcmFtaWRzOworCW5vZGUtPmVzdF9jYWxscyA9IGVzdF9jYWxsczsKKwlub2RlLT5lc3RfdW5p cXVlX2tleXMgPSBlc3RfdW5pcXVlX2tleXM7CisJbm9kZS0+ZXN0X2hpdF9yYXRpbyA9IGVzdF9o aXRfcmF0aW87CiAKIAlyZXR1cm4gbm9kZTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BhdGhub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRo bm9kZS5jCmluZGV4IDljYzYwMjc4OGVhLi4xODEyZWI1NTgyMSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wYXRobm9kZS5jCkBAIC0xNjg5LDcgKzE2ODksNyBAQCBjcmVhdGVfbWF0ZXJpYWxf cGF0aChSZWxPcHRJbmZvICpyZWwsIFBhdGggKnN1YnBhdGgpCiBNZW1vaXplUGF0aCAqCiBjcmVh dGVfbWVtb2l6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsIFBhdGgg KnN1YnBhdGgsCiAJCQkJCUxpc3QgKnBhcmFtX2V4cHJzLCBMaXN0ICpoYXNoX29wZXJhdG9ycywK LQkJCQkJYm9vbCBzaW5nbGVyb3csIGJvb2wgYmluYXJ5X21vZGUsIGRvdWJsZSBjYWxscykKKwkJ CQkJYm9vbCBzaW5nbGVyb3csIGJvb2wgYmluYXJ5X21vZGUsIGRvdWJsZSBlc3RfY2FsbHMpCiB7 CiAJTWVtb2l6ZVBhdGggKnBhdGhub2RlID0gbWFrZU5vZGUoTWVtb2l6ZVBhdGgpOwogCkBAIC0x NzEwLDcgKzE3MTAsNiBAQCBjcmVhdGVfbWVtb2l6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsIFBhdGggKnN1YnBhdGgsCiAJcGF0aG5vZGUtPnBhcmFtX2V4cHJzID0g cGFyYW1fZXhwcnM7CiAJcGF0aG5vZGUtPnNpbmdsZXJvdyA9IHNpbmdsZXJvdzsKIAlwYXRobm9k ZS0+YmluYXJ5X21vZGUgPSBiaW5hcnlfbW9kZTsKLQlwYXRobm9kZS0+Y2FsbHMgPSBjbGFtcF9y b3dfZXN0KGNhbGxzKTsKIAogCS8qCiAJICogRm9yIG5vdyB3ZSBzZXQgZXN0X2VudHJpZXMgdG8g MC4gIGNvc3RfbWVtb2l6ZV9yZXNjYW4oKSBkb2VzIGFsbCB0aGUKQEAgLTE3MjAsNiArMTcxOSwx MiBAQCBjcmVhdGVfbWVtb2l6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsIFBhdGggKnN1YnBhdGgsCiAJICovCiAJcGF0aG5vZGUtPmVzdF9lbnRyaWVzID0gMDsKIAor CXBhdGhub2RlLT5lc3RfY2FsbHMgPSBjbGFtcF9yb3dfZXN0KGVzdF9jYWxscyk7CisKKwkvKiBU aGVzZSB3aWxsIGFsc28gYmUgc2V0IGxhdGVyIGluIGNvc3RfbWVtb2l6ZV9yZXNjYW4oKSAqLwor CXBhdGhub2RlLT5lc3RfdW5pcXVlX2tleXMgPSAwOworCXBhdGhub2RlLT5lc3RfaGl0X3JhdGlv ID0gMDsKKwogCS8qIHdlIHNob3VsZCBub3QgZ2VuZXJhdGUgdGhpcyBwYXRoIHR5cGUgd2hlbiBl bmFibGVfbWVtb2l6ZT1mYWxzZSAqLwogCUFzc2VydChlbmFibGVfbWVtb2l6ZSk7CiAJcGF0aG5v ZGUtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBzdWJwYXRoLT5kaXNhYmxlZF9ub2RlczsKQEAgLTQy NTksNyArNDI2NCw3IEBAIHJlcGFyYW1ldGVyaXplX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFBh dGggKnBhdGgsCiAJCQkJCQkJCQkJCQkJbXBhdGgtPmhhc2hfb3BlcmF0b3JzLAogCQkJCQkJCQkJ CQkJCW1wYXRoLT5zaW5nbGVyb3csCiAJCQkJCQkJCQkJCQkJbXBhdGgtPmJpbmFyeV9tb2RlLAot CQkJCQkJCQkJCQkJCW1wYXRoLT5jYWxscyk7CisJCQkJCQkJCQkJCQkJbXBhdGgtPmVzdF9jYWxs cyk7CiAJCQl9CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXgg NjU2Nzc1OTU5NWQuLjQwMTY2ZTIyYTQ5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9w YXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMjEzMSwx MCArMjEzMSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBNZW1vaXplUGF0aAogCQkJCQkJCQkgKiBjb21w bGV0ZSBhZnRlciBjYWNoaW5nIHRoZSBmaXJzdCByZWNvcmQuICovCiAJYm9vbAkJYmluYXJ5X21v ZGU7CS8qIHRydWUgd2hlbiBjYWNoZSBrZXkgc2hvdWxkIGJlIGNvbXBhcmVkIGJpdAogCQkJCQkJ CQkgKiBieSBiaXQsIGZhbHNlIHdoZW4gdXNpbmcgaGFzaCBlcXVhbGl0eSBvcHMgKi8KLQlDYXJk aW5hbGl0eSBjYWxsczsJCQkvKiBleHBlY3RlZCBudW1iZXIgb2YgcmVzY2FucyAqLwogCXVpbnQz MgkJZXN0X2VudHJpZXM7CS8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIHRoYXQgdGhl CiAJCQkJCQkJCSAqIHBsYW5uZXIgZXhwZWN0cyB3aWxsIGZpdCBpbiB0aGUgY2FjaGUsIG9yIDAK IAkJCQkJCQkJICogaWYgdW5rbm93biAqLworCUNhcmRpbmFsaXR5IGVzdF9jYWxsczsJCS8qIGV4 cGVjdGVkIG51bWJlciBvZiByZXNjYW5zICovCisJQ2FyZGluYWxpdHkgZXN0X3VuaXF1ZV9rZXlz OwkvKiBlc3RpbWF0ZWQgdW5pcXVlIGtleXMsIGZvciBFWFBMQUlOICovCisJZG91YmxlCQllc3Rf aGl0X3JhdGlvOwkvKiBlc3RpbWF0ZWQgY2FjaGUgaGl0IHJhdGlvLCBmb3IgRVhQTEFJTiAqLwog fSBNZW1vaXplUGF0aDsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5u b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggNGY1OWUzMGQ2MmQu LjAwODMyODU3N2NjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAor KysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtMTA1Niw2ICsxMDU2LDE2IEBA IHR5cGVkZWYgc3RydWN0IE1lbW9pemUKIAogCS8qIHBhcmFtaWRzIGZyb20gcGFyYW1fZXhwcnMg Ki8KIAlCaXRtYXBzZXQgICprZXlwYXJhbWlkczsKKworCS8qIEVzdGltYXRlZCBudW1iZXIgb2Yg cmVzY2FucywgZm9yIEVYUExBSU4gKi8KKwlDYXJkaW5hbGl0eSBlc3RfY2FsbHM7CisKKwkvKiBF c3RpbWF0ZWQgbnVtYmVyIG9mIGRpc3RpbmN0IGxvb2t1cCBrZXlzLCBmb3IgRVhQTEFJTiAqLwor CUNhcmRpbmFsaXR5IGVzdF91bmlxdWVfa2V5czsKKworCS8qIEVzdGltYXRlZCBjYWNoZSBoaXQg cmF0aW8sIGZvciBFWFBMQUlOICovCisJZG91YmxlCQllc3RfaGl0X3JhdGlvOworCiB9IE1lbW9p emU7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGlt aXplci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKaW5kZXgg NjBkY2RiNzdlNDEuLjk1Zjk4YjBiYTQwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaApAQCAt OTAsNyArOTAsNyBAQCBleHRlcm4gTWVtb2l6ZVBhdGggKmNyZWF0ZV9tZW1vaXplX3BhdGgoUGxh bm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJTGlzdCAqaGFzaF9vcGVyYXRvcnMsCiAJCQkJCQkJ CQkJYm9vbCBzaW5nbGVyb3csCiAJCQkJCQkJCQkJYm9vbCBiaW5hcnlfbW9kZSwKLQkJCQkJCQkJ CQlkb3VibGUgY2FsbHMpOworCQkJCQkJCQkJCWRvdWJsZSBlc3RfY2FsbHMpOwogZXh0ZXJuIFVu aXF1ZVBhdGggKmNyZWF0ZV91bmlxdWVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsLAogCQkJCQkJCQkJICBQYXRoICpzdWJwYXRoLCBTcGVjaWFsSm9pbkluZm8gKnNqaW5m byk7CiBleHRlcm4gR2F0aGVyUGF0aCAqY3JlYXRlX2dhdGhlcl9wYXRoKFBsYW5uZXJJbmZvICpy b290LAotLSAKMi40My4wCgo= --000000000000a24f57063a77d8c0--