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 1vxCQj-002jjr-04 for pgsql-hackers@arkaria.postgresql.org; Mon, 02 Mar 2026 23:12:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vxCQg-003OhJ-1c for pgsql-hackers@arkaria.postgresql.org; Mon, 02 Mar 2026 23:11:58 +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 1vxCQg-003Oh4-0a for pgsql-hackers@lists.postgresql.org; Mon, 02 Mar 2026 23:11:58 +0000 Received: from mail-ot1-x332.google.com ([2607:f8b0:4864:20::332]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vxCQe-000000005a8-1FiF for pgsql-hackers@lists.postgresql.org; Mon, 02 Mar 2026 23:11:58 +0000 Received: by mail-ot1-x332.google.com with SMTP id 46e09a7af769-7d556c1a79eso6982621a34.3 for ; Mon, 02 Mar 2026 15:11:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772493114; cv=none; d=google.com; s=arc-20240605; b=WIgLo+5NxgYwsNajOFVNtXaIM50j+HzhRf2xbLlXED4bQItf7pv3yAq8xpCtnbL8wa oEamgBCikq1XKP6dSJYKlALS/RVnEwvV4FbVpmc5yIJ9lzMd4R0MTqIovc4jBUKEK9qb qzsoY1bpwep+LzPB/6B/TPeTBEpTbxThCX7N/rk9J18aU0YM951qRN6ndWcKOpX+cDr5 WA2/guHLB7EiYUoXByzyl+3+vTH/Z0OwSaqsAoxkwk1FJBvti2kVEvzFBDEycoYcNF4T fkZFA8yZ//b21QOhV3nSHrYck0nIID7vGkdClKzIUy46IvO/ZPzME2RIETudPgliu3xj Rw2g== 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=IlmhQp/hXmTUrNVBCSpLin1KdOJRdelQRUV/RthYMAY=; fh=CwTugP3w2vUrg4Ru6NvsZIcK5AeRp0oUK+NZJ2CXuqo=; b=NbackMKMqaHAaGmBp69xc215zsZ6u1dNlaDGaAHSLWsY8MK3rQWf/FQVMSQnMEcc19 Drr2JdM93gLCj4FgwYCSzwiPx4AHMAEy/6BP+NrkiQqp6s45G9veVCLx9y42rNpeU7Pg UmK+ahekYerd7h+CDSejne8UEhiuKKhvubgDwPGVerU0SMOl0QLMLfJSOCaeiGxoOfCC p5omBh6M7WUo4StciPOo6hk9u4HrgsG+wmPf6NP3Yi4ksb8sfXLZYmzvRn7LFVVJlO31 J79R2+elEcdsWEgcb3y/hA6LQBhJT5pHlMzu6QFi3Mg04IpiwtEJjxPohHXVDzKO8C0c dJLA==; 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=20230601; t=1772493114; x=1773097914; 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=IlmhQp/hXmTUrNVBCSpLin1KdOJRdelQRUV/RthYMAY=; b=dPbgu407x9UmaC7zTJQY1k/gqGZT3owQHtwIHrWcbfomiNsQff6HQIvQpxjSGjdAjV Dyj5BwLMJUipx6MLeCi8iF1wpTfdXTxhsU3phopoQzN4S/dVbOFyHbJqdi31FD3iMD1e T1KrmHL+JxjDlSW0+WAM3rJWwypbqTkWqKNR7VXcGLCcMHyGm64V52fU6jwWR99/WrMf XuMjisv3e8k0nGILZaEKPX3kMSnyX9LrQVPOdnAAxbWjxg+y7+hrJEZwX7u8WeYXuuGT +khYd9RlhleoNiKe20E09bSaha7GXKQGCdTp6az9wEnhkFLoLemVnB00AxviMRRqCd6S Sy+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772493114; x=1773097914; 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=IlmhQp/hXmTUrNVBCSpLin1KdOJRdelQRUV/RthYMAY=; b=ltJ5Y302npf2grKMf9SBilHOh7CrFCIvxyyJ373XT+dc6hTs2zdTVV7sHtz5RC+EJ4 LGkHNMq1fenbQ4JSFIgSMO2W3kRfohUA2glWelCcRTox+2igsvttiVMTKpEn+x86HD77 CloYH+B2EbGKN891kSOk8S8hgjJAWtSqg4LOU3/72lPrZ1o+jL/tWGxecM6XSWmY2Kif bsKdUbYJ9evPA7j55eDnqb7hgoQBsA7aC6oyKi9TIdItNaoNcc1gS8ZGpzA9RjcugsOM 38DVch77vRIejN4/soQaumX6Xn8MRJ67kHyXHs20q0LgHLNJpm/feeM64o2H+HA3PanG uBgg== X-Forwarded-Encrypted: i=1; AJvYcCW+yY8lK1KvKG/LMiMsq5JCjvPdz+prx3aRDlurpU/HROMV1GEMsQC3aUpPtA78ttcNxmWCgcZCKLG9QQgM@lists.postgresql.org X-Gm-Message-State: AOJu0Yy3c5/NGu14FKaVHMFsYf3dLZrRGeQOERCUfkoRSlpGIBIljjuy MOEHDvvMHWK2pD0gS5ZaC3QooPRJl65YLAH7bjVVhHlJYSKqNU7oc6BLWjjJpMPBvlOBsHq3Ss6 FUY9QQRF2n/98kyq361daNZ2pcaYPonQ= X-Gm-Gg: ATEYQzyPERa+ZbvalTXJedcKRneGXbtjpJ9/xGhJ4IyJGPDiogpYF9Nmp+aYJbh5tAC F0T7mTmc7bPwOoR3ZO5ftXBulkVPjSSm+9X1f577bRJo3NRRx/L8iOP4IP2Jjgg6K1ebBk9JDOT P5QyoFREXsCiX2fQW3coQ838t5iHjDUENI7yH3GHT/pRWLcjG1hGZCUTbWocT0xWo3lVyocYDwP 6k0DMvb7+TdWD/2Av59BMjSktXdafz4I3sUvjNBrrgLL/YHhsXxzXapfnm5MfUwM3lBswj8R52R BhIQE/aGjXsxRt+Drg== X-Received: by 2002:a05:6830:25d5:b0:7c7:6043:dd93 with SMTP id 46e09a7af769-7d591b2656amr9664054a34.13.1772493114376; Mon, 02 Mar 2026 15:11:54 -0800 (PST) MIME-Version: 1.0 References: <1136161.1769654478@sss.pgh.pa.us> In-Reply-To: From: "David G. Johnston" Date: Mon, 2 Mar 2026 16:11:17 -0700 X-Gm-Features: AaiRm5243hbg8bsb2SvXLNS4xXPv1646oveBMDbKhjwXtAba4nYGqxVfEi4Lnps Message-ID: Subject: Re: pg_plan_advice To: Robert Haas Cc: Alexandra Wang , Richard Guo , Lukas Fittl , Tom Lane , Jacob Champion , Dian Fay , Matheus Alcantara , Jakub Wartak , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000073200e064c12b6f2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000073200e064c12b6f2 Content-Type: multipart/alternative; boundary="00000000000073200d064c12b6f0" --00000000000073200d064c12b6f0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Mar 2, 2026 at 3:09=E2=80=AFPM David G. Johnston wrote: > On Sun, Mar 1, 2026 at 9:10=E2=80=AFPM David G. Johnston < > david.g.johnston@gmail.com> wrote: > >> On Fri, Feb 27, 2026 at 6:16=E2=80=AFPM David G. Johnston < >> david.g.johnston@gmail.com> wrote: >> >>> On Fri, Feb 27, 2026 at 3:46=E2=80=AFPM Robert Haas >>> wrote: >>> >>>> On Thu, Feb 26, 2026 at 8:55=E2=80=AFAM Robert Haas >>>> wrote: >>>> > Thanks, Alex, for the review. >>>> >>>> Here's v18. In addition to fixing the problems pointed out by Alex, >>>> there are a couple of significant changes in this version. >>>> >>>> >>> I have a mind to walk through the readmes and sgmls but its going to be >>> in chunks. Here's one for the readme for pg_plan_advice with a couple = of >>> preliminary sgml changes. >>> >>> >> 0003 sgml focus with some readme. >> >> > And now 0004 sgml (no readme): > > Lastly, 0007 sgml (stash) Placed entry in correct position on contrib page. Expanded a bit on the security aspect comment. I suppose there is some indirect exposure via decisions being made implying table sizes or records-per-FK...I left that unmentioned. Added some explicit limitations to user-supplied values. I would personally like to see "pg_set_stashed_advice" returning something besides void. I would usually go for text, but maybe in the interest of i18n an integer would suffice. +1 if a row was added, -1 if a row is removed, or 0 for an update. That would necessitate any other no-op being an error. Presently, supplying NULL for the query_id is not an error - that seems like an oversight. Same goes for supplying NULL for stash_name. If both of those cases produce errors (leaving NULL advice_string being a remove indicator) the integer return seems like it should work just fine. Sorta feels like this module would appreciate advice strings having a comment feature - so instead of just leaving an empty string behind saying "we know, no advice needed" - it could contain actual content that isn't applied advice. Given the complexity of planning, comments seem warranted in the advice themselves in any case. Feels like this module needs export and import functions, especially given the intro paragraph about the contents being volatile. Or maybe a psql script example producing a dynamic script file involving \gexec. David J. --00000000000073200d064c12b6f0 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Mon, Mar 2, 2026 at 3:09=E2=80=AFPM Da= vid G. Johnston <david.g.johnston@gmail.com> wrote:
On Sun, Mar 1, 2026 at 9:10=E2=80= =AFPM David G. Johnston <david.g.johnston@gmail.com> wrote:
On = Fri, Feb 27, 2026 at 6:16=E2=80=AFPM David G. Johnston <david.g.johnston@gmail.com<= /a>> wrote:
=
On Thu, Feb 26, 2026 at 8= :55=E2=80=AFAM Robert Haas <robertmhaas@gmail.com> wrote:
> Thanks, Alex, for the review.

Here's v18. In addition to fixing the problems pointed out by Alex,
there are a couple of significant changes in this version.


I = have a mind to walk through the readmes and sgmls but its going to be in ch= unks.=C2=A0 Here's one for the readme for pg_plan_advice with a couple = of preliminary sgml changes.


0003 sgml focus with some readm= e.


And now 0004 sgml (no readme):


Lastly, 0007 sgml (stash)

P= laced entry in correct position on contrib page.

Expan= ded a bit on the security aspect comment.=C2=A0 I suppose there is some ind= irect exposure via decisions being made implying table sizes or records-per= -FK...I left that unmentioned.

Added some explicit lim= itations to user-supplied values.

I would personally= like to see "pg_set_stashed_advice" returning something besides = void.=C2=A0 I would usually go for text, but maybe in the interest of i18n = an integer would suffice.=C2=A0=C2=A0+1 if a row was added, -1 if a row is = removed, or 0 for an update.=C2=A0 That would necessitate any other no-op b= eing an error.=C2=A0 Presently, supplying NULL for the query_id is not an e= rror - that seems like an oversight.=C2=A0 Same goes for supplying NULL for= stash_name.=C2=A0 If both of those cases produce errors (leaving NULL advi= ce_string being a remove indicator) the integer return seems like it should= work just fine.

Sorta feels like this module would ap= preciate advice strings having a comment feature - so instead of just leavi= ng an empty string behind saying "we know, no advice needed" - it= could contain actual content that isn't applied advice.=C2=A0 Given th= e complexity of planning, comments seem warranted in the advice themselves = in any case.

Feels like this module needs export and i= mport functions, especially given the intro paragraph about the contents be= ing volatile.=C2=A0 Or maybe a psql script example producing a dynamic scri= pt file involving \gexec.

David J.

<= /div>
--00000000000073200d064c12b6f0-- --00000000000073200e064c12b6f2 Content-Type: text/x-patch; charset="US-ASCII"; name="nocfbot-v18-0007-pgstashadvice-sgml.diff" Content-Disposition: attachment; filename="nocfbot-v18-0007-pgstashadvice-sgml.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm9skmf10 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29u dHJpYi5zZ21sCmluZGV4IDYyYWYyYjIxZmQ3Li44ZjA5ZDcyODY5OCAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL2NvbnRyaWIuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sCkBA IC0xNTEsNyArMTUxLDYgQEAgQ1JFQVRFIEVYVEVOU0lPTiA8cmVwbGFjZWFibGU+ZXh0ZW5zaW9u X25hbWU8L3JlcGxhY2VhYmxlPjsKICAmbHRyZWU7CiAgJnBhZ2VpbnNwZWN0OwogICZwYXNzd29y ZGNoZWNrOwotICZwZ3N0YXNoYWR2aWNlOwogICZwZ2J1ZmZlcmNhY2hlOwogICZwZ2NvbGxlY3Rh ZHZpY2U7CiAgJnBnY3J5cHRvOwpAQCAtMTYxLDYgKzE2MCw3IEBAIENSRUFURSBFWFRFTlNJT04g PHJlcGxhY2VhYmxlPmV4dGVuc2lvbl9uYW1lPC9yZXBsYWNlYWJsZT47CiAgJnBncGxhbmFkdmlj ZTsKICAmcGdwcmV3YXJtOwogICZwZ3Jvd2xvY2tzOworICZwZ3N0YXNoYWR2aWNlOwogICZwZ3N0 YXRzdGF0ZW1lbnRzOwogICZwZ3N0YXR0dXBsZTsKICAmcGdzdXJnZXJ5OwpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbCBiL2RvYy9zcmMvc2dtbC9wZ3N0YXNoYWR2 aWNlLnNnbWwKaW5kZXggZDE4NzhmNGY3YzEuLjc5Yjg5YmViYTM4IDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvcGdzdGFzaGFkdmljZS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9wZ3N0YXNoYWR2 aWNlLnNnbWwKQEAgLTEwLDcgKzEwLDcgQEAKICA8cGFyYT4KICAgVGhlIDxmaWxlbmFtZT5wZ19z dGFzaF9hZHZpY2U8L2ZpbGVuYW1lPiBleHRlbnNpb24gYWxsb3dzIHlvdSB0byBzdGFzaAogICA8 bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UiPnBsYW4gYWR2aWNlPC9saW5rPiBzdHJpbmdzIGlu IGR5bmFtaWMKLSAgc2hhcmVkIG1lbW9yeSB3aGVyZSB0aGV5IGNhbiBiZSBhdXRvbWF0aWNhbGx5 IGFwcGxpZWQuICBBbgorICBzaGFyZWQgbWVtb3J5IHdoZXJlIHRoZXkgY2FuIGJlIGF1dG9tYXRp Y2FsbHkgYXBwbGllZC4gQW4KICAgPGxpdGVyYWw+YWR2aWNlIHN0YXNoPC9saXRlcmFsPiBpcyBh IG1hcHBpbmcgZnJvbQogICA8bGluayBsaW5rZW5kPSJndWMtY29tcHV0ZS1xdWVyeS1pZCI+cXVl cnkgaWRlbnRpZmllcnM8L2xpbms+IHRvIHBsYW4gYWR2aWNlCiAgIHN0cmluZ3MuIFdoZW5ldmVy IGEgc2Vzc2lvbiBpcyBhc2tlZCB0byBwbGFuIGEgcXVlcnkgd2hvc2UgcXVlcnkgSUQgYXBwZWFy cwpAQCAtMjUsNyArMjUsNyBAQAogICBJbiBvcmRlciB0byB1c2UgdGhpcyBtb2R1bGUsIHlvdSB3 aWxsIG5lZWQgdG8gZXhlY3V0ZQogICA8bGl0ZXJhbD5DUkVBVEUgRVhURU5TSU9OIHBnX3N0YXNo X2FkdmljZTwvbGl0ZXJhbD4gaW4gYXQgbGVhc3QKICAgb25lIGRhdGFiYXNlLCBzbyB0aGF0IHlv dSBoYXZlIGFjY2VzcyB0byB0aGUgU1FMIGZ1bmN0aW9ucyB0byBtYW5hZ2UKLSAgYWR2aWNlIHN0 YXNoZXMuICBZb3Ugd2lsbCBhbHNvIG5lZWQgdGhlIDxsaXRlcmFsPnBnX3N0YXNoX2FkdmljZTwv bGl0ZXJhbD4KKyAgYWR2aWNlIHN0YXNoZXMuIFlvdSB3aWxsIGFsc28gbmVlZCB0aGUgPGxpdGVy YWw+cGdfc3Rhc2hfYWR2aWNlPC9saXRlcmFsPgogICBtb2R1bGUgdG8gYmUgbG9hZGVkIGluIGFs bCBzZXNzaW9ucyB3aGVyZSB5b3Ugd2FudCB0aGlzIG1vZHVsZSB0bwogICBhdXRvbWF0aWNhbGx5 IGFwcGx5IGFkdmljZS4gSXQgd2lsbCB1c3VhbGx5IGJlIGJlc3QgdG8gZG8gdGhpcyBieSBhZGRp bmcKICAgPGxpdGVyYWw+cGdfc3Rhc2hfYWR2aWNlPC9saXRlcmFsPiB0bwpAQCAtNTQsMTIgKzU0 LDEyIEBACiAgIHN0cmluZyB0aGF0IHlvdSB3aXNoIHRvIHN0b3JlIGZvciBlYWNoIHF1ZXJ5LiBP bmUgd2F5IHRvIGRvIHRoaXMgaXMgdG8gdXNlCiAgIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+ OiB0aGUgPGxpdGVyYWw+VkVSQk9TRTwvbGl0ZXJhbD4gb3B0aW9uIHdpbGwKICAgc2hvdyB0aGUg cXVlcnkgSUQsIGFuZCB0aGUgPGxpdGVyYWw+UExBTl9BRFZJQ0U8L2xpdGVyYWw+IG9wdGlvbiB3 aWxsCi0gIHNob3cgcGxhbiBhZHZpY2UuICA8eHJlZiBsaW5rZW5kPSJwZ2NvbGxlY3RhZHZpY2Ui IC8+IGNhbiBiZSB1c2VkIHRvCisgIHNob3cgcGxhbiBhZHZpY2UuIDx4cmVmIGxpbmtlbmQ9InBn Y29sbGVjdGFkdmljZSIgLz4gY2FuIGJlIHVzZWQgdG8KICAgb2J0YWluIHRoaXMgaW5mb3JtYXRp b24gZm9yIGFuIGVudGlyZSB3b3JrbG9hZCwgYWx0aG91Z2ggY2FyZSBtdXN0IGJlCiAgIHRha2Vu IHNpbmNlIGl0IGNhbiB1c2UgdXAgYSBsb3Qgb2YgbWVtb3J5IHZlcnkgcXVpY2tseS4gUXVlcnkg aWRlbnRpZmllcnMgY2FuCiAgIGFsc28gYmUgb2J0YWluZWQgdGhyb3VnaCB0b29scyBzdWNoIGFz IDx4cmVmIGxpbmtlbmQ9InBnc3RhdHN0YXRlbWVudHMiIC8+CiAgIG9yIDx4cmVmIGxpbmtlbmQ9 Im1vbml0b3JpbmctcGctc3RhdC1hY3Rpdml0eS12aWV3IiAvPiwgYnV0IHRoZXNlIHRvb2xzCi0g IHdpbGwgbm90IHByb3ZpZGUgcGxhbiBhZHZpY2Ugc3RyaW5ncy4gIE5vdGUgdGhhdAorICB3aWxs IG5vdCBwcm92aWRlIHBsYW4gYWR2aWNlIHN0cmluZ3MuIE5vdGUgdGhhdAogICA8eHJlZiBsaW5r ZW5kPSJndWMtY29tcHV0ZS1xdWVyeS1pZCIgLz4gbXVzdCBiZSBlbmFibGVkIGZvciBxdWVyeQog ICBpZGVudGlmaWVycyB0byBiZSBjb21wdXRlZDsgaWYgc2V0IHRvIDxsaXRlcmFsPmF1dG88L2xp dGVyYWw+LCBsb2FkaW5nCiAgIDxsaXRlcmFsPnBnX3N0YXNoX2FkdmljZTwvbGl0ZXJhbD4gd2ls bCBlbmFibGUgaXQgYXV0b21hdGljYWxseS4KQEAgLTg0LDcgKzg0LDkgQEAKICAgPGxpdGVyYWw+ cGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWU8L2xpdGVyYWw+IGZvciB0aGVpciBzZXNzaW9uLCBh bmQgdGhpcwogICBtYXkgcmV2ZWFsIHRoZSBjb250ZW50cyBvZiBhbnkgYWR2aWNlIHN0YXNoIHdp dGggdGhhdCBuYW1lLiBVc2VycyBzaG91bGQKICAgYXNzdW1lIHRoYXQgaW5mb3JtYXRpb24gZW1i ZWRkZWQgaW4gc3Rhc2hlZCBhZHZpY2Ugc3RyaW5ncyBtYXkgYmVjb21lIHZpc2libGUKLSAgdG8g bm9ucHJpdmlsZWdlZCB1c2Vycy4KKyAgdG8gbm9ucHJpdmlsZWdlZCB1c2Vycy4gSG93ZXZlciwg YWR2aWNlIHRhcmdldHMgYXJlIHRoZSBvbmx5IGV4cGxpY2l0CisgIHVzZXJzcGFjZSBkYXRhIHBy ZXNlbnQgaW4gYWR2aWNlIHN0cmluZ3MgYW5kIG1vc3QgY2F0YWxvZyBjb250ZW50cyBhcmUKKyAg Y29uc2lkZXJlZCBub24tcHJpdmlsZWdlZCBpbiBQb3N0Z3JlU1FMLgogIDwvcGFyYT4KIAogIDxz ZWN0MiBpZD0icGdzdGFzaGFkdmljZS1mdW5jdGlvbnMiPgpAQCAtMTAyLDcgKzEwNCw4IEBACiAK ICAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgotICAgICAgQ3JlYXRlcyBhIG5ldywgZW1wdHkg YWR2aWNlIHN0YXNoIHdpdGggdGhlIGdpdmVuIG5hbWUuCisgICAgICBDcmVhdGVzIGEgbmV3LCBl bXB0eSBhZHZpY2Ugc3Rhc2ggd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgd2hpY2ggbXVzdCBub3QgYmUK KyAgICAgIHplcm8gbGVuZ3RoLgogICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAgIDwv dmFybGlzdGVudHJ5PgpAQCAtMTM0LDEwICsxMzcsMTMgQEAKICAgICA8bGlzdGl0ZW0+CiAgICAg IDxwYXJhPgogICAgICAgU3RvcmVzIGFuIGFkdmljZSBzdHJpbmcgaW4gdGhlIG5hbWVkIGFkdmlj ZSBzdGFzaCwgYXNzb2NpYXRlZCB3aXRoCi0gICAgICB0aGUgZ2l2ZW4gcXVlcnkgaWRlbnRpZmll ci4gIElmIGFuIGVudHJ5IGZvciB0aGF0IHF1ZXJ5IGlkZW50aWZpZXIKLSAgICAgIGFscmVhZHkg ZXhpc3RzIGluIHRoZSBzdGFzaCwgaXQgaXMgcmVwbGFjZWQuICBJZgorICAgICAgdGhlIGdpdmVu IHF1ZXJ5IGlkZW50aWZpZXIuIElmIGFuIGVudHJ5IGZvciB0aGF0IHF1ZXJ5IGlkZW50aWZpZXIK KyAgICAgIGFscmVhZHkgZXhpc3RzIGluIHRoZSBzdGFzaCwgaXQgaXMgcmVwbGFjZWQuIElmCiAg ICAgICA8cGFyYW1ldGVyPmFkdmljZV9zdHJpbmc8L3BhcmFtZXRlcj4gaXMgPGxpdGVyYWw+TlVM TDwvbGl0ZXJhbD4sCi0gICAgICBhbnkgZXhpc3RpbmcgZW50cnkgZm9yIHRoYXQgcXVlcnkgaWRl bnRpZmllciBpcyByZW1vdmVkLgorICAgICAgYW55IGV4aXN0aW5nIGVudHJ5IGZvciB0aGF0IHF1 ZXJ5IGlkZW50aWZpZXIgaXMgcmVtb3ZlZC4gQSB6ZXJvIGxlbmd0aCBhZHZpY2UKKyAgICAgIHN0 cmluZyBpcyBzdG9yZWQgaW4gdGhlIHN0YXNoLiBBbiBlcnJvciBpcyByYWlzZWQgaWYgc3Rhc2hf bmFtZSBkb2VzCisgICAgICBub3QgZXhpc3QuIFBhc3NpbmcgTlVMTCBmb3IgdGhlIHF1ZXJ5IGlk ZW50aWZpZXIgcmVzdWx0cyBpbiBhIHNpbGVudCBuby1vcCwKKyAgICAgIGFuZCBwYXNzaW5nIDAg aXMgbm90IHBlcm1pdHRlZCwgYnV0IG90aGVyd2lzZSwgYW55IGJpZ2ludCB2YWx1ZSBpcyBhY2Nl cHRlZC4KICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4K QEAgLTE3MCw3ICsxNzYsNyBAQAogCiAgICAgPGxpc3RpdGVtPgogICAgICA8cGFyYT4KLSAgICAg IFJldHVybnMgb25lIHJvdyBmb3IgZWFjaCBlbnRyeSBpbiB0aGUgbmFtZWQgYWR2aWNlIHN0YXNo LiAgSWYKKyAgICAgIFJldHVybnMgb25lIHJvdyBmb3IgZWFjaCBlbnRyeSBpbiB0aGUgbmFtZWQg YWR2aWNlIHN0YXNoLiBJZgogICAgICAgPHBhcmFtZXRlcj5zdGFzaF9uYW1lPC9wYXJhbWV0ZXI+ IGlzIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+LCByZXR1cm5zCiAgICAgICBlbnRyaWVzIGZyb20g YWxsIHN0YXNoZXMuCiAgICAgIDwvcGFyYT4KQEAgLTE5Nyw3ICsyMDMsNyBAQAogICAgIDxsaXN0 aXRlbT4KICAgICAgPHBhcmE+CiAgICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGFkdmlj ZSBzdGFzaCB0byBjb25zdWx0IGR1cmluZyBxdWVyeQotICAgICAgcGxhbm5pbmcuICBUaGUgZGVm YXVsdCB2YWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB3aGljaCBkaXNhYmxlcworICAgICAgcGxh bm5pbmcuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHdoaWNoIGRpc2Fi bGVzCiAgICAgICB0aGlzIG1vZHVsZS4KICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+Cg== --00000000000073200e064c12b6f2--