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 1w5DXM-0031GM-2x for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Mar 2026 02:00: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 1w5DXL-00ARUo-17 for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Mar 2026 01:59:59 +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 1w5DXK-00ARUg-3D for pgsql-hackers@lists.postgresql.org; Wed, 25 Mar 2026 01:59:59 +0000 Received: from mail-oo1-xc36.google.com ([2607:f8b0:4864:20::c36]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w5DXI-00000000ytk-3flB for pgsql-hackers@lists.postgresql.org; Wed, 25 Mar 2026 01:59:59 +0000 Received: by mail-oo1-xc36.google.com with SMTP id 006d021491bc7-67ba5921b84so2611841eaf.3 for ; Tue, 24 Mar 2026 18:59:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774403994; cv=none; d=google.com; s=arc-20240605; b=gF3COxnNBtdyGSRKRWdNDBLlli1ZZyc2K/FWgMM1864ye8KzFR/fECTDXkdMqElTmO fi3hbu8+cUucrO2QF3L5OrVZcf0Okr2J5qeKio6p8XEKDTM2bvLoVZNc9mh70HN7M65t cd/sPXOkBc8MxiYuItMSXuzKVPkBqxBF+yIzFM6nt9BCcrhTkE9W/8F/wCinPBXGtXVd qG2pMlhYaiRM1XHwMIm3Caq1b3IpZUfyUKZoaJBFTrzQ2IZfC4j/JuHRw+2de6xJs4PW N2uOVu0I7jH103lz8QpwaSUmiZrx9i3tmmYf5AwZJiJ6UNMUzUuj1ep+16JyNW5Rct91 ULuw== 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=OBAcEe4eYxmP97HubyPLgsAHyExF0SEvqHHy0z+JpVo=; fh=us3s/dcqKt6Sh73uU1/YKzJ+PnMfucoq0tVHyzySfpI=; b=DB96CefLnK0C/wral14oAOhwELMNcGFk1kFuoa4NfWkqgBHqwBXaC43lKwg3NPApKh ODoij1PiUuqmv/BxyWy0r0Gv4bpQh/EwSidMGLWv2p3n/6+vzYNnztLnW8aRYGgc+I1n Gf3mJ+qLIGqC+t8hka9231YzxCATTfQxn0/GJ5UJ92vdrvskUTjmaibR1draaoK32kxe m2IaD7TMR+ojPHwyM1wsf1hlCjjfVN5sd7Bjw1fD68w57eKtdgNlVasQTIdLZXvxiuJY Z0f2ydEF+4YW/oVu8hN86VxQ2DrsnofBDeCXqPk0jG9bvViV7ePfICx9XO0FjWz0IEja jcfA==; 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=1774403994; x=1775008794; 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=OBAcEe4eYxmP97HubyPLgsAHyExF0SEvqHHy0z+JpVo=; b=P++fhzjmnMwVeMhERgzXEXvc3yLSHbXswAXmzj95aRQhNOP4JZMGwzbQLi0n8cgxe8 ZqaTfAKYZXQfcj6A0dS5MqJZgrwtHp0ITraQXfZgrfYpW2TanPFJQebNuirAIs5wuOc2 j9IPb53dHqPkq/Ag9Uuw71rzTuHSpEwawSshdeexWfCVOdvP46DYqCseQp0tUc1aEOx1 ViplqKLcBrMvzq4eT3R4/53m6S4fBrB/1RHYyJIv0ksenV+JoKHMX9UHKY1nePy3g8Ea Y3o3p9uITxOv9NaH/U7dzd+F1w14BN8BNqukIJCSbHPnVNQlS/l1TYZTfrogFpGCYCiy L45w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774403994; x=1775008794; 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=OBAcEe4eYxmP97HubyPLgsAHyExF0SEvqHHy0z+JpVo=; b=Vmn+kXmufZYeKjd9FVm8u2gf0ED0Mw17whbsiIIrH8ElElwwVvEGbfRtNhtt3Ba5FO Mxa3DT5sjL/LHgOFx2Y0DWW+u023jkHxIXcU5hBkQ4z5RsFJoP7IPlMNdF1XBEGovJcU 7oNGXCFl0XOCeBGo7ecNbL8s147Md92Y3b0a/shbHjAhdRwALPtmyzWyMRDZiweNIEJ5 e+XLwbLmycQYw5lIZRag39ycY4N+pbsxzisfXatcI9Li41654h8bpAh+82Vruan5glSA efhS9zKE0YHr5hPYUnG3MBnTP1Zbt1A18KJ8a0bOuPftrsszzUX97XZvUxIfeU5r6Kik 7/SA== X-Forwarded-Encrypted: i=1; AJvYcCViPO3jZ1jmvqb5ZUJRhb0NQzrn+utanl3dIqjZgmAfYtvvqNz7tR4H4JDKrU3kUHQB9jpbI/FsGbIHq/Dc@lists.postgresql.org X-Gm-Message-State: AOJu0Yy/uu/oBSKKb6c1atZ1/zwhdP2XUR8mXipAJibunC49fcChoFbq NgD1nwoHkgnAm0pyTJGmmsrTFYhqDD1qkr4bJ8JvgeZeZbZ0Ha8hXI9GKCmsE262iwSMhVy9Mpz QIMkVVO2z8ayOo4aiuvKlDT65Q2L6xsRpEw== X-Gm-Gg: ATEYQzxwzNS+UArI3ag74vbS/RY3ErtrkNuQcp5+c7/FP2UlLM9ar2tSMD7CH3A1aLj OZ99/EnUEwAAvgTh3KtjnWeN3twV4L3FntskVrG08zmG69rmQ6PT6nZzPGmk0emdWFoNnkydXU1 oGtNlVIBO3DS6dMSqZgqeyiY+cZFmP5UgmSYsBPgZkD2cs+Krlx843uWgdNw3wvCAXOIn8VZwN0 pBNxygA3wZ4N9gK8jUrrsDHBMPAHK7SjklMJ3Se7aLkGYObbQSssl1ZAVq+GnDRVk9vri7OHSiG jia3u2ea/Gcnp5ekwgY1WHTcbwhS1aZJOBlGCkXFo0cIpghfIC8Y X-Received: by 2002:a05:6820:f00a:b0:67c:170c:d90a with SMTP id 006d021491bc7-67dff515bd3mr1079683eaf.33.1774403994539; Tue, 24 Mar 2026 18:59:54 -0700 (PDT) MIME-Version: 1.0 References: <21076.1748617331@localhost> <2724612.1748655287@sss.pgh.pa.us> <11894.1767966998@localhost> In-Reply-To: From: Greg Sabino Mullane Date: Tue, 24 Mar 2026 21:59:19 -0400 X-Gm-Features: AQROBzCIDGGahBkhvVBigmUvvf0o1u12uzQN73Leh8Z_imUJs0f2b0FyD9iyo5w Message-ID: Subject: Re: POC: Carefully exposing information without authentication To: Andres Freund Cc: Antonin Houska , Tom Lane , "pgsql-hackers@lists.postgresql.org" Content-Type: multipart/mixed; boundary="000000000000c89d4e064dcf9fd0" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c89d4e064dcf9fd0 Content-Type: multipart/alternative; boundary="000000000000c89d4b064dcf9fce" --000000000000c89d4b064dcf9fce Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thank you for looking over this. New version attached. On Tue, Feb 17, 2026 at 2:58=E2=80=AFPM Andres Freund = wrote: > What about direct TLS connections? Not handled. How can a cluster coordinator trust unauthenticated plain text > communication that can just be man-in-the-middled? > They cannot. But that's why this is only exposing non-critical information. Right now the security scanners that are banging on port 5432 and scraping the returned error lines are not worried about man-in-the-middle. :) Obviously, if your threat model is people capturing and modifying non-encrypted traffic to your Postgres server, you would not use this. It's not obvious that it's a good idea to expose this on the same socket as > normal client connections. IMO you'd want to limit this to a smaller set > of interfaces than normal client connections. > I'm not entirely clear what that smaller set would mean in practice. > IIRC the socket is in blocking mode at this point (that's only changed in > pq_init()), therefore this might actually block? While it's unlikely, I > don't see any guarantee that a single receive would actually get the whol= e > message from the client either, so this seems like it might fail spurious= ly. > Yes, there are some very unlikely edge cases, but this is meant to be good enough, not a perfectly bulletproof HTTP server. Clients should try again on failures. Which if they do occur for this trivial amount of traffic probably indicates much bigger problems. If we were to do this, I'd recommend a single expose GUC that has the > different values as a comma separated list, instead a growing list of GUC= s. > Done - see attached for a new version which consolidates the bools into a single comma-separated GUC called "expose_information". I also added some docs, and changed the "replica" to return "REPLICA" instead of "RECOVERY". I like the latter better, but replica lines up better with existing tools. --=20 Cheers, Greg --000000000000c89d4b064dcf9fce Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Thank you for looking over this. New version attached= .

On Tue, Feb 17, 2026 at 2:58=E2=80= =AFPM Andres Freund <andres@anaraz= el.de> wrote:
=
What about direct TLS con= nections?

Not handled.

=
How can a cluster coordin= ator trust unauthenticated plain text communication that can just be man-in= -the-middled?

They cannot. But that'= ;s why this is only exposing non-critical information. Right now the securi= ty scanners that are banging on port 5432 and scraping the returned error l= ines are not worried about man-in-the-middle. :) Obviously, if your threat = model is people capturing and modifying non-encrypted traffic to your Postg= res server, you would not use this.

It's not obvious that it's a good idea to expose this on the same s= ocket as normal client connections.=C2=A0 IMO you'd want to limit this = to a smaller set of interfaces than normal client connections.

I'm not entirely clear what that smaller set wo= uld mean in practice.
=C2=A0
IIRC the socket is in blocking mode at this point (that&= #39;s only changed in pq_init()), therefore this might actually block?=C2= =A0 While it's unlikely, I don't see any guarantee that a single re= ceive would actually get the whole message from the client either, so this = seems like it might fail spuriously.

Ye= s, there are some very unlikely edge cases, but this is meant to be good en= ough, not a perfectly bulletproof HTTP server. Clients should try again on = failures. Which if they do occur for this trivial amount of traffic probabl= y indicates much bigger problems.

If we were to do this, I'd recommend a sin= gle expose GUC that has the different values as a comma separated list, ins= tead a growing list of GUCs.

Done - see= attached for a new version which consolidates the bools into a single comm= a-separated GUC called "expose_information". I also added some do= cs, and changed the "replica" to return "REPLICA" inste= ad of "RECOVERY". I like the latter better, but replica lines up = better with existing tools.

--
=
Cheers,
Greg

--000000000000c89d4b064dcf9fce-- --000000000000c89d4e064dcf9fd0 Content-Type: application/octet-stream; name="0006-Allow-specific-information-to-be-output-directly-by-Postgres.patch" Content-Disposition: attachment; filename="0006-Allow-specific-information-to-be-output-directly-by-Postgres.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn5e8hgo0 RnJvbSAyNTdhYWE3MDZjYjI3MjE0OGQ4NzdkMGY2N2ZjZTJiYzFlNDlhMzliIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIFNhYmlubyBNdWxsYW5lIDxncmVnQHR1cm5zdGVwLmNv bT4KRGF0ZTogVHVlLCAyNCBNYXIgMjAyNiAyMToxNToyMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0hd IEFsbG93LXNwZWNpZmljLWluZm9ybWF0aW9uLXRvLWJlLW91dHB1dC1kaXJlY3RseS1ieS1Qb3N0 Z3JlcwoKLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAgICAgICAg fCAgNjEgKysrKwogc3JjL2JhY2tlbmQvdGNvcC9iYWNrZW5kX3N0YXJ0dXAuYyAgICAgICAgICAg IHwgMjYyICsrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFy YW1ldGVycy5kYXQgICAgIHwgIDEwICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNx bC5jb25mLnNhbXBsZSB8ICAgNyArCiBzcmMvaW5jbHVkZS90Y29wL2JhY2tlbmRfc3RhcnR1cC5o ICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvZ3VjX2hvb2tzLmggICAgICAg ICAgICAgICAgIHwgICAyICsKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxk ICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAxMV9leHBvc2Uu cGwgICAgfCAxMjEgKysrKysrKysKIDggZmlsZXMgY2hhbmdlZCwgNDY2IGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAxMV9leHBv c2UucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvY29uZmlnLnNnbWwKaW5kZXggOGNkZDgyNmZiZDMuLmEzMmM3ZTdmNmEwIDEwMDY0NAotLS0g YS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21s CkBAIC02NDMsNiArNjQzLDY3IEBAIGluY2x1ZGVfZGlyICdjb25mLmQnCiAKICAgICAgPHZhcmlh YmxlbGlzdD4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtZXhwb3NlLWluZm9ybWF0aW9u IiB4cmVmbGFiZWw9ImV4cG9zZV9pbmZvcm1hdGlvbiI+CisgICAgICA8dGVybT48dmFybmFtZT5l eHBvc2VfaW5mb3JtYXRpb248L3Zhcm5hbWU+ICg8dHlwZT5zdHJpbmc8L3R5cGU+KQorICAgICAg PGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5leHBvc2VfaW5mb3JtYXRpb248 L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgPC9pbmRl eHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+Cisg ICAgICAgIEFsbG93cyBmb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gYmUgcmV0dXJuZWQgZnJv bSB0aGUgc2VydmVycyB3aXRob3V0CisgICAgICAgIHJlcXVpcmluZyBhIGxvZ2luLiBSZXF1ZXN0 cyBzaG91bGQgY29tZSBpbiBhcyBhIHNpbXBsZSBIVFRQIHJlcXVlc3QgYXMgYQorICAgICAgICBH RVQgb3IgSEVBRCB0byB0aGUgUG9zdGdyZVNRTCBwb3J0LgorICAgICAgICBUaGUgZGVmYXVsdCBp cyB0aGUgZW1wdHkgc3RyaW5nLCA8bGl0ZXJhbD4nJzwvbGl0ZXJhbD4sIHdoaWNoCisgICAgICAg IHByZXZlbnRzIGFueSBpbmZvcm1hdGlvbiBmcm9tIGJlaW5nIG91dHB1dC4gVGhlIGZvbGxvd2lu ZyBvcHRpb25zIG1heSBiZQorICAgICAgICBzcGVjaWZpZWQgYWxvbmUgb3IgaW4gYSBjb21tYS1z ZXBhcmF0ZWQgbGlzdDoKKyAgICAgICA8L3BhcmE+CisKKyAgICAgICA8dGFibGUgaWQ9ImV4cG9z ZS1pbmZvcm1hdGlvbi1vcHRpb25zIj4KKyAgICAgICAgPHRpdGxlPkV4cG9zZSBJbmZvcm1hdGlv biBPcHRpb25zPC90aXRsZT4KKyAgICAgICAgPHRncm91cCBjb2xzPSIyIj4KKyAgICAgICAgIDxj b2xzcGVjIGNvbG5hbWU9ImNvbDEiIGNvbHdpZHRoPSIxKiIvPgorICAgICAgICAgPGNvbHNwZWMg Y29sbmFtZT0iY29sMiIgY29sd2lkdGg9IjIqIi8+CisgICAgICAgICA8dGhlYWQ+CisgICAgICAg ICAgPHJvdz4KKyAgICAgICAgICAgPGVudHJ5Pk5hbWU8L2VudHJ5PgorICAgICAgICAgICA8ZW50 cnk+RGVzY3JpcHRpb248L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorICAgICAgICAgPC90aGVh ZD4KKyAgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICA8cm93PgorICAgICAgICAgICA8ZW50cnk+ PGxpdGVyYWw+cmVwbGljYTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICAgICA8ZW50cnk+UmVw b3J0cyBpZiB0aGUgc2VydmVyIGlzIGEgcmVwbGljYSAoaS5lLiBpcyBpbiByZWNvdmVyeSBtb2Rl KSBvciBub3QuIElmIHRoZSByZXF1ZXN0IGlzIDxsaXRlcmFsPkhFQUQgL3JlcGxpY2E8L2xpdGVy YWw+LAorICAgICAgICAgICAgIHRoZW4gYW4gSFRUUCByZXNwb25zZSBjb2RlIG9mIDIwMCAoeWVz IGl0IGlzIGEgcmVwbGljYSkgb3IgNTAzIChub3QgYSByZXBsaWNhKSBpcyByZXR1cm5lZC4gVGhp cworICAgICAgICAgICAgIGNhbiBiZSB1c2VkIGFzIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3Ig dGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0aGUgUGF0cm9uaSBwcm9ncmFtLgor ICAgICAgICAgICAgIEZvciB0aGUgcmVxdWVzdCA8bGl0ZXJhbD5HRVQgL3JlcGxpY2E8L2xpdGVy YWw+IG9yIDxsaXRlcmFsPkdFVCAvaW5mbzwvbGl0ZXJhbD4sCisgICAgICAgICAgICAgdGhlIHN0 cmluZyA8bGl0ZXJhbD5SRVBMSUNBOiAxPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5SRVBMSUNBOiAw PC9saXRlcmFsPiBpcyByZXR1cm5lZC48L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAg ICAgICAgPHJvdz4KKyAgICAgICAgICAgPGVudHJ5PjxsaXRlcmFsPnN5c2lkPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgICAgIDxlbnRyeT5SZXR1cm5zIHRoZSBzeXN0ZW0gaWRlbnRpZmllciBv ZiB0aGUgc2VydmVyLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gZGV0ZXJtaW5lIGlmIHRoZSB1bmRl cmx5aW5nCisgICAgICAgICAgICAgc2VydmVyIGhhcyBjaGFuZ2VkLCBhcyB0aGUgaW5pdGRiIHBy b2dyYW0gd2lsbCBhbHdheXMgZ2VuZXJhdGUgYSBuZXcgc3lzdGVtIGlkZW50aWZpZXIuCisgICAg ICAgICAgICAgRm9yIHRoZSByZXF1ZXN0IDxsaXRlcmFsPkdFVCAvc3lzaWQ8L2xpdGVyYWw+IG9y IDxsaXRlcmFsPkdFVCAvaW5mbzwvbGl0ZXJhbD4sCisgICAgICAgICAgICAgdGhlIHN0cmluZyA8 bGl0ZXJhbD5TWVNJRDogMTIzNDU8L2xpdGVyYWw+IGlzIHJldHVybmVkLCBpbiB3aGljaCAiMTIz NDUiIHdpbGwgYmUKKyAgICAgICAgICAgICB0aGUgc3BlY2lmaWMgc3lzdGVtIGlkZW50aWZpZXIg KHR5cGljYWxseSBhIDIwLWRpZ2l0IG51bWJlcik8L2VudHJ5PgorICAgICAgICAgIDwvcm93Pgor CisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgPGVudHJ5PjxsaXRlcmFsPnZlcnNpb248L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgICAgPGVudHJ5PlJldHVybnMgdGhlIGN1cnJlbnQgdmVy c2lvbiBvZiB0aGUgc2VydmVyLiBTcGVjaWZpY2FsbHksIHRoZSB2YWx1ZSBvZgorICAgICAgICAg ICAgIDxsaXRlcmFsPnNlcnZlcl92ZXJzaW9uX251bTwvbGl0ZXJhbD4uCisgICAgICAgICAgICAg Rm9yIHRoZSByZXF1ZXN0IDxsaXRlcmFsPkdFVCAvdmVyc2lvbjwvbGl0ZXJhbD4gb3IgPGxpdGVy YWw+R0VUIC9pbmZvPC9saXRlcmFsPiwKKyAgICAgICAgICAgICB0aGUgc3RyaW5nIDxsaXRlcmFs PlZFUlNJT046IDE5MDAwMDwvbGl0ZXJhbD4gaXMgcmV0dXJuZWQgKGZvciB0aGlzIGV4YW1wbGUs CisgICAgICAgICAgICAgdGhlIHZlcnNpb24gb2YgUG9zdGdyZXMgaXMgMTkuMCk8L2VudHJ5Pgor ICAgICAgICAgIDwvcm93PgorICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgPC90Z3JvdXA+Cisg ICAgICAgPC90YWJsZT4KKworICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+ CisKICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWxpc3Rlbi1hZGRyZXNzZXMiIHhyZWZsYWJl bD0ibGlzdGVuX2FkZHJlc3NlcyI+CiAgICAgICA8dGVybT48dmFybmFtZT5saXN0ZW5fYWRkcmVz c2VzPC92YXJuYW1lPiAoPHR5cGU+c3RyaW5nPC90eXBlPikKICAgICAgIDxpbmRleHRlcm0+CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL2JhY2tlbmRfc3RhcnR1cC5jIGIvc3JjL2JhY2tl bmQvdGNvcC9iYWNrZW5kX3N0YXJ0dXAuYwppbmRleCA1YWJmMjc2Yzg5OC4uMjcxZWE5ZGRjYjgg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvYmFja2VuZF9zdGFydHVwLmMKKysrIGIvc3Jj L2JhY2tlbmQvdGNvcC9iYWNrZW5kX3N0YXJ0dXAuYwpAQCAtNDYsNiArNDYsMzMgQEAKIGJvb2wJ CVRyYWNlX2Nvbm5lY3Rpb25fbmVnb3RpYXRpb24gPSBmYWxzZTsKIHVpbnQzMgkJbG9nX2Nvbm5l Y3Rpb25zID0gMDsKIGNoYXIJICAgKmxvZ19jb25uZWN0aW9uc19zdHJpbmcgPSBOVUxMOworaW50 CQkJRXhwb3NlX2luZm9ybWF0aW9uID0gMDsKK2NoYXIJICAgKkV4cG9zZV9pbmZvcm1hdGlvbl9z dHJpbmcgPSBOVUxMOworCisvKiBFeHBvc2UgaW5mb3JtYXRpb24gYml0bWFwICovCisjZGVmaW5l IEVYUE9TRV9JTkZPX1JFUExJQ0EJIDEKKyNkZWZpbmUgRVhQT1NFX0lORk9fU1lTSUQJIDIKKyNk ZWZpbmUgRVhQT1NFX0lORk9fVkVSU0lPTiAgNAorCisjZGVmaW5lIEVYUE9TRV9NSU5fUVVFUlkg OQkJLyogU2hvcnRlc3QgcG9zc2libGUgbGluZTogIkdldCAvaW5mbyIgKi8KKyNkZWZpbmUgRVhQ T1NFX01BWF9RVUVSWSAxNgkJLyogTG9uZ2VzdCBwb3NzaWJsZSBHRVQgbGluZSAqLworCit0eXBl ZGVmIGVudW0KK3sKKwlFWFBPU0VfTk9USElORywKKwlFWFBPU0VfSEVBRF9SRVBMSUNBLAorCUVY UE9TRV9HRVRfQUxMLAorCUVYUE9TRV9HRVRfUkVQTElDQSwKKwlFWFBPU0VfR0VUX1NZU0lELAor CUVYUE9TRV9HRVRfVkVSU0lPTiwKK30JCQlFeHBvc2VSZXR1cm5UeXBlOworCit0eXBlZGVmIHN0 cnVjdAoreworCWNvbnN0IGNoYXIgKmVuZHBvaW50OworCWludAkJCXJlcXVpcmU7CisJRXhwb3Nl UmV0dXJuVHlwZSB0eXBlOworfQkJCWVuZHBvaW50X2FjdGlvbjsKIAogLyogT3RoZXIgZ2xvYmFs cyAqLwogCkBAIC02NSw2ICs5Miw3IEBAIHN0YXRpYyB2b2lkIFNlbmROZWdvdGlhdGVQcm90b2Nv bFZlcnNpb24oTGlzdCAqdW5yZWNvZ25pemVkX3Byb3RvY29sX29wdGlvbnMpOwogc3RhdGljIHZv aWQgcHJvY2Vzc19zdGFydHVwX3BhY2tldF9kaWUoU0lHTkFMX0FSR1MpOwogc3RhdGljIHZvaWQg U3RhcnR1cFBhY2tldFRpbWVvdXRIYW5kbGVyKHZvaWQpOwogc3RhdGljIGJvb2wgdmFsaWRhdGVf bG9nX2Nvbm5lY3Rpb25zX29wdGlvbnMoTGlzdCAqZWxlbWxpc3QsIHVpbnQzMiAqZmxhZ3MpOwor c3RhdGljIGJvb2wgRXhwb3NlSW5mb3JtYXRpb24ocGdzb2NrZXQgZmQpOwogCiAvKgogICogRW50 cnkgcG9pbnQgZm9yIGEgbmV3IGJhY2tlbmQgcHJvY2Vzcy4KQEAgLTE0OCw2ICsxNzYsMTUgQEAg QmFja2VuZEluaXRpYWxpemUoQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaywgQ0FDX3N0YXRlIGNh YykKIAlTdHJpbmdJbmZvRGF0YSBwc19kYXRhOwogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsK IAorCS8qCisJICogU2NhbiBmb3IgYSBzaW1wbGUgR0VUIC8gSEVBRCByZXF1ZXN0LiBJZiB0aGlz IGlzIGRldGVjdGVkIGFuZCBoYW5kbGVkLAorCSAqIHdlIGFyZSBkb25lIGFuZCBjYW4gaW1tZWRp YXRlbHkgZXhpdC4KKwkgKi8KKwlpZiAoKEV4cG9zZV9pbmZvcm1hdGlvbiA+IDApCisJCSYmIEV4 cG9zZUluZm9ybWF0aW9uKGNsaWVudF9zb2NrLT5zb2NrKSkKKwkJX2V4aXQoMCk7CQkJCS8qIFNh ZmUgdG8gdXNlIGV4aXQ6IG5vIHN0YXRlIG9yIHJlc291cmNlcworCQkJCQkJCQkgKiBjcmVhdGVk IHlldCAqLworCiAJLyogVGVsbCBmZC5jIGFib3V0IHRoZSBsb25nLWxpdmVkIEZEIGFzc29jaWF0 ZWQgd2l0aCB0aGUgY2xpZW50X3NvY2sgKi8KIAlSZXNlcnZlRXh0ZXJuYWxGRCgpOwogCkBAIC0x MDc1LDYgKzExMTIsNzIgQEAgbmV4dDoJOwogfQogCiAKKy8qCisgKiBHVUMgY2hlY2tfaG9vayBm b3IgZXhwb3NlX2luZm9ybWF0aW9uCisgKi8KK2Jvb2wKK2NoZWNrX2V4cG9zZV9pbmZvcm1hdGlv bihjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCit7CisJY2hh cgkgICAqcmF3c3RyaW5nOworCUxpc3QJICAgKmVsZW1saXN0OworCUxpc3RDZWxsICAgKmw7CisJ aW50CQkJbmV3ZXhwb3NlID0gMDsKKwlpbnQJCSAgICpteWV4dHJhOworCisJLyogTmVlZCBhIG1v ZGlmaWFibGUgY29weSBvZiBzdHJpbmcgKi8KKwlyYXdzdHJpbmcgPSBwc3RyZHVwKCpuZXd2YWwp OworCisJLyogUGFyc2Ugc3RyaW5nIGludG8gbGlzdCBvZiBpZGVudGlmaWVycyAqLworCWlmICgh U3BsaXRJZGVudGlmaWVyU3RyaW5nKHJhd3N0cmluZywgJywnLCAmZWxlbWxpc3QpKQorCXsKKwkJ Lyogc3ludGF4IGVycm9yIGluIGxpc3QgKi8KKwkJR1VDX2NoZWNrX2VycmRldGFpbCgiTGlzdCBz eW50YXggaXMgaW52YWxpZC4iKTsKKwkJcGZyZWUocmF3c3RyaW5nKTsKKwkJbGlzdF9mcmVlKGVs ZW1saXN0KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWZvcmVhY2gobCwgZWxlbWxpc3QpCisJ eworCQljaGFyCSAgICp0b2sgPSAoY2hhciAqKSBsZmlyc3QobCk7CisKKwkJaWYgKHBnX3N0cmNh c2VjbXAodG9rLCAicmVwbGljYSIpID09IDApCisJCQluZXdleHBvc2UgfD0gRVhQT1NFX0lORk9f UkVQTElDQTsKKwkJZWxzZSBpZiAocGdfc3RyY2FzZWNtcCh0b2ssICJzeXNpZCIpID09IDApCisJ CQluZXdleHBvc2UgfD0gRVhQT1NFX0lORk9fU1lTSUQ7CisJCWVsc2UgaWYgKHBnX3N0cmNhc2Vj bXAodG9rLCAidmVyc2lvbiIpID09IDApCisJCQluZXdleHBvc2UgfD0gRVhQT1NFX0lORk9fVkVS U0lPTjsKKwkJZWxzZQorCQl7CisJCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCJVbnJlY29nbml6ZWQg a2V5IHdvcmQ6IFwiJXNcIi4iLCB0b2spOworCQkJcGZyZWUocmF3c3RyaW5nKTsKKwkJCWxpc3Rf ZnJlZShlbGVtbGlzdCk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwlwZnJlZShyYXdz dHJpbmcpOworCWxpc3RfZnJlZShlbGVtbGlzdCk7CisKKwlteWV4dHJhID0gKGludCAqKSBndWNf bWFsbG9jKExPRywgc2l6ZW9mKGludCkpOworCWlmICghbXlleHRyYSkKKwkJcmV0dXJuIGZhbHNl OworCSpteWV4dHJhID0gbmV3ZXhwb3NlOworCSpleHRyYSA9IG15ZXh0cmE7CisKKwlyZXR1cm4g dHJ1ZTsKK30KKworLyoKKyAqIEdVQyBhc3NpZ25faG9vayBmb3IgZXhwb3NlX2luZm9ybWF0aW9u CisgKi8KK3ZvaWQKK2Fzc2lnbl9leHBvc2VfaW5mb3JtYXRpb24oY29uc3QgY2hhciAqbmV3dmFs LCB2b2lkICpleHRyYSkKK3sKKwlFeHBvc2VfaW5mb3JtYXRpb24gPSAqKChpbnQgKikgZXh0cmEp OworfQorCisKIC8qCiAgKiBHVUMgY2hlY2sgaG9vayBmb3IgbG9nX2Nvbm5lY3Rpb25zCiAgKi8K QEAgLTExMjcsMyArMTIzMCwxNjIgQEAgYXNzaWduX2xvZ19jb25uZWN0aW9ucyhjb25zdCBjaGFy ICpuZXd2YWwsIHZvaWQgKmV4dHJhKQogewogCWxvZ19jb25uZWN0aW9ucyA9ICooKGludCAqKSBl eHRyYSk7CiB9CisKKy8qCisgKiBFeHBvc2VJbmZvcm1hdGlvbgorICoKKyAqIEhhbmRsZSBlYXJs eSBzb2NrZXQgcHJvYmUgYmVmb3JlIGZ1bGwgYmFja2VuZCBzdGFydHVwLgorICogUmVzcG9uZHMg dG8gc21hbGwgc2V0IG9mIHByZWRlZmluZWQgZW5kcG9pbnRzIChlLmcuIEdFVCAvaW5mbykKKyAq CisgKiBSZXF1aXJlcyB0aGUgZXhwb3NlX2luZm9ybWF0aW9uIEdVQyB0byBiZSBub24tZW1wdHkK KyAqCisgKiBSZXR1cm5zIHRydWUgaWYgYW55IGVuZHBvaW50IGlzIHJlY29nbml6ZWQuCisgKi8K Kworc3RhdGljIGJvb2wKK0V4cG9zZUluZm9ybWF0aW9uKHBnc29ja2V0IGZkKQoreworCXN0YXRp YyBjb25zdCBlbmRwb2ludF9hY3Rpb24gZW5kcG9pbnRfYWN0aW9uc1tdID0KKwl7CisJCXsKKwkJ CSJIRUFEIC9yZXBsaWNhIiwgRVhQT1NFX0lORk9fUkVQTElDQSwgRVhQT1NFX0hFQURfUkVQTElD QQorCQl9LAorCQl7CisJCQkiR0VUIC9yZXBsaWNhIiwgRVhQT1NFX0lORk9fUkVQTElDQSwgRVhQ T1NFX0dFVF9SRVBMSUNBCisJCX0sCisJCXsKKwkJCSJHRVQgL3N5c2lkIiwgRVhQT1NFX0lORk9f U1lTSUQsIEVYUE9TRV9HRVRfU1lTSUQKKwkJfSwKKwkJeworCQkJIkdFVCAvdmVyc2lvbiIsIEVY UE9TRV9JTkZPX1ZFUlNJT04sIEVYUE9TRV9HRVRfVkVSU0lPTgorCQl9LAorCQl7CisJCQkiR0VU IC9pbmZvIiwgMCwgRVhQT1NFX0dFVF9BTEwKKwkJfQorCX07CisKKwlzc2l6ZV90CQluOworCWNo YXIJCWJ1ZltFWFBPU0VfTUFYX1FVRVJZICsgMV07CisJRXhwb3NlUmV0dXJuVHlwZSB0eXBlOwor CisJQXNzZXJ0KEV4cG9zZV9pbmZvcm1hdGlvbiA+IDApOworCisJZG8KKwl7CisJCW4gPSByZWN2 KGZkLCBidWYsIEVYUE9TRV9NQVhfUVVFUlksIE1TR19QRUVLKTsKKwl9IHdoaWxlIChuIDwgMCAm JiBlcnJubyA9PSBFSU5UUik7CisKKwkvKgorCSAqIExlYXZlIGFzIHNvb24gYXMgcG9zc2libGUg aWYgbm8gY2hhbmNlIHdlIGFyZSBpbnRlcmVzdGVkLiBXZSBhbHNvIGxlYXZlCisJICogb24gcGFy dGlhbCByZWFkcyBmcm9tIHNsb3cgY2xpZW50cy4gTm90ZSB0aGF0IHdlIHJldHVybiBmYWxzZSBm b3IgbiA9PQorCSAqIC0xCisJICovCisJaWYgKG4gPCBFWFBPU0VfTUlOX1FVRVJZKQorCQlyZXR1 cm4gZmFsc2U7CisKKwlidWZbbl0gPSAnXDAnOworCisJdHlwZSA9IEVYUE9TRV9OT1RISU5HOwor CWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3Rob2YoZW5kcG9pbnRfYWN0aW9ucyk7IGkrKykKKwl7 CisJCWlmICgKKwkJCXBnX3N0cm5jYXNlY21wKGJ1ZiwgZW5kcG9pbnRfYWN0aW9uc1tpXS5lbmRw b2ludCwgc3RybGVuKGVuZHBvaW50X2FjdGlvbnNbaV0uZW5kcG9pbnQpKSA9PSAwCisJCQkmJgor CQkJKChlbmRwb2ludF9hY3Rpb25zW2ldLnJlcXVpcmUgPT0gMCkKKwkJCSB8fAorCQkJIChFeHBv c2VfaW5mb3JtYXRpb24gJiBlbmRwb2ludF9hY3Rpb25zW2ldLnJlcXVpcmUpCisJCQkgKSkKKwkJ eworCQkJdHlwZSA9IGVuZHBvaW50X2FjdGlvbnNbaV0udHlwZTsKKwkJCWJyZWFrOworCQl9CisJ fQorCisJaWYgKHR5cGUgPT0gRVhQT1NFX05PVEhJTkcpCisJCXJldHVybiBmYWxzZTsKKworCXsK KwkJc3RhdGljIGNvbnN0IGNoYXIgaHR0cF92ZXJzaW9uW10gPSAiSFRUUC8xLjEiOworCQlzdGF0 aWMgY29uc3QgY2hhciBodHRwX3R5cGVbXSA9ICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW4iOwor CQlzdGF0aWMgY29uc3QgY2hhciBodHRwX2Nvbm5bXSA9ICJDb25uZWN0aW9uOiBjbG9zZSI7CisJ CXN0YXRpYyBjb25zdCBjaGFyIGh0dHBfbGVuW10gPSAiQ29udGVudC1MZW5ndGgiOworCisJCVN0 cmluZ0luZm9EYXRhIG1zZzsKKworCQlpZiAodHlwZSA9PSBFWFBPU0VfSEVBRF9SRVBMSUNBKQor CQl7CisJCQkvKgorCQkJICogQ2FsbGVyIG9ubHkgY2FyZXMgYWJvdXQgdGhlIEhUVFAgcmVzcG9u c2UgY29kZSwgc28gbm8gY29udGVudAorCQkJICogbmVlZGVkCisJCQkgKi8KKworCQkJaW5pdFN0 cmluZ0luZm9FeHQoJm1zZywgNjQpOworCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZtc2csCisJCQkJ CQkJICIlcyAlc1xyXG4iCisJCQkJCQkJICIlc1xyXG4iCisJCQkJCQkJICIlc1xyXG5cclxuIiwK KwkJCQkJCQkgaHR0cF92ZXJzaW9uLAorCQkJCQkJCSAoUmVjb3ZlcnlJblByb2dyZXNzKCkgPyAi MjAwIE9LIiA6ICI1MDMgU2VydmljZSBVbmF2YWlsYWJsZSIpLAorCQkJCQkJCSBodHRwX3R5cGUs CisJCQkJCQkJIGh0dHBfY29ubgorCQkJCSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlTdHJpbmdJ bmZvRGF0YSBjb250ZW50OworCisJCQlpbml0U3RyaW5nSW5mb0V4dCgmY29udGVudCwgNjQpOwor CisJCQlpZiAoKEV4cG9zZV9pbmZvcm1hdGlvbiAmIEVYUE9TRV9JTkZPX1JFUExJQ0EpCisJCQkJ JiYKKwkJCQkodHlwZSA9PSBFWFBPU0VfR0VUX0FMTCB8fCB0eXBlID09IEVYUE9TRV9HRVRfUkVQ TElDQSkpCisJCQkJYXBwZW5kU3RyaW5nSW5mbygmY29udGVudCwgIiVzJWRcclxuIiwKKwkJCQkJ CQkJIHR5cGUgPT0gRVhQT1NFX0dFVF9BTEwgPyAiUkVQTElDQTogIiA6ICIiLAorCQkJCQkJCQkg UmVjb3ZlcnlJblByb2dyZXNzKCkgPyAxIDogMCk7CisJCQlpZiAoKEV4cG9zZV9pbmZvcm1hdGlv biAmIEVYUE9TRV9JTkZPX1NZU0lEKQorCQkJCSYmCisJCQkJKHR5cGUgPT0gRVhQT1NFX0dFVF9B TEwgfHwgdHlwZSA9PSBFWFBPU0VfR0VUX1NZU0lEKSkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZj b250ZW50LCAiJXMiIFVJTlQ2NF9GT1JNQVQgIlxyXG4iLAorCQkJCQkJCQkgdHlwZSA9PSBFWFBP U0VfR0VUX0FMTCA/ICJTWVNJRDogIiA6ICIiLAorCQkJCQkJCQkgR2V0U3lzdGVtSWRlbnRpZmll cigpKTsKKwkJCWlmICgoRXhwb3NlX2luZm9ybWF0aW9uICYgRVhQT1NFX0lORk9fVkVSU0lPTikK KwkJCQkmJgorCQkJCSh0eXBlID09IEVYUE9TRV9HRVRfQUxMIHx8IHR5cGUgPT0gRVhQT1NFX0dF VF9WRVJTSU9OKSkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZjb250ZW50LCAiJXMlZFxyXG4iLAor CQkJCQkJCQkgdHlwZSA9PSBFWFBPU0VfR0VUX0FMTCA/ICJWRVJTSU9OOiAiIDogIiIsCisJCQkJ CQkJCSBQR19WRVJTSU9OX05VTSk7CisKKwkJCWluaXRTdHJpbmdJbmZvRXh0KCZtc2csIDI1Nik7 CisKKwkJCWFwcGVuZFN0cmluZ0luZm8oJm1zZywKKwkJCQkJCQkgIiVzIDIwMCBPS1xyXG4iCisJ CQkJCQkJICIlc1xyXG4iCisJCQkJCQkJICIlczogJWRcclxuIgorCQkJCQkJCSAiJXNcclxuXHJc biIKKwkJCQkJCQkgIiVzIiwKKwkJCQkJCQkgaHR0cF92ZXJzaW9uLAorCQkJCQkJCSBodHRwX3R5 cGUsCisJCQkJCQkJIGh0dHBfbGVuLCBjb250ZW50LmxlbiwKKwkJCQkJCQkgaHR0cF9jb25uLAor CQkJCQkJCSBjb250ZW50LmRhdGEKKwkJCQkpOworCisJCQlwZnJlZShjb250ZW50LmRhdGEpOwor CQl9CisKKwkJZG8KKwkJeworCQkJbiA9IHNlbmQoZmQsIG1zZy5kYXRhLCBtc2cubGVuLCAwKTsK KwkJfSB3aGlsZSAobiA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOworCisJCXBmcmVlKG1zZy5kYXRh KTsKKworCQlpZiAobiA8IDApCisJCQllbG9nKERFQlVHMSwgImNvdWxkIG5vdCBzZW5kIHRvIGNs aWVudDogJW0iKTsKKworCQlyZXR1cm4gdHJ1ZTsKKworCX0KKworfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRleCAwYzk4NTRhZDhmYy4uOGM4YWQwZDhkMGEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0Cisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBAIC0xMDEwLDYg KzEwMTAsMTYgQEAKICAgYm9vdF92YWwgPT4gJ2ZhbHNlJywKIH0sCiAKK3sgbmFtZSA9PiAnZXhw b3NlX2luZm9ybWF0aW9uJywgdHlwZSA9PiAnc3RyaW5nJywgY29udGV4dCA9PiAnUEdDX1NJR0hV UCcsIGdyb3VwID0+ICdDT05OX0FVVEhfQVVUSCcsCisgIHNob3J0X2Rlc2MgPT4gJ0V4cG9zZSBs aW1pdGVkIGluZm9ybWF0aW9uIHdpdGhvdXQgbmVlZGluZyB0byBsb2dpbicsCisgIGxvbmdfZGVz YyA9PiAnVmFsaWQgdmFsdWVzIGFyZSBjb21iaW5hdGlvbnMgb2YgInJlcGxpY2EiLCAic3lzaWQi LCBhbmQgInZlcnNpb24iJywKKyAgZmxhZ3MgPT4gJ0dVQ19MSVNUX0lOUFVUJywKKyAgdmFyaWFi bGUgPT4gJ0V4cG9zZV9pbmZvcm1hdGlvbl9zdHJpbmcnLAorICBib290X3ZhbCA9PiAnIiInLAor ICBjaGVja19ob29rID0+ICdjaGVja19leHBvc2VfaW5mb3JtYXRpb24nLAorICBhc3NpZ25faG9v ayA9PiAnYXNzaWduX2V4cG9zZV9pbmZvcm1hdGlvbicsCit9LAorCiB7IG5hbWUgPT4gJ2V4dGVu c2lvbl9jb250cm9sX3BhdGgnLCB0eXBlID0+ICdzdHJpbmcnLCBjb250ZXh0ID0+ICdQR0NfU1VT RVQnLCBncm91cCA9PiAnQ0xJRU5UX0NPTk5fT1RIRVInLAogICBzaG9ydF9kZXNjID0+ICdTZXRz IHRoZSBwYXRoIGZvciBleHRlbnNpb24gY29udHJvbCBmaWxlcy4nLAogICBsb25nX2Rlc2MgPT4g J1RoZSByZW1haW5pbmcgZXh0ZW5zaW9uIHNjcmlwdCBhbmQgc2Vjb25kYXJ5IGNvbnRyb2wgZmls ZXMgYXJlIHRoZW4gbG9hZGVkIGZyb20gdGhlIHNhbWUgZGlyZWN0b3J5IHdoZXJlIHRoZSBwcmlt YXJ5IGNvbnRyb2wgZmlsZSB3YXMgZm91bmQuJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv cG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBlNGFiZTZjMDA3Ny4uNWUzNjFmZDRiNTggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQor KysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTkz LDYgKzkzLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBk aXNjb25uZWN0aW9uIHdoaWxlIHJ1bm5pbmcgcXVlcmllczsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIDAgZm9yIG5ldmVyCiAKKyMgLSBFeHBvc2UgaW5mb3JtYXRp b24gLQorCitleHBvc2VfaW5mb3JtYXRpb24gPSAnJyAjIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9m IGl0ZW1zIHRvIGV4cG9zZQorICAgICAgICAgICAgICAgICAgICAgICAgIyByZXBsaWNhID0gaWYg dGhlIHNlcnZlciBpcyBpbiByZWNvdmVyeSBvciBub3QKKyAgICAgICAgICAgICAgICAgICAgICAg ICMgc3lzaWQgPSB0aGUgY3VycmVudCBzeXN0ZW0gaWRlbnRpZmllciBmb3IgdGhpcyBzZXJ2ZXIK KyAgICAgICAgICAgICAgICAgICAgICAgICMgdmVyc2lvbiA9IHRoZSBjdXJyZW50IHZlcnNpb24g b2YgdGhpcyBzZXJ2ZXIKKwogIyAtIEF1dGhlbnRpY2F0aW9uIC0KIAogI2F1dGhlbnRpY2F0aW9u X3RpbWVvdXQgPSAxbWluICAgICAgICAgICMgMXMtNjAwcwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvdGNvcC9iYWNrZW5kX3N0YXJ0dXAuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvYmFja2VuZF9zdGFy dHVwLmgKaW5kZXggZDQ4NmY5MjYzMTkuLjYyMDRkZDk4ZTgxIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS90Y29wL2JhY2tlbmRfc3RhcnR1cC5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvYmFja2Vu ZF9zdGFydHVwLmgKQEAgLTIwLDYgKzIwLDggQEAKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIFRy YWNlX2Nvbm5lY3Rpb25fbmVnb3RpYXRpb247CiBleHRlcm4gUEdETExJTVBPUlQgdWludDMyIGxv Z19jb25uZWN0aW9uczsKIGV4dGVybiBQR0RMTElNUE9SVCBjaGFyICpsb2dfY29ubmVjdGlvbnNf c3RyaW5nOworZXh0ZXJuIFBHRExMSU1QT1JUIGludCBFeHBvc2VfaW5mb3JtYXRpb247CitleHRl cm4gUEdETExJTVBPUlQgY2hhciAqRXhwb3NlX2luZm9ybWF0aW9uX3N0cmluZzsKIAogLyogT3Ro ZXIgZ2xvYmFscyAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIHN0cnVjdCBDb25uZWN0aW9uVGltaW5n IGNvbm5fdGltaW5nOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZ3VjX2hvb2tzLmgg Yi9zcmMvaW5jbHVkZS91dGlscy9ndWNfaG9va3MuaAppbmRleCBiMDE2OTdjMWY2MC4uMDRkOWYw MjRkMjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2d1Y19ob29rcy5oCisrKyBiL3Ny Yy9pbmNsdWRlL3V0aWxzL2d1Y19ob29rcy5oCkBAIC02Miw2ICs2Miw4IEBAIGV4dGVybiB2b2lk IGFzc2lnbl9kZWZhdWx0X3RleHRfc2VhcmNoX2NvbmZpZyhjb25zdCBjaGFyICpuZXd2YWwsIHZv aWQgKmV4dHJhKTsKIGV4dGVybiBib29sIGNoZWNrX2RlZmF1bHRfd2l0aF9vaWRzKGJvb2wgKm5l d3ZhbCwgdm9pZCAqKmV4dHJhLAogCQkJCQkJCQkJR3VjU291cmNlIHNvdXJjZSk7CiBleHRlcm4g Y29uc3QgY2hhciAqc2hvd19lZmZlY3RpdmVfd2FsX2xldmVsKHZvaWQpOworZXh0ZXJuIGJvb2wg Y2hlY2tfZXhwb3NlX2luZm9ybWF0aW9uKGNoYXIgKipuZXd2YWwsIHZvaWQgKipleHRyYSwgR3Vj U291cmNlIHNvdXJjZSk7CitleHRlcm4gdm9pZCBhc3NpZ25fZXhwb3NlX2luZm9ybWF0aW9uKGNv bnN0IGNoYXIgKm5ld3ZhbCwgdm9pZCAqZXh0cmEpOwogZXh0ZXJuIGJvb2wgY2hlY2tfaHVnZV9w YWdlX3NpemUoaW50ICpuZXd2YWwsIHZvaWQgKipleHRyYSwgR3VjU291cmNlIHNvdXJjZSk7CiBl eHRlcm4gdm9pZCBhc3NpZ25faW9fbWV0aG9kKGludCBuZXd2YWwsIHZvaWQgKmV4dHJhKTsKIGV4 dGVybiBib29sIGNoZWNrX2lvX21heF9jb25jdXJyZW5jeShpbnQgKm5ld3ZhbCwgdm9pZCAqKmV4 dHJhLCBHdWNTb3VyY2Ugc291cmNlKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9taXNjL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVp bGQKaW5kZXggNmU4ZGIxNjIxYTcuLmM0MGEwNDU1NzA4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfbWlzYy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf bWlzYy9tZXNvbi5idWlsZApAQCAtMTksNiArMTksNyBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8w MDhfcmVwbHNsb3Rfc2luZ2xlX3VzZXIucGwnLAogICAgICAgJ3QvMDA5X2xvZ190ZW1wX2ZpbGVz LnBsJywKICAgICAgICd0LzAxMF9pbmRleF9jb25jdXJyZW50bHlfdXBzZXJ0LnBsJywKKyAgICAg ICd0LzAxMV9leHBvc2UucGwnLAogICAgIF0sCiAgICAgIyBUaGUgaW5qZWN0aW9uIHBvaW50cyBh cmUgY2x1c3Rlci13aWRlLCBzbyBkaXNhYmxlIGluc3RhbGxjaGVjawogICAgICdydW5uaW5nY2hl Y2snOiBmYWxzZSwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDEx X2V4cG9zZS5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDExX2V4cG9zZS5wbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGY5N2I5ODA5NmIKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAxMV9leHBvc2UucGwK QEAgLTAsMCArMSwxMjEgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorCisjIFRlc3QgZ2F0aGVyaW5nIGluZm9ybWF0aW9uIGJlZm9y ZSBhdXRoZW50aWNhdGlvbiB2aWEgZXhwb3NlXyogdmFyaWFibGVzCisKKyMgRm9yY2UgdXNlIG9m IFRDUC9JUCAtIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgJ3VzZScgc2VjdGlvbgorSU5JVHsg JFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp1c2VfdW5peF9zb2NrZXRzID0gMDsgfQorCit1c2Ug c3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1 c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJG5vZGUg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUxJyk7CisKKyMgU2V0IGFzIGxv Z2ljYWwgaGVyZSBzbyB3ZSBjYW4gcmVzdGFydCBpdCBhcyBhIHJlcGxpY2EgbGF0ZXIKKyRub2Rl LT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlLT5zdGFydDsKKwor bXkgJHNlcnZlcl92ZXJzaW9uID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnc2hvdyBz ZXJ2ZXJfdmVyc2lvbl9udW0nKTsKK215ICRiaW5kaXIgPSAkbm9kZS0+Y29uZmlnX2RhdGEoJy0t YmluZGlyJyk7CitteSAkZGF0YWRpciA9ICRub2RlLT5kYXRhX2RpcjsKK215ICRjZGF0YSA9IHF4 eyRiaW5kaXIvcGdfY29udHJvbGRhdGEgLUQgJGRhdGFkaXIgMj4mMX07CitteSAoJHN5c2lkKSA9 ICRjZGF0YSA9fiAvRGF0YWJhc2Ugc3lzdGVtIGlkZW50aWZpZXI6XHMrKFxkKykvOworbXkgJHJl Y2VpdmVfbGVuZ3RoID0gMjAwOworCitteSAoJHNvY2tldCwgJHJlc3BvbnNlLCAkdGVzdCk7CisK K3N1YiBjYWxsX3NvY2tldCB7CisJbXkgJHN0cmluZyA9IHNoaWZ0OworCSRzb2NrZXQtPmNsb3Nl KCkgaWYgZGVmaW5lZCAkc29ja2V0OworCSRzb2NrZXQgPSAkbm9kZS0+cmF3X2Nvbm5lY3QoKTsK Kwkkc29ja2V0LT5zZW5kKCRzdHJpbmcpOworCSRyZXNwb25zZSA9ICcnOworCXNlbGVjdCh1bmRl ZiwgdW5kZWYsIHVuZGVmLCAwLjEpOworCSRzb2NrZXQtPnJlY3YoJHJlc3BvbnNlLCAkcmVjZWl2 ZV9sZW5ndGgpOworCXJldHVybjsKK30KKworJHRlc3QgPSAnR0VUIC9pbmZvIHJldHVybnMgbm90 aGluZyB3aGVuIG5vdGhpbmcgaXMgbGlzdGVuaW5nJzsKK2NhbGxfc29ja2V0KCdHRVQgL2luZm8n KTsKK2lzICgkcmVzcG9uc2UsICcnLCAkdGVzdCk7CisKKyR0ZXN0ID0gJ0hFQUQgL3JlcGxpY2Eg cmV0dXJucyBub3RoaW5nIHdoZW4gbm90aGluZyBpcyBsaXN0ZW5pbmcnOworY2FsbF9zb2NrZXQo J0hFQUQgL3JlcGxpY2EnKTsKK2lzICgkcmVzcG9uc2UsICcnLCAkdGVzdCk7CisKKyRub2RlLT5h cHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgImV4cG9zZV9pbmZvcm1hdGlvbiA9ICdyZXBs aWNhJyIpOworJG5vZGUtPnJlbG9hZCgpOworCiskdGVzdCA9IHF7R0VUIC9yZXBsaWNhIHJldHVy bnMgSFRUUCBjb2RlIDIwMCB3aGVuIGV4cG9zZV9pbmZvcm1hdGlvbiBjb250YWlucyAncmVwbGlj YScgKHByaW1hcnkpfTsKK2NhbGxfc29ja2V0KCdHRVQgL3JlcGxpY2EnKTsKK2xpa2UgKCRyZXNw b25zZSwgcXJ7XkhUVFAvMS4xIDIwMCB9LCAkdGVzdCk7CisKKyR0ZXN0ID0gcXtHRVQgL3JlcGxp Y2EgcmV0dXJucyAiMCIgd2hlbiBleHBvc2VfaW5mb3JtYXRpb24gY29udGFpbnMgJ3JlcGxpY2En IChwcmltYXJ5KX07CitsaWtlICgkcmVzcG9uc2UsIHFye1xyXG4wXHJcbn0sICR0ZXN0KTsKKwor JHRlc3QgPSBxe0hFQUQgL3JlcGxpY2EgcmV0dXJucyBIVFRQIGNvZGUgNTAzIHdoZW4gZXhwb3Nl X2luZm9ybWF0aW9uIGNvbnRhaW5zICdyZXBsaWNhJyAocHJpbWFyeSl9OworY2FsbF9zb2NrZXQo J0hFQUQgL3JlcGxpY2EnKTsKK2xpa2UgKCRyZXNwb25zZSwgcXJ7XkhUVFAvMS4xIDUwMyB9LCAk dGVzdCk7CisKKyR0ZXN0ID0gcXtHRVQgL2luZm8gcmV0dXJucyAiUkVQTElDQTogMCIgd2hlbiBl eHBvc2VfaW5mb3JtYXRpb24gY29udGFpbnMgJ3JlcGxpY2EnIChwcmltYXJ5KX07CitjYWxsX3Nv Y2tldCgnR0VUIC9pbmZvJyk7CitsaWtlICgkcmVzcG9uc2UsIHFye1JFUExJQ0E6IDBcclxufSwg JHRlc3QpOworCiskdGVzdCA9IHF7R0VUIC9pbmZvIGRvZXMgbm90IHJldHVybiB2ZXJzaW9uIGlu Zm9ybWF0aW9uIHdoZW4gZXhwb3NlX2luZm9ybWF0aW9uIGRvZXMgbm90IGNvbnRhaW4gJ3ZlcnNp b24nfTsKK3VubGlrZSAoJHJlc3BvbnNlLCBxcntWRVJTSU9OfSwgJHRlc3QpOworCiskdGVzdCA9 IHF7R0VUIC9pbmZvIGRvZXMgbm90IHJldHVybiBzeXNpZCBpbmZvcm1hdGlvbiB3aGVuIGV4cG9z ZV9pbmZvcm1hdGlvbiBkb2VzIG5vdCBjb250YWluICdzeXNpZCd9OwordW5saWtlICgkcmVzcG9u c2UsIHFye1NZU0lEfSwgJHRlc3QpOworCiskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwu Y29uZicsICJleHBvc2VfaW5mb3JtYXRpb249ICdyZXBsaWNhLHN5c2lkLHZlcnNpb24nIik7Cisk bm9kZS0+cmVsb2FkKCk7CisKKyR0ZXN0ID0gcXtHRVQgL2luZm8gcmV0dXJucyBjb3JyZWN0IHZl cnNpb24gd2hlbiBleHBvc2VfaW5mb3JtYXRpb24gY29udGFpbnMgJ3ZlcnNpb24nfTsKK2NhbGxf c29ja2V0KCdHRVQgL2luZm8nKTsKK2xpa2UgKCRyZXNwb25zZSwgcXIvVkVSU0lPTjogJHNlcnZl cl92ZXJzaW9uLywgJHRlc3QpOworCiskdGVzdCA9IHF7R0VUIC9pbmZvIHJldHVybnMgY29ycmVj dCB2YWx1ZSB3aGVuIGV4cG9zZV9pbmZvcm1hdGlvbiBjb250YWlucyAnc3lzaWQnfTsKK2xpa2Ug KCRyZXNwb25zZSwgcXIvU1lTSUQ6ICRzeXNpZC8sICR0ZXN0KTsKKworJHRlc3QgPSBxe0dldCAv c3lzaWQgcmV0dXJucyBjb3JyZWN0IHZhbHVlIHdoZW4gZXhwb3NlX2luZm9ybWF0aW9uIGNvbnRh aW5zICdzeXNpZCd9OworY2FsbF9zb2NrZXQoJ0dldCAvc3lzaWQnKTsgIyMgTm90IHJlcXVpcmVk IHRvIGJlIGFsbCB1cHBlcmNhc2UgYWNjb3JkaW5nIHRvIHRoZSBzcGVjIQorbGlrZSAoJHJlc3Bv bnNlLCBxci9eJHN5c2lkXHJcbi9tLCAkdGVzdCk7CisKKyR0ZXN0ID0gcXtHRVQgL3ZlcnNpb24g cmV0dXJucyBjb3JyZWN0IHZhbHVlIHdoZW4gZXhwb3NlX2luZm9ybWF0aW9uIGNvbnRhaW5zICd2 ZXJzaW9uJ307CitjYWxsX3NvY2tldCgnR0VUIC92ZXJzaW9uJyk7CitsaWtlICgkcmVzcG9uc2Us IHFyL14kc2VydmVyX3ZlcnNpb25cclxuL20sICR0ZXN0KTsKKworJHRlc3QgPSAnR0VUIC9mb29i YXIgcmV0dXJucyBub3RoaW5nJzsKK2NhbGxfc29ja2V0KCdHRVQgL2Zvb2JhcicpOworaXMgKCRy ZXNwb25zZSwgJycsICR0ZXN0KTsKKworJG5vZGUtPnNldF9zdGFuZGJ5X21vZGUoKTsKKyRub2Rl LT5yZXN0YXJ0KCk7CisKKyR0ZXN0ID0gcXtHRVQgL3JlcGxpY2EgcmV0dXJucyBIVFRQIGNvZGUg MjAwIHdoZW4gZXhwb3NlX2luZm9ybWF0aW9uIGNvbnRhaW5zICdyZXBsaWNhJyAocmVwbGljYSl9 OworY2FsbF9zb2NrZXQoJ0dFVCAvcmVwbGljYScpOworbGlrZSAoJHJlc3BvbnNlLCBxcnteSFRU UC8xLjEgMjAwIH0sICR0ZXN0KTsKKworJHRlc3QgPSBxe0dFVCAvcmVwbGljYSByZXR1cm5zICIx IiB3aGVuIGV4cG9zZV9pbmZvcm1hdGlvbiBjb250YWlucyAncmVwbGljYScgKHJlcGxpY2EpfTsK K2xpa2UgKCRyZXNwb25zZSwgcXJ7XjFcclxufW0sICR0ZXN0KTsKKworJHRlc3QgPSBxe0hFQUQg L3JlcGxpY2EgcmV0dXJucyBIVFRQIGNvZGUgMjAwIHdoZW4gZXhwb3NlX2luZm9ybWF0aW9uIGNv bnRhaW5zICdyZXBsaWNhJyAocmVwbGljYSl9OworY2FsbF9zb2NrZXQoJ0hFQUQgL3JlcGxpY2En KTsKK2xpa2UgKCRyZXNwb25zZSwgcXJ7XkhUVFAvMS4xIDIwMCB9LCAkdGVzdCk7CisKKyR0ZXN0 ID0gcXtHRVQgL2luZm8gcmV0dXJucyAiUkVQTElDQTogMSIgd2hlbiBleHBvc2VfaW5mb3JtYXRp b24gY29udGFpbnMgJ3JlcGxpY2EnIChyZXBsaWNhKX07CitjYWxsX3NvY2tldCgnR0VUIC9pbmZv Jyk7CitsaWtlICgkcmVzcG9uc2UsIHFyL1JFUExJQ0E6IDEvLCAkdGVzdCk7CisKKyRub2RlLT5h cHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgImV4cG9zZV9pbmZvcm1hdGlvbj0nJyIpOwor JG5vZGUtPnJlbG9hZCgpOworCiskdGVzdCA9IHF7R0VUIC92ZXJzaW9uIHJldHVybnMgbm90aGlu ZyBhZnRlciBleHBvc2VfaW5mb3JtYXRpb24gbm8gbG9uZ2VyIGhhcyAndmVyc2lvbid9OworY2Fs bF9zb2NrZXQoJ0dFVCAvdmVyc2lvbicpOworaXMgKCRyZXNwb25zZSwgJycsICR0ZXN0KTsKKwor JHNvY2tldC0+Y2xvc2UoKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjQ3LjMKCg== --000000000000c89d4e064dcf9fd0--