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.98.2) (envelope-from ) id 1xCXzK-00000003r92-3Opu for pgsql-bugs@arkaria.postgresql.org; Fri, 02 Oct 2026 07:47:27 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.98.2) (envelope-from ) id 1xCXzJ-0000000AtIw-2DPh for pgsql-bugs@arkaria.postgresql.org; Fri, 02 Oct 2026 07:47:25 +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.98.2) (envelope-from ) id 1xCXzJ-0000000AtIn-0EP2 for pgsql-bugs@lists.postgresql.org; Fri, 02 Oct 2026 07:47:25 +0000 Received: from mail.w14.tutanota.de ([185.205.69.214]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1xCXzE-00000002PMA-0O3j for pgsql-bugs@lists.postgresql.org; Fri, 02 Oct 2026 07:47:24 +0000 Received: from tutadb.w10.tutanota.de (w10.api.tuta.com [IPv6:fd:ac::d:10]) by mail.w14.tutanota.de (Postfix) with ESMTP id 0B18D18E52A4B for ; Fri, 2 Oct 2026 09:47:19 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1790927238; s=s1; d=rhyadav.dev; h=From:From:To:To:Subject:Subject:Content-Description:Content-ID:Content-Type:Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:In-Reply-To:In-Reply-To:MIME-Version:MIME-Version:Message-ID:Message-ID:Reply-To:References:References:Sender; bh=pQW13plaPID6zm/T4x7fKRaek64JB22o2CTTU6/BthM=; b=4AsB5TYOqxTG518c3KGFqacu+13QigwrPxvoOPHqEiTAg5WZZi+Y/BzsP2mzl9en h2097x1QOkP+p6BiPpofcGM7E21Xu+BsLRcD1XavUXrs07WliFDDhMuGZuSyQ18BOcO FKa5kHi6xRHPgOLh+O3dDOERyM1nsjcFpfKKN1nQAXWurkZVCFf4cEGslvkiM/XDl32 XjYjjF+9ssZbImU/q4l0F8R3kMegAGLxAkusFNJZunl+JLqny/g4XSesko5Y8mFzu1L xXOuOBGkIjyrr6RLqtdBcG8jf/h0Lf2XjHicKWCvYQaNKdj9yiusovWkLzr+dxNlhrh 45riMzwFBg== Date: Fri, 2 Oct 2026 09:47:18 +0200 (CEST) From: rahul@rhyadav.dev To: Samuel Olaoye Cc: Pgsql Bugs Message-ID: In-Reply-To: <179087936257.78721.1170374394656748858@mail.gmail.com> References: <179087936257.78721.1170374394656748858@mail.gmail.com> Subject: Re: Wrong results: hashed SubPlan referenced twice after OR-qual extraction reuses a stale hash table (13 to 19beta4) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_114911_577158097.1790927239039" Feedback-ID: 01f8c5108c48fea26a092a077590a8fcdbfcdbb733bc38e3db5db9540fc242b99227bb05256e786b1fc713cdb05f073377d63f8aec9e32cbf77d26f42c5d89118b:TurnOnPrivacy!:tutamail List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk ------=_Part_114911_577158097.1790927239039 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Samuel, Thanks for the detailed report and the reproduction. I can reproduce it on master (45277ca0d1): Q1 returns (2, f), Q2 returns (2, t), and the plan has the same hashed SubPlan in both the t_channels scan filter and the join filter, with loops=3D3 on the t_follows scan. Your reading of the executor is right; I confirmed it by adding temporary logging to ExecHashSubPlan().=C2=A0 Both references get their own SubPlanState and hash table, but share the subplan's PlanState. For the second outer row (viewer 502): =C2=A0 scan filter:=C2=A0 has a hash table, chgParam set=C2=A0=C2=A0 -> reb= uilds it =C2=A0 join filter:=C2=A0 has a hash table, chgParam clear -> keeps the tab= le =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 built for viewer 501, so channel 2 isn't found buildSubPlanHash() calls ExecReScan() on the shared PlanState, which clears its chgParam, so the join filter's SubPlanState never sees that the parameter changed. This isn't specific to the EXISTS-to-ANY conversion.=C2=A0 A similar query with a plain correlated IN gives the same wrong result on master: =C2=A0 select s.id, =C2=A0=C2=A0=C2=A0 exists (select 1 from t_posts p =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 join t_channels c on c.id =3D p.channel_id =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 wh= ere p.id =3D s.post_id =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 and (c.owner_id =3D s.viewer_id =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 or (p.status =3D 'published' =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 and c.id in= (select f.channel_id =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 from t_follows f =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 wh= ere f.user_id =3D s.viewer_id)))) =C2=A0=C2=A0=C2=A0 from t_sessions s order by s.id; The attached patch gives each SubPlanState its own flag marking its hash table as stale.=C2=A0 ExecReScan() sets it where it propagates chgParam to the node's subplans, ExecHashSubPlan() rebuilds the table when it is set, and buildSubPlanHash() clears it.=C2=A0 With the patch, both queries return (2, t) and the t_follows scan shows loops=3D4.=C2=A0 The patch adds a test to subselect.sql that fails without the fix, and the regression, isolation and contrib tests pass (I haven't run the TAP tests). I went for an executor fix rather than changing extract_restriction_or_clauses(), because the same subplan being referenced from more than one place is already expected elsewhere: ExplainSubPlans() notes that several SubPlan nodes can reference the same subplan from different plan nodes, e.g. a bitmap index scan's indexqual and its parent heap scan's recheck qual.=C2=A0 Giving each reference its own PlanState would also work, but seems much more invasive. The new bool goes into the alignment padding after havenullrows, so sizeof(SubPlanState) and the offsets of the other fields don't change (checked on a 64-bit build of master; the layout around it is the same in 14-18), which should keep it safe to back-patch.=C2=A0 The code changes apply to REL_19_STABLE as is; 14-18 need small adjustments, so I'll post tested back-branch versions next. Regards, Rahul Yadav ------=_Part_114911_577158097.1790927239039 Content-Type: application/octet-stream; name=v1-0001-Fix-reuse-of-stale-hash-tables-by-duplicated-hash.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v1-0001-Fix-reuse-of-stale-hash-tables-by-duplicated-hash.patch RnJvbSBlMGM5NzgyOWIwZTU2YmNmZmFjOWZlYzcwZjYzODBjZjAxMTA1ZWM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWh1bCBZYWRhdiA8cmFodWxAcmh5YWRhdi5kZXY+CkRhdGU6 IEZyaSwgMiBPY3QgMjAyNiAwODoxOToxMSArMDEwMApTdWJqZWN0OiBbUEFUQ0ggdjFdIEZpeCBy ZXVzZSBvZiBzdGFsZSBoYXNoIHRhYmxlcyBieSBkdXBsaWNhdGVkIGhhc2hlZAogU3ViUGxhbnMK ClRoZSBzYW1lIFN1YlBsYW4gY2FuIGFwcGVhciBtb3JlIHRoYW4gb25jZSBpbiBhIHBsYW4gdHJl ZS4gIEZvcgpleGFtcGxlLCB3aGVuIGV4dHJhY3RfcmVzdHJpY3Rpb25fb3JfY2xhdXNlcygpIGV4 dHJhY3RzIGEgcmVzdHJpY3Rpb24KY2xhdXNlIGZvciBvbmUgcmVsYXRpb24gZnJvbSBhIGpvaW4g T1IgY2xhdXNlLCBhIFN1YlBsYW4gaW4gdGhlCmV4dHJhY3RlZCBzdWItY2xhdXNlcyBlbmRzIHVw IGJvdGggaW4gdGhlIG5ldyByZXN0cmljdGlvbiBjbGF1c2UgYW5kCmluIHRoZSBvcmlnaW5hbCBq b2luIGNsYXVzZS4gIEVhY2ggcmVmZXJlbmNlIGdldHMgaXRzIG93bgpTdWJQbGFuU3RhdGUsIGJ1 dCB0aGV5IGFsbCBzaGFyZSB0aGUgc3VicGxhbidzIFBsYW5TdGF0ZS4KCkEgaGFzaGVkIFN1YlBs YW4gd2hvc2Ugc3VicXVlcnkgcmVmZXJlbmNlcyBvdXRlciBxdWVyeSBsZXZlbHMgbXVzdApyZWJ1 aWxkIGl0cyBoYXNoIHRhYmxlIHdoZW5ldmVyIHRob3NlIHBhcmFtZXRlcnMgY2hhbmdlLgpFeGVj SGFzaFN1YlBsYW4oKSBkZXRlY3RlZCB0aGF0IGJ5IGNoZWNraW5nIGNoZ1BhcmFtIG9mIHRoZSBz dWJwbGFuJ3MKUGxhblN0YXRlLiAgQnV0IGJ1aWxkU3ViUGxhbkhhc2goKSByZXNjYW5zIHRoYXQg UGxhblN0YXRlLCB3aGljaApjbGVhcnMgaXRzIGNoZ1BhcmFtLCBzbyBhZnRlciBvbmUgU3ViUGxh blN0YXRlIGhhZCByZWJ1aWx0IGl0cyBoYXNoCnRhYmxlLCB0aGUgb3RoZXJzIG5vIGxvbmdlciBz YXcgdGhlIGNoYW5nZSBhbmQga2VwdCBwcm9iaW5nIGhhc2gKdGFibGVzIGJ1aWx0IGZvciBwcmV2 aW91cyBwYXJhbWV0ZXIgdmFsdWVzLCBwcm9kdWNpbmcgd3JvbmcgcXVlcnkKcmVzdWx0cy4KClRv IGZpeCwgZ2l2ZSBlYWNoIFN1YlBsYW5TdGF0ZSBpdHMgb3duIGZsYWcgdG8gbWFyayBpdHMgaGFz aCB0YWJsZSBhcwpzdGFsZS4gIEV4ZWNSZVNjYW4oKSBzZXRzIGl0LCBhbG9uZ3NpZGUgcHJvcGFn YXRpbmcgY2hnUGFyYW0gdG8gdGhlCm5vZGUncyBzdWJwbGFucywgYW5kIGJ1aWxkU3ViUGxhbkhh c2goKSBjbGVhcnMgaXQuCgpSZXBvcnRlZC1ieTogU2FtdWVsIE9sYW95ZSA8ZGFwc2FsbXlAZ21h aWwuY29tPgpBdXRob3I6IFJhaHVsIFlhZGF2IDxyYWh1bEByaHlhZGF2LmRldj4KRGlzY3Vzc2lv bjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8xNzkwODc5MzYyNTcuNzg3MjEuMTE3MDM3NDM5NDY1Njc0 ODg1OEBtYWlsLmdtYWlsLmNvbQpCYWNrcGF0Y2gtdGhyb3VnaDogMTQKLS0tCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjQW1pLmMgICAgICAgICAgfCAgOSArKysrKwogc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZVN1YnBsYW4uYyAgICAgIHwgMTIgKysrKystCiBzcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaCAgICAgICAgICAgfCAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1 YnNlbGVjdC5vdXQgfCA1MSArKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdy ZXNzL3NxbC9zdWJzZWxlY3Quc3FsICAgICAgfCAzMSArKysrKysrKysrKysrKysKIDUgZmlsZXMg Y2hhbmdlZCwgMTAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0FtaS5jCmluZGV4IDM3ZmUwM2ZkYzMuLmE4NDNhNWRjZmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1p LmMKQEAgLTExNiw2ICsxMTYsMTUgQEAgRXhlY1JlU2NhbihQbGFuU3RhdGUgKm5vZGUpCiAKIAkJ CWlmIChzcGxhbi0+cGxhbi0+ZXh0UGFyYW0gIT0gTlVMTCkKIAkJCQlVcGRhdGVDaGFuZ2VkUGFy YW1TZXQoc3BsYW4sIG5vZGUtPmNoZ1BhcmFtKTsKKworCQkJLyoKKwkJCSAqIEFsc28gbWFyayB0 aGlzIFN1YlBsYW5TdGF0ZSdzIGhhc2ggdGFibGUsIGlmIGFueSwgYXMgc3RhbGUuIFRoZQorCQkJ ICogc3VicGxhbidzIGNoZ1BhcmFtIGlzbid0IGVub3VnaCwgc2luY2UgdGhlIHN1YnBsYW4gbWF5 IGJlCisJCQkgKiBzaGFyZWQgd2l0aCBvdGhlciBTdWJQbGFuU3RhdGVzLCBhbmQgYnVpbGRpbmcg b25lIG9mIHRoZWlyIGhhc2gKKwkJCSAqIHRhYmxlcyByZXNjYW5zIHRoZSBzdWJwbGFuIGFuZCBj bGVhcnMgaXRzIGNoZ1BhcmFtLgorCQkJICovCisJCQlpZiAoc3BsYW4tPmNoZ1BhcmFtICE9IE5V TEwpCisJCQkJc3N0YXRlLT5oYXNodGFibGVzdGFsZSA9IHRydWU7CiAJCX0KIAkJLyogV2VsbC4g Tm93IHNldCBjaGdQYXJhbSBmb3IgY2hpbGQgdHJlZXMuICovCiAJCWlmIChvdXRlclBsYW5TdGF0 ZShub2RlKSAhPSBOVUxMKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVN1 YnBsYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTdWJwbGFuLmMKaW5kZXggYzZkZDQ2 M2MxMS4uYmM5NGMxZThlOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVN1 YnBsYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU3VicGxhbi5jCkBAIC0xMTAs OSArMTEwLDE1IEBAIEV4ZWNIYXNoU3ViUGxhbihTdWJQbGFuU3RhdGUgKm5vZGUsCiAKIAkvKgog CSAqIElmIGZpcnN0IHRpbWUgdGhyb3VnaCBvciB3ZSBuZWVkIHRvIHJlc2NhbiB0aGUgc3VicGxh biwgYnVpbGQgdGhlIGhhc2gKLQkgKiB0YWJsZS4KKwkgKiB0YWJsZS4gIHBsYW5zdGF0ZS0+Y2hn UGFyYW0gYWxvbmUgaXNuJ3QgZW5vdWdoIHRvIGRldGVjdCB0aGUgbGF0dGVyOiBpZgorCSAqIHRo ZSBzYW1lIFN1YlBsYW4gYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiB0aGUgcGxhbiB0cmVlLCBh bGwgaXRzCisJICogU3ViUGxhblN0YXRlcyBzaGFyZSBvbmUgcGxhbnN0YXRlLCBhbmQgYnVpbGRp bmcgYW55IG9mIHRoZWlyIGhhc2gKKwkgKiB0YWJsZXMgcmVzY2FucyBpdCBhbmQgY2xlYXJzIGl0 cyBjaGdQYXJhbS4gIFNvIHdlIGFsc28gY2hlY2sgb3VyIG93bgorCSAqIGhhc2h0YWJsZXN0YWxl IGZsYWcsIHdoaWNoIGlzIHNldCB3aGVuIG91ciBwYXJlbnQgbm9kZSBpcyByZXNjYW5uZWQKKwkg KiB3aXRoIGNoYW5nZWQgcGFyYW1ldGVycy4KIAkgKi8KLQlpZiAobm9kZS0+aGFzaHRhYmxlID09 IE5VTEwgfHwgcGxhbnN0YXRlLT5jaGdQYXJhbSAhPSBOVUxMKQorCWlmIChub2RlLT5oYXNodGFi bGUgPT0gTlVMTCB8fCBub2RlLT5oYXNodGFibGVzdGFsZSB8fAorCQlwbGFuc3RhdGUtPmNoZ1Bh cmFtICE9IE5VTEwpCiAJCWJ1aWxkU3ViUGxhbkhhc2gobm9kZSwgZWNvbnRleHQpOwogCiAJLyoK QEAgLTUwNSw2ICs1MTEsNyBAQCBidWlsZFN1YlBsYW5IYXNoKFN1YlBsYW5TdGF0ZSAqbm9kZSwg RXhwckNvbnRleHQgKmVjb250ZXh0KQogCSAqLwogCW5vZGUtPmhhdmVoYXNocm93cyA9IGZhbHNl OwogCW5vZGUtPmhhdmVudWxscm93cyA9IGZhbHNlOworCW5vZGUtPmhhc2h0YWJsZXN0YWxlID0g ZmFsc2U7CiAKIAluZW50cmllcyA9IHBsYW5zdGF0ZS0+cGxhbi0+cGxhbl9yb3dzOwogCkBAIC04 ODEsNiArODg4LDcgQEAgRXhlY0luaXRTdWJQbGFuKFN1YlBsYW4gKnN1YnBsYW4sIFBsYW5TdGF0 ZSAqcGFyZW50KQogCXNzdGF0ZS0+cHJvalJpZ2h0ID0gTlVMTDsKIAlzc3RhdGUtPmhhc2h0YWJs ZSA9IE5VTEw7CiAJc3N0YXRlLT5oYXNobnVsbHMgPSBOVUxMOworCXNzdGF0ZS0+aGFzaHRhYmxl c3RhbGUgPSBmYWxzZTsKIAlzc3RhdGUtPnR1cGxlc0NvbnRleHQgPSBOVUxMOwogCXNzdGF0ZS0+ aW5uZXJlY29udGV4dCA9IE5VTEw7CiAJc3N0YXRlLT5rZXlDb2xJZHggPSBOVUxMOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaAppbmRleCA5MWJiMGJkMmUxLi5iMmQ3YmYzNzU2IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9k ZXMuaApAQCAtMTAzNyw2ICsxMDM3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgU3ViUGxhblN0YXRlCiAJ VHVwbGVIYXNoVGFibGUgaGFzaG51bGxzOwkvKiBoYXNoIHRhYmxlIGZvciByb3dzIHdpdGggbnVs bChzKSAqLwogCWJvb2wJCWhhdmVoYXNocm93czsJLyogdHJ1ZSBpZiBoYXNodGFibGUgaXMgbm90 IGVtcHR5ICovCiAJYm9vbAkJaGF2ZW51bGxyb3dzOwkvKiB0cnVlIGlmIGhhc2hudWxscyBpcyBu b3QgZW1wdHkgKi8KKwlib29sCQloYXNodGFibGVzdGFsZTsgLyogaGFzaCB0YWJsZXMgbXVzdCBi ZSByZWJ1aWx0IGJlZm9yZSB1c2UgKi8KIAlNZW1vcnlDb250ZXh0IHR1cGxlc0NvbnRleHQ7CS8q IGNvbnRleHQgY29udGFpbmluZyBoYXNoIHRhYmxlcycgdHVwbGVzICovCiAJRXhwckNvbnRleHQg KmlubmVyZWNvbnRleHQ7IC8qIGVjb250ZXh0IGZvciBjb21wdXRpbmcgaW5uZXIgdHVwbGVzICov CiAJaW50CQkJbnVtQ29sczsJCS8qIG51bWJlciBvZiBjb2x1bW5zIGJlaW5nIGhhc2hlZCAqLwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0CmluZGV4IGNmMjk1ZDU2NTAuLjA2 YzY1MDRhMWIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0 Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQKQEAgLTE0 NTAsNiArMTQ1MCw1NyBAQCB3aGVyZSBvLnRlbiA9IDA7CiAgMTAwCiAoMSByb3cpCiAKKy0tCist LSBUZXN0IHJlc2NhbiBvZiBhIGhhc2hlZCBzdWJwbGFuIHRoYXQgYXBwZWFycyBpbiBtb3JlIHRo YW4gb25lIHF1YWwuCistLSBIZXJlIHRoZSBPUiBjbGF1c2UncyByZXN0cmljdGlvbiBvbiAiYyIg aXMgZXh0cmFjdGVkIGFuZCBhbHNvIGFwcGxpZWQgdG8KKy0tIHRoZSBzY2FuIG9mICJjIiwgc28g dGhlIHNhbWUgaGFzaGVkIFN1YlBsYW4gaXMgZXZhbHVhdGVkIGluIHR3byBwbGFjZXM7CistLSBl YWNoIG11c3QgcmVidWlsZCBpdHMgaGFzaCB0YWJsZSB3aGVuIHRoZSBvdXRlciBwYXJhbWV0ZXIg Y2hhbmdlcy4KKy0tCitjcmVhdGUgdGVtcCB0YWJsZSBoc3BfYyAoaWQgaW50IHByaW1hcnkga2V5 LCBvd25lciBpbnQpOworY3JlYXRlIHRlbXAgdGFibGUgaHNwX3AgKGlkIGludCBwcmltYXJ5IGtl eSwgY2lkIGludCwgcHViIGJvb2wpOworY3JlYXRlIHRlbXAgdGFibGUgaHNwX2YgKGNpZCBpbnQs IHVpZCBpbnQpOworY3JlYXRlIHRlbXAgdGFibGUgaHNwX3MgKGlkIGludCBwcmltYXJ5IGtleSwg cGlkIGludCwgdWlkIGludCk7CitpbnNlcnQgaW50byBoc3BfYyB2YWx1ZXMgKDEsIDEwMCksICgy LCAyMDApOworaW5zZXJ0IGludG8gaHNwX3AgdmFsdWVzICgxMCwgMSwgdHJ1ZSksICgyMCwgMiwg dHJ1ZSk7CitpbnNlcnQgaW50byBoc3BfZiB2YWx1ZXMgKDEsIDUwMSksICgyLCA1MDIpOworaW5z ZXJ0IGludG8gaHNwX3MgdmFsdWVzICgxLCAxMCwgNTAxKSwgKDIsIDIwLCA1MDIpOworYW5hbHl6 ZSBoc3BfYywgaHNwX3AsIGhzcF9mLCBoc3BfczsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVj dCBzLmlkLCBleGlzdHMgKHNlbGVjdCAxIGZyb20gaHNwX3AgcCBqb2luIGhzcF9jIGMgb24gYy5p ZCA9IHAuY2lkCisgICAgICAgICAgICAgICAgICAgICB3aGVyZSBwLmlkID0gcy5waWQKKyAgICAg ICAgICAgICAgICAgICAgICAgYW5kIChjLm93bmVyID0gcy51aWQKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvciAocC5wdWIgYW5kIGMuaWQgaW4gKHNlbGVjdCBjaWQgZnJvbSBoc3BfZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUg dWlkID0gcy51aWQpKSkpCitmcm9tIGhzcF9zIHMgb3JkZXIgYnkgcy5pZDsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU29ydAorICAgU29ydCBLZXk6IHMuaWQKKyAgIC0+ICBT ZXEgU2NhbiBvbiBoc3BfcyBzCisgICAgICAgICBTdWJQbGFuIGV4aXN0c18xCisgICAgICAgICAg IC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgICAgICAgICBKb2luIEZpbHRlcjogKChjLmlkID0g cC5jaWQpIEFORCAoKGMub3duZXIgPSBzLnVpZCkgT1IgKHAucHViIEFORCAoQU5ZIChjLmlkID0g KGhhc2hlZCBTdWJQbGFuIGFueV8xKS5jb2wxKSkpKSkKKyAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGhzcF9wIHAKKyAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoaWQgPSBz LnBpZCkKKyAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGhzcF9jIGMKKyAgICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAoKG93bmVyID0gcy51aWQpIE9SIChBTlkgKGlkID0gKGhh c2hlZCBTdWJQbGFuIGFueV8xKS5jb2wxKSkpCisgICAgICAgICAgICAgICAgICAgICAgIFN1YlBs YW4gYW55XzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gaHNwX2YK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh1aWQgPSBzLnVpZCkKKygx MyByb3dzKQorCitzZWxlY3Qgcy5pZCwgZXhpc3RzIChzZWxlY3QgMSBmcm9tIGhzcF9wIHAgam9p biBoc3BfYyBjIG9uIGMuaWQgPSBwLmNpZAorICAgICAgICAgICAgICAgICAgICAgd2hlcmUgcC5p ZCA9IHMucGlkCisgICAgICAgICAgICAgICAgICAgICAgIGFuZCAoYy5vd25lciA9IHMudWlkCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgKHAucHViIGFuZCBjLmlkIGluIChzZWxlY3Qg Y2lkIGZyb20gaHNwX2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHdoZXJlIHVpZCA9IHMudWlkKSkpKQorZnJvbSBoc3BfcyBzIG9yZGVyIGJ5IHMu aWQ7CisgaWQgfCBleGlzdHMgCistLS0tKy0tLS0tLS0tCisgIDEgfCB0CisgIDIgfCB0CisoMiBy b3dzKQorCiAtLQogLS0gVGVzdCByZXNjYW4gb2YgYSBoYXNoZWQgU2V0T3Agbm9kZQogLS0KZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNlbGVjdC5zcWwgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9zdWJzZWxlY3Quc3FsCmluZGV4IDA3NDM4Njk0ZjYuLmViMDBjOTgyNTIgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNlbGVjdC5zcWwKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvc3Vic2VsZWN0LnNxbApAQCAtNzI2LDYgKzcyNiwzNyBAQCBzZWxlY3Qg c3VtKHNzLnRzdDo6aW50KSBmcm9tCiAgIGZyb20gb25layBpIHdoZXJlIGkudW5pcXVlMSA9IG8u dW5pcXVlMSApIHNzCiB3aGVyZSBvLnRlbiA9IDA7CiAKKy0tCistLSBUZXN0IHJlc2NhbiBvZiBh IGhhc2hlZCBzdWJwbGFuIHRoYXQgYXBwZWFycyBpbiBtb3JlIHRoYW4gb25lIHF1YWwuCistLSBI ZXJlIHRoZSBPUiBjbGF1c2UncyByZXN0cmljdGlvbiBvbiAiYyIgaXMgZXh0cmFjdGVkIGFuZCBh bHNvIGFwcGxpZWQgdG8KKy0tIHRoZSBzY2FuIG9mICJjIiwgc28gdGhlIHNhbWUgaGFzaGVkIFN1 YlBsYW4gaXMgZXZhbHVhdGVkIGluIHR3byBwbGFjZXM7CistLSBlYWNoIG11c3QgcmVidWlsZCBp dHMgaGFzaCB0YWJsZSB3aGVuIHRoZSBvdXRlciBwYXJhbWV0ZXIgY2hhbmdlcy4KKy0tCitjcmVh dGUgdGVtcCB0YWJsZSBoc3BfYyAoaWQgaW50IHByaW1hcnkga2V5LCBvd25lciBpbnQpOworY3Jl YXRlIHRlbXAgdGFibGUgaHNwX3AgKGlkIGludCBwcmltYXJ5IGtleSwgY2lkIGludCwgcHViIGJv b2wpOworY3JlYXRlIHRlbXAgdGFibGUgaHNwX2YgKGNpZCBpbnQsIHVpZCBpbnQpOworY3JlYXRl IHRlbXAgdGFibGUgaHNwX3MgKGlkIGludCBwcmltYXJ5IGtleSwgcGlkIGludCwgdWlkIGludCk7 CitpbnNlcnQgaW50byBoc3BfYyB2YWx1ZXMgKDEsIDEwMCksICgyLCAyMDApOworaW5zZXJ0IGlu dG8gaHNwX3AgdmFsdWVzICgxMCwgMSwgdHJ1ZSksICgyMCwgMiwgdHJ1ZSk7CitpbnNlcnQgaW50 byBoc3BfZiB2YWx1ZXMgKDEsIDUwMSksICgyLCA1MDIpOworaW5zZXJ0IGludG8gaHNwX3MgdmFs dWVzICgxLCAxMCwgNTAxKSwgKDIsIDIwLCA1MDIpOworYW5hbHl6ZSBoc3BfYywgaHNwX3AsIGhz cF9mLCBoc3BfczsKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHMuaWQsIGV4aXN0cyAo c2VsZWN0IDEgZnJvbSBoc3BfcCBwIGpvaW4gaHNwX2MgYyBvbiBjLmlkID0gcC5jaWQKKyAgICAg ICAgICAgICAgICAgICAgIHdoZXJlIHAuaWQgPSBzLnBpZAorICAgICAgICAgICAgICAgICAgICAg ICBhbmQgKGMub3duZXIgPSBzLnVpZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIChw LnB1YiBhbmQgYy5pZCBpbiAoc2VsZWN0IGNpZCBmcm9tIGhzcF9mCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSB1aWQgPSBzLnVpZCkpKSkK K2Zyb20gaHNwX3MgcyBvcmRlciBieSBzLmlkOworCitzZWxlY3Qgcy5pZCwgZXhpc3RzIChzZWxl Y3QgMSBmcm9tIGhzcF9wIHAgam9pbiBoc3BfYyBjIG9uIGMuaWQgPSBwLmNpZAorICAgICAgICAg ICAgICAgICAgICAgd2hlcmUgcC5pZCA9IHMucGlkCisgICAgICAgICAgICAgICAgICAgICAgIGFu ZCAoYy5vd25lciA9IHMudWlkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgKHAucHVi IGFuZCBjLmlkIGluIChzZWxlY3QgY2lkIGZyb20gaHNwX2YKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHVpZCA9IHMudWlkKSkpKQorZnJv bSBoc3BfcyBzIG9yZGVyIGJ5IHMuaWQ7CisKIC0tCiAtLSBUZXN0IHJlc2NhbiBvZiBhIGhhc2hl ZCBTZXRPcCBub2RlCiAtLQotLSAKMi41MC4xIChBcHBsZSBHaXQtMTU1KQoK ------=_Part_114911_577158097.1790927239039--