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 1vSFtd-009qXj-1A for pgsql-hackers@arkaria.postgresql.org; Sun, 07 Dec 2025 14:37:57 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vSFtb-00DSnu-37 for pgsql-hackers@arkaria.postgresql.org; Sun, 07 Dec 2025 14:37:56 +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 1vSFtb-00DSnl-1x for pgsql-hackers@lists.postgresql.org; Sun, 07 Dec 2025 14:37:55 +0000 Received: from mail-oo1-xc2a.google.com ([2607:f8b0:4864:20::c2a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vSFtZ-003gtP-1X for pgsql-hackers@lists.postgresql.org; Sun, 07 Dec 2025 14:37:55 +0000 Received: by mail-oo1-xc2a.google.com with SMTP id 006d021491bc7-657523b5db0so1008508eaf.2 for ; Sun, 07 Dec 2025 06:37:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765118271; x=1765723071; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=39FsnwIJSMdnxrMuOaRxmKmLeQ5rNL6v1RQ/hdN2qLc=; b=TC3II6xVAws8XksbAJIjMgLnrdXv18aGvEUNfiPGJNbvLqry6MbpK1pPRouGpzM0UN 9ABmsRSXjG1aioqyPYw+7Dw7gMUWUzGd38w0DDETuUR6GiSNT/WXphuYivmF2grP0ssd qLaq7rDrE34d6x29LQVvCHrSGmRBX5gz55WKyZx06hyyAHy8tlr8b4CroMYcaNCCVTSt u6Wtbcox7ABfexK4Tw2OQxwQdvSSuzZZBwMXr5d350rP+yA6PTaIDJau2F7G9twMWZpe V4Gn7z86vbfn4KXgmIFmht35H8FJ4YbcFdBrlOK8Xu/K6l/sKECWH7sfmDS6k2QJcX25 MViQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765118271; x=1765723071; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=39FsnwIJSMdnxrMuOaRxmKmLeQ5rNL6v1RQ/hdN2qLc=; b=d8lxKwpOqAeocv525bCch3VbJF0DAK+yPxywmq/ruD9ySm1ejMs5hfQ/1HkhWV2hN9 tP4eXSe2iqUtEOiUbxKp2uAqQBs+uPQddLO7lG7cbFkmqLBcZFgGx13DlMJKeLKIfHRh 7S/6X7S/GP+HDMey+/wP0Uzf8RXJ87VDNKITnef+TpDJZMJG1H1Fy/7JXjN6XzO1N5Y/ rItoidzEwUreiY6w9E22Jpesq+vIYp7xCigi80gUgCyr1abg5RKnIe1ygqLi7Z8+LT97 jFVZUjRSYYpki6xu7LZu3g5lCTEWZbsiQ8smWbGVVZKBSIVHhlf30UVZyZ4ae9e3L4eA KMsA== X-Gm-Message-State: AOJu0YyJLeQf+evmWMjNKYkfvXwzEVQRlSl0HlGEqnclybc/LB+1j3uY unv8iaAQHNHEcVljo5BT7B4/+nE+GBJjDh/j5VERDL2cKSTjjHV7k1NdPxicgkk2NvqwdrQAvO5 b7MGFjf/vwOYUhSTJAkpwWfhH6sk7jxotHdMt59s= X-Gm-Gg: ASbGnct746sZDgCTizBDI+1RDykuc9DuYpD1fPsGFCuNvu2Anj9KIUuA7/XRUAuH+5B jSImGHAkzzCYMkT9FiwovEz7wQeXMxskNHTgkaa8dKOYthtgN1dA6z9MCaxSTuNRJR1TfqIllZU t2J0KCtHoILtValEOQv29gJ3XAEOIYBfKtWOCT9xiKjzvgcZPLFLjQRIHP1bJU46XkWtPsAZtze EZxfbZv2jPrNrwGL68aZxIBian2fzQ3GsXoAwdRN9gY2SZC1EL+zwmjWJPE5K4bwW0vLHSk7p24 wQC+ X-Google-Smtp-Source: AGHT+IFrJBbJ7mhIOb6FN3tYsixoEl2ZW54vSc3T0yI6D8kVHld289VAmmBHFhQCQ+kGzarLRd+ML2Q2TiuuirJOPpk= X-Received: by 2002:a05:6820:81ce:b0:659:9a49:8e0c with SMTP id 006d021491bc7-6599a99c2damr1966685eaf.78.1765118271162; Sun, 07 Dec 2025 06:37:51 -0800 (PST) MIME-Version: 1.0 From: Dave Cramer Date: Sun, 7 Dec 2025 09:37:34 -0500 X-Gm-Features: AQt7F2p5jod362WoKuZW57tkYgdKuhge_OfvjOE5TCYqEyzHl8lFQrnDieCFoBY Message-ID: Subject: Proposal to allow setting cursor options on Portals To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000008ab40306455d9f7b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008ab40306455d9f7b Content-Type: multipart/alternative; boundary="0000000000008ab40006455d9f79" --0000000000008ab40006455d9f79 Content-Type: text/plain; charset="UTF-8" Greetings, My main driver here is to allow the creation of Holdable portals at the protocol level for drivers. Currently the only way to create a holdable cursor is at the SQL level. DECLARE liahona CURSOR WITH HOLD FOR SELECT * FROM films; The JDBC driver has an option in the API to have result sets survive commits see https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html#createStatement-int-int-int- Doing this at the protocol level is the correct way to do this as modifying the SQL to create a cursor is very cumbersome and we already have existing code to create a portal. Adding the ability to specify options Looking for feedback. Dave Cramer --0000000000008ab40006455d9f79 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Greetings,

My main driver here is to allow the creation of Holdable portals at the pr= otocol level for drivers. Currently the only way=C2=A0to create a holdable = cursor is at the SQL level.=C2=A0

DECLARE liahona=
 CURSOR WITH HOLD FOR SELECT * FROM films;

T= he JDBC driver has an option in the API to have result sets survive commits= see=C2=A0https://docs.oracle.com/javase/8= /docs/api/java/sql/Connection.html#createStatement-int-int-int-

Doing this at the protocol level is the correct way to do= this as modifying the SQL to create a cursor is very cumbersome and we alr= eady have existing code to create a portal. Adding the ability=C2=A0to spec= ify options=C2=A0

Looking for feedback.
=
Dave Cramer
--0000000000008ab40006455d9f79-- --0000000000008ab40306455d9f7b Content-Type: application/octet-stream; name="0001-wip-holdable-portals.patch" Content-Disposition: attachment; filename="0001-wip-holdable-portals.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mivttjlf0 RnJvbSAyODlhOWE3NTk2ODNjNGYzNmQ1YmM2OTYwZGQ3NGFhMzcwNDlkMDYxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZlIENyYW1lciA8ZGF2ZWNyYW1lckBnbWFpbC5jb20+CkRh dGU6IEZyaSwgNSBEZWMgMjAyNSAxODoyMDoyMyAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIHdpcCBo b2xkYWJsZSBwb3J0YWxzCgp1cGRhdGUgZG9jcyBmb3IgbmV3IHByb3RvY29sIG1lc3NhZ2UKCmFk ZCBmdW5jdGlvbiBQUXNlbmRCaW5kV2l0aEN1cnNvck9wdGlvbnMgdG8gYWxsb3cgY3Vyc29ycyB3 aXRoIG9wdGlvbnMgdG8gYmUgY3JlYXRlZCBhbmQgZml4IHRlc3QgdG8gd29yayBwcm9wZXJseQot LS0KIGRvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sICAgICAgICAgICAgICAgICAgICB8ICA0MCAr KystCiBzcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgICAgICAgICAgICAgICAgICAgfCAgMzYg KysrCiBzcmMvaW5jbHVkZS9saWJwcS9wcWNvbW0uaCAgICAgICAgICAgICAgICAgICAgfCAgIDIg Ky0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9ydHMudHh0ICAgICAgICAgICAgICB8ICAgMiAr CiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMgICAgICAgICAgICAgfCAgIDUgKwog c3JjL2ludGVyZmFjZXMvbGlicHEvZmUtZXhlYy5jICAgICAgICAgICAgICAgIHwgMjIyICsrKysr KysrKysrKysrKysrKwogc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaCAgICAgICAgICAg ICAgIHwgICA4ICsKIC4uLi9tb2R1bGVzL2xpYnBxX3BpcGVsaW5lL2xpYnBxX3BpcGVsaW5lLmMg ICB8ICA5MCArKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDM5OSBpbnNlcnRpb25zKCspLCA2IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sIGIvZG9j L3NyYy9zZ21sL3Byb3RvY29sLnNnbWwKaW5kZXggNDFjNTk1NGE0MjQuLjM4NzFhOGNkZjkzIDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv cHJvdG9jb2wuc2dtbApAQCAtMTgsNyArMTgsNyBAQAogIDwvcGFyYT4KIAogIDxwYXJhPgotICBU aGlzIGRvY3VtZW50IGRlc2NyaWJlcyB2ZXJzaW9uIDMuMiBvZiB0aGUgcHJvdG9jb2wsIGludHJv ZHVjZWQgaW4KKyAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdmVyc2lvbiAzLjMgb2YgdGhlIHBy b3RvY29sLCBpbnRyb2R1Y2VkIGluCiAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0 bmFtZT4gdmVyc2lvbiAxOC4gVGhlIHNlcnZlciBhbmQgdGhlIGxpYnBxCiAgIGNsaWVudCBsaWJy YXJ5IGFyZSBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIHByb3RvY29sIHZlcnNpb24gMy4wLAog ICBpbXBsZW1lbnRlZCBpbiA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IDcu NCBhbmQgbGF0ZXIuCkBAIC0xOTIsNyArMTkyLDcgQEAKICAgIDx0aXRsZT5Qcm90b2NvbCBWZXJz aW9uczwvdGl0bGU+CiAKICAgIDxwYXJhPgotICAgIFRoZSBjdXJyZW50LCBsYXRlc3QgdmVyc2lv biBvZiB0aGUgcHJvdG9jb2wgaXMgdmVyc2lvbiAzLjIuIEhvd2V2ZXIsIGZvcgorICAgIFRoZSBj dXJyZW50LCBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wgaXMgdmVyc2lvbiAzLjMuIEhv d2V2ZXIsIGZvcgogICAgIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkIHNlcnZlciB2 ZXJzaW9ucyBhbmQgbWlkZGxld2FyZSB0aGF0IGRvbid0CiAgICAgc3VwcG9ydCB0aGUgdmVyc2lv biBuZWdvdGlhdGlvbiB5ZXQsIGxpYnBxIHN0aWxsIHVzZXMgcHJvdG9jb2wgdmVyc2lvbiAzLjAK ICAgICBieSBkZWZhdWx0LgpAQCAtMjA2LDcgKzIwNiw3IEBACiAgICAgdGhpcyB3b3VsZCBvY2N1 ciBpZiB0aGUgY2xpZW50IHJlcXVlc3RlZCBwcm90b2NvbCB2ZXJzaW9uIDQuMCwgd2hpY2ggZG9l cwogICAgIG5vdCBleGlzdCBhcyBvZiB0aGlzIHdyaXRpbmcpLiAgSWYgdGhlIG1pbm9yIHZlcnNp b24gcmVxdWVzdGVkIGJ5IHRoZQogICAgIGNsaWVudCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBz ZXJ2ZXIgKGUuZy4sIHRoZSBjbGllbnQgcmVxdWVzdHMgdmVyc2lvbgotICAgIDMuMiwgYnV0IHRo ZSBzZXJ2ZXIgc3VwcG9ydHMgb25seSAzLjApLCB0aGUgc2VydmVyIG1heSBlaXRoZXIgcmVqZWN0 IHRoZQorICAgIDMuMywgYnV0IHRoZSBzZXJ2ZXIgc3VwcG9ydHMgb25seSAzLjApLCB0aGUgc2Vy dmVyIG1heSBlaXRoZXIgcmVqZWN0IHRoZQogICAgIGNvbm5lY3Rpb24gb3IgbWF5IHJlc3BvbmQg d2l0aCBhIE5lZ290aWF0ZVByb3RvY29sVmVyc2lvbiBtZXNzYWdlCiAgICAgY29udGFpbmluZyB0 aGUgaGlnaGVzdCBtaW5vciBwcm90b2NvbCB2ZXJzaW9uIHdoaWNoIGl0IHN1cHBvcnRzLiAgVGhl CiAgICAgY2xpZW50IG1heSB0aGVuIGNob29zZSBlaXRoZXIgdG8gY29udGludWUgd2l0aCB0aGUg Y29ubmVjdGlvbiB1c2luZyB0aGUKQEAgLTIzOCwxMCArMjM4LDE4IEBACiAgICAgIDwvdGhlYWQ+ CiAKICAgICAgPHRib2R5PgorICAgICAgPHJvdz4KKyAgICAgIDxlbnRyeT4zLjM8L2VudHJ5Pgor ICAgICAgPGVudHJ5PlBvc3RncmVTUUwgMTggYW5kIGxhdGVyPC9lbnRyeT4KKyAgICAgIDxlbnRy eT5DdXJyZW50IGxhdGVzdCB2ZXJzaW9uLiBUaGUgQmluZCBtZXNzYWdlIG5vdyBzdXBwb3J0cyBh biBvcHRpb25hbAorICAgICAgICBjdXJzb3Igb3B0aW9ucyBmaWVsZCB0byBjb250cm9sIHBvcnRh bCBiZWhhdmlvciwgaW5jbHVkaW5nIHRoZSBhYmlsaXR5CisgICAgICAgIHRvIGNyZWF0ZSBob2xk YWJsZSBwb3J0YWxzIHRoYXQgc3Vydml2ZSB0cmFuc2FjdGlvbiBjb21taXQuCisgICAgICA8L2Vu dHJ5PgorICAgICAgPC9yb3c+CiAgICAgICA8cm93PgogICAgICAgPGVudHJ5PjMuMjwvZW50cnk+ CiAgICAgICA8ZW50cnk+UG9zdGdyZVNRTCAxOCBhbmQgbGF0ZXI8L2VudHJ5PgotICAgICAgPGVu dHJ5PkN1cnJlbnQgbGF0ZXN0IHZlcnNpb24uIFRoZSBzZWNyZXQga2V5IHVzZWQgaW4gcXVlcnkK KyAgICAgIDxlbnRyeT5UaGUgc2VjcmV0IGtleSB1c2VkIGluIHF1ZXJ5CiAgICAgICAgIGNhbmNl bGxhdGlvbiB3YXMgZW5sYXJnZWQgZnJvbSA0IGJ5dGVzIHRvIGEgdmFyaWFibGUgbGVuZ3RoIGZp ZWxkLiBUaGUKICAgICAgICAgQmFja2VuZEtleURhdGEgbWVzc2FnZSB3YXMgY2hhbmdlZCB0byBh Y2NvbW1vZGF0ZSB0aGF0LCBhbmQgdGhlIENhbmNlbFJlcXVlc3QKICAgICAgICAgbWVzc2FnZSB3 YXMgcmVkZWZpbmVkIHRvIGhhdmUgYSB2YXJpYWJsZSBsZW5ndGggcGF5bG9hZC4KQEAgLTk4MSw2 ICs5ODksOSBAQCBTRUxDVCAxLzA7PCEtLSB0aGlzIHR5cG8gaXMgaW50ZW50aW9uYWwgLS0+CiAg ICAgcGFzcyBOVUxMIHZhbHVlcyBmb3IgdGhlbSBpbiB0aGUgQmluZCBtZXNzYWdlLikKICAgICBC aW5kIGFsc28gc3BlY2lmaWVzIHRoZSBmb3JtYXQgdG8gdXNlIGZvciBhbnkgZGF0YSByZXR1cm5l ZAogICAgIGJ5IHRoZSBxdWVyeTsgdGhlIGZvcm1hdCBjYW4gYmUgc3BlY2lmaWVkIG92ZXJhbGws IG9yIHBlci1jb2x1bW4uCisgICAgSW4gcHJvdG9jb2wgMy4zIGFuZCBsYXRlciwgQmluZCBjYW4g b3B0aW9uYWxseSBzcGVjaWZ5IGN1cnNvciBvcHRpb25zCisgICAgdG8gY29udHJvbCBwb3J0YWwg YmVoYXZpb3IsIHN1Y2ggYXMgY3JlYXRpbmcgYSBob2xkYWJsZSBwb3J0YWwgdGhhdAorICAgIHN1 cnZpdmVzIHRyYW5zYWN0aW9uIGNvbW1pdC4KICAgICBUaGUgcmVzcG9uc2UgaXMgZWl0aGVyIEJp bmRDb21wbGV0ZSBvciBFcnJvclJlc3BvbnNlLgogICAgPC9wYXJhPgogCkBAIC0xMDA1LDcgKzEw MTYsMTAgQEAgU0VMQ1QgMS8wOzwhLS0gdGhpcyB0eXBvIGlzIGludGVudGlvbmFsIC0tPgogCiAg ICA8cGFyYT4KICAgICBJZiBzdWNjZXNzZnVsbHkgY3JlYXRlZCwgYSBuYW1lZCBwb3J0YWwgb2Jq ZWN0IGxhc3RzIHRpbGwgdGhlIGVuZCBvZiB0aGUKLSAgICBjdXJyZW50IHRyYW5zYWN0aW9uLCB1 bmxlc3MgZXhwbGljaXRseSBkZXN0cm95ZWQuICBBbiB1bm5hbWVkIHBvcnRhbCBpcworICAgIGN1 cnJlbnQgdHJhbnNhY3Rpb24sIHVubGVzcyBleHBsaWNpdGx5IGRlc3Ryb3llZC4gIEhvd2V2ZXIs IGEgcG9ydGFsCisgICAgY3JlYXRlZCB3aXRoIHRoZSBDVVJTT1JfT1BUX0hPTEQgb3B0aW9uIChw cm90b2NvbCAzLjMgYW5kIGxhdGVyKSBpcworICAgIDxmaXJzdHRlcm0+aG9sZGFibGU8L2ZpcnN0 dGVybT4gYW5kIHN1cnZpdmVzIHRyYW5zYWN0aW9uIGNvbW1pdCwgcmVtYWluaW5nCisgICAgdmFs aWQgdW50aWwgZXhwbGljaXRseSBjbG9zZWQgb3IgdGhlIHNlc3Npb24gZW5kcy4gIEFuIHVubmFt ZWQgcG9ydGFsIGlzCiAgICAgZGVzdHJveWVkIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9u LCBvciBhcyBzb29uIGFzIHRoZSBuZXh0IEJpbmQKICAgICBzdGF0ZW1lbnQgc3BlY2lmeWluZyB0 aGUgdW5uYW1lZCBwb3J0YWwgYXMgZGVzdGluYXRpb24gaXMgaXNzdWVkLiAgKE5vdGUKICAgICB0 aGF0IGEgc2ltcGxlIFF1ZXJ5IG1lc3NhZ2UgYWxzbyBkZXN0cm95cyB0aGUgdW5uYW1lZCBwb3J0 YWwuKSAgTmFtZWQKQEAgLTQyOTIsNiArNDMwNiwyMiBAQCBwc3FsICJkYm5hbWU9cG9zdGdyZXMg cmVwbGljYXRpb249ZGF0YWJhc2UiIC1jICJJREVOVElGWV9TWVNURU07IgogICAgICAgICA8L3Bh cmE+CiAgICAgICAgPC9saXN0aXRlbT4KICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8 dmFybGlzdGVudHJ5PgorICAgICAgIDx0ZXJtPkludDMyPC90ZXJtPgorICAgICAgIDxsaXN0aXRl bT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBDdXJzb3Igb3B0aW9ucyAocHJvdG9jb2wgMy4z IGFuZCBsYXRlcikuICBBIGJpdG1hc2sgb2Ygb3B0aW9ucworICAgICAgICAgZm9yIHRoZSBwb3J0 YWwgYmVpbmcgY3JlYXRlZC4gIEN1cnJlbnRseSBkZWZpbmVkIGJpdHMgYXJlOgorICAgICAgICAg PGxpdGVyYWw+MHgwMDAxPC9saXRlcmFsPiAoQ1VSU09SX09QVF9CSU5BUlksIHNhbWUgYXMgc2V0 dGluZworICAgICAgICAgcmVzdWx0IGZvcm1hdCBjb2RlcyB0byBiaW5hcnkpLAorICAgICAgICAg PGxpdGVyYWw+MHgwMDIwPC9saXRlcmFsPiAoQ1VSU09SX09QVF9IT0xELCBjcmVhdGVzIGEgaG9s ZGFibGUKKyAgICAgICAgIHBvcnRhbCB0aGF0IHN1cnZpdmVzIHRyYW5zYWN0aW9uIGNvbW1pdCku CisgICAgICAgICBUaGlzIGZpZWxkIGlzIG9wdGlvbmFsOyBpZiBub3QgcHJlc2VudCwgbm8gY3Vy c29yIG9wdGlvbnMgYXJlIHNldC4KKyAgICAgICAgIE5hbWVkIHBvcnRhbHMgYXJlIHJlcXVpcmVk IHdoZW4gdXNpbmcgQ1VSU09SX09QVF9IT0xELgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9s aXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICA8L3ZhcmlhYmxlbGlzdD4KICAg ICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggN2Rk NzVhNDkwYWEuLjdlNmE0NWNjOGI5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC0xNjM2LDYgKzE2MzYs NyBAQCBleGVjX2JpbmRfbWVzc2FnZShTdHJpbmdJbmZvIGlucHV0X21lc3NhZ2UpCiAJaW50CQkJ bnVtUGFyYW1zOwogCWludAkJCW51bVJGb3JtYXRzOwogCWludDE2CSAgICpyZm9ybWF0cyA9IE5V TEw7CisJaW50CQkJY3Vyc29yT3B0aW9ucyA9IDA7CiAJQ2FjaGVkUGxhblNvdXJjZSAqcHNyYzsK IAlDYWNoZWRQbGFuICpjcGxhbjsKIAlQb3J0YWwJCXBvcnRhbDsKQEAgLTIwMTMsNiArMjAxNCwx MiBAQCBleGVjX2JpbmRfbWVzc2FnZShTdHJpbmdJbmZvIGlucHV0X21lc3NhZ2UpCiAJCQlyZm9y bWF0c1tpXSA9IHBxX2dldG1zZ2ludChpbnB1dF9tZXNzYWdlLCAyKTsKIAl9CiAKKwkvKiBHZXQg Y3Vyc29yIG9wdGlvbnMgaWYgcHJlc2VudCAocHJvdG9jb2wgMy4zKykgKi8KKwlpZiAoaW5wdXRf bWVzc2FnZS0+Y3Vyc29yIDwgaW5wdXRfbWVzc2FnZS0+bGVuKQorCXsKKwkJY3Vyc29yT3B0aW9u cyA9IHBxX2dldG1zZ2ludChpbnB1dF9tZXNzYWdlLCA0KTsKKwkJZWxvZyhERUJVRzEsICJleGVj X2JpbmRfbWVzc2FnZTogcmVhZCBjdXJzb3JPcHRpb25zPTB4JTA0eCBmcm9tIG1lc3NhZ2UiLCBj dXJzb3JPcHRpb25zKTsKKwl9CiAJcHFfZ2V0bXNnZW5kKGlucHV0X21lc3NhZ2UpOwogCiAJLyoK QEAgLTIwNjEsNiArMjA2OCwyNiBAQCBleGVjX2JpbmRfbWVzc2FnZShTdHJpbmdJbmZvIGlucHV0 X21lc3NhZ2UpCiAJICovCiAJUG9ydGFsU2V0UmVzdWx0Rm9ybWF0KHBvcnRhbCwgbnVtUkZvcm1h dHMsIHJmb3JtYXRzKTsKIAorCS8qIEFwcGx5IGN1cnNvciBvcHRpb25zICovCisJaWYgKGN1cnNv ck9wdGlvbnMgJiBDVVJTT1JfT1BUX0hPTEQpCisJeworCQllbG9nKERFQlVHMSwgImV4ZWNfYmlu ZF9tZXNzYWdlOiBhcHBseWluZyBDVVJTT1JfT1BUX0hPTEQgdG8gcG9ydGFsICclcyciLCBwb3J0 YWxfbmFtZSk7CisKKwkJaWYgKHBvcnRhbF9uYW1lWzBdID09ICdcMCcpCisJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfQ1VSU09SX05BTUUpLAorCQkJCQkg ZXJybXNnKCJob2xkYWJsZSBjdXJzb3JzIHJlcXVpcmUgYSBuYW1lZCBwb3J0YWwiKSkpOworCQlp ZiAoSW5TZWN1cml0eVJlc3RyaWN0ZWRPcGVyYXRpb24oKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCisJCQkJCSBlcnJt c2coImNhbm5vdCBjcmVhdGUgY3Vyc29yIFdJVEggSE9MRCBpbiByZXN0cmljdGVkIG9wZXJhdGlv biIpKSk7CisKKwkJZWxvZyhERUJVRzEsICJleGVjX2JpbmRfbWVzc2FnZTogQ1VSU09SX09QVF9I T0xEIHZhbGlkYXRpb24gcGFzc2VkIGZvciBwb3J0YWwgJyVzJyIsIHBvcnRhbF9uYW1lKTsKKwl9 CisKKwlwb3J0YWwtPmN1cnNvck9wdGlvbnMgPSBjdXJzb3JPcHRpb25zOworCWVsb2coREVCVUcx LCAiZXhlY19iaW5kX21lc3NhZ2U6IHBvcnRhbCAnJXMnIGN1cnNvck9wdGlvbnMgc2V0IHRvIDB4 JTA0eCIsIHBvcnRhbF9uYW1lLCBjdXJzb3JPcHRpb25zKTsKKwogCS8qCiAJICogRG9uZSBiaW5k aW5nOyByZW1vdmUgdGhlIHBhcmFtZXRlcnMgZXJyb3IgY2FsbGJhY2suICBFbnRyaWVzIGVtaXR0 ZWQKIAkgKiBsYXRlciBkZXRlcm1pbmUgaW5kZXBlbmRlbnRseSB3aGV0aGVyIHRvIGxvZyB0aGUg cGFyYW1ldGVycyBvciBub3QuCkBAIC00OTA4LDcgKzQ5MzUsMTYgQEAgUG9zdGdyZXNNYWluKGNv bnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAKIAkJCQkJCQkJcG9ydGFs ID0gR2V0UG9ydGFsQnlOYW1lKGNsb3NlX3RhcmdldCk7CiAJCQkJCQkJCWlmIChQb3J0YWxJc1Zh bGlkKHBvcnRhbCkpCisJCQkJCQkJCXsKKwkJCQkJCQkJCWVsb2coREVCVUcxLCAiQ2xvc2UgbWVz c2FnZTogY2xvc2luZyBwb3J0YWwgJyVzJyAoY3Vyc29yT3B0aW9ucz0weCUwNHgpIiwKKwkJCQkJ CQkJCQkgY2xvc2VfdGFyZ2V0LCBwb3J0YWwtPmN1cnNvck9wdGlvbnMpOwogCQkJCQkJCQkJUG9y dGFsRHJvcChwb3J0YWwsIGZhbHNlKTsKKwkJCQkJCQkJCWVsb2coREVCVUcxLCAiQ2xvc2UgbWVz c2FnZTogcG9ydGFsICclcycgY2xvc2VkIHN1Y2Nlc3NmdWxseSIsIGNsb3NlX3RhcmdldCk7CisJ CQkJCQkJCX0KKwkJCQkJCQkJZWxzZQorCQkJCQkJCQl7CisJCQkJCQkJCQllbG9nKERFQlVHMSwg IkNsb3NlIG1lc3NhZ2U6IHBvcnRhbCAnJXMnIG5vdCBmb3VuZCIsIGNsb3NlX3RhcmdldCk7CisJ CQkJCQkJCX0KIAkJCQkJCQl9CiAJCQkJCQkJYnJlYWs7CiAJCQkJCQlkZWZhdWx0OgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvcHFjb21tLmggYi9zcmMvaW5jbHVkZS9saWJwcS9wcWNv bW0uaAppbmRleCA2MjVmNGI0Mzg3OS4uZGQ4MGRhMzgwOWEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2xpYnBxL3BxY29tbS5oCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBxL3BxY29tbS5oCkBAIC05 Miw3ICs5Miw3IEBAIGlzX3VuaXhzb2NrX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKICAqIFRoZSBl YXJsaWVzdCBhbmQgbGF0ZXN0IGZyb250ZW5kL2JhY2tlbmQgcHJvdG9jb2wgdmVyc2lvbiBzdXBw b3J0ZWQuCiAgKi8KICNkZWZpbmUgUEdfUFJPVE9DT0xfRUFSTElFU1QJUEdfUFJPVE9DT0woMyww KQotI2RlZmluZSBQR19QUk9UT0NPTF9MQVRFU1QJCVBHX1BST1RPQ09MKDMsMikKKyNkZWZpbmUg UEdfUFJPVE9DT0xfTEFURVNUCQlQR19QUk9UT0NPTCgzLDMpCiAKIC8qCiAgKiBSZXNlcnZlZCBw cm90b2NvbCBudW1iZXJzLCB3aGljaCBoYXZlIHNwZWNpYWwgc2VtYW50aWNzOgpkaWZmIC0tZ2l0 IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZXhwb3J0cy50eHQgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS9leHBvcnRzLnR4dAppbmRleCBkYmJhZTY0MmQ3Ni4uYjAxYzA5NDg1ODUgMTAwNjQ0Ci0tLSBh L3NyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9ydHMudHh0CisrKyBiL3NyYy9pbnRlcmZhY2VzL2xp YnBxL2V4cG9ydHMudHh0CkBAIC0yMTAsMyArMjEwLDUgQEAgUFFnZXRBdXRoRGF0YUhvb2sgICAg ICAgICAyMDcKIFBRZGVmYXVsdEF1dGhEYXRhSG9vayAgICAgMjA4CiBQUWZ1bGxQcm90b2NvbFZl cnNpb24gICAgIDIwOQogYXBwZW5kUFFFeHBCdWZmZXJWQSAgICAgICAyMTAKK1BRc2VuZFF1ZXJ5 UHJlcGFyZWRXaXRoQ3Vyc29yT3B0aW9ucyAyMTEKK1BRc2VuZEJpbmRXaXRoQ3Vyc29yT3B0aW9u cyAyMTIKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYyBiL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYwppbmRleCBjM2EyNDQ4ZGNlNS4uMDE5ZjYy NjMxZjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYworKysg Yi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKQEAgLTgzMzYsNiArODMzNiwxMSBA QCBwcVBhcnNlUHJvdG9jb2xWZXJzaW9uKGNvbnN0IGNoYXIgKnZhbHVlLCBQcm90b2NvbFZlcnNp b24gKnJlc3VsdCwgUEdjb25uICpjb25uLAogCQkqcmVzdWx0ID0gUEdfUFJPVE9DT0woMywgMik7 CiAJCXJldHVybiB0cnVlOwogCX0KKwlpZiAoc3RyY21wKHZhbHVlLCAiMy4zIikgPT0gMCkKKwl7 CisJCSpyZXN1bHQgPSBQR19QUk9UT0NPTCgzLCAzKTsKKwkJcmV0dXJuIHRydWU7CisJfQogCiAJ bGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwgImludmFsaWQgJXMgdmFsdWU6IFwiJXNcIiIs CiAJCQkJCQkJY29udGV4dCwgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGli cHEvZmUtZXhlYy5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtZXhlYy5jCmluZGV4IDdhYjMz OTMwYTM5Li4xODA0MzY1Y2QxOCAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUt ZXhlYy5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWV4ZWMuYwpAQCAtMTY4Miw2ICsx NjgyLDIyOCBAQCBQUXNlbmRRdWVyeVByZXBhcmVkKFBHY29ubiAqY29ubiwKIAkJCQkJCSAgIHJl c3VsdEZvcm1hdCk7CiB9CiAKK2ludAorUFFzZW5kUXVlcnlQcmVwYXJlZFdpdGhDdXJzb3JPcHRp b25zKFBHY29ubiAqY29ubiwKKwkJCQkJCQkJCSBjb25zdCBjaGFyICpzdG10TmFtZSwKKwkJCQkJ CQkJCSBpbnQgblBhcmFtcywKKwkJCQkJCQkJCSBjb25zdCBjaGFyICpjb25zdCAqcGFyYW1WYWx1 ZXMsCisJCQkJCQkJCQkgY29uc3QgaW50ICpwYXJhbUxlbmd0aHMsCisJCQkJCQkJCQkgY29uc3Qg aW50ICpwYXJhbUZvcm1hdHMsCisJCQkJCQkJCQkgaW50IHJlc3VsdEZvcm1hdCwKKwkJCQkJCQkJ CSBjb25zdCBjaGFyICpwb3J0YWxOYW1lLAorCQkJCQkJCQkJIGludCBjdXJzb3JPcHRpb25zKQor eworCVBHY21kUXVldWVFbnRyeSAqZW50cnk7CisKKwlpZiAoIVBRc2VuZFF1ZXJ5U3RhcnQoY29u biwgdHJ1ZSkpCisJCXJldHVybiAwOworCisJaWYgKCFzdG10TmFtZSkKKwl7CisJCWxpYnBxX2Fw cGVuZF9jb25uX2Vycm9yKGNvbm4sICJzdGF0ZW1lbnQgbmFtZSBpcyBhIG51bGwgcG9pbnRlciIp OworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKGN1cnNvck9wdGlvbnMgJiAweDAwMjApICYmICgh cG9ydGFsTmFtZSB8fCBwb3J0YWxOYW1lWzBdID09ICdcMCcpKQorCXsKKwkJbGlicHFfYXBwZW5k X2Nvbm5fZXJyb3IoY29ubiwgImhvbGRhYmxlIGN1cnNvcnMgcmVxdWlyZSBhIG5hbWVkIHBvcnRh bCIpOworCQlyZXR1cm4gMDsKKwl9CisKKwllbnRyeSA9IHBxQWxsb2NDbWRRdWV1ZUVudHJ5KGNv bm4pOworCWlmIChlbnRyeSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChwcVB1dE1zZ1N0 YXJ0KFBxTXNnX0JpbmQsIGNvbm4pIDwgMCB8fAorCQlwcVB1dHMocG9ydGFsTmFtZSA/IHBvcnRh bE5hbWUgOiAiIiwgY29ubikgPCAwIHx8CisJCXBxUHV0cyhzdG10TmFtZSwgY29ubikgPCAwKQor CQlnb3RvIHNlbmRGYWlsZWQ7CisKKwlpZiAoblBhcmFtcyA+IDAgJiYgcGFyYW1Gb3JtYXRzKQor CXsKKwkJaWYgKHBxUHV0SW50KG5QYXJhbXMsIDIsIGNvbm4pIDwgMCkKKwkJCWdvdG8gc2VuZEZh aWxlZDsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuUGFyYW1zOyBpKyspCisJCQlpZiAocHFQdXRJ bnQocGFyYW1Gb3JtYXRzW2ldLCAyLCBjb25uKSA8IDApCisJCQkJZ290byBzZW5kRmFpbGVkOwor CX0KKwllbHNlIGlmIChwcVB1dEludCgwLCAyLCBjb25uKSA8IDApCisJCWdvdG8gc2VuZEZhaWxl ZDsKKworCWlmIChwcVB1dEludChuUGFyYW1zLCAyLCBjb25uKSA8IDApCisJCWdvdG8gc2VuZEZh aWxlZDsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgblBhcmFtczsgaSsrKQorCXsKKwkJaWYgKHBh cmFtVmFsdWVzICYmIHBhcmFtVmFsdWVzW2ldKQorCQl7CisJCQlpbnQgbGVuID0gcGFyYW1MZW5n dGhzID8gcGFyYW1MZW5ndGhzW2ldIDogc3RybGVuKHBhcmFtVmFsdWVzW2ldKTsKKwkJCWlmIChw cVB1dEludChsZW4sIDQsIGNvbm4pIDwgMCB8fAorCQkJCXBxUHV0bmNoYXIocGFyYW1WYWx1ZXNb aV0sIGxlbiwgY29ubikgPCAwKQorCQkJCWdvdG8gc2VuZEZhaWxlZDsKKwkJfQorCQllbHNlIGlm IChwcVB1dEludCgtMSwgNCwgY29ubikgPCAwKQorCQkJZ290byBzZW5kRmFpbGVkOworCX0KKwor CWlmIChwcVB1dEludCgxLCAyLCBjb25uKSA8IDAgfHwKKwkJcHFQdXRJbnQocmVzdWx0Rm9ybWF0 LCAyLCBjb25uKSA8IDApCisJCWdvdG8gc2VuZEZhaWxlZDsKKworCS8qIFNlbmQgY3Vyc29yIG9w dGlvbnMgaWYgcHJvdG9jb2wgMy4zKyAqLworCWlmIChjb25uLT5wdmVyc2lvbiA+PSBQR19QUk9U T0NPTCgzLCAzKSkKKwl7CisJCWlmIChwcVB1dEludChjdXJzb3JPcHRpb25zLCA0LCBjb25uKSA8 IDApCisJCQlnb3RvIHNlbmRGYWlsZWQ7CisJfQorCisJaWYgKHBxUHV0TXNnRW5kKGNvbm4pIDwg MCkKKwkJZ290byBzZW5kRmFpbGVkOworCisJaWYgKHBxUHV0TXNnU3RhcnQoUHFNc2dfRGVzY3Jp YmUsIGNvbm4pIDwgMCB8fAorCQlwcVB1dGMoJ1AnLCBjb25uKSA8IDAgfHwKKwkJcHFQdXRzKHBv cnRhbE5hbWUgPyBwb3J0YWxOYW1lIDogIiIsIGNvbm4pIDwgMCB8fAorCQlwcVB1dE1zZ0VuZChj b25uKSA8IDApCisJCWdvdG8gc2VuZEZhaWxlZDsKKworCWlmIChwcVB1dE1zZ1N0YXJ0KFBxTXNn X0V4ZWN1dGUsIGNvbm4pIDwgMCB8fAorCQlwcVB1dHMocG9ydGFsTmFtZSA/IHBvcnRhbE5hbWUg OiAiIiwgY29ubikgPCAwIHx8CisJCXBxUHV0SW50KDAsIDQsIGNvbm4pIDwgMCB8fAorCQlwcVB1 dE1zZ0VuZChjb25uKSA8IDApCisJCWdvdG8gc2VuZEZhaWxlZDsKKworCWlmIChjb25uLT5waXBl bGluZVN0YXR1cyA9PSBQUV9QSVBFTElORV9PRkYpCisJeworCQlpZiAocHFQdXRNc2dTdGFydChQ cU1zZ19TeW5jLCBjb25uKSA8IDAgfHwKKwkJCXBxUHV0TXNnRW5kKGNvbm4pIDwgMCkKKwkJCWdv dG8gc2VuZEZhaWxlZDsKKwl9CisKKwllbnRyeS0+cXVlcnljbGFzcyA9IFBHUVVFUllfRVhURU5E RUQ7CisKKwlpZiAocHFQaXBlbGluZUZsdXNoKGNvbm4pIDwgMCkKKwkJZ290byBzZW5kRmFpbGVk OworCisJY29ubi0+YXN5bmNTdGF0dXMgPSBQR0FTWU5DX0JVU1k7CisJcmV0dXJuIDE7CisKK3Nl bmRGYWlsZWQ6CisJcHFSZWN5Y2xlQ21kUXVldWVFbnRyeShjb25uLCBlbnRyeSk7CisJcmV0dXJu IDA7Cit9CisKKy8qCisgKiBQUXNlbmRCaW5kV2l0aEN1cnNvck9wdGlvbnMKKyAqCUxpa2UgUFFz ZW5kUXVlcnlQcmVwYXJlZFdpdGhDdXJzb3JPcHRpb25zIGJ1dCBzZW5kcyBvbmx5IEJpbmQrRGVz Y3JpYmUsCisgKglub3QgRXhlY3V0ZS4gVGhpcyBhbGxvd3MgY3JlYXRpbmcgYSBwb3J0YWwgdGhh dCBjYW4gYmUgZXhlY3V0ZWQgbGF0ZXIsCisgKgl3aGljaCBpcyBuZWNlc3NhcnkgZm9yIHRlc3Rp bmcgaG9sZGFibGUgcG9ydGFscyAoZXhlY3V0ZSBhZnRlciBjb21taXQpLgorICovCitpbnQKK1BR c2VuZEJpbmRXaXRoQ3Vyc29yT3B0aW9ucyhQR2Nvbm4gKmNvbm4sCisJCQkJCQkJIGNvbnN0IGNo YXIgKnN0bXROYW1lLAorCQkJCQkJCSBpbnQgblBhcmFtcywKKwkJCQkJCQkgY29uc3QgY2hhciAq Y29uc3QgKnBhcmFtVmFsdWVzLAorCQkJCQkJCSBjb25zdCBpbnQgKnBhcmFtTGVuZ3RocywKKwkJ CQkJCQkgY29uc3QgaW50ICpwYXJhbUZvcm1hdHMsCisJCQkJCQkJIGludCByZXN1bHRGb3JtYXQs CisJCQkJCQkJIGNvbnN0IGNoYXIgKnBvcnRhbE5hbWUsCisJCQkJCQkJIGludCBjdXJzb3JPcHRp b25zKQoreworCVBHY21kUXVldWVFbnRyeSAqZW50cnk7CisKKwlpZiAoIVBRc2VuZFF1ZXJ5U3Rh cnQoY29ubiwgdHJ1ZSkpCisJCXJldHVybiAwOworCisJaWYgKCFzdG10TmFtZSkKKwl7CisJCWxp YnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sICJzdGF0ZW1lbnQgbmFtZSBpcyBhIG51bGwgcG9p bnRlciIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKGN1cnNvck9wdGlvbnMgJiAweDAwMjAp ICYmICghcG9ydGFsTmFtZSB8fCBwb3J0YWxOYW1lWzBdID09ICdcMCcpKQorCXsKKwkJbGlicHFf YXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwgImhvbGRhYmxlIGN1cnNvcnMgcmVxdWlyZSBhIG5hbWVk IHBvcnRhbCIpOworCQlyZXR1cm4gMDsKKwl9CisKKwllbnRyeSA9IHBxQWxsb2NDbWRRdWV1ZUVu dHJ5KGNvbm4pOworCWlmIChlbnRyeSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChwcVB1 dE1zZ1N0YXJ0KFBxTXNnX0JpbmQsIGNvbm4pIDwgMCB8fAorCQlwcVB1dHMocG9ydGFsTmFtZSA/ IHBvcnRhbE5hbWUgOiAiIiwgY29ubikgPCAwIHx8CisJCXBxUHV0cyhzdG10TmFtZSwgY29ubikg PCAwKQorCQlnb3RvIHNlbmRGYWlsZWQ7CisKKwlpZiAoblBhcmFtcyA+IDAgJiYgcGFyYW1Gb3Jt YXRzKQorCXsKKwkJaWYgKHBxUHV0SW50KG5QYXJhbXMsIDIsIGNvbm4pIDwgMCkKKwkJCWdvdG8g c2VuZEZhaWxlZDsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuUGFyYW1zOyBpKyspCisJCQlpZiAo cHFQdXRJbnQocGFyYW1Gb3JtYXRzW2ldLCAyLCBjb25uKSA8IDApCisJCQkJZ290byBzZW5kRmFp bGVkOworCX0KKwllbHNlIGlmIChwcVB1dEludCgwLCAyLCBjb25uKSA8IDApCisJCWdvdG8gc2Vu ZEZhaWxlZDsKKworCWlmIChwcVB1dEludChuUGFyYW1zLCAyLCBjb25uKSA8IDApCisJCWdvdG8g c2VuZEZhaWxlZDsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgblBhcmFtczsgaSsrKQorCXsKKwkJ aWYgKHBhcmFtVmFsdWVzICYmIHBhcmFtVmFsdWVzW2ldKQorCQl7CisJCQlpbnQgbGVuID0gcGFy YW1MZW5ndGhzID8gcGFyYW1MZW5ndGhzW2ldIDogc3RybGVuKHBhcmFtVmFsdWVzW2ldKTsKKwkJ CWlmIChwcVB1dEludChsZW4sIDQsIGNvbm4pIDwgMCB8fAorCQkJCXBxUHV0bmNoYXIocGFyYW1W YWx1ZXNbaV0sIGxlbiwgY29ubikgPCAwKQorCQkJCWdvdG8gc2VuZEZhaWxlZDsKKwkJfQorCQll bHNlIGlmIChwcVB1dEludCgtMSwgNCwgY29ubikgPCAwKQorCQkJZ290byBzZW5kRmFpbGVkOwor CX0KKworCWlmIChwcVB1dEludCgxLCAyLCBjb25uKSA8IDAgfHwKKwkJcHFQdXRJbnQocmVzdWx0 Rm9ybWF0LCAyLCBjb25uKSA8IDApCisJCWdvdG8gc2VuZEZhaWxlZDsKKworCS8qIFNlbmQgY3Vy c29yIG9wdGlvbnMgaWYgcHJvdG9jb2wgMy4zKyAqLworCWlmIChjb25uLT5wdmVyc2lvbiA+PSBQ R19QUk9UT0NPTCgzLCAzKSkKKwl7CisJCWlmIChwcVB1dEludChjdXJzb3JPcHRpb25zLCA0LCBj b25uKSA8IDApCisJCQlnb3RvIHNlbmRGYWlsZWQ7CisJfQorCisJaWYgKHBxUHV0TXNnRW5kKGNv bm4pIDwgMCkKKwkJZ290byBzZW5kRmFpbGVkOworCisJaWYgKHBxUHV0TXNnU3RhcnQoUHFNc2df RGVzY3JpYmUsIGNvbm4pIDwgMCB8fAorCQlwcVB1dGMoJ1AnLCBjb25uKSA8IDAgfHwKKwkJcHFQ dXRzKHBvcnRhbE5hbWUgPyBwb3J0YWxOYW1lIDogIiIsIGNvbm4pIDwgMCB8fAorCQlwcVB1dE1z Z0VuZChjb25uKSA8IDApCisJCWdvdG8gc2VuZEZhaWxlZDsKKworCS8qIE5vIEV4ZWN1dGUgbWVz c2FnZSAtIHBvcnRhbCBpcyBjcmVhdGVkIGJ1dCBub3QgZXhlY3V0ZWQgKi8KKworCWlmIChjb25u LT5waXBlbGluZVN0YXR1cyA9PSBQUV9QSVBFTElORV9PRkYpCisJeworCQlpZiAocHFQdXRNc2dT dGFydChQcU1zZ19TeW5jLCBjb25uKSA8IDAgfHwKKwkJCXBxUHV0TXNnRW5kKGNvbm4pIDwgMCkK KwkJCWdvdG8gc2VuZEZhaWxlZDsKKwl9CisKKwllbnRyeS0+cXVlcnljbGFzcyA9IFBHUVVFUllf RVhURU5ERUQ7CisKKwlpZiAocHFQaXBlbGluZUZsdXNoKGNvbm4pIDwgMCkKKwkJZ290byBzZW5k RmFpbGVkOworCisJY29ubi0+YXN5bmNTdGF0dXMgPSBQR0FTWU5DX0JVU1k7CisJcmV0dXJuIDE7 CisKK3NlbmRGYWlsZWQ6CisJcHFSZWN5Y2xlQ21kUXVldWVFbnRyeShjb25uLCBlbnRyeSk7CisJ cmV0dXJuIDA7Cit9CisKIC8qCiAgKiBQUXNlbmRRdWVyeVN0YXJ0CiAgKglDb21tb24gc3RhcnR1 cCBjb2RlIGZvciBQUXNlbmRRdWVyeSBhbmQgc2libGluZyByb3V0aW5lcwpkaWZmIC0tZ2l0IGEv c3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xp YnBxLWZlLmgKaW5kZXggMDg1MjU4NGVkYWUuLjIzMTFmNTU1MTM3IDEwMDY0NAotLS0gYS9zcmMv aW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xp YnBxLWZlLmgKQEAgLTUyNSw2ICs1MjUsMTQgQEAgZXh0ZXJuIGludAlQUXNlbmRRdWVyeVByZXBh cmVkKFBHY29ubiAqY29ubiwKIAkJCQkJCQkJY29uc3QgaW50ICpwYXJhbUxlbmd0aHMsCiAJCQkJ CQkJCWNvbnN0IGludCAqcGFyYW1Gb3JtYXRzLAogCQkJCQkJCQlpbnQgcmVzdWx0Rm9ybWF0KTsK K2V4dGVybiBpbnQJUFFzZW5kUXVlcnlQcmVwYXJlZFdpdGhDdXJzb3JPcHRpb25zKFBHY29ubiAq Y29ubiwgY29uc3QgY2hhciAqc3RtdE5hbWUsCisJCQkJCQkJCWludCBuUGFyYW1zLCBjb25zdCBj aGFyICpjb25zdCAqcGFyYW1WYWx1ZXMsCisJCQkJCQkJCWNvbnN0IGludCAqcGFyYW1MZW5ndGhz LCBjb25zdCBpbnQgKnBhcmFtRm9ybWF0cywKKwkJCQkJCQkJaW50IHJlc3VsdEZvcm1hdCwgY29u c3QgY2hhciAqcG9ydGFsTmFtZSwgaW50IGN1cnNvck9wdGlvbnMpOworZXh0ZXJuIGludAlQUXNl bmRCaW5kV2l0aEN1cnNvck9wdGlvbnMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpzdG10TmFt ZSwKKwkJCQkJCQkJaW50IG5QYXJhbXMsIGNvbnN0IGNoYXIgKmNvbnN0ICpwYXJhbVZhbHVlcywK KwkJCQkJCQkJY29uc3QgaW50ICpwYXJhbUxlbmd0aHMsIGNvbnN0IGludCAqcGFyYW1Gb3JtYXRz LAorCQkJCQkJCQlpbnQgcmVzdWx0Rm9ybWF0LCBjb25zdCBjaGFyICpwb3J0YWxOYW1lLCBpbnQg Y3Vyc29yT3B0aW9ucyk7CiBleHRlcm4gaW50CVBRc2V0U2luZ2xlUm93TW9kZShQR2Nvbm4gKmNv bm4pOwogZXh0ZXJuIGludAlQUXNldENodW5rZWRSb3dzTW9kZShQR2Nvbm4gKmNvbm4sIGludCBj aHVua1NpemUpOwogZXh0ZXJuIFBHcmVzdWx0ICpQUWdldFJlc3VsdChQR2Nvbm4gKmNvbm4pOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9saWJwcV9waXBlbGluZS9saWJwcV9waXBlbGlu ZS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9saWJwcV9waXBlbGluZS9saWJwcV9waXBlbGluZS5jCmlu ZGV4IGIzYWY3MGZhMDliLi5iZjk3Y2FiODhkMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxl cy9saWJwcV9waXBlbGluZS9saWJwcV9waXBlbGluZS5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv bGlicHFfcGlwZWxpbmUvbGlicHFfcGlwZWxpbmUuYwpAQCAtMjA4Miw2ICsyMDgyLDkzIEBAIHBy b2Nlc3NfcmVzdWx0KFBHY29ubiAqY29ubiwgUEdyZXN1bHQgKnJlcywgaW50IHJlc3VsdHMsIGlu dCBudW1zZW50KQogCXJldHVybiBnb3RfZXJyb3I7CiB9CiAKKy8qCisgKiBUZXN0IGhvbGRhYmxl IGN1cnNvcnMgdXNpbmcgcHJvdG9jb2wgMy4zIGN1cnNvciBvcHRpb25zIGluIEJpbmQgbWVzc2Fn ZS4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3RfaG9sZGFibGVfY3Vyc29yKFBHY29ubiAqY29ubikK K3sKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlmcHJpbnRmKHN0ZGVyciwgImhvbGRhYmxlIGN1cnNv ci4uLiAiKTsKKworCS8qIFZlcmlmeSBwcm90b2NvbCAzLjMgKi8KKwlpZiAoUFFmdWxsUHJvdG9j b2xWZXJzaW9uKGNvbm4pIDwgMzAwMDMpCisJCXBnX2ZhdGFsKCJwcm90b2NvbCAzLjMgcmVxdWly ZWQsIGdvdCAlZCIsIFBRZnVsbFByb3RvY29sVmVyc2lvbihjb25uKSk7CisKKwkvKiBTdGFydCB0 cmFuc2FjdGlvbiAqLworCXJlcyA9IFBRZXhlYyhjb25uLCAiQkVHSU4iKTsKKwlpZiAoUFFyZXN1 bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT01NQU5EX09LKQorCQlwZ19mYXRhbCgiQkVHSU4gZmFp bGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwlQUWNsZWFyKHJlcyk7CisKKwkvKiBD cmVhdGUgdGVzdCB0YWJsZSAqLworCXJlcyA9IFBRZXhlYyhjb25uLCAiQ1JFQVRFIFRFTVAgVEFC TEUgaG9sZGFibGVfdGVzdChpZCBpbnQpIik7CisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0g UEdSRVNfQ09NTUFORF9PSykKKwkJcGdfZmF0YWwoIkNSRUFURSBUQUJMRSBmYWlsZWQ6ICVzIiwg UFFlcnJvck1lc3NhZ2UoY29ubikpOworCVBRY2xlYXIocmVzKTsKKworCXJlcyA9IFBRZXhlYyhj b25uLCAiSU5TRVJUIElOVE8gaG9sZGFibGVfdGVzdCBWQUxVRVMgKDEpLCAoMiksICgzKSIpOwor CWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCXBnX2ZhdGFs KCJJTlNFUlQgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwlQUWNsZWFyKHJl cyk7CisKKwkvKiBQcmVwYXJlIHN0YXRlbWVudCAqLworCXJlcyA9IFBRcHJlcGFyZShjb25uLCAi aG9sZHN0bXQiLCAiU0VMRUNUICogRlJPTSBob2xkYWJsZV90ZXN0IiwgMCwgTlVMTCk7CisJaWYg KFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJcGdfZmF0YWwoIlBS RVBBUkUgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwlQUWNsZWFyKHJlcyk7 CisKKwkvKiBFbnRlciBwaXBlbGluZSBtb2RlICovCisJaWYgKFBRZW50ZXJQaXBlbGluZU1vZGUo Y29ubikgIT0gMSkKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBlbnRlciBwaXBlbGluZSBtb2RlOiAl cyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCS8qIENyZWF0ZSBob2xkYWJsZSBwb3J0YWwg dXNpbmcgQmluZCB3aXRoIGN1cnNvciBvcHRpb25zIChubyBFeGVjdXRlKSAqLworCWlmIChQUXNl bmRCaW5kV2l0aEN1cnNvck9wdGlvbnMoY29ubiwgImhvbGRzdG10IiwgMCwgTlVMTCwgTlVMTCwg TlVMTCwgMCwgImhvbGRwb3J0YWwiLCAweDAwMjApICE9IDEpCisJCXBnX2ZhdGFsKCJQUXNlbmRC aW5kV2l0aEN1cnNvck9wdGlvbnMgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsK KworCS8qIENvbW1pdCAtIHBvcnRhbCBzaG91bGQgc3Vydml2ZSAqLworCWlmIChQUXNlbmRRdWVy eVBhcmFtcyhjb25uLCAiQ09NTUlUIiwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCkgIT0g MSkKKwkJcGdfZmF0YWwoIkNPTU1JVCBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikp OworCisJLyogRXhlY3V0ZSBwb3J0YWwgYWZ0ZXIgY29tbWl0IHVzaW5nIEZFVENIIChwb3J0YWxz IGNyZWF0ZWQgdmlhIEJpbmQgYXJlIGN1cnNvcnMpICovCisJaWYgKFBRc2VuZFF1ZXJ5UGFyYW1z KGNvbm4sICJGRVRDSCBBTEwgRlJPTSBob2xkcG9ydGFsIiwgMCwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCwgMCkgIT0gMSkKKwkJcGdfZmF0YWwoIkZFVENIIGZhaWxlZDogJXMiLCBQUWVycm9yTWVz c2FnZShjb25uKSk7CisKKwkvKiBDbG9zZSBwb3J0YWwgKi8KKwlpZiAoUFFzZW5kUXVlcnlQYXJh bXMoY29ubiwgIkNMT1NFIGhvbGRwb3J0YWwiLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAw KSAhPSAxKQorCQlwZ19mYXRhbCgiQ0xPU0UgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNv bm4pKTsKKworCWlmIChQUXBpcGVsaW5lU3luYyhjb25uKSAhPSAxKQorCQlwZ19mYXRhbCgicGlw ZWxpbmUgc3luYyBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJLyogR2V0 IHJlc3VsdHMgKi8KKwlyZXMgPSBjb25maXJtX3Jlc3VsdF9zdGF0dXMoY29ubiwgUEdSRVNfVFVQ TEVTX09LKTsJLyogUm93RGVzY3JpcHRpb24gZnJvbSBCaW5kK0Rlc2NyaWJlICovCisJaWYgKFBR bmZpZWxkcyhyZXMpICE9IDEpCisJCXBnX2ZhdGFsKCJleHBlY3RlZCAxIGZpZWxkLCBnb3QgJWQi LCBQUW5maWVsZHMocmVzKSk7CisJUFFjbGVhcihyZXMpOworCWNvbnN1bWVfbnVsbF9yZXN1bHQo Y29ubik7CisKKwkvKiBDT01NSVQgcmVzdWx0IHNlZW1zIHRvIGJlIHNraXBwZWQvY29tYmluZWQg LSB0aGlzIGlzIGEgbGlicHEgYmVoYXZpb3IgKi8KKworCXJlcyA9IGNvbmZpcm1fcmVzdWx0X3N0 YXR1cyhjb25uLCBQR1JFU19UVVBMRVNfT0spOwkvKiBGRVRDSCBhZnRlciBjb21taXQgKi8KKwlp ZiAoUFFudHVwbGVzKHJlcykgIT0gMykKKwkJcGdfZmF0YWwoImV4cGVjdGVkIDMgcm93cyBhZnRl ciBjb21taXQsIGdvdCAlZCIsIFBRbnR1cGxlcyhyZXMpKTsKKwlQUWNsZWFyKHJlcyk7CisJY29u c3VtZV9udWxsX3Jlc3VsdChjb25uKTsKKworCWNvbnN1bWVfcmVzdWx0X3N0YXR1cyhjb25uLCBQ R1JFU19DT01NQU5EX09LKTsJLyogQ0xPU0UgKi8KKwljb25zdW1lX251bGxfcmVzdWx0KGNvbm4p OworCisJY29uc3VtZV9yZXN1bHRfc3RhdHVzKGNvbm4sIFBHUkVTX1BJUEVMSU5FX1NZTkMpOwor CWNvbnN1bWVfbnVsbF9yZXN1bHQoY29ubik7CisKKwlpZiAoUFFleGl0UGlwZWxpbmVNb2RlKGNv bm4pICE9IDEpCisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gZXhpdCBwaXBlbGluZSBtb2RlOiAlcyIs IFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCWZwcmludGYoc3RkZXJyLCAib2tcbiIpOworfQor CiAKIHN0YXRpYyB2b2lkCiB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKQEAgLTIxMDAsNiAr MjE4Nyw3IEBAIHByaW50X3Rlc3RfbGlzdCh2b2lkKQogewogCXByaW50ZigiY2FuY2VsXG4iKTsK IAlwcmludGYoImRpc2FsbG93ZWRfaW5fcGlwZWxpbmVcbiIpOworCXByaW50ZigiaG9sZGFibGVf Y3Vyc29yXG4iKTsKIAlwcmludGYoIm11bHRpX3BpcGVsaW5lc1xuIik7CiAJcHJpbnRmKCJub3N5 bmNcbiIpOwogCXByaW50ZigicGlwZWxpbmVfYWJvcnRcbiIpOwpAQCAtMjIwNyw2ICsyMjk1LDgg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXRlc3RfY2FuY2VsKGNvbm4pOwogCWVs c2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgImRpc2FsbG93ZWRfaW5fcGlwZWxpbmUiKSA9PSAwKQog CQl0ZXN0X2Rpc2FsbG93ZWRfaW5fcGlwZWxpbmUoY29ubik7CisJZWxzZSBpZiAoc3RyY21wKHRl c3RuYW1lLCAiaG9sZGFibGVfY3Vyc29yIikgPT0gMCkKKwkJdGVzdF9ob2xkYWJsZV9jdXJzb3Io Y29ubik7CiAJZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAibXVsdGlfcGlwZWxpbmVzIikgPT0g MCkKIAkJdGVzdF9tdWx0aV9waXBlbGluZXMoY29ubik7CiAJZWxzZSBpZiAoc3RyY21wKHRlc3Ru YW1lLCAibm9zeW5jIikgPT0gMCkKLS0gCjIuNTAuMSAoQXBwbGUgR2l0LTE1NSkKCg== --0000000000008ab40306455d9f7b--