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.96) (envelope-from ) id 1wfLUV-005P81-1P for pgsql-bugs@arkaria.postgresql.org; Thu, 02 Jul 2026 17:46:23 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wfLUS-002Qtm-13 for pgsql-bugs@arkaria.postgresql.org; Thu, 02 Jul 2026 17:46:20 +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.96) (envelope-from ) id 1wfLUS-002Qtd-08 for pgsql-bugs@lists.postgresql.org; Thu, 02 Jul 2026 17:46:20 +0000 Received: from mail-yw1-x112e.google.com ([2607:f8b0:4864:20::112e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wfLUP-00000001OAW-2IWc for pgsql-bugs@postgresql.org; Thu, 02 Jul 2026 17:46:19 +0000 Received: by mail-yw1-x112e.google.com with SMTP id 00721157ae682-8111c0c7439so18985347b3.2 for ; Thu, 02 Jul 2026 10:46:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783014376; cv=none; d=google.com; s=arc-20260327; b=US3OQhgkqQe8e6JPbEwtNcWyYgMfqUhsS/PVezOVYsJcPXavAduc8RGiKxaSGMnfkk BwHBisLArXZ/yxQUpnQbgufYehZO+AX4sp3CVq5rs8heAymTWbzM/nRPsj6ymLF2RVUH GhaYtm6who5OKo/PBT6/qTJxwtCup8EkKIRD2Tcfot41yEPLQGYkbYpAPRmnwS3I4gDM wRVwf+oYhXyTH+a1sg0Zs+aRHmXKYBrgEgtgPps36Nu6kESEAz64yNuoy+Q8jdZh4+jf tpK90WokhH618S7mXuu5BJAmNjUGhgnOmrZsdvcg/ACVM2ckpH2C1lVJjvyPVnn+Pc2g Cg2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=LAbLM5BaFJdEWcQnasjbB8p7lWG2Q0gAEiicfqdWzM0=; fh=z+UWuD7I95mKgGi3OSaPqp2+mXLbIkVtd47tUV4yrGU=; b=p8OH35Fpm+q/Jnu2FfZ3pwSCJI3g9B99dxZG2f+9ucYdyDKXiAqyKMoLpYXysfmC69 CMwSd/7LCwMA/Ao8LblvdARHwqVaFZKG5Wa86JszXzGvRJt/mxw6CRGkEEowbx7bt8cB A3Ug12+zv7UQLLY3PHADMi08UNMzXq28iExv3CNALFtRYIT6HEc9JAWHIZnO5pgljz7M O/YDfAfl3v2ysZIDesVxAqGahEMHqk9iyY2t/7vW+/0euwUkEFSWGDqf3gGWfXwA/N1S FoYnWFiKg8KMlweSKBv6rO5k8DFWIgRMrnr3/PuYj5IJYB454bxQTwbxUlipZfXA6ffh d+8A==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783014376; x=1783619176; darn=postgresql.org; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:from:to:cc:subject:date:message-id:reply-to :content-type; bh=LAbLM5BaFJdEWcQnasjbB8p7lWG2Q0gAEiicfqdWzM0=; b=D5A+ezNw4zem4MZ6VpIDndxWPnyX9bRP4Quo5NbKK/3RYqLkHOYHvFJhLFc18zS3EC cLgOVDz74FP/d8/sfruqczI93LkhrWhXRelngMg31Cd7cTZsKDWiYHmumVzbeUiKkMNJ nyBAzhomSgD5FZ3lwiEuqymP8fd5kgAVAD/I8qG3xy9+sqMlEIRhKyWptZiOOxdbso3t 47nNX6gNrcy0i/S7fw35qSMV3FZYBGnyO0ay7R50cJRPJx6GjPVHJtS1VQLUf4jFX0DO Ajn2XDxPhi7hi98yAbR8SqYDMslws0ELRMngKhC9hnCKFfHLsaOCZHWyFyZP0D+7Eb9T ffow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783014376; x=1783619176; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to:content-type; bh=LAbLM5BaFJdEWcQnasjbB8p7lWG2Q0gAEiicfqdWzM0=; b=ABVKiSAoQWq/VGBffVeTpKRjsPcNM3JvizBQpI7tcRtY9bgUTE5s801fsx/XNt7FLO 6OmXwGaQQD97j+T47njwgB/3JCZGclFqczs3tb2FxKfQRbSXJeQ7G1vcCVazfSj7iZb8 1X2pJ2wA6tDBoFG6tYvpYD13EjaeCX6XrJaKiPWfsZ97fIPEBtChkwMFX657G9e7dVkf mwyN1YdagQyQsoJ0/CLpmb05x2Hm5Z2PCbLF9GD1/tBAWkbwd2THqZ00BB6G45Dt4+8j 6msIAys+7Wd4uYho8kpWeedPIJ8QYHAjqsYrLOhbqqEKvBHHHpZaTjG5KHrOVH7HDPnw fZKQ== X-Forwarded-Encrypted: i=1; AHgh+RoL5/8At4kWghKJBxnZG1oDH3DZ2+1si64wMTP6zJgO9NC9XREf8xc3p+mrgnZSRuJztODVY53ByWIf@postgresql.org X-Gm-Message-State: AOJu0YzSxH7oaSEp9cP+594gYteLgAMjzN/wsRwczzOg3cf7en8wGCkk B5kw77paxTSK2ukCcTUYdWX/v+iEQAFZQ6jxs+Qqbktc/U6qw4AQmOBeWKqfu5upxfFcHuzXOW4 YWydCc/5VopEfpM79apUegsZY+d+ZjOg= X-Gm-Gg: AfdE7cmCClqm+i37waXP0kUDKhMF0QEujawHoKjzVEh8szx0mwJZS3KbBQHfXaGSm/u 6ai54vyDz5bCUo35eC+KkBhIhTgVZx/ZGNG+5dsTC7JqcgcKxh+mvSSpVu3CdmUMkOwLP/UIGaO RmJiOWKS/mW499uVPh9Tkccm7efkQTvUSilhyPcFvfvVDSA3Qch99idZO47TouPak/g9plafEwH mt0GTLQ3Wcbhxagn2jCwdpcsz/hnSwagnGk23wjmTeHVyQKuwtYrqaYQQzV2BiPC/mVW8gdzTna bsyarFbGwmvvvqrZ+MEnQQtTBXkZ X-Received: by 2002:a05:690c:6811:b0:80c:cad:c4e5 with SMTP id 00721157ae682-81383e17228mr63885667b3.30.1783014375779; Thu, 02 Jul 2026 10:46:15 -0700 (PDT) MIME-Version: 1.0 References: <3748108.1783003096@sss.pgh.pa.us> <3756776.1783011257@sss.pgh.pa.us> In-Reply-To: <3756776.1783011257@sss.pgh.pa.us> From: Ayush Tiwari Date: Thu, 2 Jul 2026 23:16:04 +0530 X-Gm-Features: AVVi8Cd_5J2NSzWFbsm2sGMC5LRB3X6Wd3TTabHplmbU9Evl7S4eP8QggPzJKi4 Message-ID: Subject: Re: Fw:Re: Fw: gbt_var_consistent in contrib/btree_gist/btree_utils_var.c has internal-node type confusion on the <> strategy, bypassing exclusion constraints To: Tom Lane Cc: =?UTF-8?B?546L6LeD5p6X?= , pgsql-bugs , 3764353996 <3764353996@qq.com> Content-Type: multipart/mixed; boundary="0000000000007fa1140655a46221" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007fa1140655a46221 Content-Type: multipart/alternative; boundary="0000000000007fa1110655a4621f" --0000000000007fa1110655a4621f Content-Type: text/plain; charset="UTF-8" Hi, On Thu, 2 Jul 2026 at 22:24, Tom Lane wrote: > Ayush Tiwari writes: > > On Thu, 2 Jul 2026 at 20:08, Tom Lane wrote: > >> None of this passes the smell test for me. If it's unsafe to > >> call the type's f_eq function on a truncated key, how is it > >> any safer to call the f_cmp function? > > > I think the difference is that for bit/varbit f_eq and f_cmp aren't the > > same kind of function. f_eq is biteq (reads bit_len, does VARSIZE-8), > > while f_cmp is byteacmp (plain byte-wise, only needs the varlena > > header). > > Oh! You are right, the internal keys are *not* valid bit/varbit > values, just bytea. The level of non-documentation in this code > is staggering. > > So the actual API contract here is that f_eq etc. are to be used only > on leaf keys, while f_cmp is to be used only on internal keys. It's > not too surprising that whoever added NotEqual support didn't know > that, it being documented nowhere. > > It kind of looks actually like there's an expectation that all > internal keys are effectively bytea's; note the naming of > gbt_bytea_pf_match, despite the fact that it's applied to all > types under the purview of btree_utils_var.c. > > Anyway, I think part of our work here has got to be to raise the > level of documentation of this code. I've had it with having > to reverse-engineer details as fundamental as these. > I've added some documentation in code, patch attached. Please help reviewing if it looks good or should we be adding something more. Regards, Ayush --0000000000007fa1110655a4621f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

On Thu, 2 Jul 20= 26 at 22:24, Tom Lane <tgl@sss.pgh.= pa.us> wrote:
Ayush Tiwari <ayushtiwari.slg01@gmail.com> writes:
> On Thu, 2 Jul 2026 at 20:08, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> None of this passes the smell test for me.=C2=A0 If it's unsaf= e to
>> call the type's f_eq function on a truncated key, how is it >> any safer to call the f_cmp function?

> I think the difference is that for bit/varbit f_eq and f_cmp aren'= t the
> same kind of function.=C2=A0 f_eq is biteq (reads bit_len, does VARSIZ= E-8),
> while f_cmp is byteacmp (plain byte-wise, only needs the varlena
> header).

Oh!=C2=A0 You are right, the internal keys are *not* valid bit/varbit
values, just bytea.=C2=A0 The level of non-documentation in this code
is staggering.

So the actual API contract here is that f_eq etc. are to be used only
on leaf keys, while f_cmp is to be used only on internal keys.=C2=A0 It'= ;s
not too surprising that whoever added NotEqual support didn't know
that, it being documented nowhere.

It kind of looks actually like there's an expectation that all
internal keys are effectively bytea's; note the naming of
gbt_bytea_pf_match, despite the fact that it's applied to all
types under the purview of btree_utils_var.c.

Anyway, I think part of our work here has got to be to raise the
level of documentation of this code.=C2=A0 I've had it with having
to reverse-engineer details as fundamental as these.
<= br>I've added some documentation in code, patch attached.

Please= help reviewing if it looks good or should we be adding
something more.<= br>
Regards,
Ayush=C2=A0
--0000000000007fa1110655a4621f-- --0000000000007fa1140655a46221 Content-Type: application/octet-stream; name="v2-0001-Fix-btree_gist-strategy-on-internal-index-pages.patch" Content-Disposition: attachment; filename="v2-0001-Fix-btree_gist-strategy-on-internal-index-pages.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr3sne900 RnJvbSAxNWQ3OWMzNzdmM2IxODJhM2ZiMTJmYWI4NDBjZDM3OTIxMTYzMTEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBeXVzaCBUaXdhcmkgPGF5dXNodGl3YXJpLnNsZzAxQGdtYWls LmNvbT4KRGF0ZTogVGh1LCAyIEp1bCAyMDI2IDIzOjA5OjIzICswNTMwClN1YmplY3Q6IFtQQVRD SCB2Ml0gRml4IGJ0cmVlX2dpc3QgPD4gc3RyYXRlZ3kgb24gaW50ZXJuYWwgaW5kZXggcGFnZXMK CmdidF92YXJfY29uc2lzdGVudCgpIGhhbmRsZWQgdGhlIDw+IChCdHJlZUdpc3ROb3RFcXVhbCkg c3RyYXRlZ3kgd2l0aG91dApkaXN0aW5ndWlzaGluZyBsZWFmIGZyb20gaW50ZXJuYWwgcGFnZXMs IHVubGlrZSBldmVyeSBvdGhlciBzdHJhdGVneS4KSW50ZXJuYWwga2V5cyBhcmUgbG9zc3ksIHRy dW5jYXRlZCBwcmVmaXhlcywgYW5kIGZvciBiaXQvdmFyYml0IHRoZQpsZWFmLXRvLW5vZGUgdHJh bnNmb3JtIGRyb3BzIHRoZSBWYXJCaXQgbGVuZ3RoIGhlYWRlciwgc28gc3VjaCBhIGtleSBpcwpu b3QgYSB2YWxpZCB2YWx1ZSBvZiB0aGUgaW5kZXhlZCB0eXBlIC0tIGl0IGlzIGVmZmVjdGl2ZWx5 IGp1c3QgYSBieXRlYS4KClBhc3NpbmcgaXQgdG8gdGhlIHR5cGUncyBlcXVhbGl0eSBmdW5jdGlv biBpcyBhIHR5cGUgY29uZnVzaW9uLiAgRm9yCmJpdC92YXJiaXQgaXQgcmVhY2hlcyBiaXRfY21w KCksIHdoZXJlIFZBUkJJVEJZVEVTKCkgY29tcHV0ZXMgVkFSU0laRSAtIDg7CmEga2V5IHdpdGgg VkFSU0laRSA8IDggeWllbGRzIGEgbmVnYXRpdmUgbGVuZ3RoIHRoYXQsIHBhc3NlZCB0byBtZW1j bXAoKQphcyBzaXplX3QsIGJlY29tZXMgaHVnZSBhbmQgcmVhZHMgb3V0IG9mIGJvdW5kcyAoZXZl bnR1YWxseSBjcmFzaGluZyB0aGUKYmFja2VuZCkuCgpNYWtlIHRoZSA8PiBicmFuY2ggZGlzdGlu Z3Vpc2ggbGVhZiBhbmQgaW50ZXJuYWwgcGFnZXM6IG9uIGEgbGVhZiwgbmVnYXRlCnRoZSBlcXVh bGl0eSB0ZXN0IGFnYWluc3QgdGhlIHN0b3JlZCB2YWx1ZTsgb24gYW4gaW50ZXJuYWwgcGFnZSwg cmVjdXJzZQp1bmNvbmRpdGlvbmFsbHkgKGEgbm9uLWVxdWFsIHZhbHVlIGNhbiBhbHdheXMgZXhp c3QgYmVsb3cpLiAgVGhlIGZpeCBpcwppbiB0aGUgc2hhcmVkIGdidF92YXJfY29uc2lzdGVudCgp IGFuZCBzbyBjb3ZlcnMgZXZlcnkgdmFyaWFibGUtbGVuZ3RoCnR5cGUuCgpBbHNvIGRvY3VtZW50 IHRoZSBsZWFmLXZzLWludGVybmFsIGtleSBjb250cmFjdCBpbiBnYnRfdmFyX2NvbnNpc3RlbnQo KToKdGhlIHR5cGUtc3BlY2lmaWMgY2FsbGJhY2tzIChmX2VxL2ZfbHQvLi4uKSBtYXkgYmUgdXNl ZCBvbmx5IG9uIGxlYWYKa2V5cywgd2hpbGUgaW50ZXJuYWwga2V5cyBhcmUgZWZmZWN0aXZlbHkg Ynl0ZWEgYW5kIG11c3QgYmUgY29tcGFyZWQKb25seSB3aXRoIGZfY21wLiAgQWRkIGEgcmVncmVz c2lvbiB0ZXN0LgotLS0KIGNvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV91dGlsc192YXIuYyAgICAg IHwgMzAgKysrKysrKysrKysrKysrKysrKystLS0KIGNvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3Rl ZC9ub3RfZXF1YWwub3V0IHwgMjQgKysrKysrKysrKysrKysrKysrCiBjb250cmliL2J0cmVlX2dp c3Qvc3FsL25vdF9lcXVhbC5zcWwgICAgICB8IDE4ICsrKysrKysrKysrKysrCiAzIGZpbGVzIGNo YW5nZWQsIDY5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29u dHJpYi9idHJlZV9naXN0L2J0cmVlX3V0aWxzX3Zhci5jIGIvY29udHJpYi9idHJlZV9naXN0L2J0 cmVlX3V0aWxzX3Zhci5jCmluZGV4IDI1YzNiYmU4ZWFjLi44YmVjZjY4ZjMxYyAxMDA2NDQKLS0t IGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX3V0aWxzX3Zhci5jCisrKyBiL2NvbnRyaWIvYnRy ZWVfZ2lzdC9idHJlZV91dGlsc192YXIuYwpAQCAtNTU4LDcgKzU1OCwyMyBAQCBnYnRfdmFyX3Bp Y2tzcGxpdChjb25zdCBHaXN0RW50cnlWZWN0b3IgKmVudHJ5dmVjLCBHSVNUX1NQTElUVkVDICp2 LAogCiAKIC8qCi0gKiBUaGUgR2lTVCBjb25zaXN0ZW50IG1ldGhvZAorICogVGhlIEdpU1QgY29u c2lzdGVudCBtZXRob2QuCisgKgorICogVGhlIHN0b3JlZCBrZXkgaGFzIHR3byBmb3Jtcywgd2l0 aCBkaWZmZXJlbnQgcnVsZXM6CisgKgorICogLSBMZWFmIGtleXMgKGtleS0+bG93ZXIgPT0ga2V5 LT51cHBlcikgYXJlIGdlbnVpbmUgdmFsdWVzIG9mIHRoZSBpbmRleGVkCisgKiAgIHR5cGUsIHNv IHRoZSB0eXBlLXNwZWNpZmljIGNhbGxiYWNrcyAoZl9lcS9mX2x0L2ZfbGUvZl9ndC9mX2dlKSBt YXkgYmUKKyAqICAgdXNlZCBvbiB0aGVtLgorICoKKyAqIC0gSW50ZXJuYWwga2V5cyBhcmUgYSBs b3NzeSBbbG93ZXIsIHVwcGVyXSByYW5nZSB3aG9zZSBib3VuZHMgYXJlIHRydW5jYXRlZAorICog ICBwcmVmaXhlcyAoc2VlIGdidF92YXJfbm9kZV90cnVuY2F0ZSkuICBUaGV5IGFyZSBlZmZlY3Rp dmVseSBqdXN0IGJ5dGVhLAorICogICBub3QgbmVjZXNzYXJpbHkgdmFsaWQgdmFsdWVzIG9mIHRo ZSBpbmRleGVkIHR5cGUgLS0gZS5nLiBmb3IgYml0L3ZhcmJpdAorICogICB0aGUgbGVhZi10by1u b2RlIHRyYW5zZm9ybSBkcm9wcyB0aGUgbGVuZ3RoIGhlYWRlci4gIFNvIG9ubHkgZl9jbXAgKGEg cmF3CisgKiAgIGJ5dGUgY29tcGFyZSkgYW5kIHRoZSBwcmVmaXgtbWF0Y2ggaGVscGVycyBtYXkg YmUgYXBwbGllZCB0byBpbnRlcm5hbAorICogICBrZXlzOyB0aGUgdHlwZS1zcGVjaWZpYyBmX2Vx L2ZfbHQvLi4uIGNhbGxiYWNrcyBtdXN0IG5vdCBiZS4KKyAqCisgKiBUaGUgbGVhZi1wYWdlIHRl c3RzIHVzZSB0aGUgbWlycm9yIGNhbGxiYWNrIHdpdGggc3dhcHBlZCBvcGVyYW5kcyAoZS5nLgor ICogZl9ndChxdWVyeSwgbG93ZXIpIG1lYW5zICJsb3dlciA8IHF1ZXJ5IiksIHdoaWNoIGlzIHdo eSB0aGV5IGxvb2sgcmV2ZXJzZWQuCiAgKi8KIGJvb2wKIGdidF92YXJfY29uc2lzdGVudChHQlRf VkFSS0VZX1IgKmtleSwKQEAgLTYxMSw4ICs2MjcsMTYgQEAgZ2J0X3Zhcl9jb25zaXN0ZW50KEdC VF9WQVJLRVlfUiAqa2V5LAogCQkJCQl8fCBnYnRfdmFyX25vZGVfcGZfbWF0Y2goa2V5LCBxdWVy eSwgdGluZm8pOwogCQkJYnJlYWs7CiAJCWNhc2UgQnRyZWVHaXN0Tm90RXF1YWxTdHJhdGVneU51 bWJlcjoKLQkJCXJldHZhbCA9ICEodGluZm8tPmZfZXEocXVlcnksIGtleS0+bG93ZXIsIGNvbGxh dGlvbiwgZmxpbmZvKSAmJgotCQkJCQkgICB0aW5mby0+Zl9lcShxdWVyeSwga2V5LT51cHBlciwg Y29sbGF0aW9uLCBmbGluZm8pKTsKKworCQkJLyoKKwkJCSAqIE9uIGEgbGVhZiwgIm5vdCBlcXVh bCIgaXMgdGhlIG5lZ2F0aW9uIG9mIGVxdWFsaXR5LiAgT24gYW4KKwkJCSAqIGludGVybmFsIHBh Z2Ugd2UgbXVzdCBub3QgY2FsbCBmX2VxIChzZWUgYWJvdmUpOyBhIG5vbi1lcXVhbAorCQkJICog dmFsdWUgY2FuIGFsd2F5cyBleGlzdCBiZWxvdywgc28ganVzdCByZWN1cnNlLgorCQkJICovCisJ CQlpZiAoaXNfbGVhZikKKwkJCQlyZXR2YWwgPSAhdGluZm8tPmZfZXEocXVlcnksIGtleS0+bG93 ZXIsIGNvbGxhdGlvbiwgZmxpbmZvKTsKKwkJCWVsc2UKKwkJCQlyZXR2YWwgPSB0cnVlOwogCQkJ YnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR2YWwgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL2NvbnRy aWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9ub3RfZXF1YWwub3V0IGIvY29udHJpYi9idHJlZV9naXN0 L2V4cGVjdGVkL25vdF9lcXVhbC5vdXQKaW5kZXggODViMWU4NjhhODcuLjkyMjk1MGUwYzJmIDEw MDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvbm90X2VxdWFsLm91dAorKysg Yi9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvbm90X2VxdWFsLm91dApAQCAtMzksMyArMzks MjcgQEAgSU5TRVJUIElOVE8gem9vIFZBTFVFUygxMjMsICdsaW9uJyk7CiBFUlJPUjogIGNvbmZs aWN0aW5nIGtleSB2YWx1ZSB2aW9sYXRlcyBleGNsdXNpb24gY29uc3RyYWludCAiem9vX2NhZ2Vf YW5pbWFsX2V4Y2wiCiBERVRBSUw6ICBLZXkgKGNhZ2UsIGFuaW1hbCk9KDEyMywgbGlvbikgY29u ZmxpY3RzIHdpdGggZXhpc3Rpbmcga2V5IChjYWdlLCBhbmltYWwpPSgxMjMsIHplYnJhKS4KIElO U0VSVCBJTlRPIHpvbyBWQUxVRVMoMTI0LCAnbGlvbicpOworLS0gQSA8PiBzZWFyY2ggbXVzdCBk ZXNjZW5kIGludGVybmFsIHBhZ2VzIGluc3RlYWQgb2YgY29tcGFyaW5nIHRoZSBxdWVyeSB0byBh CistLSB0cnVuY2F0ZWQgaW50ZXJuYWwga2V5LiAgVXNlIGEgbXVsdGktbGV2ZWwgaW5kZXggYW5k IGNoZWNrIGl0IGFncmVlcyB3aXRoIHNlcSBzY2FuLgorQ1JFQVRFIFRBQkxFIGJpdG5lIChhIGJp dCg4KSk7CitJTlNFUlQgSU5UTyBiaXRuZSBTRUxFQ1QgKGcgJSAyNTYpOjpiaXQoOCkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMjAwMDApIGc7CitDUkVBVEUgSU5ERVggYml0bmVfaWR4IE9OIGJp dG5lIFVTSU5HIGdpc3QgKGEpOworU0VUIGVuYWJsZV9zZXFzY2FuIHRvIG9uOworU0VUIGVuYWJs ZV9pbmRleHNjYW4gdG8gb2ZmOworU0VUIGVuYWJsZV9iaXRtYXBzY2FuIHRvIG9mZjsKK1NFTEVD VCBjb3VudCgqKSBGUk9NIGJpdG5lIFdIRVJFIGEgPD4gQicwMDAwMDAwMCc7CisgY291bnQgCist LS0tLS0tCisgMTk5MjIKKygxIHJvdykKKworU0VUIGVuYWJsZV9zZXFzY2FuIHRvIG9mZjsKK1NF VCBlbmFibGVfaW5kZXhzY2FuIHRvIG9uOworU0VUIGVuYWJsZV9iaXRtYXBzY2FuIHRvIG9uOwor U0VMRUNUIGNvdW50KCopIEZST00gYml0bmUgV0hFUkUgYSA8PiBCJzAwMDAwMDAwJzsKKyBjb3Vu dCAKKy0tLS0tLS0KKyAxOTkyMgorKDEgcm93KQorCitEUk9QIFRBQkxFIGJpdG5lOwpkaWZmIC0t Z2l0IGEvY29udHJpYi9idHJlZV9naXN0L3NxbC9ub3RfZXF1YWwuc3FsIGIvY29udHJpYi9idHJl ZV9naXN0L3NxbC9ub3RfZXF1YWwuc3FsCmluZGV4IDZkZmFjNWQwYWFlLi5lY2IxMzVmNDdkMiAx MDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L3NxbC9ub3RfZXF1YWwuc3FsCisrKyBiL2Nv bnRyaWIvYnRyZWVfZ2lzdC9zcWwvbm90X2VxdWFsLnNxbApAQCAtMzQsMyArMzQsMjEgQEAgSU5T RVJUIElOVE8gem9vIFZBTFVFUygxMjMsICd6ZWJyYScpOwogSU5TRVJUIElOVE8gem9vIFZBTFVF UygxMjMsICd6ZWJyYScpOwogSU5TRVJUIElOVE8gem9vIFZBTFVFUygxMjMsICdsaW9uJyk7CiBJ TlNFUlQgSU5UTyB6b28gVkFMVUVTKDEyNCwgJ2xpb24nKTsKKworLS0gQSA8PiBzZWFyY2ggbXVz dCBkZXNjZW5kIGludGVybmFsIHBhZ2VzIGluc3RlYWQgb2YgY29tcGFyaW5nIHRoZSBxdWVyeSB0 byBhCistLSB0cnVuY2F0ZWQgaW50ZXJuYWwga2V5LiAgVXNlIGEgbXVsdGktbGV2ZWwgaW5kZXgg YW5kIGNoZWNrIGl0IGFncmVlcyB3aXRoIHNlcSBzY2FuLgorQ1JFQVRFIFRBQkxFIGJpdG5lIChh IGJpdCg4KSk7CitJTlNFUlQgSU5UTyBiaXRuZSBTRUxFQ1QgKGcgJSAyNTYpOjpiaXQoOCkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwMDApIGc7CitDUkVBVEUgSU5ERVggYml0bmVfaWR4IE9O IGJpdG5lIFVTSU5HIGdpc3QgKGEpOworCitTRVQgZW5hYmxlX3NlcXNjYW4gdG8gb247CitTRVQg ZW5hYmxlX2luZGV4c2NhbiB0byBvZmY7CitTRVQgZW5hYmxlX2JpdG1hcHNjYW4gdG8gb2ZmOwor U0VMRUNUIGNvdW50KCopIEZST00gYml0bmUgV0hFUkUgYSA8PiBCJzAwMDAwMDAwJzsKKworU0VU IGVuYWJsZV9zZXFzY2FuIHRvIG9mZjsKK1NFVCBlbmFibGVfaW5kZXhzY2FuIHRvIG9uOworU0VU IGVuYWJsZV9iaXRtYXBzY2FuIHRvIG9uOworU0VMRUNUIGNvdW50KCopIEZST00gYml0bmUgV0hF UkUgYSA8PiBCJzAwMDAwMDAwJzsKKworRFJPUCBUQUJMRSBiaXRuZTsKLS0gCjIuMzQuMQoK --0000000000007fa1140655a46221--