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 1w5PK4-003DnR-2Z for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Mar 2026 14:35:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w5PK2-00ELwm-37 for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Mar 2026 14:35:03 +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 1w5PK2-00ELwe-1j for pgsql-hackers@lists.postgresql.org; Wed, 25 Mar 2026 14:35:03 +0000 Received: from mail-oo1-xc2d.google.com ([2607:f8b0:4864:20::c2d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w5PK0-0000000155Z-0GZ5 for pgsql-hackers@lists.postgresql.org; Wed, 25 Mar 2026 14:35:02 +0000 Received: by mail-oo1-xc2d.google.com with SMTP id 006d021491bc7-67c1e0718f1so3725927eaf.1 for ; Wed, 25 Mar 2026 07:35:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774449299; cv=none; d=google.com; s=arc-20240605; b=UHKf8pgibBQVWGwFrs6ozj47UZgdIzK6RAzhHwpMzNWIT8tsz3B2e9vRgpg+8BIMMS 5t6Fp3mJudS0oDXNLkONpcKFbZ6/Y27z6ZsO2U9Rn3zcqNnZEfS/cWMB+zsGqZNA4MxB Yo1uF7sGA8s9EGNUdJO+E8ebTagAz2GOU/umXe1i1qvc7GFU5eNM4PfbORL/kj6Vytgt ylh5LZviHY5x9FbWYpbRIfGPUv8VrjeJ1FsaYVAtsIuPkv9uPEtImff359bYHbHjlDlq FLDZjl76IoILEVjfg+foYIUugLoGvG0KaZpqHUpNcEqetgKtxGHw8/ZEvhZxDCq6kQRH Uwkg== 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=OBdpIhFkPCaqK6mSX4lP6cT0+MM4CQFR9NP7QlZH8BE=; fh=Cp2oPPwHvrLMoVgxMF0/HUTm3m+AmfkX9J1Lh9E/WwQ=; b=jPVjBa+tlHc/XhQh55psEq+MKsPkrvLI8xKhPR7RQRIwLOnR8/z63+KNW9Yv3rcGgx P8caWfOZrfkF5sMYvJX3q4iS2R6kLrwpU8jzwyFfyCh4dzDXSprRzwVTAdvDTU+/z+lO bhdpzWVzF+v5TYWjJs+I+iteT+Pr49kCwpVqQWQsD8oVhe8GkwzdNrhau4nNvv9jvLkV rMxLPe66P68+sxNB9egCQFXCqyKG9IzAjrERbqat2LI2m5Y3SoHrIb1QzcDvyJNajncn I1KqNwuPKIXEfw5/ndZV0c0gjnZLk9M+Azs6ZIT/1LdGx6zj+26SWxSH3GpvhkfKcq5A svaA==; 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=1774449299; x=1775054099; 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=OBdpIhFkPCaqK6mSX4lP6cT0+MM4CQFR9NP7QlZH8BE=; b=WrupivxV+xbvhEcO+wf9OAy9/bBFBHb5q0qQ0l6MIza4x2wICB4JwMHibgRDSj97rA U3ZY7eI44KFgwQE0WxF1VonMIhmH8ea7E1RSeStBKh4U6/a1jtdNPrsJLCF+HC9aBH/2 Q5ZDsERDZRiov8nWcMVroe8Qharg7z7Uq8vINO3lyXYtl9J6xSCth67Qdz6u/dO1XQXs 0hWlXDJ9KSR3PtGkZ+P4SI8U/ObGgmoQUyehTl1hiV2KJiqSmTsg5fVDXUjcSf9vEe9l Zt7AkJ/VCqyhUl+O/T+mz2wfxYRBajaMSPCqlIRfQNa5h/Ko7jDaCns0XFAkoWtU3W1h rlTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774449299; x=1775054099; 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=OBdpIhFkPCaqK6mSX4lP6cT0+MM4CQFR9NP7QlZH8BE=; b=CYXO1lObJSmRAFTtubb7ekczzFuf3of55rL+CBHTA0KMxWruOhOvGNHov54shQSZfu 0LGeOe1XSGaiHPd/UmbFLZzpH2VdFJiD/yZv4dWHwEbIZXpCUOB/14ZlfYnnjd1OupIu 4qOqLdCC10nXPkLcLnfSTRkO8PgJ/QGNqdEuLyEhcs/ofC7g4/Yz/Uk7OdaJ+jaALPVn trWGpRPaFIxPjYCszjAy27Xn7f/5VJ+LhcEmQbjN6znN1VZ0vW+EqRsKiBWsDea4A0kX gOXx5D7U01nw0kGBrKuCQCnHP5WZjb6Y8R+2YgRR+5pkkjQ0pNUiudEPQxMLSbFJWF/s WJiA== X-Forwarded-Encrypted: i=1; AJvYcCWenVX7yiNYr+a+Ja+iuPxgqlE8g+si3D3FryskVQ1QYiH4IsGmRrnF/ZWa5zLqxIXSoGEdq08FW0ZpryNg@lists.postgresql.org X-Gm-Message-State: AOJu0Yzcrw0vxN+NwLuTn69yv0srA4egO4EPm+gMzL4HIRTI+L1IKHtP jg5ASReyK4NF59vNK0QBjfPnt1y0SCp1ln+vN+ciEDs3c3NrgwHUFs9UHGIu85b4Ob1Wz3B5QLQ 3GWKwjybK50Jr32T2VdFM9TwgpWedpZQ= X-Gm-Gg: ATEYQzyhke0zZu5325Dp69TxUsG2whINxpyBYSdZbIRfTMW9UTlJ6sPpqcGq9fpfLhl l6Rutenj10VORzElQ4KouKOSYi5JTVgOuyuMuxRP0CJNVVxBaoXueRpOpOAIzPDqi4L6Wbv5E5w LHd5Vem9lgbk8E+RWaSmrJdFQ5VxEzBhZXMzQCAqfLqeXFlHv3AG1QRMmvGwl8Xc9r6QmfnFpa8 ya/pSEGZh5MyyHAHIvdejYxCIBEs3K+nFA+ShsmE4/stTaSp6i9mWgNwP3sc5Ng/G/6dHd7WPDI +WMDIK2c0c03zrkA X-Received: by 2002:a05:6820:1614:b0:67c:2bab:bf5a with SMTP id 006d021491bc7-67dff4f4db0mr2081667eaf.41.1774449298859; Wed, 25 Mar 2026 07:34:58 -0700 (PDT) MIME-Version: 1.0 References: <2155281.1767900170@sss.pgh.pa.us> <431484.1768433414@sss.pgh.pa.us> In-Reply-To: From: Dave Cramer Date: Wed, 25 Mar 2026 10:34:42 -0400 X-Gm-Features: AaiRm53od9uRjt1u_tP7l7456o2C1Ml7dZdf2ifa3iVSoT-Ldda6b0wRp4ZWlic Message-ID: Subject: Re: Proposal to allow setting cursor options on Portals To: Jelte Fennema-Nio Cc: Sami Imseih , Hannu Krosing , Robert Haas , Tom Lane , Jacob Champion , PostgreSQL Hackers , Heikki Linnakangas Content-Type: multipart/mixed; boundary="00000000000021839f064dda2c05" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000021839f064dda2c05 Content-Type: multipart/alternative; boundary="00000000000021839e064dda2c03" --00000000000021839e064dda2c03 Content-Type: text/plain; charset="UTF-8" On Wed, 25 Mar 2026 at 03:46, Jelte Fennema-Nio wrote: > On Tue, 24 Mar 2026 at 11:01, Dave Cramer wrote: > > _pq_.cursor would be fine. > > I think that makes sense as a name for the option. I think adding flag > support for SCROLL and NO SCROLL would make sense in that case. > > Some notes on the patch (but I didn't look look at the client side > libpq code in detail): > > For the protocol definition I'd like a few changes: > 1. I'd like the new field in the bind message that you add to be > described as an extension bitmap, not specifically for cursor options, > so that future extensions could add bits too it too. > 2. Related to that, I think the used bits should not align with the > internal bits. Having the only valid flag bit be 0x0020 is kinda > weird. Let's just make that 0x0001. We could update the internal ones > to match if desired, but I think it's fine for the protocol bits to > differ from the bits in the postgres server. > > Docs still mention CURSOR_OPT_BINARY, but support for that has been > removed from the code afaict (which I think is indeed what should > happen) > > There's a bunch of protocol version 3.3 code still around, which > should be removed now that the protocol option is added. > > PQsendBindWithCursorOptions and PQsendQueryPreparedWithCursorOptions > should error out if conn->holdable_portal_enabled is false. Right now > it silently skips the cursor options if the connection does not > support the protocol extension. > > There should be a libpq function to inspect whether the connection > supports cursor options, so some kind of graceful fallback logic can > be implemented by the application when it's not supported. > > libpq docs are missing > Attached is v4 of the patch Co-Authored by Sami Imseih Adds docs and test module Dave --00000000000021839e064dda2c03 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

On Wed, 2= 5 Mar 2026 at 03:46, Jelte Fennema-Nio <postgres@jeltef.nl> wrote:
On Tue, 24 Mar 2026 at 11:01, Dav= e Cramer <dave= cramer@gmail.com> wrote:
> _pq_.cursor would be fine.

I think that makes sense as a name for the option. I think adding flag
support for SCROLL and NO SCROLL would make sense in that case.

Some notes on the patch (but I didn't look look at the client side
libpq code in detail):

For the protocol definition I'd like a few changes:
1. I'd like the new field in the bind message that you add to be
described as an extension bitmap, not specifically for cursor options,
so that future extensions could add bits too it too.
2. Related to that, I think the used bits should not align with the
internal bits. Having the only valid flag bit be 0x0020 is kinda
weird. Let's just make that 0x0001. We could update the internal ones to match if desired, but I think it's fine for the protocol bits to
differ from the bits in the postgres server.

Docs still mention CURSOR_OPT_BINARY, but support for that has been
removed from the code afaict (which I think is indeed what should
happen)

There's a bunch of protocol version 3.3 code still around, which
should be removed now that the protocol option is added.

PQsendBindWithCursorOptions and PQsendQueryPreparedWithCursorOptions
should error out if conn->holdable_portal_enabled is false. Right now it silently skips the cursor options if the connection does not
support the protocol extension.

There should be a libpq function to inspect whether the connection
supports cursor options, so some kind of graceful fallback logic can
be implemented by the application when it's not supported.

libpq docs are missing

Attached is v4 o= f the patch
Co-Authored by=C2=A0Sami Imseih

<= div>Adds docs and test module

Dave

<= /div>
--00000000000021839e064dda2c03-- --00000000000021839f064dda2c05 Content-Type: application/x-patch; name="v4-0001-Add-_pq_.cursor-protocol-extension-for-cursor-opt.patch" Content-Disposition: attachment; filename="v4-0001-Add-_pq_.cursor-protocol-extension-for-cursor-opt.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn63ye1w0 RnJvbSBmNzBlZDMwMmIwNDY3MzQ3ZmZkZDQ3NWI1MDVkMGVjMjM3YzNkYzY3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZlIENyYW1lciA8ZGF2ZWNyYW1lckBnbWFpbC5jb20+CkRh dGU6IEZyaSwgNSBEZWMgMjAyNSAxODoyMDoyMyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjQgMS8x XSBBZGQgX3BxXy5jdXJzb3IgcHJvdG9jb2wgZXh0ZW5zaW9uIGZvciBjdXJzb3Igb3B0aW9ucwoK QWRkIGEgcHJvdG9jb2wgZXh0ZW5zaW9uIHRoYXQgYWxsb3dzIGNsaWVudHMgdG8gcGFzcyBjdXJz b3Igb3B0aW9uCmZsYWdzIGluIEJpbmQgbWVzc2FnZXMsIGVuYWJsaW5nIEhPTEQsIFNDUk9MTCwg YW5kIE5PX1NDUk9MTCBvbgpuYW1lZCBwb3J0YWxzLgoKVGhlIGV4dGVuc2lvbiBhcHBlbmRzIHRo ZSBvcHRpb25zIHRvIGFuIG9wdGlvbmFsIEludDMyCmZpZWxkIHRvIHRoZSBCaW5kIG1lc3NhZ2Ug d2hlbiBuZWdvdGlhdGVkIGR1cmluZyBjb25uZWN0aW9uCnN0YXJ0dXAuCgpUaGUgY3Vyc29yX3By b3RvY29sIGNvbm5lY3Rpb24gcGFyYW1ldGVyIGNvbnRyb2xzIGlmIHRoZQpleHRlbnNpb24gaXMg ZW5hYmxlZC4KCkFkZCBQUXNlbmRCaW5kV2l0aEN1cnNvck9wdGlvbnMoKSB0byBsaWJwcSwgd2hp Y2ggc2VuZHMKQmluZCtEZXNjcmliZSB0byBjcmVhdGUgYSBuYW1lZCBwb3J0YWwgd2l0aCB0aGUK Y3Vyc29yIG9wdGlvbnMuCgpBbHNvLCBhIG5ldyB0ZXN0IG1vZHVsZSBpcyBhZGRlZC4KLS0tCiBk b2Mvc3JjL3NnbWwvbGlicHEuc2dtbCAgICAgICAgICAgICAgICAgICAgICAgfCAgODMgKy0KIGRv Yy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sICAgICAgICAgICAgICAgICAgICB8ICAyNyArLQogc3Jj L2JhY2tlbmQvdGNvcC9iYWNrZW5kX3N0YXJ0dXAuYyAgICAgICAgICAgIHwgIDIxICstCiBzcmMv YmFja2VuZC90Y29wL3Bvc3RncmVzLmMgICAgICAgICAgICAgICAgICAgfCAgMzkgKwogc3JjL2lu Y2x1ZGUvbGlicHEvbGlicHEtYmUuaCAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbnRl cmZhY2VzL2xpYnBxL2V4cG9ydHMudHh0ICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1jb25uZWN0LmMgICAgICAgICAgICAgfCAgMjIgKwogc3JjL2ludGVyZmFj ZXMvbGlicHEvZmUtZXhlYy5jICAgICAgICAgICAgICAgIHwgMTM1ICsrKysKIHNyYy9pbnRlcmZh Y2VzL2xpYnBxL2ZlLXByb3RvY29sMy5jICAgICAgICAgICB8ICAxNCArCiBzcmMvaW50ZXJmYWNl cy9saWJwcS9saWJwcS1mZS5oICAgICAgICAgICAgICAgfCAgMjIgKwogc3JjL2ludGVyZmFjZXMv bGlicHEvbGlicHEtaW50LmggICAgICAgICAgICAgIHwgICAyICsKIHNyYy90ZXN0L21vZHVsZXMv TWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiAuLi4vbW9kdWxlcy9saWJwcV9w cm90b2NvbF9jdXJzb3IvLmdpdGlnbm9yZSAgfCAgIDUgKwogLi4uL21vZHVsZXMvbGlicHFfcHJv dG9jb2xfY3Vyc29yL01ha2VmaWxlICAgIHwgIDI1ICsKIC4uLi9saWJwcV9wcm90b2NvbF9jdXJz b3IuYyAgICAgICAgICAgICAgICAgICB8IDc0OSArKysrKysrKysrKysrKysrKysKIC4uLi9tb2R1 bGVzL2xpYnBxX3Byb3RvY29sX2N1cnNvci9tZXNvbi5idWlsZCB8ICAzMiArCiAuLi4vdC8wMDFf bGlicHFfcHJvdG9jb2xfY3Vyc29yLnBsICAgICAgICAgICAgfCAgNDIgKwogc3JjL3Rlc3QvbW9k dWxlcy9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgIHwgICAxICsKIDE4IGZpbGVzIGNoYW5n ZWQsIDEyMTIgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvbW9kdWxlcy9saWJwcV9wcm90b2NvbF9jdXJzb3IvLmdpdGlnbm9yZQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvbGlicHFfcHJvdG9jb2xfY3Vyc29yL01h a2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9saWJwcV9wcm90b2Nv bF9jdXJzb3IvbGlicHFfcHJvdG9jb2xfY3Vyc29yLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv dGVzdC9tb2R1bGVzL2xpYnBxX3Byb3RvY29sX2N1cnNvci9tZXNvbi5idWlsZAogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvbGlicHFfcHJvdG9jb2xfY3Vyc29yL3QvMDAxX2xp YnBxX3Byb3RvY29sX2N1cnNvci5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9saWJwcS5z Z21sIGIvZG9jL3NyYy9zZ21sL2xpYnBxLnNnbWwKaW5kZXggNmRiODIzODA4ZmMuLjk2ZmExZGUz YTY3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbGlicHEuc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvbGlicHEuc2dtbApAQCAtMzEzNyw2ICszMTM3LDI4IEBAIGludCBQUWNvbm5lY3Rpb25Vc2Vk R1NTQVBJKGNvbnN0IFBHY29ubiAqY29ubik7CiAgICAgICA8L3BhcmE+CiAgICAgIDwvbGlzdGl0 ZW0+CiAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJwcS1Q UVBvcnRhbEN1cnNvckVuYWJsZWQiPgorICAgICA8dGVybT48ZnVuY3Rpb24+UFFQb3J0YWxDdXJz b3JFbmFibGVkPC9mdW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBRUG9ydGFsQ3Vyc29yRW5h YmxlZDwvcHJpbWFyeT48L2luZGV4dGVybT48L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAg IDxwYXJhPgorICAgICAgIFJldHVybnMgdHJ1ZSAoMSkgaWYgdGhlIGNvbm5lY3Rpb24gaGFzIHN1 Y2Nlc3NmdWxseSBuZWdvdGlhdGVkCisgICAgICAgdGhlIDxsaXRlcmFsPl9wcV8ucHJvdG9jb2xf Y3Vyc29yPC9saXRlcmFsPiBwcm90b2NvbCBleHRlbnNpb24sCisgICAgICAgZmFsc2UgKDApIGlm IG5vdC4KKworPHN5bm9wc2lzPgoraW50IFBRUG9ydGFsQ3Vyc29yRW5hYmxlZChjb25zdCBQR2Nv bm4gKmNvbm4pOworPC9zeW5vcHNpcz4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+Cisg ICAgICAgV2hlbiB0aGlzIHJldHVybnMgdHJ1ZSwgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFzZW5k QmluZFdpdGhDdXJzb3JPcHRpb25zIi8+CisgICAgICAgY2FuIGJlIHVzZWQgd2l0aCBub24temVy byBjdXJzb3Igb3B0aW9ucyB0byBjcmVhdGUgc2Nyb2xsYWJsZSBvcgorICAgICAgIGhvbGRhYmxl IHBvcnRhbHMuICBBcHBsaWNhdGlvbnMgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGltcGxlbWVu dAorICAgICAgIGdyYWNlZnVsIGZhbGxiYWNrIGxvZ2ljIHdoZW4gdGhlIHNlcnZlciBkb2VzIG5v dCBzdXBwb3J0IHRoZSBleHRlbnNpb24uCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+ CisgICAgPC92YXJsaXN0ZW50cnk+CiAgICA8L3ZhcmlhYmxlbGlzdD4KICAgPC9wYXJhPgogCkBA IC01MzMxLDggKzUzNTMsOSBAQCB1bnNpZ25lZCBjaGFyICpQUXVuZXNjYXBlQnl0ZWEoY29uc3Qg dW5zaWduZWQgY2hhciAqZnJvbSwgc2l6ZV90ICp0b19sZW5ndGgpOwogICAgPHhyZWYgbGlua2Vu ZD0ibGlicHEtUFFzZW5kUXVlcnlQcmVwYXJlZCIvPiwKICAgIDx4cmVmIGxpbmtlbmQ9ImxpYnBx LVBRc2VuZERlc2NyaWJlUHJlcGFyZWQiLz4sCiAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXNl bmREZXNjcmliZVBvcnRhbCIvPiwKLSAgIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRc2VuZENsb3Nl UHJlcGFyZWQiLz4sIGFuZAotICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFzZW5kQ2xvc2VQb3J0 YWwiLz4sCisgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXNlbmRDbG9zZVByZXBhcmVkIi8+LAor ICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFzZW5kQ2xvc2VQb3J0YWwiLz4sIGFuZAorICAgPHhy ZWYgbGlua2VuZD0ibGlicHEtUFFzZW5kQmluZFdpdGhDdXJzb3JPcHRpb25zIi8+LAogICAgd2hp Y2ggY2FuIGJlIHVzZWQgd2l0aCA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWdldFJlc3VsdCIvPiB0 byBkdXBsaWNhdGUKICAgIHRoZSBmdW5jdGlvbmFsaXR5IG9mCiAgICA8eHJlZiBsaW5rZW5kPSJs aWJwcS1QUWV4ZWNQYXJhbXMiLz4sCkBAIC01NTMwLDYgKzU1NTMsNTYgQEAgaW50IFBRc2VuZENs b3NlUG9ydGFsKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcG9ydGFsTmFtZSk7CiAgICAgIDwv bGlzdGl0ZW0+CiAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICA8dmFybGlzdGVudHJ5IGlkPSJs aWJwcS1QUXNlbmRCaW5kV2l0aEN1cnNvck9wdGlvbnMiPgorICAgICA8dGVybT48ZnVuY3Rpb24+ UFFzZW5kQmluZFdpdGhDdXJzb3JPcHRpb25zPC9mdW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5 PlBRc2VuZEJpbmRXaXRoQ3Vyc29yT3B0aW9uczwvcHJpbWFyeT48L2luZGV4dGVybT48L3Rlcm0+ CisKKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgQ3JlYXRlcyBhIG5hbWVk IHBvcnRhbCBmcm9tIGEgcHJldmlvdXNseSBwcmVwYXJlZCBzdGF0ZW1lbnQsIHdpdGgKKyAgICAg ICB0aGUgc3BlY2lmaWVkIGN1cnNvciBvcHRpb25zIGFwcGxpZWQuCis8c3lub3BzaXM+CitpbnQg UFFzZW5kQmluZFdpdGhDdXJzb3JPcHRpb25zKFBHY29ubiAqY29ubiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RtdE5hbWUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBuUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICpjb25zdCAqcGFyYW1WYWx1ZXMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGludCAqcGFyYW1MZW5ndGhzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBpbnQgKnBhcmFtRm9ybWF0cywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHJlc3VsdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqcG9ydGFsTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGN1cnNvck9wdGlvbnMpOworPC9zeW5vcHNpcz4KKyAgICAgIDwvcGFyYT4K KworICAgICAgPHBhcmE+CisgICAgICAgVGhlIDxsaXRlcmFsPmN1cnNvck9wdGlvbnM8L2xpdGVy YWw+IHBhcmFtZXRlciBpcyBhIGJpdG1hc2sgb2YKKyAgICAgICBjdXJzb3Igb3B0aW9uIGZsYWdz LiAgU2VlCisgICAgICAgPHhyZWYgbGlua2VuZD0icHJvdG9jb2wtZXh0ZW5zaW9ucy10YWJsZSIv PiBmb3IgdGhlIGZsYWdzIGRlZmluZWQKKyAgICAgICBieSB0aGUgPGxpdGVyYWw+X3BxXy5wcm90 b2NvbF9jdXJzb3I8L2xpdGVyYWw+IGV4dGVuc2lvbi4KKyAgICAgIDwvcGFyYT4KKworICAgICAg PHBhcmE+CisgICAgICAgVGhlIDxsaXRlcmFsPnBvcnRhbE5hbWU8L2xpdGVyYWw+IG11c3QgYmUg YSBub24tZW1wdHkgc3RyaW5nOworICAgICAgIHVubmFtZWQgcG9ydGFscyBhcmUgcmVqZWN0ZWQu ICBUaGUgZnVuY3Rpb24gc2VuZHMgYSBCaW5kIG1lc3NhZ2UKKyAgICAgICB0byBjcmVhdGUgdGhl IHBvcnRhbCBidXQgZG9lcyBub3QgZXhlY3V0ZSBpdC4gIFRoZSBwb3J0YWwgY2FuCisgICAgICAg bGF0ZXIgYmUgb3BlcmF0ZWQgb24gd2l0aCBjdXJzb3IgY29tbWFuZHMgc3VjaCBhcyBGRVRDSCwg TU9WRSwKKyAgICAgICBhbmQgQ0xPU0UuCisgICAgICAgUmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAg b24gZmFpbHVyZS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgVGhlIDxs aXRlcmFsPl9wcV8ucHJvdG9jb2xfY3Vyc29yPC9saXRlcmFsPiBwcm90b2NvbCBleHRlbnNpb24g bXVzdCBoYXZlCisgICAgICAgYmVlbiBzdWNjZXNzZnVsbHkgbmVnb3RpYXRlZCBkdXJpbmcgY29u bmVjdGlvbiBzdGFydHVwIGZvciBjdXJzb3IKKyAgICAgICBvcHRpb25zIHRvIHRha2UgZWZmZWN0 LiAgVGhpcyBpcyBlbmFibGVkIGJ5IHNldHRpbmcgdGhlCisgICAgICAgPGxpdGVyYWw+cHJvdG9j b2xfY3Vyc29yPC9saXRlcmFsPiBjb25uZWN0aW9uIHBhcmFtZXRlciB0bworICAgICAgIDxsaXRl cmFsPjE8L2xpdGVyYWw+LiAgSWYgdGhlIGV4dGVuc2lvbiB3YXMgbm90IG5lZ290aWF0ZWQgYW5k CisgICAgICAgPGxpdGVyYWw+Y3Vyc29yT3B0aW9uczwvbGl0ZXJhbD4gaXMgbm9uLXplcm8sIHRo ZSBmdW5jdGlvbgorICAgICAgIHJldHVybnMgMC4gIFBhc3NpbmcgPGxpdGVyYWw+Y3Vyc29yT3B0 aW9uczwvbGl0ZXJhbD4gYXMgMCBpcworICAgICAgIGFsd2F5cyBwZXJtaXR0ZWQgYW5kIGNyZWF0 ZXMgYSBuYW1lZCBwb3J0YWwgd2l0aG91dCBhbnkgY3Vyc29yCisgICAgICAgb3B0aW9ucywgcmVn YXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBleHRlbnNpb24gd2FzIG5lZ290aWF0ZWQuCisgICAgICA8 L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICA8dmFy bGlzdGVudHJ5IGlkPSJsaWJwcS1QUWdldFJlc3VsdCI+CiAgICAgIDx0ZXJtPjxmdW5jdGlvbj5Q UWdldFJlc3VsdDwvZnVuY3Rpb24+PGluZGV4dGVybT48cHJpbWFyeT5QUWdldFJlc3VsdDwvcHJp bWFyeT48L2luZGV4dGVybT48L3Rlcm0+CiAKQEAgLTU1NDQsNiArNTYxNyw3IEBAIGludCBQUXNl bmRDbG9zZVBvcnRhbChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnBvcnRhbE5hbWUpOwogICAg ICAgIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRc2VuZERlc2NyaWJlUG9ydGFsIi8+LAogICAgICAg IDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRc2VuZENsb3NlUHJlcGFyZWQiLz4sCiAgICAgICAgPHhy ZWYgbGlua2VuZD0ibGlicHEtUFFzZW5kQ2xvc2VQb3J0YWwiLz4sCisgICAgICAgPHhyZWYgbGlu a2VuZD0ibGlicHEtUFFzZW5kQmluZFdpdGhDdXJzb3JPcHRpb25zIi8+LAogICAgICAgIDx4cmVm IGxpbmtlbmQ9ImxpYnBxLVBRc2VuZFBpcGVsaW5lU3luYyIvPiwgb3IKICAgICAgICA8eHJlZiBs aW5rZW5kPSJsaWJwcS1QUXBpcGVsaW5lU3luYyIvPgogICAgICAgIGNhbGwsIGFuZCByZXR1cm5z IGl0LgpAQCAtNTkyMCw4ICs1OTk0LDkgQEAgaW50IFBRZmx1c2goUEdjb25uICpjb25uKTsKICAg ICAgVGhlIGZ1bmN0aW9ucyA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXNlbmRQcmVwYXJlIi8+LAog ICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXNlbmREZXNjcmliZVByZXBhcmVkIi8+LAogICAg ICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXNlbmREZXNjcmliZVBvcnRhbCIvPiwKLSAgICAgPHhy ZWYgbGlua2VuZD0ibGlicHEtUFFzZW5kQ2xvc2VQcmVwYXJlZCIvPiwgYW5kCi0gICAgIDx4cmVm IGxpbmtlbmQ9ImxpYnBxLVBRc2VuZENsb3NlUG9ydGFsIi8+IGFsc28gd29yayBpbiBwaXBlbGlu ZSBtb2RlLgorICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXNlbmRDbG9zZVByZXBhcmVkIi8+ LAorICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXNlbmRDbG9zZVBvcnRhbCIvPiwgYW5kCisg ICAgIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRc2VuZEJpbmRXaXRoQ3Vyc29yT3B0aW9ucyIvPiBh bHNvIHdvcmsgaW4gcGlwZWxpbmUgbW9kZS4KICAgICAgUmVzdWx0IHByb2Nlc3NpbmcgaXMgZGVz Y3JpYmVkIGJlbG93LgogICAgIDwvcGFyYT4KIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3By b3RvY29sLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbAppbmRleCA0OWY4MTY3Njcx Mi4uNmI2MzNkZmY2N2UgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sCkBAIC0zNDYsOSArMzQ2LDE4IEBACiAKICAg ICAgPHRib2R5PgogICAgICAgPHJvdz4KLSAgICAgICA8ZW50cnkgbmFtZXN0PSJsYXN0IiBhbGln bj0iY2VudGVyIiB2YWxpZ249Im1pZGRsZSI+Ci0gICAgICAgIDxlbXBoYXNpcz4oTm8gc3VwcG9y dGVkIHByb3RvY29sIGV4dGVuc2lvbnMgYXJlIGN1cnJlbnRseSBkZWZpbmVkLik8L2VtcGhhc2lz PgotICAgICAgIDwvZW50cnk+CisgICAgICA8ZW50cnk+PGxpdGVyYWw+X3BxXy5wcm90b2NvbF9j dXJzb3I8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgIDxlbnRyeT48bGl0ZXJhbD50cnVlPC9saXRl cmFsPjwvZW50cnk+CisgICAgICA8ZW50cnk+UG9zdGdyZVNRTCAxOSBhbmQgbGF0ZXI8L2VudHJ5 PgorICAgICAgPGVudHJ5PkVuYWJsZXMgY3Vyc29yIG9wdGlvbnMgaW4gdGhlIEJpbmQgbWVzc2Fn ZS4KKyAgICAgICAgV2hlbiBzZXQgdG8gPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4sIHRoZSBCaW5k IG1lc3NhZ2UgaW5jbHVkZXMKKyAgICAgICAgYW4gb3B0aW9uYWwgZXh0ZW5zaW9uIGJpdG1hcCBm aWVsZC4gIFRoZSBmb2xsb3dpbmcgZmxhZ3MgYXJlCisgICAgICAgIGRlZmluZWQgZm9yIHRoaXMg ZXh0ZW5zaW9uOgorICAgICAgICA8c3ltYm9sPlBRX0JJTkRfQ1VSU09SX1NDUk9MTDwvc3ltYm9s PiAoc2Nyb2xsKSwKKyAgICAgICAgPHN5bWJvbD5QUV9CSU5EX0NVUlNPUl9OT19TQ1JPTEw8L3N5 bWJvbD4gKG5vIHNjcm9sbCksIGFuZAorICAgICAgICA8c3ltYm9sPlBRX0JJTkRfQ1VSU09SX0hP TEQ8L3N5bWJvbD4gKGhvbGQpLgorICAgICAgICBUaGVzZSBhcmUgZGVmaW5lZCBpbiA8ZmlsZW5h bWU+bGlicHEtZmUuaDwvZmlsZW5hbWU+LgorICAgICAgPC9lbnRyeT4KICAgICAgIDwvcm93Pgog ICAgICA8L3Rib2R5PgogICAgIDwvdGdyb3VwPgpAQCAtMTEwMSw2ICsxMTEwLDkgQEAgU0VMQ1Qg MS8wOzwhLS0gdGhpcyB0eXBvIGlzIGludGVudGlvbmFsIC0tPgogICAgIHBhc3MgTlVMTCB2YWx1 ZXMgZm9yIHRoZW0gaW4gdGhlIEJpbmQgbWVzc2FnZS4pCiAgICAgQmluZCBhbHNvIHNwZWNpZmll cyB0aGUgZm9ybWF0IHRvIHVzZSBmb3IgYW55IGRhdGEgcmV0dXJuZWQKICAgICBieSB0aGUgcXVl cnk7IHRoZSBmb3JtYXQgY2FuIGJlIHNwZWNpZmllZCBvdmVyYWxsLCBvciBwZXItY29sdW1uLgor ICAgIElmIHRoZSA8bGl0ZXJhbD5fcHFfLnByb3RvY29sX2N1cnNvcjwvbGl0ZXJhbD4gcHJvdG9j b2wgb3B0aW9uIGlzIGVuYWJsZWQsCisgICAgQmluZCBjYW4gb3B0aW9uYWxseSBpbmNsdWRlIGN1 cnNvciBvcHRpb25zIHRvIGNvbnRyb2wgcG9ydGFsIGJlaGF2aW9yLAorICAgIHN1Y2ggYXMgY3Jl YXRpbmcgc2Nyb2xsYWJsZSBvciBob2xkYWJsZSBjdXJzb3JzLgogICAgIFRoZSByZXNwb25zZSBp cyBlaXRoZXIgQmluZENvbXBsZXRlIG9yIEVycm9yUmVzcG9uc2UuCiAgICA8L3BhcmE+CiAKQEAg LTQ0MTEsNiArNDQyMywxNSBAQCBwc3FsICJkYm5hbWU9cG9zdGdyZXMgcmVwbGljYXRpb249ZGF0 YWJhc2UiIC1jICJJREVOVElGWV9TWVNURU07IgogICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9s aXN0aXRlbT4KICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5Pgor ICAgICAgIDx0ZXJtPkludDMyIChvcHRpb25hbCk8L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgor ICAgICAgICA8cGFyYT4KKyAgICAgICAgIEJpdG1hcCBzZXQgYnkgcHJvdG9jb2wgZXh0ZW5zaW9u cy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3Rl bnRyeT4KICAgICAgPC92YXJpYWJsZWxpc3Q+CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlz dGVudHJ5PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9iYWNrZW5kX3N0YXJ0dXAuYyBi L3NyYy9iYWNrZW5kL3Rjb3AvYmFja2VuZF9zdGFydHVwLmMKaW5kZXggNWFiZjI3NmM4OTguLjc5 MmQ2OTUxNWMwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL2JhY2tlbmRfc3RhcnR1cC5j CisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvYmFja2VuZF9zdGFydHVwLmMKQEAgLTc3OSwxMSArNzc5 LDI0IEBAIFByb2Nlc3NTdGFydHVwUGFja2V0KFBvcnQgKnBvcnQsIGJvb2wgc3NsX2RvbmUsIGJv b2wgZ3NzX2RvbmUpCiAJCQl7CiAJCQkJLyoKIAkJCQkgKiBBbnkgb3B0aW9uIGJlZ2lubmluZyB3 aXRoIF9wcV8uIGlzIHJlc2VydmVkIGZvciB1c2UgYXMgYQotCQkJCSAqIHByb3RvY29sLWxldmVs IG9wdGlvbiwgYnV0IGF0IHByZXNlbnQgbm8gc3VjaCBvcHRpb25zIGFyZQotCQkJCSAqIGRlZmlu ZWQuCisJCQkJICogcHJvdG9jb2wtbGV2ZWwgb3B0aW9uLgogCQkJCSAqLwotCQkJCXVucmVjb2du aXplZF9wcm90b2NvbF9vcHRpb25zID0KLQkJCQkJbGFwcGVuZCh1bnJlY29nbml6ZWRfcHJvdG9j b2xfb3B0aW9ucywgcHN0cmR1cChuYW1lcHRyKSk7CisJCQkJaWYgKHN0cmNtcChuYW1lcHRyLCAi X3BxXy5wcm90b2NvbF9jdXJzb3IiKSA9PSAwKQorCQkJCXsKKwkJCQkJLyogRW5hYmxlIGN1cnNv ciBvcHRpb25zIHN1cHBvcnQgdmlhIEJpbmQgbWVzc2FnZSAqLworCQkJCQlpZiAoIXBhcnNlX2Jv b2wodmFscHRyLCAmcG9ydC0+cHJvdG9jb2xfY3Vyc29yX2VuYWJsZWQpKQorCQkJCQkJZXJlcG9y dChGQVRBTCwKKwkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCisJCQkJCQkJCSBlcnJtc2coImludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciBcIiVzXCI6 IFwiJXNcIiIsCisJCQkJCQkJCQkJIl9wcV8ucHJvdG9jb2xfY3Vyc29yIiwKKwkJCQkJCQkJCQl2 YWxwdHIpKSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8qIFVucmVjb2duaXplZCBw cm90b2NvbCBvcHRpb24gKi8KKwkJCQkJdW5yZWNvZ25pemVkX3Byb3RvY29sX29wdGlvbnMgPQor CQkJCQkJbGFwcGVuZCh1bnJlY29nbml6ZWRfcHJvdG9jb2xfb3B0aW9ucywgcHN0cmR1cChuYW1l cHRyKSk7CisJCQkJfQogCQkJfQogCQkJZWxzZQogCQkJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IGIz NTYzMTEzMjE5Li5iNmQ5ZWViMDRhOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0 Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAtMjAxMCw2ICsyMDEw LDQ1IEBAIGV4ZWNfYmluZF9tZXNzYWdlKFN0cmluZ0luZm8gaW5wdXRfbWVzc2FnZSkKIAkJCXJm b3JtYXRzW2ldID0gcHFfZ2V0bXNnaW50KGlucHV0X21lc3NhZ2UsIDIpOwogCX0KIAorCS8qCisJ ICogR2V0IGJpbmQgZXh0ZW5zaW9uIGZsYWdzIGlmIHByZXNlbnQgKF9wcV8ucHJvdG9jb2xfY3Vy c29yIGVuYWJsZWQpLgorCSAqCisJICogVGhlIHdpcmUtbGV2ZWwgZmxhZyB2YWx1ZXMgKFBRX0JJ TkRfQ1VSU09SXyopIGFyZSBkZWZpbmVkIGluZGVwZW5kZW50bHkKKwkgKiBvZiB0aGUgc2VydmVy LWludGVybmFsIENVUlNPUl9PUFRfKiBjb25zdGFudHMgaW4gcGFyc2Vub2Rlcy5oLCBzbyB3ZQor CSAqIG11c3QgbWFwIGJldHdlZW4gdGhlIHR3byByZXByZXNlbnRhdGlvbnMgaGVyZS4KKwkgKi8K KwlpZiAoTXlQcm9jUG9ydC0+cHJvdG9jb2xfY3Vyc29yX2VuYWJsZWQgJiYKKwkJaW5wdXRfbWVz c2FnZS0+Y3Vyc29yIDwgaW5wdXRfbWVzc2FnZS0+bGVuKQorCXsKKwkJaW50CQkJYmluZF9leHRf ZmxhZ3M7CisKKwkJYmluZF9leHRfZmxhZ3MgPSBwcV9nZXRtc2dpbnQoaW5wdXRfbWVzc2FnZSwg NCk7CisKKwkJLyogUmVqZWN0IGFueSBiaXRzIHdlIGRvbid0IHJlY29nbml6ZSAqLworCQlpZiAo YmluZF9leHRfZmxhZ3MgJiB+MHgwMDA3KQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNv ZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJCQkgZXJybXNnKCJ1bnJlY29nbml6 ZWQgYmluZCBleHRlbnNpb24gZmxhZ3M6IDB4JXgiLAorCQkJCQkJCWJpbmRfZXh0X2ZsYWdzICYg fjB4MDAwNykpKTsKKworCQkvKgorCQkgKiBPbmx5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGN1cnNv ck9wdGlvbnMgd2hlbiB0aGUgY2xpZW50IGhhcworCQkgKiBleHBsaWNpdGx5IHNldCBmbGFncy4g IEEgdmFsdWUgb2YgMCBtZWFucyBubyBjdXJzb3Igb3B0aW9ucyB3ZXJlCisJCSAqIHJlcXVlc3Rl ZCwgc28ga2VlcCB0aGUgQ3JlYXRlUG9ydGFsIGRlZmF1bHRzLgorCQkgKi8KKwkJaWYgKGJpbmRf ZXh0X2ZsYWdzICE9IDApCisJCXsKKwkJCXBvcnRhbC0+Y3Vyc29yT3B0aW9ucyA9IDA7CisKKwkJ CS8qIE1hcCBwcm90b2NvbCBmbGFncyB0byBpbnRlcm5hbCBDVVJTT1JfT1BUXyogdmFsdWVzICov CisJCQlpZiAoYmluZF9leHRfZmxhZ3MgJiAweDAwMDEpCS8qIFBRX0JJTkRfQ1VSU09SX1NDUk9M TCAqLworCQkJCXBvcnRhbC0+Y3Vyc29yT3B0aW9ucyB8PSBDVVJTT1JfT1BUX1NDUk9MTDsKKwkJ CWlmIChiaW5kX2V4dF9mbGFncyAmIDB4MDAwMikJLyogUFFfQklORF9DVVJTT1JfTk9fU0NST0xM ICovCisJCQkJcG9ydGFsLT5jdXJzb3JPcHRpb25zIHw9IENVUlNPUl9PUFRfTk9fU0NST0xMOwor CQkJaWYgKGJpbmRfZXh0X2ZsYWdzICYgMHgwMDA0KQkvKiBQUV9CSU5EX0NVUlNPUl9IT0xEICov CisJCQkJcG9ydGFsLT5jdXJzb3JPcHRpb25zIHw9IENVUlNPUl9PUFRfSE9MRDsKKwkJfQorCX0K IAlwcV9nZXRtc2dlbmQoaW5wdXRfbWVzc2FnZSk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbGlicHEvbGlicHEtYmUuaCBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgKaW5k ZXggOTIxYjJkYWE0ZmYuLjgzMzBmNDBmMmI4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9saWJw cS9saWJwcS1iZS5oCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgKQEAgLTE1MSw2 ICsxNTEsNyBAQCB0eXBlZGVmIHN0cnVjdCBQb3J0CiAJY2hhcgkgICAqdXNlcl9uYW1lOwogCWNo YXIJICAgKmNtZGxpbmVfb3B0aW9uczsKIAlMaXN0CSAgICpndWNfb3B0aW9uczsKKwlib29sCQlw cm90b2NvbF9jdXJzb3JfZW5hYmxlZDsJLyogX3BxXy5wcm90b2NvbF9jdXJzb3Igb3B0aW9uICov CiAKIAkvKgogCSAqIFRoZSBzdGFydHVwIHBhY2tldCBhcHBsaWNhdGlvbiBuYW1lLCBvbmx5IHVz ZWQgaGVyZSBmb3IgdGhlICJjb25uZWN0aW9uCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9s aWJwcS9leHBvcnRzLnR4dCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9ydHMudHh0CmluZGV4 IDFlM2Q1YmQ1ODY3Li40MDA3ZWQ5MzJjYyAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGli cHEvZXhwb3J0cy50eHQKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZXhwb3J0cy50eHQKQEAg LTIxMSwzICsyMTEsNSBAQCBQUWRlZmF1bHRBdXRoRGF0YUhvb2sgICAgIDIwOAogUFFmdWxsUHJv dG9jb2xWZXJzaW9uICAgICAyMDkKIGFwcGVuZFBRRXhwQnVmZmVyVkEgICAgICAgMjEwCiBQUWdl dFRocmVhZExvY2sgICAgICAgICAgIDIxMQorUFFzZW5kQmluZFdpdGhDdXJzb3JPcHRpb25zIDIx MgorUFFQb3J0YWxDdXJzb3JFbmFibGVkICAgICAyMTMKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2ZlLWNvbm5lY3QuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3Qu YwppbmRleCBkYjliNGM4ZWRiZi4uZTA5MTIxNTIyNTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2ZlLWNvbm5lY3QuYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25u ZWN0LmMKQEAgLTQxNyw2ICs0MTcsMTAgQEAgc3RhdGljIGNvbnN0IGludGVybmFsUFFjb25uaW5m b09wdGlvbiBQUWNvbm5pbmZvT3B0aW9uc1tdID0gewogCQkiU1NMLUtleS1Mb2ctRmlsZSIsICJE IiwgNjQsCiAJb2Zmc2V0b2Yoc3RydWN0IHBnX2Nvbm4sIHNzbGtleWxvZ2ZpbGUpfSwKIAorCXsi cHJvdG9jb2xfY3Vyc29yIiwgTlVMTCwgIjAiLCBOVUxMLAorCQkiUHJvdG9jb2wtQ3Vyc29yIiwg IiIsIDEsCisJb2Zmc2V0b2Yoc3RydWN0IHBnX2Nvbm4sIHByb3RvY29sX2N1cnNvcil9LAorCiAJ LyogVGVybWluYXRpbmcgZW50cnkgLS0tIE1VU1QgQkUgTEFTVCAqLwogCXtOVUxMLCBOVUxMLCBO VUxMLCBOVUxMLAogCU5VTEwsIE5VTEwsIDB9CkBAIC0zNzMyLDYgKzM3MzYsMTMgQEAga2VlcF9n b2luZzoJCQkJCQkvKiBXZSB3aWxsIGNvbWUgYmFjayB0byBoZXJlIHVudGlsIHRoZXJlIGlzCiAJ CQkJICogcHJvY2VlZCB3aXRob3V0LgogCQkJCSAqLwogCisJCQkJLyoKKwkJCQkgKiBTZXQgcHJv dG9jb2xfY3Vyc29yX2VuYWJsZWQgZmxhZyBiYXNlZCBvbiBjb25uZWN0aW9uCisJCQkJICogcGFy YW1ldGVyCisJCQkJICovCisJCQkJaWYgKGNvbm4tPnByb3RvY29sX2N1cnNvciAmJiBjb25uLT5w cm90b2NvbF9jdXJzb3JbMF0gPT0gJzEnKQorCQkJCQljb25uLT5wcm90b2NvbF9jdXJzb3JfZW5h YmxlZCA9IHRydWU7CisKIAkJCQkvKiBCdWlsZCB0aGUgc3RhcnR1cCBwYWNrZXQuICovCiAJCQkJ c3RhcnRwYWNrZXQgPSBwcUJ1aWxkU3RhcnR1cFBhY2tldDMoY29ubiwgJnBhY2tldGxlbiwKIAkJ CQkJCQkJCQkJCQlFbnZpcm9ubWVudE9wdGlvbnMpOwpAQCAtNzgyMyw2ICs3ODM0LDE3IEBAIFBR Y29ubmVjdGlvblVzZWRHU1NBUEkoY29uc3QgUEdjb25uICpjb25uKQogCQlyZXR1cm4gZmFsc2U7 CiB9CiAKK2ludAorUFFQb3J0YWxDdXJzb3JFbmFibGVkKGNvbnN0IFBHY29ubiAqY29ubikKK3sK KwlpZiAoIWNvbm4pCisJCXJldHVybiBmYWxzZTsKKwlpZiAoY29ubi0+cHJvdG9jb2xfY3Vyc29y X2VuYWJsZWQpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQorCiBp bnQKIFBRY2xpZW50RW5jb2RpbmcoY29uc3QgUEdjb25uICpjb25uKQogewpkaWZmIC0tZ2l0IGEv c3JjL2ludGVyZmFjZXMvbGlicHEvZmUtZXhlYy5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUt ZXhlYy5jCmluZGV4IDIwM2QzODhiZGJmLi44ZTM3Nzg2NTUyZiAxMDA2NDQKLS0tIGEvc3JjL2lu dGVyZmFjZXMvbGlicHEvZmUtZXhlYy5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWV4 ZWMuYwpAQCAtMTY4Miw2ICsxNjgyLDE0MSBAQCBQUXNlbmRRdWVyeVByZXBhcmVkKFBHY29ubiAq Y29ubiwKIAkJCQkJCSAgIHJlc3VsdEZvcm1hdCk7CiB9CiAKKy8qCisgKiBQUXNlbmRCaW5kV2l0 aEN1cnNvck9wdGlvbnMKKyAqCQlTZW5kIGEgQmluZCBtZXNzYWdlIHdpdGggY3Vyc29yIG9wdGlv bnMsIGZvbGxvd2VkIGJ5IERlc2NyaWJlLCBidXQgbm90CisgKgkJRXhlY3V0ZS4gVGhpcyBjcmVh dGVzIGEgbmFtZWQgcG9ydGFsIHdpdGggdGhlIHNwZWNpZmllZCBjdXJzb3Igb3B0aW9ucworICoJ CShQUV9CSU5EX0NVUlNPUl8qIGZyb20gbGlicHEtZmUuaCkgdGhhdCBjYW4gYmUgZmV0Y2hlZCBm cm9tIGxhdGVyLgorICoKKyAqCQlOb24temVybyBjdXJzb3JPcHRpb25zIHJlcXVpcmUgdGhlIF9w cV8ucHJvdG9jb2xfY3Vyc29yIHByb3RvY29sCisgKgkJZXh0ZW5zaW9uOyByZXR1cm5zIDAgaWYg dGhlIGV4dGVuc2lvbiB3YXMgbm90IG5lZ290aWF0ZWQuICBQYXNzaW5nCisgKgkJY3Vyc29yT3B0 aW9ucyBhcyAwIGNyZWF0ZXMgYSBuYW1lZCBwb3J0YWwgd2l0aG91dCBjdXJzb3Igb3B0aW9ucy4K KyAqLworaW50CitQUXNlbmRCaW5kV2l0aEN1cnNvck9wdGlvbnMoUEdjb25uICpjb25uLAorCQkJ CQkJCWNvbnN0IGNoYXIgKnN0bXROYW1lLAorCQkJCQkJCWludCBuUGFyYW1zLAorCQkJCQkJCWNv bnN0IGNoYXIgKmNvbnN0ICpwYXJhbVZhbHVlcywKKwkJCQkJCQljb25zdCBpbnQgKnBhcmFtTGVu Z3RocywKKwkJCQkJCQljb25zdCBpbnQgKnBhcmFtRm9ybWF0cywKKwkJCQkJCQlpbnQgcmVzdWx0 Rm9ybWF0LAorCQkJCQkJCWNvbnN0IGNoYXIgKnBvcnRhbE5hbWUsCisJCQkJCQkJaW50IGN1cnNv ck9wdGlvbnMpCit7CisJUEdjbWRRdWV1ZUVudHJ5ICplbnRyeTsKKworCWlmICghUFFzZW5kUXVl cnlTdGFydChjb25uLCB0cnVlKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXN0bXROYW1lKQorCXsK KwkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwgInN0YXRlbWVudCBuYW1lIGlzIGEgbnVs bCBwb2ludGVyIik7CisJCXJldHVybiAwOworCX0KKworCWlmICghcG9ydGFsTmFtZSB8fCBwb3J0 YWxOYW1lWzBdID09ICdcMCcpCisJeworCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25uLCAi YSBuYW1lZCBwb3J0YWwgaXMgcmVxdWlyZWQiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGN1 cnNvck9wdGlvbnMgIT0gMCAmJiAhY29ubi0+cHJvdG9jb2xfY3Vyc29yX2VuYWJsZWQpCisJewor CQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25uLAorCQkJCQkJCQkiY3Vyc29yIG9wdGlvbnMg cmVxdWlyZSB0aGUgX3BxXy5wcm90b2NvbF9jdXJzb3IgcHJvdG9jb2wgZXh0ZW5zaW9uIik7CisJ CXJldHVybiAwOworCX0KKworCWlmIChjdXJzb3JPcHRpb25zICYgflBRX0JJTkRfQ1VSU09SX1ZB TElEX0ZMQUdTKQorCXsKKwkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwKKwkJCQkJCQkJ InVucmVjb2duaXplZCBjdXJzb3Igb3B0aW9uIGZsYWdzOiAweCV4IiwKKwkJCQkJCQkJY3Vyc29y T3B0aW9ucyAmIH5QUV9CSU5EX0NVUlNPUl9WQUxJRF9GTEFHUyk7CisJCXJldHVybiAwOworCX0K KworCWVudHJ5ID0gcHFBbGxvY0NtZFF1ZXVlRW50cnkoY29ubik7CisJaWYgKGVudHJ5ID09IE5V TEwpCisJCXJldHVybiAwOworCisJaWYgKHBxUHV0TXNnU3RhcnQoUHFNc2dfQmluZCwgY29ubikg PCAwIHx8CisJCXBxUHV0cyhwb3J0YWxOYW1lID8gcG9ydGFsTmFtZSA6ICIiLCBjb25uKSA8IDAg fHwKKwkJcHFQdXRzKHN0bXROYW1lLCBjb25uKSA8IDApCisJCWdvdG8gc2VuZEZhaWxlZDsKKwor CWlmIChuUGFyYW1zID4gMCAmJiBwYXJhbUZvcm1hdHMpCisJeworCQlpZiAocHFQdXRJbnQoblBh cmFtcywgMiwgY29ubikgPCAwKQorCQkJZ290byBzZW5kRmFpbGVkOworCQlmb3IgKGludCBpID0g MDsgaSA8IG5QYXJhbXM7IGkrKykKKwkJCWlmIChwcVB1dEludChwYXJhbUZvcm1hdHNbaV0sIDIs IGNvbm4pIDwgMCkKKwkJCQlnb3RvIHNlbmRGYWlsZWQ7CisJfQorCWVsc2UgaWYgKHBxUHV0SW50 KDAsIDIsIGNvbm4pIDwgMCkKKwkJZ290byBzZW5kRmFpbGVkOworCisJaWYgKHBxUHV0SW50KG5Q YXJhbXMsIDIsIGNvbm4pIDwgMCkKKwkJZ290byBzZW5kRmFpbGVkOworCisJZm9yIChpbnQgaSA9 IDA7IGkgPCBuUGFyYW1zOyBpKyspCisJeworCQlpZiAocGFyYW1WYWx1ZXMgJiYgcGFyYW1WYWx1 ZXNbaV0pCisJCXsKKwkJCWludAkJCWxlbiA9IHBhcmFtTGVuZ3RocyA/IHBhcmFtTGVuZ3Roc1tp XSA6IHN0cmxlbihwYXJhbVZhbHVlc1tpXSk7CisKKwkJCWlmIChwcVB1dEludChsZW4sIDQsIGNv bm4pIDwgMCB8fAorCQkJCXBxUHV0bmNoYXIocGFyYW1WYWx1ZXNbaV0sIGxlbiwgY29ubikgPCAw KQorCQkJCWdvdG8gc2VuZEZhaWxlZDsKKwkJfQorCQllbHNlIGlmIChwcVB1dEludCgtMSwgNCwg Y29ubikgPCAwKQorCQkJZ290byBzZW5kRmFpbGVkOworCX0KKworCWlmIChwcVB1dEludCgxLCAy LCBjb25uKSA8IDAgfHwKKwkJcHFQdXRJbnQocmVzdWx0Rm9ybWF0LCAyLCBjb25uKSA8IDApCisJ CWdvdG8gc2VuZEZhaWxlZDsKKworCS8qIFNlbmQgY3Vyc29yIG9wdGlvbnMgaWYgX3BxXy5wcm90 b2NvbF9jdXJzb3IgZW5hYmxlZCAqLworCWlmIChjb25uLT5wcm90b2NvbF9jdXJzb3JfZW5hYmxl ZCkKKwl7CisJCWlmIChwcVB1dEludChjdXJzb3JPcHRpb25zLCA0LCBjb25uKSA8IDApCisJCQln b3RvIHNlbmRGYWlsZWQ7CisJfQorCisJaWYgKHBxUHV0TXNnRW5kKGNvbm4pIDwgMCkKKwkJZ290 byBzZW5kRmFpbGVkOworCisJaWYgKHBxUHV0TXNnU3RhcnQoUHFNc2dfRGVzY3JpYmUsIGNvbm4p IDwgMCB8fAorCQlwcVB1dGMoJ1AnLCBjb25uKSA8IDAgfHwKKwkJcHFQdXRzKHBvcnRhbE5hbWUg PyBwb3J0YWxOYW1lIDogIiIsIGNvbm4pIDwgMCB8fAorCQlwcVB1dE1zZ0VuZChjb25uKSA8IDAp CisJCWdvdG8gc2VuZEZhaWxlZDsKKworCS8qIE5vIEV4ZWN1dGUgbWVzc2FnZSAtIHBvcnRhbCBp cyBjcmVhdGVkIGJ1dCBub3QgZXhlY3V0ZWQgKi8KKworCWlmIChjb25uLT5waXBlbGluZVN0YXR1 cyA9PSBQUV9QSVBFTElORV9PRkYpCisJeworCQlpZiAocHFQdXRNc2dTdGFydChQcU1zZ19TeW5j LCBjb25uKSA8IDAgfHwKKwkJCXBxUHV0TXNnRW5kKGNvbm4pIDwgMCkKKwkJCWdvdG8gc2VuZEZh aWxlZDsKKwl9CisKKwllbnRyeS0+cXVlcnljbGFzcyA9IFBHUVVFUllfREVTQ1JJQkU7CisKKwlp ZiAocHFQaXBlbGluZUZsdXNoKGNvbm4pIDwgMCkKKwkJZ290byBzZW5kRmFpbGVkOworCisJLyog T0ssIGl0J3MgbGF1bmNoZWQhICovCisJcHFBcHBlbmRDbWRRdWV1ZUVudHJ5KGNvbm4sIGVudHJ5 KTsKKworCWNvbm4tPmFzeW5jU3RhdHVzID0gUEdBU1lOQ19CVVNZOworCXJldHVybiAxOworCitz ZW5kRmFpbGVkOgorCXBxUmVjeWNsZUNtZFF1ZXVlRW50cnkoY29ubiwgZW50cnkpOworCXJldHVy biAwOworfQorCiAvKgogICogUFFzZW5kUXVlcnlTdGFydAogICoJQ29tbW9uIHN0YXJ0dXAgY29k ZSBmb3IgUFFzZW5kUXVlcnkgYW5kIHNpYmxpbmcgcm91dGluZXMKZGlmZiAtLWdpdCBhL3NyYy9p bnRlcmZhY2VzL2xpYnBxL2ZlLXByb3RvY29sMy5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUt cHJvdG9jb2wzLmMKaW5kZXggOGMxZmRhNWNhZjAuLmIyYWIzZjIyNjNhIDEwMDY0NAotLS0gYS9z cmMvaW50ZXJmYWNlcy9saWJwcS9mZS1wcm90b2NvbDMuYworKysgYi9zcmMvaW50ZXJmYWNlcy9s aWJwcS9mZS1wcm90b2NvbDMuYwpAQCAtMTU0NCw2ICsxNTQ0LDE2IEBAIHBxR2V0TmVnb3RpYXRl UHJvdG9jb2xWZXJzaW9uMyhQR2Nvbm4gKmNvbm4pCiAJCQlzdHJjbXAoY29ubi0+d29ya0J1ZmZl ci5kYXRhLCAiX3BxXy50ZXN0X3Byb3RvY29sX25lZ290aWF0aW9uIikgPT0gMCkKIAkJewogCQkJ Zm91bmRfdGVzdF9wcm90b2NvbF9uZWdvdGlhdGlvbiA9IHRydWU7CisJCQljb250aW51ZTsKKwkJ fQorCisJCS8qCisJCSAqIEhhbmRsZSByZWplY3RlZCBwcm90b2NvbCBleHRlbnNpb25zIHdlIHJl cXVlc3RlZC4gRGlzYWJsZSB0aGUKKwkJICogY29ycmVzcG9uZGluZyBmZWF0dXJlIHNvIHRoZSBj bGllbnQgZG9lc24ndCB0cnkgdG8gdXNlIGl0LgorCQkgKi8KKwkJaWYgKHN0cmNtcChjb25uLT53 b3JrQnVmZmVyLmRhdGEsICJfcHFfLnByb3RvY29sX2N1cnNvciIpID09IDApCisJCXsKKwkJCWNv bm4tPnByb3RvY29sX2N1cnNvcl9lbmFibGVkID0gZmFsc2U7CiAJCX0KIAkJZWxzZQogCQl7CkBA IC0yNTIxLDYgKzI1MzEsMTAgQEAgYnVpbGRfc3RhcnR1cF9wYWNrZXQoY29uc3QgUEdjb25uICpj b25uLCBjaGFyICpwYWNrZXQsCiAJaWYgKGNvbm4tPnB2ZXJzaW9uID09IFBHX1BST1RPQ09MX0dS RUFTRSkKIAkJQUREX1NUQVJUVVBfT1BUSU9OKCJfcHFfLnRlc3RfcHJvdG9jb2xfbmVnb3RpYXRp b24iLCAiIik7CiAKKwkvKiBBZGQgX3BxXy5wcm90b2NvbF9jdXJzb3Igb3B0aW9uIGlmIGVuYWJs ZWQgKi8KKwlpZiAoY29ubi0+cHJvdG9jb2xfY3Vyc29yICYmIGNvbm4tPnByb3RvY29sX2N1cnNv clswXSA9PSAnMScpCisJCUFERF9TVEFSVFVQX09QVElPTigiX3BxXy5wcm90b2NvbF9jdXJzb3Ii LCAidHJ1ZSIpOworCiAJLyogQWRkIGFueSBlbnZpcm9ubWVudC1kcml2ZW4gR1VDIHNldHRpbmdz IG5lZWRlZCAqLwogCWZvciAobmV4dF9lbyA9IG9wdGlvbnM7IG5leHRfZW8tPmVudk5hbWU7IG5l eHRfZW8rKykKIAl7CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5o IGIvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaAppbmRleCBmMDZlN2E5NzJjMy4uNjhi YzRiNzcwZjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgKKysr IGIvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaApAQCAtNjksNiArNjksMjMgQEAgZXh0 ZXJuICJDIgogLyogSW5kaWNhdGVzIHByZXNlbmNlIG9mIHRoZSBQUUFVVEhEQVRBX09BVVRIX0JF QVJFUl9UT0tFTl9WMiBhdXRoZGF0YSBob29rICovCiAjZGVmaW5lIExJQlBRX0hBU19PQVVUSF9C RUFSRVJfVE9LRU5fVjIgMQogCisvKgorICogQmluZCBtZXNzYWdlIGV4dGVuc2lvbiBmbGFncy4g IFRoZXNlIGZsYWdzIGFyZSBzZW50IGluIHRoZSBvcHRpb25hbAorICogZXh0ZW5zaW9uIGJpdG1h cCBmaWVsZCBvZiB0aGUgQmluZCBtZXNzYWdlIHdoZW4gYSBwcm90b2NvbCBleHRlbnNpb24KKyAq IGlzIG5lZ290aWF0ZWQuICBGdXR1cmUgZXh0ZW5zaW9ucyBtYXkgZGVmaW5lIGFkZGl0aW9uYWwg Yml0cy4KKyAqLworCisvKiBGbGFncyBmb3IgdGhlIF9wcV8ucHJvdG9jb2xfY3Vyc29yIGV4dGVu c2lvbiAqLworI2RlZmluZSBQUV9CSU5EX0NVUlNPUl9TQ1JPTEwJCTB4MDAwMQkvKiBTQ1JPTEwg Ki8KKyNkZWZpbmUgUFFfQklORF9DVVJTT1JfTk9fU0NST0xMCTB4MDAwMgkvKiBOTyBTQ1JPTEwg Ki8KKyNkZWZpbmUgUFFfQklORF9DVVJTT1JfSE9MRAkJCTB4MDAwNAkvKiBXSVRIIEhPTEQgKi8K KyNkZWZpbmUgUFFfQklORF9DVVJTT1JfVkFMSURfRkxBR1MJKFBRX0JJTkRfQ1VSU09SX1NDUk9M TCB8IFwKKwkJCQkJCQkJCSBQUV9CSU5EX0NVUlNPUl9OT19TQ1JPTEwgfCBcCisJCQkJCQkJCQkg UFFfQklORF9DVVJTT1JfSE9MRCkKKworLyogTWFzayBvZiBhbGwgdmFsaWQgQmluZCBleHRlbnNp b24gZmxhZ3MgKi8KKyNkZWZpbmUgUFFfQklORF9FWFRfVkFMSURfRkxBR1MJCVBRX0JJTkRfQ1VS U09SX1ZBTElEX0ZMQUdTCisKIC8qCiAgKiBPcHRpb24gZmxhZ3MgZm9yIFBRY29weVJlc3VsdAog ICovCkBAIC01MzUsNiArNTUyLDExIEBAIGV4dGVybiBpbnQJUFFzZW5kUXVlcnlQcmVwYXJlZChQ R2Nvbm4gKmNvbm4sCiAJCQkJCQkJCWNvbnN0IGludCAqcGFyYW1MZW5ndGhzLAogCQkJCQkJCQlj b25zdCBpbnQgKnBhcmFtRm9ybWF0cywKIAkJCQkJCQkJaW50IHJlc3VsdEZvcm1hdCk7CitleHRl cm4gaW50CVBRc2VuZEJpbmRXaXRoQ3Vyc29yT3B0aW9ucyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNo YXIgKnN0bXROYW1lLAorCQkJCQkJCQkJCWludCBuUGFyYW1zLCBjb25zdCBjaGFyICpjb25zdCAq cGFyYW1WYWx1ZXMsCisJCQkJCQkJCQkJY29uc3QgaW50ICpwYXJhbUxlbmd0aHMsIGNvbnN0IGlu dCAqcGFyYW1Gb3JtYXRzLAorCQkJCQkJCQkJCWludCByZXN1bHRGb3JtYXQsIGNvbnN0IGNoYXIg KnBvcnRhbE5hbWUsIGludCBjdXJzb3JPcHRpb25zKTsKK2V4dGVybiBpbnQJUFFQb3J0YWxDdXJz b3JFbmFibGVkKGNvbnN0IFBHY29ubiAqY29ubik7CiBleHRlcm4gaW50CVBRc2V0U2luZ2xlUm93 TW9kZShQR2Nvbm4gKmNvbm4pOwogZXh0ZXJuIGludAlQUXNldENodW5rZWRSb3dzTW9kZShQR2Nv bm4gKmNvbm4sIGludCBjaHVua1NpemUpOwogZXh0ZXJuIFBHcmVzdWx0ICpQUWdldFJlc3VsdChQ R2Nvbm4gKmNvbm4pOwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50 LmggYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaAppbmRleCBiZDdlYjU5ZjVmOC4u ZjdlMTk4MDk4MWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5o CisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCkBAIC00MzAsNiArNDMwLDcg QEAgc3RydWN0IHBnX2Nvbm4KIAljaGFyCSAgICpzY3JhbV9jbGllbnRfa2V5OwkvKiBiYXNlNjQt ZW5jb2RlZCBTQ1JBTSBjbGllbnQga2V5ICovCiAJY2hhcgkgICAqc2NyYW1fc2VydmVyX2tleTsJ LyogYmFzZTY0LWVuY29kZWQgU0NSQU0gc2VydmVyIGtleSAqLwogCWNoYXIJICAgKnNzbGtleWxv Z2ZpbGU7CS8qIHdoZXJlIHNob3VsZCB0aGUgY2xpZW50IHdyaXRlIHNzbCBrZXlsb2dzICovCisJ Y2hhcgkgICAqcHJvdG9jb2xfY3Vyc29yOwkvKiBlbmFibGUgX3BxXy5wcm90b2NvbF9jdXJzb3Ig b3B0aW9uICovCiAKIAlib29sCQljYW5jZWxSZXF1ZXN0OwkvKiB0cnVlIGlmIHRoaXMgY29ubmVj dGlvbiBpcyB1c2VkIHRvIHNlbmQgYQogCQkJCQkJCQkgKiBjYW5jZWwgcmVxdWVzdCwgaW5zdGVh ZCBvZiBiZWluZyBhIG5vcm1hbApAQCAtNTA0LDYgKzUwNSw3IEBAIHN0cnVjdCBwZ19jb25uCiAJ aW50CQkJc3ZlcnNpb247CQkvKiBzZXJ2ZXIgdmVyc2lvbiwgZS5nLiA3MDQwMSBmb3IgNy40LjEg Ki8KIAlib29sCQlwdmVyc2lvbl9uZWdvdGlhdGVkOwkvKiB0cnVlIGlmIE5lZ290aWF0ZVByb3Rv Y29sVmVyc2lvbgogCQkJCQkJCQkJCSAqIHdhcyByZWNlaXZlZCAqLworCWJvb2wJCXByb3RvY29s X2N1cnNvcl9lbmFibGVkOwkvKiBfcHFfLnByb3RvY29sX2N1cnNvciBvcHRpb24gKi8KIAlib29s CQlhdXRoX3JlcV9yZWNlaXZlZDsJLyogdHJ1ZSBpZiBhbnkgdHlwZSBvZiBhdXRoIHJlcSByZWNl aXZlZCAqLwogCWJvb2wJCXBhc3N3b3JkX25lZWRlZDsJLyogdHJ1ZSBpZiBzZXJ2ZXIgZGVtYW5k ZWQgYSBwYXNzd29yZCAqLwogCWJvb2wJCWdzc2FwaV91c2VkOwkvKiB0cnVlIGlmIGF1dGhlbnRp Y2F0ZWQgdmlhIGdzc2FwaSAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmls ZSBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKaW5kZXggMjhjZTNiMzVlZGEuLjM1N2ZiOTdl YThmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvTWFrZWZpbGUKQEAgLTExLDYgKzExLDcgQEAgU1VCRElSUyA9IFwKIAkJICBkdW1t eV9pbmRleF9hbSBcCiAJCSAgZHVtbXlfc2VjbGFiZWwgXAogCQkgIGluZGV4IFwKKwkJICBsaWJw cV9wcm90b2NvbF9jdXJzb3IgXAogCQkgIGxpYnBxX3BpcGVsaW5lIFwKIAkJICBvYXV0aF92YWxp ZGF0b3IgXAogCQkgIHBsc2FtcGxlIFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbGli cHFfcHJvdG9jb2xfY3Vyc29yLy5naXRpZ25vcmUgYi9zcmMvdGVzdC9tb2R1bGVzL2xpYnBxX3By b3RvY29sX2N1cnNvci8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi44ZjU1YWQxNzZiZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv bGlicHFfcHJvdG9jb2xfY3Vyc29yLy5naXRpZ25vcmUKQEAgLTAsMCArMSw1IEBACisjIEdlbmVy YXRlZCBzdWJkaXJlY3RvcmllcworL2xvZy8KKy9yZXN1bHRzLworL3RtcF9jaGVjay8KKy9saWJw cV9wcm90b2NvbF9jdXJzb3IKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbGlicHFfcHJv dG9jb2xfY3Vyc29yL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9saWJwcV9wcm90b2NvbF9j dXJzb3IvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFm YTAwYWYxNTMwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9saWJwcV9wcm90 b2NvbF9jdXJzb3IvTWFrZWZpbGUKQEAgLTAsMCArMSwyNSBAQAorIyBzcmMvdGVzdC9tb2R1bGVz L2xpYnBxX3Byb3RvY29sX2N1cnNvci9NYWtlZmlsZQorCitQR0ZJTEVERVNDID0gImxpYnBxX3By b3RvY29sX2N1cnNvciAtIHRlc3QgcHJvZ3JhbSBmb3IgZXh0ZW5kZWQgcXVlcnkgcHJvdG9jb2wg Y3Vyc29ycyIKK1BHQVBQSUNPTiA9IHdpbjMyCisKK1BST0dSQU0gPSBsaWJwcV9wcm90b2NvbF9j dXJzb3IKK09CSlMgPSAkKFdJTjMyUkVTKSBsaWJwcV9wcm90b2NvbF9jdXJzb3IubworCitOT19J TlNUQUxMID0gMQorCitQR19DUFBGTEFHUyA9IC1JJChsaWJwcV9zcmNkaXIpCitQR19MSUJTX0lO VEVSTkFMICs9ICQobGlicHFfcGdwb3J0KQorCitUQVBfVEVTVFMgPSAxCisKK2lmZGVmIFVTRV9Q R1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykg LS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVz L2xpYnBxX3Byb3RvY29sX2N1cnNvcgordG9wX2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KK2luY2x1 ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3Jj ZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvbW9kdWxlcy9saWJwcV9wcm90b2NvbF9jdXJzb3IvbGlicHFfcHJvdG9jb2xfY3Vyc29yLmMg Yi9zcmMvdGVzdC9tb2R1bGVzL2xpYnBxX3Byb3RvY29sX2N1cnNvci9saWJwcV9wcm90b2NvbF9j dXJzb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDBjOWU5Y2Ex OTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2xpYnBxX3Byb3RvY29sX2N1 cnNvci9saWJwcV9wcm90b2NvbF9jdXJzb3IuYwpAQCAtMCwwICsxLDc0OSBAQAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogbGlicHFfcHJvdG9jb2xfY3Vyc29yLmMKKyAqCQlUZXN0cyBmb3Ig ZXh0ZW5kZWQgcXVlcnkgcHJvdG9jb2wgY3Vyc29yIG9wdGlvbnMgdmlhCisgKgkJUFFzZW5kQmlu ZFdpdGhDdXJzb3JPcHRpb25zIChfcHFfLnByb3RvY29sX2N1cnNvciBwcm90b2NvbCBleHRlbnNp b24pLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkJc3JjL3Rlc3QvbW9k dWxlcy9saWJwcV9wcm90b2NvbF9jdXJzb3IvbGlicHFfcHJvdG9jb2xfY3Vyc29yLmMKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2lu Y2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibGlicHEtZmUuaCIKKyNpbmNsdWRlICJwZ19n ZXRvcHQuaCIKKworLyoKKyAqIEN1cnNvciBvcHRpb24gZmxhZ3MgZm9yIFBRc2VuZEJpbmRXaXRo Q3Vyc29yT3B0aW9ucywgZGVmaW5lZCBpbiBsaWJwcS1mZS5oCisgKiBhcyBQUV9CSU5EX0NVUlNP Ul8qLiAgV2UgdXNlIHRob3NlIGRpcmVjdGx5LgorICovCisKK3N0YXRpYyBjb25zdCBjaGFyICpj b25zdCBwcm9nbmFtZSA9ICJsaWJwcV9wcm90b2NvbF9jdXJzb3IiOworCitzdGF0aWMgdm9pZCBl eGl0X25pY2VseShQR2Nvbm4gKmNvbm4pOworcGdfbm9yZXR1cm4gc3RhdGljIHZvaWQgcGdfZmF0 YWxfaW1wbChpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LC4uLikKKwkJCXBnX2F0dHJpYnV0ZV9w cmludGYoMiwgMyk7CisKK3N0YXRpYyB2b2lkCitleGl0X25pY2VseShQR2Nvbm4gKmNvbm4pCit7 CisJUFFmaW5pc2goY29ubik7CisJZXhpdCgxKTsKK30KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcg ZmV3IGZ1bmN0aW9ucyBhcmUgd3JhcHBlZCBpbiBtYWNyb3MgdG8gbWFrZSB0aGUgcmVwb3J0ZWQg bGluZQorICogbnVtYmVyIGluIGFuIGVycm9yIG1hdGNoIHRoZSBsaW5lIG51bWJlciBvZiB0aGUg aW52b2NhdGlvbi4KKyAqLworCisvKgorICogUHJpbnQgYW4gZXJyb3IgdG8gc3RkZXJyIGFuZCB0 ZXJtaW5hdGUgdGhlIHByb2dyYW0uCisgKi8KKyNkZWZpbmUgcGdfZmF0YWwoLi4uKSBwZ19mYXRh bF9pbXBsKF9fTElORV9fLCBfX1ZBX0FSR1NfXykKK3BnX25vcmV0dXJuIHN0YXRpYyB2b2lkCitw Z19mYXRhbF9pbXBsKGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsLi4uKQoreworCXZhX2xpc3QJ CWFyZ3M7CisKKwlmZmx1c2goc3Rkb3V0KTsKKworCWZwcmludGYoc3RkZXJyLCAiXG4lczolZDog IiwgcHJvZ25hbWUsIGxpbmUpOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJdmZwcmludGYoc3Rk ZXJyLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlBc3NlcnQoZm10W3N0cmxlbihmbXQp IC0gMV0gIT0gJ1xuJyk7CisJZnByaW50ZihzdGRlcnIsICJcbiIpOworCWV4aXQoMSk7Cit9CisK Ky8qCisgKiBDaGVjayB0aGF0IGxpYnBxIG5leHQgcmV0dXJucyBhIFBHcmVzdWx0IHdpdGggdGhl IHNwZWNpZmllZCBzdGF0dXMsCisgKiByZXR1cm5pbmcgdGhlIFBHcmVzdWx0IHNvIHRoYXQgY2Fs bGVyIGNhbiBwZXJmb3JtIGFkZGl0aW9uYWwgY2hlY2tzLgorICovCisjZGVmaW5lIGNvbmZpcm1f cmVzdWx0X3N0YXR1cyhjb25uLCBzdGF0dXMpIGNvbmZpcm1fcmVzdWx0X3N0YXR1c19pbXBsKF9f TElORV9fLCBjb25uLCBzdGF0dXMpCitzdGF0aWMgUEdyZXN1bHQgKgorY29uZmlybV9yZXN1bHRf c3RhdHVzX2ltcGwoaW50IGxpbmUsIFBHY29ubiAqY29ubiwgRXhlY1N0YXR1c1R5cGUgc3RhdHVz KQoreworCVBHcmVzdWx0ICAgKnJlczsKKworCXJlcyA9IFBRZ2V0UmVzdWx0KGNvbm4pOworCWlm IChyZXMgPT0gTlVMTCkKKwkJcGdfZmF0YWxfaW1wbChsaW5lLCAiUFFnZXRSZXN1bHQgcmV0dXJu ZWQgbnVsbCB1bmV4cGVjdGVkbHk6ICVzIiwKKwkJCQkJICBQUWVycm9yTWVzc2FnZShjb25uKSk7 CisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gc3RhdHVzKQorCQlwZ19mYXRhbF9pbXBsKGxp bmUsICJQUWdldFJlc3VsdCByZXR1cm5lZCBzdGF0dXMgJXMsIGV4cGVjdGVkICVzOiAlcyIsCisJ CQkJCSAgUFFyZXNTdGF0dXMoUFFyZXN1bHRTdGF0dXMocmVzKSksCisJCQkJCSAgUFFyZXNTdGF0 dXMoc3RhdHVzKSwKKwkJCQkJICBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJcmV0dXJuIHJlczsK K30KKworLyoKKyAqIENoZWNrIHRoYXQgbGlicHEgbmV4dCByZXR1cm5zIGEgUEdyZXN1bHQgd2l0 aCB0aGUgc3BlY2lmaWVkIHN0YXR1cywKKyAqIHRoZW4gZnJlZSB0aGUgUEdyZXN1bHQuCisgKi8K KyNkZWZpbmUgY29uc3VtZV9yZXN1bHRfc3RhdHVzKGNvbm4sIHN0YXR1cykgY29uc3VtZV9yZXN1 bHRfc3RhdHVzX2ltcGwoX19MSU5FX18sIGNvbm4sIHN0YXR1cykKK3N0YXRpYyB2b2lkCitjb25z dW1lX3Jlc3VsdF9zdGF0dXNfaW1wbChpbnQgbGluZSwgUEdjb25uICpjb25uLCBFeGVjU3RhdHVz VHlwZSBzdGF0dXMpCit7CisJUEdyZXN1bHQgICAqcmVzOworCisJcmVzID0gY29uZmlybV9yZXN1 bHRfc3RhdHVzX2ltcGwobGluZSwgY29ubiwgc3RhdHVzKTsKKwlQUWNsZWFyKHJlcyk7Cit9CisK Ky8qCisgKiBDaGVjayB0aGF0IGxpYnBxIG5leHQgcmV0dXJucyBhIG51bGwgUEdyZXN1bHQuCisg Ki8KKyNkZWZpbmUgY29uc3VtZV9udWxsX3Jlc3VsdChjb25uKSBjb25zdW1lX251bGxfcmVzdWx0 X2ltcGwoX19MSU5FX18sIGNvbm4pCitzdGF0aWMgdm9pZAorY29uc3VtZV9udWxsX3Jlc3VsdF9p bXBsKGludCBsaW5lLCBQR2Nvbm4gKmNvbm4pCit7CisJUEdyZXN1bHQgICAqcmVzOworCisJcmVz ID0gUFFnZXRSZXN1bHQoY29ubik7CisJaWYgKHJlcyAhPSBOVUxMKQorCQlwZ19mYXRhbF9pbXBs KGxpbmUsICJleHBlY3RlZCBOVUxMIFBHcmVzdWx0LCBnb3QgJXM6ICVzIiwKKwkJCQkJICBQUXJl c1N0YXR1cyhQUXJlc3VsdFN0YXR1cyhyZXMpKSwKKwkJCQkJICBQUWVycm9yTWVzc2FnZShjb25u KSk7Cit9CisKKy8qCisgKiBUZXN0IGhvbGRhYmxlIGN1cnNvcjogY3JlYXRlIGEgcG9ydGFsIHdp dGggUFFfQklORF9DVVJTT1JfSE9MRCB2aWEgQmluZCwKKyAqIGNvbW1pdCB0aGUgdHJhbnNhY3Rp b24sIHRoZW4gRkVUQ0ggZnJvbSB0aGUgc3Vydml2aW5nIHBvcnRhbC4KKyAqLworc3RhdGljIHZv aWQKK3Rlc3RfaG9sZGFibGVfY3Vyc29yKFBHY29ubiAqY29ubikKK3sKKwlQR3Jlc3VsdCAgICpy ZXM7CisKKwlmcHJpbnRmKHN0ZGVyciwgInRlc3RfaG9sZGFibGVfY3Vyc29yLi4uICIpOworCisJ cmVzID0gUFFleGVjKGNvbm4sICJCRUdJTiIpOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9 IFBHUkVTX0NPTU1BTkRfT0spCisJCXBnX2ZhdGFsKCJCRUdJTiBmYWlsZWQ6ICVzIiwgUFFlcnJv ck1lc3NhZ2UoY29ubikpOworCVBRY2xlYXIocmVzKTsKKworCXJlcyA9IFBRZXhlYyhjb25uLCAi Q1JFQVRFIFRFTVAgVEFCTEUgSUYgTk9UIEVYSVNUUyBob2xkYWJsZV90ZXN0KGlkIGludCkiKTsK KwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT01NQU5EX09LKQorCQlwZ19mYXRh bCgiQ1JFQVRFIFRBQkxFIGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJUFFj bGVhcihyZXMpOworCisJcmVzID0gUFFleGVjKGNvbm4sICJJTlNFUlQgSU5UTyBob2xkYWJsZV90 ZXN0IFZBTFVFUyAoMSksICgyKSwgKDMpIik7CisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0g UEdSRVNfQ09NTUFORF9PSykKKwkJcGdfZmF0YWwoIklOU0VSVCBmYWlsZWQ6ICVzIiwgUFFlcnJv ck1lc3NhZ2UoY29ubikpOworCVBRY2xlYXIocmVzKTsKKworCXJlcyA9IFBRcHJlcGFyZShjb25u LCAiaG9sZHN0bXQiLCAiU0VMRUNUICogRlJPTSBob2xkYWJsZV90ZXN0IiwgMCwgTlVMTCk7CisJ aWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJcGdfZmF0YWwo IlBSRVBBUkUgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwlQUWNsZWFyKHJl cyk7CisKKwlpZiAoUFFlbnRlclBpcGVsaW5lTW9kZShjb25uKSAhPSAxKQorCQlwZ19mYXRhbCgi ZmFpbGVkIHRvIGVudGVyIHBpcGVsaW5lIG1vZGU6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikp OworCisJaWYgKFBRc2VuZEJpbmRXaXRoQ3Vyc29yT3B0aW9ucyhjb25uLCAiaG9sZHN0bXQiLCAw LCBOVUxMLCBOVUxMLCBOVUxMLCAwLAorCQkJCQkJCQkJImhvbGRwb3J0YWwiLCBQUV9CSU5EX0NV UlNPUl9IT0xEKSAhPSAxKQorCQlwZ19mYXRhbCgiUFFzZW5kQmluZFdpdGhDdXJzb3JPcHRpb25z IGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisKKwlpZiAoUFFzZW5kUXVlcnlQ YXJhbXMoY29ubiwgIkNPTU1JVCIsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDApICE9IDEp CisJCXBnX2ZhdGFsKCJDT01NSVQgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsK KworCWlmIChQUXNlbmRRdWVyeVBhcmFtcyhjb25uLCAiRkVUQ0ggQUxMIEZST00gaG9sZHBvcnRh bCIsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDApICE9IDEpCisJCXBnX2ZhdGFsKCJGRVRD SCBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJaWYgKFBRc2VuZENsb3Nl UG9ydGFsKGNvbm4sICJob2xkcG9ydGFsIikgIT0gMSkKKwkJcGdfZmF0YWwoIlBRc2VuZENsb3Nl UG9ydGFsIGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisKKwlpZiAoUFFwaXBl bGluZVN5bmMoY29ubikgIT0gMSkKKwkJcGdfZmF0YWwoInBpcGVsaW5lIHN5bmMgZmFpbGVkOiAl cyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCS8qIEJpbmQrRGVzY3JpYmUgcmVzdWx0IChS b3dEZXNjcmlwdGlvbiBtZXRhZGF0YSkgKi8KKwlyZXMgPSBjb25maXJtX3Jlc3VsdF9zdGF0dXMo Y29ubiwgUEdSRVNfQ09NTUFORF9PSyk7CisJaWYgKFBRbmZpZWxkcyhyZXMpICE9IDEpCisJCXBn X2ZhdGFsKCJleHBlY3RlZCAxIGZpZWxkLCBnb3QgJWQiLCBQUW5maWVsZHMocmVzKSk7CisJUFFj bGVhcihyZXMpOworCWNvbnN1bWVfbnVsbF9yZXN1bHQoY29ubik7CisKKwkvKiBDT01NSVQgcmVz dWx0ICovCisJY29uc3VtZV9yZXN1bHRfc3RhdHVzKGNvbm4sIFBHUkVTX0NPTU1BTkRfT0spOwor CWNvbnN1bWVfbnVsbF9yZXN1bHQoY29ubik7CisKKwkvKiBGRVRDSCBhZnRlciBjb21taXQgKi8K KwlyZXMgPSBjb25maXJtX3Jlc3VsdF9zdGF0dXMoY29ubiwgUEdSRVNfVFVQTEVTX09LKTsKKwlp ZiAoUFFudHVwbGVzKHJlcykgIT0gMykKKwkJcGdfZmF0YWwoImV4cGVjdGVkIDMgcm93cyBhZnRl ciBjb21taXQsIGdvdCAlZCIsIFBRbnR1cGxlcyhyZXMpKTsKKwlQUWNsZWFyKHJlcyk7CisJY29u c3VtZV9udWxsX3Jlc3VsdChjb25uKTsKKworCS8qIENMT1NFICovCisJY29uc3VtZV9yZXN1bHRf c3RhdHVzKGNvbm4sIFBHUkVTX0NPTU1BTkRfT0spOworCWNvbnN1bWVfbnVsbF9yZXN1bHQoY29u bik7CisKKwljb25zdW1lX3Jlc3VsdF9zdGF0dXMoY29ubiwgUEdSRVNfUElQRUxJTkVfU1lOQyk7 CisJY29uc3VtZV9udWxsX3Jlc3VsdChjb25uKTsKKworCWlmIChQUWV4aXRQaXBlbGluZU1vZGUo Y29ubikgIT0gMSkKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBleGl0IHBpcGVsaW5lIG1vZGU6ICVz IiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJZnByaW50ZihzdGRlcnIsICJva1xuIik7Cit9 CisKKy8qCisgKiBUZXN0IHNjcm9sbCBjdXJzb3I6IGNyZWF0ZSBhIHBvcnRhbCB3aXRoIFBRX0JJ TkRfQ1VSU09SX1NDUk9MTCBhbmQgdmVyaWZ5CisgKiBiYWNrd2FyZCBmZXRjaGluZyB3b3Jrcy4K KyAqLworc3RhdGljIHZvaWQKK3Rlc3Rfc2Nyb2xsX2N1cnNvcihQR2Nvbm4gKmNvbm4pCit7CisJ UEdyZXN1bHQgICAqcmVzOworCisJZnByaW50ZihzdGRlcnIsICJ0ZXN0X3Njcm9sbF9jdXJzb3Iu Li4gIik7CisKKwlyZXMgPSBQUWV4ZWMoY29ubiwgIkJFR0lOIik7CisJaWYgKFBRcmVzdWx0U3Rh dHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJcGdfZmF0YWwoIkJFR0lOIGZhaWxlZDog JXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJUFFjbGVhcihyZXMpOworCisJcmVzID0gUFFl eGVjKGNvbm4sICJDUkVBVEUgVEVNUCBUQUJMRSBJRiBOT1QgRVhJU1RTIHNjcm9sbF90ZXN0KGlk IGludCkiKTsKKwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT01NQU5EX09LKQor CQlwZ19mYXRhbCgiQ1JFQVRFIFRBQkxFIGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25u KSk7CisJUFFjbGVhcihyZXMpOworCisJcmVzID0gUFFleGVjKGNvbm4sICJJTlNFUlQgSU5UTyBz Y3JvbGxfdGVzdCBWQUxVRVMgKDEpLCAoMiksICgzKSIpOworCWlmIChQUXJlc3VsdFN0YXR1cyhy ZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCXBnX2ZhdGFsKCJJTlNFUlQgZmFpbGVkOiAlcyIs IFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwlQUWNsZWFyKHJlcyk7CisKKwlyZXMgPSBQUXByZXBh cmUoY29ubiwgInNjcm9sbHN0bXQiLCAiU0VMRUNUICogRlJPTSBzY3JvbGxfdGVzdCBPUkRFUiBC WSBpZCIsIDAsIE5VTEwpOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1B TkRfT0spCisJCXBnX2ZhdGFsKCJQUkVQQVJFIGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShj b25uKSk7CisJUFFjbGVhcihyZXMpOworCisJaWYgKFBRZW50ZXJQaXBlbGluZU1vZGUoY29ubikg IT0gMSkKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBlbnRlciBwaXBlbGluZSBtb2RlOiAlcyIsIFBR ZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCWlmIChQUXNlbmRCaW5kV2l0aEN1cnNvck9wdGlvbnMo Y29ubiwgInNjcm9sbHN0bXQiLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCAwLAorCQkJCQkJCQkJInNj cm9sbHBvcnRhbCIsIFBRX0JJTkRfQ1VSU09SX1NDUk9MTCkgIT0gMSkKKwkJcGdfZmF0YWwoIlBR c2VuZEJpbmRXaXRoQ3Vyc29yT3B0aW9ucyBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29u bikpOworCisJLyogRmV0Y2ggZm9yd2FyZCB0aGVuIGJhY2t3YXJkICovCisJaWYgKFBRc2VuZFF1 ZXJ5UGFyYW1zKGNvbm4sICJGRVRDSCAyIEZST00gc2Nyb2xscG9ydGFsIiwgMCwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCwgMCkgIT0gMSkKKwkJcGdfZmF0YWwoIkZFVENIIGZvcndhcmQgZmFpbGVk OiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCWlmIChQUXNlbmRRdWVyeVBhcmFtcyhj b25uLCAiRkVUQ0ggQkFDS1dBUkQgMSBGUk9NIHNjcm9sbHBvcnRhbCIsIDAsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwsIDApICE9IDEpCisJCXBnX2ZhdGFsKCJGRVRDSCBiYWNrd2FyZCBmYWlsZWQ6 ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJaWYgKFBRc2VuZENsb3NlUG9ydGFsKGNv bm4sICJzY3JvbGxwb3J0YWwiKSAhPSAxKQorCQlwZ19mYXRhbCgiUFFzZW5kQ2xvc2VQb3J0YWwg ZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCWlmIChQUXNlbmRRdWVyeVBh cmFtcyhjb25uLCAiQ09NTUlUIiwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCkgIT0gMSkK KwkJcGdfZmF0YWwoIkNPTU1JVCBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwor CisJaWYgKFBRcGlwZWxpbmVTeW5jKGNvbm4pICE9IDEpCisJCXBnX2ZhdGFsKCJwaXBlbGluZSBz eW5jIGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisKKwkvKiBCaW5kK0Rlc2Ny aWJlIHJlc3VsdCAoUm93RGVzY3JpcHRpb24gbWV0YWRhdGEpICovCisJcmVzID0gY29uZmlybV9y ZXN1bHRfc3RhdHVzKGNvbm4sIFBHUkVTX0NPTU1BTkRfT0spOworCWlmIChQUW5maWVsZHMocmVz KSAhPSAxKQorCQlwZ19mYXRhbCgiZXhwZWN0ZWQgMSBmaWVsZCwgZ290ICVkIiwgUFFuZmllbGRz KHJlcykpOworCVBRY2xlYXIocmVzKTsKKwljb25zdW1lX251bGxfcmVzdWx0KGNvbm4pOworCisJ LyogRkVUQ0ggZm9yd2FyZCAyICovCisJcmVzID0gY29uZmlybV9yZXN1bHRfc3RhdHVzKGNvbm4s IFBHUkVTX1RVUExFU19PSyk7CisJaWYgKFBRbnR1cGxlcyhyZXMpICE9IDIpCisJCXBnX2ZhdGFs KCJleHBlY3RlZCAyIHJvd3MgZnJvbSBmb3J3YXJkIGZldGNoLCBnb3QgJWQiLCBQUW50dXBsZXMo cmVzKSk7CisJUFFjbGVhcihyZXMpOworCWNvbnN1bWVfbnVsbF9yZXN1bHQoY29ubik7CisKKwkv KiBGRVRDSCBiYWNrd2FyZCAxIC0gc2hvdWxkIGdldCByb3cgd2l0aCBpZD0xICovCisJcmVzID0g Y29uZmlybV9yZXN1bHRfc3RhdHVzKGNvbm4sIFBHUkVTX1RVUExFU19PSyk7CisJaWYgKFBRbnR1 cGxlcyhyZXMpICE9IDEpCisJCXBnX2ZhdGFsKCJleHBlY3RlZCAxIHJvdyBmcm9tIGJhY2t3YXJk IGZldGNoLCBnb3QgJWQiLCBQUW50dXBsZXMocmVzKSk7CisJaWYgKHN0cmNtcChQUWdldHZhbHVl KHJlcywgMCwgMCksICIxIikgIT0gMCkKKwkJcGdfZmF0YWwoImV4cGVjdGVkIHZhbHVlICcxJyBm cm9tIGJhY2t3YXJkIGZldGNoLCBnb3QgJyVzJyIsIFBRZ2V0dmFsdWUocmVzLCAwLCAwKSk7CisJ UFFjbGVhcihyZXMpOworCWNvbnN1bWVfbnVsbF9yZXN1bHQoY29ubik7CisKKwkvKiBDTE9TRSAq LworCWNvbnN1bWVfcmVzdWx0X3N0YXR1cyhjb25uLCBQR1JFU19DT01NQU5EX09LKTsKKwljb25z dW1lX251bGxfcmVzdWx0KGNvbm4pOworCisJLyogQ09NTUlUICovCisJY29uc3VtZV9yZXN1bHRf c3RhdHVzKGNvbm4sIFBHUkVTX0NPTU1BTkRfT0spOworCWNvbnN1bWVfbnVsbF9yZXN1bHQoY29u bik7CisKKwljb25zdW1lX3Jlc3VsdF9zdGF0dXMoY29ubiwgUEdSRVNfUElQRUxJTkVfU1lOQyk7 CisJY29uc3VtZV9udWxsX3Jlc3VsdChjb25uKTsKKworCWlmIChQUWV4aXRQaXBlbGluZU1vZGUo Y29ubikgIT0gMSkKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBleGl0IHBpcGVsaW5lIG1vZGU6ICVz IiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJZnByaW50ZihzdGRlcnIsICJva1xuIik7Cit9 CisKKy8qCisgKiBUZXN0IG5vLXNjcm9sbCBjdXJzb3I6IGNyZWF0ZSBhIHBvcnRhbCB3aXRoIFBR X0JJTkRfQ1VSU09SX05PX1NDUk9MTCBhbmQKKyAqIHZlcmlmeSBiYWNrd2FyZCBmZXRjaGluZyBp cyByZWplY3RlZC4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3Rfbm9fc2Nyb2xsX2N1cnNvcihQR2Nv bm4gKmNvbm4pCit7CisJUEdyZXN1bHQgICAqcmVzOworCisJZnByaW50ZihzdGRlcnIsICJ0ZXN0 X25vX3Njcm9sbF9jdXJzb3IuLi4gIik7CisKKwlyZXMgPSBQUWV4ZWMoY29ubiwgIkJFR0lOIik7 CisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJcGdfZmF0 YWwoIkJFR0lOIGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJUFFjbGVhcihy ZXMpOworCisJcmVzID0gUFFleGVjKGNvbm4sICJDUkVBVEUgVEVNUCBUQUJMRSBJRiBOT1QgRVhJ U1RTIG5vc2Nyb2xsX3Rlc3QoaWQgaW50KSIpOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9 IFBHUkVTX0NPTU1BTkRfT0spCisJCXBnX2ZhdGFsKCJDUkVBVEUgVEFCTEUgZmFpbGVkOiAlcyIs IFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwlQUWNsZWFyKHJlcyk7CisKKwlyZXMgPSBQUWV4ZWMo Y29ubiwgIklOU0VSVCBJTlRPIG5vc2Nyb2xsX3Rlc3QgVkFMVUVTICgxKSwgKDIpLCAoMykiKTsK KwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT01NQU5EX09LKQorCQlwZ19mYXRh bCgiSU5TRVJUIGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJUFFjbGVhcihy ZXMpOworCisJcmVzID0gUFFwcmVwYXJlKGNvbm4sICJub3Njcm9sbHN0bXQiLCAiU0VMRUNUICog RlJPTSBub3Njcm9sbF90ZXN0IE9SREVSIEJZIGlkIiwgMCwgTlVMTCk7CisJaWYgKFBRcmVzdWx0 U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJcGdfZmF0YWwoIlBSRVBBUkUgZmFp bGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwlQUWNsZWFyKHJlcyk7CisKKwlpZiAo UFFlbnRlclBpcGVsaW5lTW9kZShjb25uKSAhPSAxKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRvIGVu dGVyIHBpcGVsaW5lIG1vZGU6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJaWYgKFBR c2VuZEJpbmRXaXRoQ3Vyc29yT3B0aW9ucyhjb25uLCAibm9zY3JvbGxzdG10IiwgMCwgTlVMTCwg TlVMTCwgTlVMTCwgMCwKKwkJCQkJCQkJCSJub3Njcm9sbHBvcnRhbCIsIFBRX0JJTkRfQ1VSU09S X05PX1NDUk9MTCkgIT0gMSkKKwkJcGdfZmF0YWwoIlBRc2VuZEJpbmRXaXRoQ3Vyc29yT3B0aW9u cyBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJLyogRm9yd2FyZCBmZXRj aCBzaG91bGQgd29yayAqLworCWlmIChQUXNlbmRRdWVyeVBhcmFtcyhjb25uLCAiRkVUQ0ggMSBG Uk9NIG5vc2Nyb2xscG9ydGFsIiwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCkgIT0gMSkK KwkJcGdfZmF0YWwoIkZFVENIIGZvcndhcmQgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNv bm4pKTsKKworCS8qIEJhY2t3YXJkIGZldGNoIHNob3VsZCBmYWlsICovCisJaWYgKFBRc2VuZFF1 ZXJ5UGFyYW1zKGNvbm4sICJGRVRDSCBCQUNLV0FSRCAxIEZST00gbm9zY3JvbGxwb3J0YWwiLCAw LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSAhPSAxKQorCQlwZ19mYXRhbCgiRkVUQ0ggYmFj a3dhcmQgc2VuZCBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJaWYgKFBR c2VuZENsb3NlUG9ydGFsKGNvbm4sICJub3Njcm9sbHBvcnRhbCIpICE9IDEpCisJCXBnX2ZhdGFs KCJQUXNlbmRDbG9zZVBvcnRhbCBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwor CisJaWYgKFBRcGlwZWxpbmVTeW5jKGNvbm4pICE9IDEpCisJCXBnX2ZhdGFsKCJwaXBlbGluZSBz eW5jIGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisKKwkvKiBCaW5kK0Rlc2Ny aWJlIHJlc3VsdCAoUm93RGVzY3JpcHRpb24gbWV0YWRhdGEpICovCisJcmVzID0gY29uZmlybV9y ZXN1bHRfc3RhdHVzKGNvbm4sIFBHUkVTX0NPTU1BTkRfT0spOworCWlmIChQUW5maWVsZHMocmVz KSAhPSAxKQorCQlwZ19mYXRhbCgiZXhwZWN0ZWQgMSBmaWVsZCwgZ290ICVkIiwgUFFuZmllbGRz KHJlcykpOworCVBRY2xlYXIocmVzKTsKKwljb25zdW1lX251bGxfcmVzdWx0KGNvbm4pOworCisJ LyogRkVUQ0ggZm9yd2FyZCAxIC0gc2hvdWxkIHN1Y2NlZWQgKi8KKwlyZXMgPSBjb25maXJtX3Jl c3VsdF9zdGF0dXMoY29ubiwgUEdSRVNfVFVQTEVTX09LKTsKKwlpZiAoUFFudHVwbGVzKHJlcykg IT0gMSkKKwkJcGdfZmF0YWwoImV4cGVjdGVkIDEgcm93IGZyb20gZm9yd2FyZCBmZXRjaCwgZ290 ICVkIiwgUFFudHVwbGVzKHJlcykpOworCVBRY2xlYXIocmVzKTsKKwljb25zdW1lX251bGxfcmVz dWx0KGNvbm4pOworCisJLyogRkVUQ0ggYmFja3dhcmQgLSBzaG91bGQgZmFpbCAqLworCWNvbnN1 bWVfcmVzdWx0X3N0YXR1cyhjb25uLCBQR1JFU19GQVRBTF9FUlJPUik7CisJY29uc3VtZV9udWxs X3Jlc3VsdChjb25uKTsKKworCS8qIENMT1NFIC0gcGlwZWxpbmUgaXMgYWJvcnRlZCBhZnRlciB0 aGUgZXJyb3IgKi8KKwljb25zdW1lX3Jlc3VsdF9zdGF0dXMoY29ubiwgUEdSRVNfUElQRUxJTkVf QUJPUlRFRCk7CisJY29uc3VtZV9udWxsX3Jlc3VsdChjb25uKTsKKworCS8qIFBpcGVsaW5lIHN5 bmMgcmVzZXRzIHRoZSBhYm9ydCBzdGF0ZSAqLworCWNvbnN1bWVfcmVzdWx0X3N0YXR1cyhjb25u LCBQR1JFU19QSVBFTElORV9TWU5DKTsKKwljb25zdW1lX251bGxfcmVzdWx0KGNvbm4pOworCisJ aWYgKFBRZXhpdFBpcGVsaW5lTW9kZShjb25uKSAhPSAxKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRv IGV4aXQgcGlwZWxpbmUgbW9kZTogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisKKwkvKiBD bGVhbiB1cDogcm9sbGJhY2sgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiAqLworCXJlcyA9IFBRZXhl Yyhjb25uLCAiUk9MTEJBQ0siKTsKKwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19D T01NQU5EX09LKQorCQlwZ19mYXRhbCgiUk9MTEJBQ0sgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNz YWdlKGNvbm4pKTsKKwlQUWNsZWFyKHJlcyk7CisKKwlmcHJpbnRmKHN0ZGVyciwgIm9rXG4iKTsK K30KKworLyoKKyAqIFRlc3QgY29tYmluZWQgY3Vyc29yIG9wdGlvbnM6IGNyZWF0ZSBhIGhvbGRh YmxlICsgc2Nyb2xsYWJsZSBwb3J0YWwsCisgKiBjb21taXQgdGhlIHRyYW5zYWN0aW9uLCB0aGVu IGZldGNoIGJhY2t3YXJkIGZyb20gdGhlIHN1cnZpdmluZyBwb3J0YWwuCisgKi8KK3N0YXRpYyB2 b2lkCit0ZXN0X2hvbGRhYmxlX3Njcm9sbF9jdXJzb3IoUEdjb25uICpjb25uKQoreworCVBHcmVz dWx0ICAgKnJlczsKKworCWZwcmludGYoc3RkZXJyLCAidGVzdF9ob2xkYWJsZV9zY3JvbGxfY3Vy c29yLi4uICIpOworCisJcmVzID0gUFFleGVjKGNvbm4sICJCRUdJTiIpOworCWlmIChQUXJlc3Vs dFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCXBnX2ZhdGFsKCJCRUdJTiBmYWls ZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCVBRY2xlYXIocmVzKTsKKworCXJlcyA9 IFBRZXhlYyhjb25uLCAiQ1JFQVRFIFRFTVAgVEFCTEUgSUYgTk9UIEVYSVNUUyBob2xkc2Nyb2xs X3Rlc3QoaWQgaW50KSIpOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1B TkRfT0spCisJCXBnX2ZhdGFsKCJDUkVBVEUgVEFCTEUgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNz YWdlKGNvbm4pKTsKKwlQUWNsZWFyKHJlcyk7CisKKwlyZXMgPSBQUWV4ZWMoY29ubiwgIklOU0VS VCBJTlRPIGhvbGRzY3JvbGxfdGVzdCBWQUxVRVMgKDEpLCAoMiksICgzKSIpOworCWlmIChQUXJl c3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCXBnX2ZhdGFsKCJJTlNFUlQg ZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwlQUWNsZWFyKHJlcyk7CisKKwly ZXMgPSBQUXByZXBhcmUoY29ubiwgImhvbGRzY3JvbGxzdG10IiwKKwkJCQkJIlNFTEVDVCAqIEZS T00gaG9sZHNjcm9sbF90ZXN0IE9SREVSIEJZIGlkIiwgMCwgTlVMTCk7CisJaWYgKFBRcmVzdWx0 U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJcGdfZmF0YWwoIlBSRVBBUkUgZmFp bGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwlQUWNsZWFyKHJlcyk7CisKKwlpZiAo UFFlbnRlclBpcGVsaW5lTW9kZShjb25uKSAhPSAxKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRvIGVu dGVyIHBpcGVsaW5lIG1vZGU6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJLyogQ29t YmluZSBIT0xEIGFuZCBTQ1JPTEwgb3B0aW9ucyAqLworCWlmIChQUXNlbmRCaW5kV2l0aEN1cnNv ck9wdGlvbnMoY29ubiwgImhvbGRzY3JvbGxzdG10IiwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwK KwkJCQkJCQkJCSJob2xkc2Nyb2xscG9ydGFsIiwKKwkJCQkJCQkJCVBRX0JJTkRfQ1VSU09SX0hP TEQgfCBQUV9CSU5EX0NVUlNPUl9TQ1JPTEwpICE9IDEpCisJCXBnX2ZhdGFsKCJQUXNlbmRCaW5k V2l0aEN1cnNvck9wdGlvbnMgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwor CWlmIChQUXNlbmRRdWVyeVBhcmFtcyhjb25uLCAiQ09NTUlUIiwgMCwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCwgMCkgIT0gMSkKKwkJcGdfZmF0YWwoIkNPTU1JVCBmYWlsZWQ6ICVzIiwgUFFlcnJv ck1lc3NhZ2UoY29ubikpOworCisJLyogRmV0Y2ggZm9yd2FyZCBhZnRlciBjb21taXQg4oCUIGhv bGRhYmxlIGtlZXBzIHRoZSBwb3J0YWwgYWxpdmUgKi8KKwlpZiAoUFFzZW5kUXVlcnlQYXJhbXMo Y29ubiwgIkZFVENIIDIgRlJPTSBob2xkc2Nyb2xscG9ydGFsIiwKKwkJCQkJCSAgMCwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwgMCkgIT0gMSkKKwkJcGdfZmF0YWwoIkZFVENIIGZvcndhcmQgZmFp bGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCS8qIEZldGNoIGJhY2t3YXJkIOKA lCBzY3JvbGwgb3B0aW9uIGFsbG93cyB0aGlzICovCisJaWYgKFBRc2VuZFF1ZXJ5UGFyYW1zKGNv bm4sICJGRVRDSCBCQUNLV0FSRCAxIEZST00gaG9sZHNjcm9sbHBvcnRhbCIsCisJCQkJCQkgIDAs IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDApICE9IDEpCisJCXBnX2ZhdGFsKCJGRVRDSCBiYWNr d2FyZCBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJaWYgKFBRc2VuZENs b3NlUG9ydGFsKGNvbm4sICJob2xkc2Nyb2xscG9ydGFsIikgIT0gMSkKKwkJcGdfZmF0YWwoIlBR c2VuZENsb3NlUG9ydGFsIGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisKKwlp ZiAoUFFwaXBlbGluZVN5bmMoY29ubikgIT0gMSkKKwkJcGdfZmF0YWwoInBpcGVsaW5lIHN5bmMg ZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCS8qIEJpbmQrRGVzY3JpYmUg cmVzdWx0IChSb3dEZXNjcmlwdGlvbiBtZXRhZGF0YSkgKi8KKwlyZXMgPSBjb25maXJtX3Jlc3Vs dF9zdGF0dXMoY29ubiwgUEdSRVNfQ09NTUFORF9PSyk7CisJaWYgKFBRbmZpZWxkcyhyZXMpICE9 IDEpCisJCXBnX2ZhdGFsKCJleHBlY3RlZCAxIGZpZWxkLCBnb3QgJWQiLCBQUW5maWVsZHMocmVz KSk7CisJUFFjbGVhcihyZXMpOworCWNvbnN1bWVfbnVsbF9yZXN1bHQoY29ubik7CisKKwkvKiBD T01NSVQgKi8KKwljb25zdW1lX3Jlc3VsdF9zdGF0dXMoY29ubiwgUEdSRVNfQ09NTUFORF9PSyk7 CisJY29uc3VtZV9udWxsX3Jlc3VsdChjb25uKTsKKworCS8qIEZFVENIIGZvcndhcmQgMiAqLwor CXJlcyA9IGNvbmZpcm1fcmVzdWx0X3N0YXR1cyhjb25uLCBQR1JFU19UVVBMRVNfT0spOworCWlm IChQUW50dXBsZXMocmVzKSAhPSAyKQorCQlwZ19mYXRhbCgiZXhwZWN0ZWQgMiByb3dzIGZyb20g Zm9yd2FyZCBmZXRjaCwgZ290ICVkIiwgUFFudHVwbGVzKHJlcykpOworCVBRY2xlYXIocmVzKTsK Kwljb25zdW1lX251bGxfcmVzdWx0KGNvbm4pOworCisJLyogRkVUQ0ggYmFja3dhcmQgMSDigJQg c2hvdWxkIGdldCByb3cgd2l0aCBpZD0xICovCisJcmVzID0gY29uZmlybV9yZXN1bHRfc3RhdHVz KGNvbm4sIFBHUkVTX1RVUExFU19PSyk7CisJaWYgKFBRbnR1cGxlcyhyZXMpICE9IDEpCisJCXBn X2ZhdGFsKCJleHBlY3RlZCAxIHJvdyBmcm9tIGJhY2t3YXJkIGZldGNoLCBnb3QgJWQiLCBQUW50 dXBsZXMocmVzKSk7CisJaWYgKHN0cmNtcChQUWdldHZhbHVlKHJlcywgMCwgMCksICIxIikgIT0g MCkKKwkJcGdfZmF0YWwoImV4cGVjdGVkIHZhbHVlICcxJyBmcm9tIGJhY2t3YXJkIGZldGNoLCBn b3QgJyVzJyIsCisJCQkJIFBRZ2V0dmFsdWUocmVzLCAwLCAwKSk7CisJUFFjbGVhcihyZXMpOwor CWNvbnN1bWVfbnVsbF9yZXN1bHQoY29ubik7CisKKwkvKiBDTE9TRSAqLworCWNvbnN1bWVfcmVz dWx0X3N0YXR1cyhjb25uLCBQR1JFU19DT01NQU5EX09LKTsKKwljb25zdW1lX251bGxfcmVzdWx0 KGNvbm4pOworCisJY29uc3VtZV9yZXN1bHRfc3RhdHVzKGNvbm4sIFBHUkVTX1BJUEVMSU5FX1NZ TkMpOworCWNvbnN1bWVfbnVsbF9yZXN1bHQoY29ubik7CisKKwlpZiAoUFFleGl0UGlwZWxpbmVN b2RlKGNvbm4pICE9IDEpCisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gZXhpdCBwaXBlbGluZSBtb2Rl OiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCWZwcmludGYoc3RkZXJyLCAib2tcbiIp OworfQorCisvKgorICogVGVzdCB0aGF0IGN1cnNvciBvcHRpb25zIG9uIGEgRE1MIHN0YXRlbWVu dCBhcmUgaGFybWxlc3NseSBpZ25vcmVkLgorICogVGhlIHBvcnRhbCBnZXRzIGN1cnNvck9wdGlv bnMgc2V0LCBidXQgc2luY2UgaXQncyBub3QgYSBERUNMQVJFIENVUlNPUiwKKyAqIHRoZSBvcHRp b25zIGhhdmUgbm8gZWZmZWN0LgorICovCitzdGF0aWMgdm9pZAordGVzdF9kbWxfd2l0aF9jdXJz b3Jfb3B0aW9ucyhQR2Nvbm4gKmNvbm4pCit7CisJUEdyZXN1bHQgICAqcmVzOworCisJZnByaW50 ZihzdGRlcnIsICJ0ZXN0X2RtbF93aXRoX2N1cnNvcl9vcHRpb25zLi4uICIpOworCisJcmVzID0g UFFleGVjKGNvbm4sICJDUkVBVEUgVEVNUCBUQUJMRSBJRiBOT1QgRVhJU1RTIGRtbF90ZXN0KGlk IGludCkiKTsKKwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT01NQU5EX09LKQor CQlwZ19mYXRhbCgiQ1JFQVRFIFRBQkxFIGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25u KSk7CisJUFFjbGVhcihyZXMpOworCisJcmVzID0gUFFwcmVwYXJlKGNvbm4sICJkbWxzdG10IiwK KwkJCQkJIklOU0VSVCBJTlRPIGRtbF90ZXN0IFZBTFVFUyAoMSksICgyKSwgKDMpIiwgMCwgTlVM TCk7CisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJcGdf ZmF0YWwoIlBSRVBBUkUgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwlQUWNs ZWFyKHJlcyk7CisKKwlpZiAoUFFlbnRlclBpcGVsaW5lTW9kZShjb25uKSAhPSAxKQorCQlwZ19m YXRhbCgiZmFpbGVkIHRvIGVudGVyIHBpcGVsaW5lIG1vZGU6ICVzIiwgUFFlcnJvck1lc3NhZ2Uo Y29ubikpOworCisJLyogUGFzcyBTQ1JPTEwgb3B0aW9uIG9uIGEgRE1MIOKAlCBzaG91bGQgYmUg c2lsZW50bHkgaWdub3JlZCAqLworCWlmIChQUXNlbmRCaW5kV2l0aEN1cnNvck9wdGlvbnMoY29u biwgImRtbHN0bXQiLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCAwLAorCQkJCQkJCQkJImRtbHBvcnRh bCIsIFBRX0JJTkRfQ1VSU09SX1NDUk9MTCkgIT0gMSkKKwkJcGdfZmF0YWwoIlBRc2VuZEJpbmRX aXRoQ3Vyc29yT3B0aW9ucyBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJ aWYgKFBRcGlwZWxpbmVTeW5jKGNvbm4pICE9IDEpCisJCXBnX2ZhdGFsKCJwaXBlbGluZSBzeW5j IGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisKKwkvKiBCaW5kK0Rlc2NyaWJl IHJlc3VsdCAqLworCXJlcyA9IGNvbmZpcm1fcmVzdWx0X3N0YXR1cyhjb25uLCBQR1JFU19DT01N QU5EX09LKTsKKwlQUWNsZWFyKHJlcyk7CisJY29uc3VtZV9udWxsX3Jlc3VsdChjb25uKTsKKwor CWNvbnN1bWVfcmVzdWx0X3N0YXR1cyhjb25uLCBQR1JFU19QSVBFTElORV9TWU5DKTsKKwljb25z dW1lX251bGxfcmVzdWx0KGNvbm4pOworCisJaWYgKFBRZXhpdFBpcGVsaW5lTW9kZShjb25uKSAh PSAxKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRvIGV4aXQgcGlwZWxpbmUgbW9kZTogJXMiLCBQUWVy cm9yTWVzc2FnZShjb25uKSk7CisKKwkvKiBWZXJpZnkgdGhlIElOU0VSVCBkaWRuJ3QgYWN0dWFs bHkgZXhlY3V0ZSAoQmluZCtEZXNjcmliZSBvbmx5KSAqLworCXJlcyA9IFBRZXhlYyhjb25uLCAi U0VMRUNUIGNvdW50KCopIEZST00gZG1sX3Rlc3QiKTsKKwlpZiAoUFFyZXN1bHRTdGF0dXMocmVz KSAhPSBQR1JFU19UVVBMRVNfT0spCisJCXBnX2ZhdGFsKCJTRUxFQ1QgY291bnQgZmFpbGVkOiAl cyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwlpZiAoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCAw LCAwKSwgIjAiKSAhPSAwKQorCQlwZ19mYXRhbCgiZXhwZWN0ZWQgMCByb3dzIChCaW5kK0Rlc2Ny aWJlIGRvZXNuJ3QgZXhlY3V0ZSksIGdvdCAlcyIsCisJCQkJIFBRZ2V0dmFsdWUocmVzLCAwLCAw KSk7CisJUFFjbGVhcihyZXMpOworCisJZnByaW50ZihzdGRlcnIsICJva1xuIik7Cit9CisKKy8q CisgKiBUZXN0IGNsaWVudC1zaWRlIHZhbGlkYXRpb246IFBRc2VuZEJpbmRXaXRoQ3Vyc29yT3B0 aW9ucyBzaG91bGQgcmVqZWN0CisgKiBhbiB1bm5hbWVkIChlbXB0eSkgcG9ydGFsLgorICovCitz dGF0aWMgdm9pZAordGVzdF91bm5hbWVkX3BvcnRhbF9yZWplY3RlZChQR2Nvbm4gKmNvbm4pCit7 CisJUEdyZXN1bHQgICAqcmVzOworCisJZnByaW50ZihzdGRlcnIsICJ0ZXN0X3VubmFtZWRfcG9y dGFsX3JlamVjdGVkLi4uICIpOworCisJcmVzID0gUFFwcmVwYXJlKGNvbm4sICJyZWplY3RzdG10 IiwgIlNFTEVDVCAxIiwgMCwgTlVMTCk7CisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdS RVNfQ09NTUFORF9PSykKKwkJcGdfZmF0YWwoIlBSRVBBUkUgZmFpbGVkOiAlcyIsIFBRZXJyb3JN ZXNzYWdlKGNvbm4pKTsKKwlQUWNsZWFyKHJlcyk7CisKKwlpZiAoUFFlbnRlclBpcGVsaW5lTW9k ZShjb25uKSAhPSAxKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRvIGVudGVyIHBpcGVsaW5lIG1vZGU6 ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJLyogRW1wdHkgcG9ydGFsIG5hbWUgc2hv dWxkIGJlIHJlamVjdGVkIGNsaWVudC1zaWRlICovCisJaWYgKFBRc2VuZEJpbmRXaXRoQ3Vyc29y T3B0aW9ucyhjb25uLCAicmVqZWN0c3RtdCIsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIDAsCisJCQkJ CQkJCQkiIiwgUFFfQklORF9DVVJTT1JfSE9MRCkgIT0gMCkKKwkJcGdfZmF0YWwoImV4cGVjdGVk IFBRc2VuZEJpbmRXaXRoQ3Vyc29yT3B0aW9ucyB0byByZWplY3QgZW1wdHkgcG9ydGFsIG5hbWUi KTsKKworCS8qIE5VTEwgcG9ydGFsIG5hbWUgc2hvdWxkIGFsc28gYmUgcmVqZWN0ZWQgKi8KKwlp ZiAoUFFzZW5kQmluZFdpdGhDdXJzb3JPcHRpb25zKGNvbm4sICJyZWplY3RzdG10IiwgMCwgTlVM TCwgTlVMTCwgTlVMTCwgMCwKKwkJCQkJCQkJCU5VTEwsIFBRX0JJTkRfQ1VSU09SX0hPTEQpICE9 IDApCisJCXBnX2ZhdGFsKCJleHBlY3RlZCBQUXNlbmRCaW5kV2l0aEN1cnNvck9wdGlvbnMgdG8g cmVqZWN0IE5VTEwgcG9ydGFsIG5hbWUiKTsKKworCWlmIChQUWV4aXRQaXBlbGluZU1vZGUoY29u bikgIT0gMSkKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBleGl0IHBpcGVsaW5lIG1vZGU6ICVzIiwg UFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJZnByaW50ZihzdGRlcnIsICJva1xuIik7Cit9CisK Ky8qCisgKiBUZXN0IHRoYXQgY3Vyc29yIG9wdGlvbnMgYXJlIHJlamVjdGVkIHdoZW4gX3BxXy5w cm90b2NvbF9jdXJzb3IgaXMgbm90IG5lZ290aWF0ZWQuCisgKiBIT0xEIGlzIHJlcXVlc3RlZCBi dXQgdGhlIGV4dGVuc2lvbiBpcyBkaXNhYmxlZCwgc28gdGhlIEFQSSBjYWxsIGl0c2VsZgorICog cmV0dXJucyAwLgorICovCitzdGF0aWMgdm9pZAordGVzdF9jdXJzb3Jfb3B0aW9uc193aXRob3V0 X2V4dGVuc2lvbihQR2Nvbm4gKmNvbm4pCit7CisJUEdyZXN1bHQgICAqcmVzOworCisJZnByaW50 ZihzdGRlcnIsICJ0ZXN0X2N1cnNvcl9vcHRpb25zX3dpdGhvdXRfZXh0ZW5zaW9uLi4uICIpOwor CisJLyoKKwkgKiBQUVBvcnRhbEN1cnNvckVuYWJsZWQgc2hvdWxkIHJldHVybiBmYWxzZSB3aGVu IGV4dGVuc2lvbiBpcyBub3QKKwkgKiBuZWdvdGlhdGVkCisJICovCisJaWYgKFBRUG9ydGFsQ3Vy c29yRW5hYmxlZChjb25uKSAhPSAwKQorCQlwZ19mYXRhbCgiZXhwZWN0ZWQgUFFQb3J0YWxDdXJz b3JFbmFibGVkIHRvIHJldHVybiBmYWxzZSIpOworCisJcmVzID0gUFFwcmVwYXJlKGNvbm4sICJu b2V4dHN0bXQiLCAiU0VMRUNUIDEiLCAwLCBOVUxMKTsKKwlpZiAoUFFyZXN1bHRTdGF0dXMocmVz KSAhPSBQR1JFU19DT01NQU5EX09LKQorCQlwZ19mYXRhbCgiUFJFUEFSRSBmYWlsZWQ6ICVzIiwg UFFlcnJvck1lc3NhZ2UoY29ubikpOworCVBRY2xlYXIocmVzKTsKKworCWlmIChQUWVudGVyUGlw ZWxpbmVNb2RlKGNvbm4pICE9IDEpCisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gZW50ZXIgcGlwZWxp bmUgbW9kZTogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisKKwkvKiBOb24temVybyBjdXJz b3JPcHRpb25zIHNob3VsZCBiZSByZWplY3RlZCB3aGVuIGV4dGVuc2lvbiBpcyBkaXNhYmxlZCAq LworCWlmIChQUXNlbmRCaW5kV2l0aEN1cnNvck9wdGlvbnMoY29ubiwgIm5vZXh0c3RtdCIsIDAs IE5VTEwsIE5VTEwsIE5VTEwsIDAsCisJCQkJCQkJCQkibm9leHRwb3J0YWwiLCBQUV9CSU5EX0NV UlNPUl9IT0xEKSAhPSAwKQorCQlwZ19mYXRhbCgiZXhwZWN0ZWQgUFFzZW5kQmluZFdpdGhDdXJz b3JPcHRpb25zIHRvIHJlamVjdCBjdXJzb3Igb3B0aW9ucyIpOworCisJLyogWmVybyBjdXJzb3JP cHRpb25zIHNob3VsZCBzdGlsbCBzdWNjZWVkICovCisJaWYgKFBRc2VuZEJpbmRXaXRoQ3Vyc29y T3B0aW9ucyhjb25uLCAibm9leHRzdG10IiwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwKKwkJCQkJ CQkJCSJub2V4dHBvcnRhbCIsIDApICE9IDEpCisJCXBnX2ZhdGFsKCJQUXNlbmRCaW5kV2l0aEN1 cnNvck9wdGlvbnMgd2l0aCB6ZXJvIG9wdGlvbnMgZmFpbGVkOiAlcyIsCisJCQkJIFBRZXJyb3JN ZXNzYWdlKGNvbm4pKTsKKworCWlmIChQUXBpcGVsaW5lU3luYyhjb25uKSAhPSAxKQorCQlwZ19m YXRhbCgicGlwZWxpbmUgc3luYyBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwor CisJLyogQmluZCtEZXNjcmliZSByZXN1bHQgKi8KKwlyZXMgPSBjb25maXJtX3Jlc3VsdF9zdGF0 dXMoY29ubiwgUEdSRVNfQ09NTUFORF9PSyk7CisJUFFjbGVhcihyZXMpOworCWNvbnN1bWVfbnVs bF9yZXN1bHQoY29ubik7CisKKwljb25zdW1lX3Jlc3VsdF9zdGF0dXMoY29ubiwgUEdSRVNfUElQ RUxJTkVfU1lOQyk7CisJY29uc3VtZV9udWxsX3Jlc3VsdChjb25uKTsKKworCWlmIChQUWV4aXRQ aXBlbGluZU1vZGUoY29ubikgIT0gMSkKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBleGl0IHBpcGVs aW5lIG1vZGU6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJZnByaW50ZihzdGRlcnIs ICJva1xuIik7Cit9CisKK3N0YXRpYyB2b2lkCit1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkK K3sKKwlmcHJpbnRmKHN0ZGVyciwgIiVzIHRlc3RzIGV4dGVuZGVkIHF1ZXJ5IHByb3RvY29sIGN1 cnNvciBvcHRpb25zLlxuXG4iLCBwcm9nbmFtZSk7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZTpc biIpOworCWZwcmludGYoc3RkZXJyLCAiICAlcyB0ZXN0c1xuIiwgcHJvZ25hbWUpOworCWZwcmlu dGYoc3RkZXJyLCAiICAlcyBURVNUTkFNRSBbQ09OTklORk9dXG4iLCBwcm9nbmFtZSk7Cit9CisK Ky8qCisgKiBUZXN0IHRoYXQgaW52YWxpZCBjdXJzb3Igb3B0aW9uIGZsYWdzIGFyZSByZWplY3Rl ZCBjbGllbnQtc2lkZS4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3RfaW52YWxpZF9mbGFnc19yZWpl Y3RlZChQR2Nvbm4gKmNvbm4pCit7CisJUEdyZXN1bHQgICAqcmVzOworCisJZnByaW50ZihzdGRl cnIsICJ0ZXN0X2ludmFsaWRfZmxhZ3NfcmVqZWN0ZWQuLi4gIik7CisKKwlyZXMgPSBQUXByZXBh cmUoY29ubiwgImludmFsaWRzdG10IiwgIlNFTEVDVCAxIiwgMCwgTlVMTCk7CisJaWYgKFBRcmVz dWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJcGdfZmF0YWwoIlBSRVBBUkUg ZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwlQUWNsZWFyKHJlcyk7CisKKwlp ZiAoUFFlbnRlclBpcGVsaW5lTW9kZShjb25uKSAhPSAxKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRv IGVudGVyIHBpcGVsaW5lIG1vZGU6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJLyog RmxhZyAweDAwMDggaXMgbm90IGEgdmFsaWQgYmluZCBleHRlbnNpb24gZmxhZyAqLworCWlmIChQ UXNlbmRCaW5kV2l0aEN1cnNvck9wdGlvbnMoY29ubiwgImludmFsaWRzdG10IiwgMCwgTlVMTCwg TlVMTCwgTlVMTCwgMCwKKwkJCQkJCQkJCSJpbnZhbGlkcG9ydGFsIiwgMHgwMDA4KSAhPSAwKQor CQlwZ19mYXRhbCgiZXhwZWN0ZWQgUFFzZW5kQmluZFdpdGhDdXJzb3JPcHRpb25zIHRvIHJlamVj dCBpbnZhbGlkIGZsYWdzIik7CisKKwkvKiBDb21iaW5hdGlvbiBvZiB2YWxpZCBhbmQgaW52YWxp ZCBmbGFncyBzaG91bGQgYWxzbyBiZSByZWplY3RlZCAqLworCWlmIChQUXNlbmRCaW5kV2l0aEN1 cnNvck9wdGlvbnMoY29ubiwgImludmFsaWRzdG10IiwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwK KwkJCQkJCQkJCSJpbnZhbGlkcG9ydGFsIiwKKwkJCQkJCQkJCVBRX0JJTkRfQ1VSU09SX0hPTEQg fCAweDAxMDApICE9IDApCisJCXBnX2ZhdGFsKCJleHBlY3RlZCBQUXNlbmRCaW5kV2l0aEN1cnNv ck9wdGlvbnMgdG8gcmVqZWN0IG1peGVkIGludmFsaWQgZmxhZ3MiKTsKKworCWlmIChQUWV4aXRQ aXBlbGluZU1vZGUoY29ubikgIT0gMSkKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBleGl0IHBpcGVs aW5lIG1vZGU6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJZnByaW50ZihzdGRlcnIs ICJva1xuIik7Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF90ZXN0X2xpc3Qodm9pZCkKK3sKKwlw cmludGYoImhvbGRhYmxlX2N1cnNvclxuIik7CisJcHJpbnRmKCJzY3JvbGxfY3Vyc29yXG4iKTsK KwlwcmludGYoIm5vX3Njcm9sbF9jdXJzb3JcbiIpOworCXByaW50ZigiaG9sZGFibGVfc2Nyb2xs X2N1cnNvclxuIik7CisJcHJpbnRmKCJkbWxfd2l0aF9jdXJzb3Jfb3B0aW9uc1xuIik7CisJcHJp bnRmKCJ1bm5hbWVkX3BvcnRhbF9yZWplY3RlZFxuIik7CisJcHJpbnRmKCJpbnZhbGlkX2ZsYWdz X3JlamVjdGVkXG4iKTsKKwlwcmludGYoImN1cnNvcl9vcHRpb25zX3dpdGhvdXRfZXh0ZW5zaW9u XG4iKTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBj aGFyICpjb25uaW5mbyA9ICIiOworCVBHY29ubgkgICAqY29ubjsKKwljaGFyCSAgICp0ZXN0bmFt ZTsKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlpZiAoYXJnYyA8IDIpCisJeworCQl1c2FnZShhcmd2 WzBdKTsKKwkJZXhpdCgxKTsKKwl9CisKKwl0ZXN0bmFtZSA9IGFyZ3ZbMV07CisKKwlpZiAoc3Ry Y21wKHRlc3RuYW1lLCAidGVzdHMiKSA9PSAwKQorCXsKKwkJcHJpbnRfdGVzdF9saXN0KCk7CisJ CWV4aXQoMCk7CisJfQorCisJaWYgKGFyZ2MgPiAyKQorCQljb25uaW5mbyA9IGFyZ3ZbMl07CisK Kwljb25uID0gUFFjb25uZWN0ZGIoY29ubmluZm8pOworCWlmIChQUXN0YXR1cyhjb25uKSAhPSBD T05ORUNUSU9OX09LKQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJDb25uZWN0aW9uIHRvIGRhdGFi YXNlIGZhaWxlZDogJXNcbiIsCisJCQkJUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQlleGl0X25p Y2VseShjb25uKTsKKwl9CisKKwlyZXMgPSBQUWV4ZWMoY29ubiwgIlNFVCBsY19tZXNzYWdlcyBU TyBcIkNcIiIpOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0sp CisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gc2V0IFwibGNfbWVzc2FnZXNcIjogJXMiLCBQUWVycm9y TWVzc2FnZShjb25uKSk7CisJUFFjbGVhcihyZXMpOworCisJaWYgKHN0cmNtcCh0ZXN0bmFtZSwg ImN1cnNvcl9vcHRpb25zX3dpdGhvdXRfZXh0ZW5zaW9uIikgPT0gMCkKKwkJdGVzdF9jdXJzb3Jf b3B0aW9uc193aXRob3V0X2V4dGVuc2lvbihjb25uKTsKKwllbHNlIGlmIChzdHJjbXAodGVzdG5h bWUsICJkbWxfd2l0aF9jdXJzb3Jfb3B0aW9ucyIpID09IDApCisJCXRlc3RfZG1sX3dpdGhfY3Vy c29yX29wdGlvbnMoY29ubik7CisJZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAiaG9sZGFibGVf c2Nyb2xsX2N1cnNvciIpID09IDApCisJCXRlc3RfaG9sZGFibGVfc2Nyb2xsX2N1cnNvcihjb25u KTsKKwllbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsICJob2xkYWJsZV9jdXJzb3IiKSA9PSAwKQor CQl0ZXN0X2hvbGRhYmxlX2N1cnNvcihjb25uKTsKKwllbHNlIGlmIChzdHJjbXAodGVzdG5hbWUs ICJpbnZhbGlkX2ZsYWdzX3JlamVjdGVkIikgPT0gMCkKKwkJdGVzdF9pbnZhbGlkX2ZsYWdzX3Jl amVjdGVkKGNvbm4pOworCWVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgIm5vX3Njcm9sbF9jdXJz b3IiKSA9PSAwKQorCQl0ZXN0X25vX3Njcm9sbF9jdXJzb3IoY29ubik7CisJZWxzZSBpZiAoc3Ry Y21wKHRlc3RuYW1lLCAic2Nyb2xsX2N1cnNvciIpID09IDApCisJCXRlc3Rfc2Nyb2xsX2N1cnNv cihjb25uKTsKKwllbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsICJ1bm5hbWVkX3BvcnRhbF9yZWpl Y3RlZCIpID09IDApCisJCXRlc3RfdW5uYW1lZF9wb3J0YWxfcmVqZWN0ZWQoY29ubik7CisJZWxz ZQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJcIiVzXCIgaXMgbm90IGEgcmVjb2duaXplZCB0ZXN0 IG5hbWVcbiIsIHRlc3RuYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlQUWZpbmlzaChjb25uKTsK KwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbGlicHFfcHJvdG9j b2xfY3Vyc29yL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9saWJwcV9wcm90b2NvbF9j dXJzb3IvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmNjNzYyNDAxMmNiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9saWJwcV9w cm90b2NvbF9jdXJzb3IvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwzMiBAQAorIyBDb3B5cmlnaHQg KGMpIDIwMjItMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworbGli cHFfcHJvdG9jb2xfY3Vyc29yX3NvdXJjZXMgPSBmaWxlcygKKyAgJ2xpYnBxX3Byb3RvY29sX2N1 cnNvci5jJywKKykKKworaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCisgIGxpYnBxX3Byb3Rv Y29sX2N1cnNvcl9zb3VyY2VzICs9IHJjX2Jpbl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0 cmFfYXJnczogWworICAgICctLU5BTUUnLCAnbGlicHFfcHJvdG9jb2xfY3Vyc29yJywKKyAgICAn LS1GSUxFREVTQycsICdsaWJwcV9wcm90b2NvbF9jdXJzb3IgLSB0ZXN0IHByb2dyYW0gZm9yIGV4 dGVuZGVkIHF1ZXJ5IHByb3RvY29sIGN1cnNvcnMnLF0pCitlbmRpZgorCitsaWJwcV9wcm90b2Nv bF9jdXJzb3IgPSBleGVjdXRhYmxlKCdsaWJwcV9wcm90b2NvbF9jdXJzb3InLAorICBsaWJwcV9w cm90b2NvbF9jdXJzb3Jfc291cmNlcywKKyAgZGVwZW5kZW5jaWVzOiBbZnJvbnRlbmRfY29kZSwg bGlicHFdLAorICBrd2FyZ3M6IGRlZmF1bHRfYmluX2FyZ3MgKyB7CisgICAgJ2luc3RhbGwnOiBm YWxzZSwKKyAgfSwKKykKK3Rlc3RwcmVwX3RhcmdldHMgKz0gbGlicHFfcHJvdG9jb2xfY3Vyc29y CisKK3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAnbGlicHFfcHJvdG9jb2xfY3Vyc29yJywKKyAgJ3Nk JzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVp bGRfZGlyKCksCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX2xpYnBx X3Byb3RvY29sX2N1cnNvci5wbCcsCisgICAgXSwKKyAgICAnZGVwcyc6IFtsaWJwcV9wcm90b2Nv bF9jdXJzb3JdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9saWJwcV9w cm90b2NvbF9jdXJzb3IvdC8wMDFfbGlicHFfcHJvdG9jb2xfY3Vyc29yLnBsIGIvc3JjL3Rlc3Qv bW9kdWxlcy9saWJwcV9wcm90b2NvbF9jdXJzb3IvdC8wMDFfbGlicHFfcHJvdG9jb2xfY3Vyc29y LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NjA2MzFjODk0Nwot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvbGlicHFfcHJvdG9jb2xfY3Vyc29y L3QvMDAxX2xpYnBxX3Byb3RvY29sX2N1cnNvci5wbApAQCAtMCwwICsxLDQyIEBACisjIENvcHly aWdodCAoYykgMjAyNC0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBU ZXN0OjpNb3JlOworCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygn bWFpbicpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+c3RhcnQ7CisKK215ICgkb3V0LCAkZXJyKSA9 IHJ1bl9jb21tYW5kKFsnbGlicHFfcHJvdG9jb2xfY3Vyc29yJywgJ3Rlc3RzJ10pOworZGllICJv b3BzOiAkZXJyIiB1bmxlc3MgJGVyciBlcSAnJzsKK215IEB0ZXN0cyA9IHNwbGl0KC9ccysvLCAk b3V0KTsKKworZm9yIG15ICR0ZXN0bmFtZSAoQHRlc3RzKQoreworCSMgY3Vyc29yX29wdGlvbnNf d2l0aG91dF9leHRlbnNpb24gbXVzdCBydW4gd2l0aG91dCBwcm90b2NvbF9jdXJzb3IgZW5hYmxl ZAorCW15ICRjb25uc3RyID0gJG5vZGUtPmNvbm5zdHIoJ3Bvc3RncmVzJyk7CisJaWYgKCR0ZXN0 bmFtZSBlcSAnY3Vyc29yX29wdGlvbnNfd2l0aG91dF9leHRlbnNpb24nKQorCXsKKwkJJGNvbm5z dHIgLj0gIiBwcm90b2NvbF9jdXJzb3I9MCI7CisJfQorCWVsc2UKKwl7CisJCSRjb25uc3RyIC49 ICIgcHJvdG9jb2xfY3Vyc29yPTEgbWF4X3Byb3RvY29sX3ZlcnNpb249bGF0ZXN0IjsKKwl9CisK Kwkkbm9kZS0+Y29tbWFuZF9vaygKKwkJWworCQkJJ2xpYnBxX3Byb3RvY29sX2N1cnNvcicsCisJ CQkkdGVzdG5hbWUsCisJCQkkY29ubnN0cgorCQldLAorCQkibGlicHFfcHJvdG9jb2xfY3Vyc29y ICR0ZXN0bmFtZSIpOworfQorCiskbm9kZS0+c3RvcCgnZmFzdCcpOworCitkb25lX3Rlc3Rpbmco KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9t b2R1bGVzL21lc29uLmJ1aWxkCmluZGV4IDNhYzI5MTY1NmMxLi41NjI3YTI3NDE2NCAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L21lc29uLmJ1aWxkCkBAIC05LDYgKzksNyBAQCBzdWJkaXIoJ2dpbicpCiBzdWJkaXIoJ2luZGV4 JykKIHN1YmRpcignaW5qZWN0aW9uX3BvaW50cycpCiBzdWJkaXIoJ2xkYXBfcGFzc3dvcmRfZnVu YycpCitzdWJkaXIoJ2xpYnBxX3Byb3RvY29sX2N1cnNvcicpCiBzdWJkaXIoJ2xpYnBxX3BpcGVs aW5lJykKIHN1YmRpcignbmJ0cmVlJykKIHN1YmRpcignb2F1dGhfdmFsaWRhdG9yJykKLS0gCjIu NDcuMwoK --00000000000021839f064dda2c05--