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 1wcLf1-003HSN-0O for pgsql-bugs@arkaria.postgresql.org; Wed, 24 Jun 2026 11:20:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wcLf0-000Y4a-01 for pgsql-bugs@arkaria.postgresql.org; Wed, 24 Jun 2026 11:20:50 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wcLez-000Y4S-20 for pgsql-bugs@lists.postgresql.org; Wed, 24 Jun 2026 11:20:49 +0000 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wcLex-000000000z6-2TQj for pgsql-bugs@lists.postgresql.org; Wed, 24 Jun 2026 11:20:48 +0000 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-37d826e9811so585138a91.1 for ; Wed, 24 Jun 2026 04:20:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782300047; cv=none; d=google.com; s=arc-20240605; b=Tz/C5NnrLA/eA3dHx6qU4xJh2iVSrC0FIskRn4LhxxxASMqBk1DGWhIdWW7R3ef/Dt 6Vaq5CNVhtviLwFC0Hm4AW8Zgxkqx3ahMEViH9QeudQqI9PU8QqARGLvLhgxF18qdn3S +cg1TQm7Pr2FHZTDr6garjVpnnhHzEhuR+1abt8OtulX5rIgF1wlPMJJCXWy8cKJtPVm A4HWbCBuMihANj0y9Vwa3F4UH7i1402lKUNXedgdAB0kml84h7Otj9WkyM6nSBNlfuHL 7/F6cHrhfnA2QQtXQWgKhaf57ga6Qsc/WLkF01xM2Lca9jKppTxRbvybSESNAP1T02am bMJA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=pGF3dFyTpvcYfjWL1DP810UTqOoeq+Fa7YfEmfkmKV4=; fh=aM7JdTPfAHjgz9NN5gwQnW0SuYY1kTB2r/MrFgvt4vY=; b=eTmvs0dVqSE7jVdnX56C9UzfTB2WmAvv92UZDm6CRSxYRnDsidn+0xsmhx3lw6x5bf z2dKhYT13CDu437uc06/SbQmzRrtImA5iiNaQVxbrpT/Mcg9SO+wb45Ht77sfL+rVQbM 9Do1hMEIdkFtgrVhJpN3MJyltMVlPFuBxRXDIhHc66XnsimsHCEphtXqslmFYYrDB54H T7enO6ATMsr4AGMiBBurVS1I1W9/8HTVEhtqd3dgpqLp5gHJ6X+EU+PIoHR8KMngVbgW bztdZ65mzWgxg9A0kt1CJzDxiko0gukPOQp0OFJyPNGcUanhNOV0lYuFOZK/rr1GwFjB qJ3A==; darn=lists.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=1782300047; x=1782904847; 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=pGF3dFyTpvcYfjWL1DP810UTqOoeq+Fa7YfEmfkmKV4=; b=GuABRmd0eSivgwz8IkUzNk7lqPB2lNMzJDagCZ5u+d1iHbnOZQa08caoEjWmAaVZxy 5ohcI8H2DRq2dqbbz41Iu80pSsayThVZq0ea+yaFqwV4HsCSkd4XRyLFofILGekfMYuG EkXuQEcFhJ/EaTzZDE5cqUHRZqAZV6NRpX2l8oJw0fNNoAIIRnDuHibigI3E282PhmJM cty9tow/wwCQJtYuNWtbsT8qUHYfCQhONklHLsNVjN8umfBH1t6LS/GPaaahfWoyYllV ZXNJeMm0rle/+vLcuoUvi5u494nBeqJTYQE4H0ukYZ5fHB6UCM2uksto6H0UqRZ3o/kT PyCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782300047; x=1782904847; h=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; bh=pGF3dFyTpvcYfjWL1DP810UTqOoeq+Fa7YfEmfkmKV4=; b=DP+Lu/cgAs3w40x2h4mxAtNP8zokCxLyPNTukvnfras3fpWYIcDhTQ+/+3X4GwoHyn 6zrA+OupoUQFbDQ3aZ+6m09a6JO/xhmB1SseAIqM/cEYDRV/3oKT4KtgQGaBm5uYL7F3 HjmI7BbdZOAQ4zDKWYf5ADuJOdZ1L6IC/t77CznlmZ+BNZlRAg2lii1E/+AjPGXDEM6d z86mx9nX07/p0AEhnPmyl/GwIwR9Tygg+ERm4Cd5MPEZ5u6xcY7lFCV97psZDY56gBMp ZgNJ1RB4C7PKkiqKsnt7JWgIqt+ZY9HJBdZbGf2D2XC/klt9ujlWE0i6L5CXZF8NDDBQ oeUg== X-Forwarded-Encrypted: i=1; AHgh+Rp0ytxV6N66BDlN4rLexeLXZ13eJD+0KgaSWNOzCjmZPthiSyCAOTE7UGoX/ndwaYa69a1Mrq6nn1Lp@lists.postgresql.org X-Gm-Message-State: AOJu0YwcSZrsuW9SMUFKHET//0Z96MmXyfM1DVdyWf4qAzoMkXsltCfI fhUUHU4IeoNpaPy1iqCcXgljA2kzKLq+K2IWdplVsC/dXpF46SBqgtLGOyRi8sQzBfa313PPZ7u XuphdXoWX2WmVO0c+NIbopOSJgMAC9mM= X-Gm-Gg: AfdE7cnvE88alD6gpW8Ll+PovZkyX8NkXmkdK2+HOiVWVWq27KYUmAMRG2IehIiv7yn Uj39sVDlElHDluJqDOhBejhRuFP+KnRMnQ0xcL/IoKgJOHB8A25XUchR+JMvLD+6vmBwTOm4PHf gNOqO/HeL4xzPEKdjTEFtbRPXqF1fZ57UHSmRKHXfLeGGGFcgZo/pP+PHFJblTDG98OqNsZQj+a qS1SYk5phFMFaegrjQEsj/AX4KM/JIXcXsRjrzKZWd0TNCQs+vN772TcqEimkA9OTCfjz3+ANaI aQuyy8DRXBA8WhHqaNoF/28j3+GFrd8nKCavkF+JTVIuSo89H4y55g== X-Received: by 2002:a17:90b:5103:b0:368:a27f:9083 with SMTP id 98e67ed59e1d1-37de41c03b5mr2680440a91.7.1782300046597; Wed, 24 Jun 2026 04:20:46 -0700 (PDT) MIME-Version: 1.0 References: <19484-a3cb82c8cde3c8fa@postgresql.org> In-Reply-To: From: Amit Langote Date: Wed, 24 Jun 2026 20:20:29 +0900 X-Gm-Features: AVVi8CfAgvhRrpte5XUQ02MXe07JCAF8E12IsxJHXRPc7COhmon_AiffPR2Hk04 Message-ID: Subject: Re: BUG #19484: Segmentation fault triggered by FDW To: Etsuro Fujita Cc: Richard Guo , Matheus Alcantara , Ayush Tiwari , Rafia Sabih , 798604270@qq.com, pgsql-bugs@lists.postgresql.org, Amit Langote Content-Type: multipart/mixed; boundary="00000000000029411c0654fe1141" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000029411c0654fe1141 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Fujita-san, On Wed, Jun 24, 2026 at 6:15=E2=80=AFPM Etsuro Fujita wrote: > On Wed, Jun 24, 2026 at 1:25=E2=80=AFPM Amit Langote wrote: > > On Wed, Jun 24, 2026 at 11:23=E2=80=AFAM Richard Guo wrote: > > > On Wed, Jun 24, 2026 at 10:43=E2=80=AFAM Amit Langote wrote: > > > > If we=E2=80=99d rather avoid it, I have a no-field alternative for = REL_18: show_modifytable_info() is the only reader of the re-indexed list, = and it can recompute the mapping from node->resultRelations and node->fdwPr= ivLists, both plan-ordered and untouched by pruning. > > > > > > This sounds like a nice solution. Since show_modifytable_info() is > > > only used for EXPLAIN, I guess the recompute overhead on the > > > re-indexed list should be fine. > > > > Thanks for chiming in, here is the patch to do so. > > Thanks for the patch! > > + /* > + * node->fdwPrivLists is indexed by the original, pre-pruning > + * result relation order and is parallel to node->resultRelat= ions. > + * Initial pruning may have dropped earlier relations, so the= kept > + * index j need not match the original position; find this > + * relation's entry by its range table index instead. > + */ > + forboth(lc1, node->resultRelations, lc2, node->fdwPrivLists) > + { > + if (lfirst_int(lc1) =3D=3D (int) rti) > + { > + fdw_private =3D (List *) lfirst(lc2); > + break; > + } > + } > > I think it's good to skip this for efficiency, when there are no > pruned result relations. Thanks for the review. v2 attached implements your suggestion: it indexes node->fdwPrivLists directly with j when no result relations were pruned, and only falls back to matching by range table index when pruning appears to have dropped some. > Other than that the patch looks good to me. > > I didn't know pg_rewrite's use of ModifyTableState, which was > different than I expected. Sorry for that. No need to apologize at all. Tom's point about it was new to me too. I will push v2 to REL_18 tomorrow barring objections. -- Thanks, Amit Langote --00000000000029411c0654fe1141 Content-Type: application/octet-stream; name="v2-0001-Avoid-ABI-break-in-ModifyTableState-from-the-FDW-.patch" Content-Disposition: attachment; filename="v2-0001-Avoid-ABI-break-in-ModifyTableState-from-the-FDW-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqrzezf40 RnJvbSA1NDA3ZjU3ZTljZTdhODk5NDZlMGZlMjBhM2Y2ZDZjZGYyMWVhYmQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFdlZCwgMjQgSnVuIDIwMjYgMjA6MTI6MDAgKzA5MDAKU3ViamVjdDogW1BBVENIIHYy XSBBdm9pZCBBQkkgYnJlYWsgaW4gTW9kaWZ5VGFibGVTdGF0ZSBmcm9tIHRoZSBGRFcgcHJ1bmlu ZwogZml4CgpDb21taXQgMWVmOTE3ZTNhNiBmaXhlZCB0aGUgcmUtaW5kZXhpbmcgb2YgTW9kaWZ5 VGFibGUncyBGRFcgYXJyYXlzCndoZW4gaW5pdGlhbCBydW50aW1lIHBydW5pbmcgcmVtb3ZlcyBy ZXN1bHQgcmVsYXRpb25zLCBidXQgaXQgZGlkIHNvCmJ5IGFkZGluZyBhIG5ldyBtdF9mZHdQcml2 TGlzdHMgZmllbGQgdG8gTW9kaWZ5VGFibGVTdGF0ZS4gIEFsdGhvdWdoCnRoZSBmaWVsZCB3YXMg cGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdCB0byBrZWVwIHRoZSBvZmZzZXRzIG9mCmV4 aXN0aW5nIGZpZWxkcyBzdGFibGUsIGl0IHN0aWxsIGVubGFyZ2VzIHNpemVvZihNb2RpZnlUYWJs ZVN0YXRlKSwKd2hpY2ggdGhlIEFCSSBjb21wbGlhbmNlIGNoZWNrIGZsYWdzIG9uIHRoZSBidWls ZGZhcm0gKGUuZy4gY3Jha2UpLgoKVGhlIGZpZWxkIGV4aXN0ZWQgb25seSBzbyB0aGF0IHNob3df bW9kaWZ5dGFibGVfaW5mbygpIGNvdWxkIHJlY292ZXIgdGhlCnJlLWluZGV4ZWQgZmR3X3ByaXZh dGUgYWZ0ZXIgZXhlY3V0b3Igc3RhcnR1cDsgdGhlIGV4ZWN1dG9yLXNpZGUgZml4IGluCkV4ZWNJ bml0TW9kaWZ5VGFibGUoKSB0aGF0IGFjdHVhbGx5IHByZXZlbnRzIHRoZSBjcmFzaCBkb2VzIG5v dCBkZXBlbmQgb24KaXQuICBSZW1vdmUgdGhlIGZpZWxkIGFuZCBoYXZlIHNob3dfbW9kaWZ5dGFi bGVfaW5mbygpIGluc3RlYWQgbG9vayB1cAplYWNoIGtlcHQgcmVsYXRpb24ncyBmZHdfcHJpdmF0 ZSBmcm9tIHRoZSBvcmlnaW5hbCwgcHJlLXBydW5pbmcKbm9kZS0+ZmR3UHJpdkxpc3RzLCB3aGlj aCBpcyBwYXJhbGxlbCB0byBub2RlLT5yZXN1bHRSZWxhdGlvbnMgYW5kIGxlZnQKaW50YWN0IGJ5 IHBydW5pbmcuICBXaGVuIG5vdGhpbmcgd2FzIHBydW5lZCB0aGUgbG9va3VwIGlzIGEgZGlyZWN0 IGluZGV4OwpvdGhlcndpc2UgaXQgbWF0Y2hlcyBvbiB0aGUgcmFuZ2UgdGFibGUgaW5kZXguCgpU aGlzIGlzIGFwcGxpZWQgdG8gUkVMXzE4IG9ubHk7IG1hc3RlciBrZWVwcyB0aGUgbXRfZmR3UHJp dkxpc3RzIGZpZWxkCmFuZCBpcyB1bmFmZmVjdGVkLCBzbyB0aGUgdHdvIGRpdmVyZ2Ugc2xpZ2h0 bHkgaGVyZS4KClJlcG9ydGVkIG9uIHRoZSBidWlsZGZhcm0gKG1lbWJlciBjcmFrZSkuCgpQZXIg YSBzdWdnZXN0aW9uIGZyb20gVG9tIExhbmUuCgpSZXZpZXdlZC1ieTogRXRzdXJvIEZ1aml0YSA8 ZXRzdXJvLmZ1aml0YUBnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20v Q0ErSGl3cUVoZTctdjVRMC1vT29XM1JhTzR2b1ljR0stSmZpbmJZRVdYd3V0REdTT3RRQG1haWwu Z21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jICAgICAgICAgfCAy OSArKysrKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1v ZGlmeVRhYmxlLmMgfCAgMSAtCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAg ICB8ICA4ICsrKy0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMzEgaW5zZXJ0aW9ucygrKSwgNyBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggNmQyNjI0ZTc1YjguLjQ0NDE3OGVk ODljIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC00NjA5LDcgKzQ2MDksMzQgQEAgc2hvd19t b2RpZnl0YWJsZV9pbmZvKE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsIExpc3QgKmFuY2VzdG9y cywKIAkJCWZkd3JvdXRpbmUgIT0gTlVMTCAmJgogCQkJZmR3cm91dGluZS0+RXhwbGFpbkZvcmVp Z25Nb2RpZnkgIT0gTlVMTCkKIAkJewotCQkJTGlzdAkgICAqZmR3X3ByaXZhdGUgPSAoTGlzdCAq KSBsaXN0X250aChtdHN0YXRlLT5tdF9mZHdQcml2TGlzdHMsIGopOworCQkJTGlzdAkgICAqZmR3 X3ByaXZhdGU7CisKKwkJCS8qCisJCQkgKiBub2RlLT5mZHdQcml2TGlzdHMgaXMgaW5kZXhlZCBi eSB0aGUgb3JpZ2luYWwsIHByZS1wcnVuaW5nCisJCQkgKiByZXN1bHQgcmVsYXRpb24gb3JkZXIg YW5kIGlzIHBhcmFsbGVsIHRvIG5vZGUtPnJlc3VsdFJlbGF0aW9ucy4KKwkJCSAqIElmIG5vIHJl c3VsdCByZWxhdGlvbnMgd2VyZSBwcnVuZWQsIHRoZSBrZXB0IG9yZGVyIG1hdGNoZXMgdGhhdAor CQkJICogb3JkZXIgYW5kIHdlIGNhbiBpbmRleCBpdCBkaXJlY3RseSB3aXRoIGouICBPdGhlcndp c2UgdGhlIGtlcHQKKwkJCSAqIGluZGV4IGogbmVlZCBub3QgbWF0Y2ggdGhlIG9yaWdpbmFsIHBv c2l0aW9uLCBzbyBmaW5kIHRoaXMKKwkJCSAqIHJlbGF0aW9uJ3MgZW50cnkgYnkgaXRzIHJhbmdl IHRhYmxlIGluZGV4IGluc3RlYWQuCisJCQkgKi8KKwkJCWlmIChsaXN0X2xlbmd0aChub2RlLT5y ZXN1bHRSZWxhdGlvbnMpID09IG10c3RhdGUtPm10X25yZWxzKQorCQkJCWZkd19wcml2YXRlID0g KExpc3QgKikgbGlzdF9udGgobm9kZS0+ZmR3UHJpdkxpc3RzLCBqKTsKKwkJCWVsc2UKKwkJCXsK KwkJCQlJbmRleAkJcnRpID0gcmVzdWx0UmVsSW5mby0+cmlfUmFuZ2VUYWJsZUluZGV4OworCQkJ CUxpc3RDZWxsICAgKmxjMTsKKwkJCQlMaXN0Q2VsbCAgICpsYzI7CisKKwkJCQlmZHdfcHJpdmF0 ZSA9IE5JTDsKKwkJCQlmb3Jib3RoKGxjMSwgbm9kZS0+cmVzdWx0UmVsYXRpb25zLCBsYzIsIG5v ZGUtPmZkd1ByaXZMaXN0cykKKwkJCQl7CisJCQkJCWlmIChsZmlyc3RfaW50KGxjMSkgPT0gKGlu dCkgcnRpKQorCQkJCQl7CisJCQkJCQlmZHdfcHJpdmF0ZSA9IChMaXN0ICopIGxmaXJzdChsYzIp OworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CiAKIAkJCWZkd3JvdXRpbmUtPkV4 cGxhaW5Gb3JlaWduTW9kaWZ5KG10c3RhdGUsCiAJCQkJCQkJCQkJCSByZXN1bHRSZWxJbmZvLApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwppbmRleCBjYWMzMDY2NjY2My4uN2Mx ZDBlOTU4OGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJs ZS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCkBAIC00Nzcw LDcgKzQ3NzAsNiBAQCBFeGVjSW5pdE1vZGlmeVRhYmxlKE1vZGlmeVRhYmxlICpub2RlLCBFU3Rh dGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAltdHN0YXRlLT5tdF91cGRhdGVDb2xub3NMaXN0cyA9 IHVwZGF0ZUNvbG5vc0xpc3RzOwogCW10c3RhdGUtPm10X21lcmdlQWN0aW9uTGlzdHMgPSBtZXJn ZUFjdGlvbkxpc3RzOwogCW10c3RhdGUtPm10X21lcmdlSm9pbkNvbmRpdGlvbnMgPSBtZXJnZUpv aW5Db25kaXRpb25zOwotCW10c3RhdGUtPm10X2Zkd1ByaXZMaXN0cyA9IGZkd1ByaXZMaXN0czsK IAogCS8qLS0tLS0tLS0tLQogCSAqIFJlc29sdmUgdGhlIHRhcmdldCByZWxhdGlvbi4gVGhpcyBp cyB0aGUgc2FtZSBhczoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5o IGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggNjY3N2EwM2NhYWIuLjQwOWUx NzJiZmI2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTQ1MywxNSArMTQ1MywxMyBAQCB0eXBl ZGVmIHN0cnVjdCBNb2RpZnlUYWJsZVN0YXRlCiAJZG91YmxlCQltdF9tZXJnZV9kZWxldGVkOwog CiAJLyoKLQkgKiBMaXN0cyBvZiB2YWxpZCB1cGRhdGVDb2xub3NMaXN0cywgbWVyZ2VBY3Rpb25M aXN0cywKLQkgKiBtZXJnZUpvaW5Db25kaXRpb25zLCBhbmQgZmR3UHJpdkxpc3RzLiAgVGhlc2Ug Y29udGFpbiBvbmx5IGVudHJpZXMgZm9yCi0JICogdW5wcnVuZWQgcmVsYXRpb25zLCBmaWx0ZXJl ZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGxpc3RzIGluCi0JICogTW9kaWZ5VGFibGUuCisJICog TGlzdHMgb2YgdmFsaWQgdXBkYXRlQ29sbm9zTGlzdHMsIG1lcmdlQWN0aW9uTGlzdHMsIGFuZAor CSAqIG1lcmdlSm9pbkNvbmRpdGlvbnMuICBUaGVzZSBjb250YWluIG9ubHkgZW50cmllcyBmb3Ig dW5wcnVuZWQKKwkgKiByZWxhdGlvbnMsIGZpbHRlcmVkIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcg bGlzdHMgaW4gTW9kaWZ5VGFibGUuCiAJICovCiAJTGlzdAkgICAqbXRfdXBkYXRlQ29sbm9zTGlz dHM7CiAJTGlzdAkgICAqbXRfbWVyZ2VBY3Rpb25MaXN0czsKIAlMaXN0CSAgICptdF9tZXJnZUpv aW5Db25kaXRpb25zOwotCUxpc3QJICAgKm10X2Zkd1ByaXZMaXN0czsKIH0gTW9kaWZ5VGFibGVT dGF0ZTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQotLSAKMi40Ny4zCgo= --00000000000029411c0654fe1141--